* User

Welcome, Guest. Please login or register.
Did you miss your activation email?

08 Sep 10, 14:47:41

Login with username, password and session length

Select language:

* Recent Topics



Donate

Donate for PortaMx !
Your donation is safe and helps support the issues and causes you care most about.

* Stats

  • *Total Members: 2448
  • *Latest: ElNikez

  • *Total Posts: 10789
  • *Total Topics: 1629
  • *Online Today: 20
  • *Most Online: 157
(27 Aug 09, 03:54:53)
  • *Users: 0
  • *Guests: 15
  • *Total: 15

Author Topic: PortaMx - Manually installation  (Read 9672 times)

0 Members and 1 Guest are viewing this topic.

Offline feline

  • CO PortaMx corp.
  • Administrator
  • *
  • Posts: 3367
  • Gender: Female
PortaMx - Manually installation
« on: 24 Oct 08, 22:19:11 »
    PortaMx - Manually installation
    This document describe all the manually installation steps and the modifications on the SMF files.
    Updated for PortaMx v0.956 on 21. Feb. 2009

    1. Copy files (from local PC to your server)
    First, unpack the archive to a temporary directory on your local PC.
    Leave the directory structure unchanged !

    Now logon (with ftp) on your server and change the directory to the forum root (where you find the Settings.php).
    Copy follow directorys from the temporary directory to your server:
    • editor_uploads
    • fckeditor
    • Smileys
    • Sources
    • Themes
    At least, copy the file dbinstall.php. (Remove this file after step 2 is done !)

    2. Run the dbinstall.php file to create the tables and load the default settings.
    Open your prefered browser, type in your forum url, add /dbinstall.php at the end of line and press enter.
    If a login box shown, login as admin (it comes only, if you have logged out before).

    Note, that the file have no output (you see a blank screen), but it's quickly done.
    You can check the correct run in phpMyAdmin with a look at the table content.
    (portamx_blocks have 2 rows, portamx_settings have 5 rows)

    3. Modify the SMF files
    This is the most critical and complicated part, so it's better you backup the files before apply the modifications.

    3.1. Methodes to apply modifications
    I'm prefer WinSCP and Notepad++ to apply modifications to files on my server.
    WinSCP is an open source free SFTP client and FTP client for Windows. You can add Notepad++ as your external editor in WinSCP. With this combination it's very easy to apply the modifications.
    Select a file on your server and hit F4. The file is transfered to your local PC and loaded into the Editor so you can apply the modifications.
    If you save the file in Notepad++ (Ctrl-S), the modificated file is automatic transfered back to your server.

    Where you find WinSCP and Notepad++:
    WinSCP
    Notepad++

    4. List of files they have to modify / backup
    • index.php
    • SSI.php
    • Sources/Admin.php
    • Sources/Display.php
    • Sources/Errors.php
    • Sources/Load.php
    • Sources/ManageMaintenace.php
    • Sources/ManagePermissions.php
    • Sources/ModerationCenter.php
    • Sources/Security.php
    • Sources/Subs.php
    • Sources/Subs-Boards.php
    • Themes/default/scripts/xml_topic.js
    • Themes/babylon/style.css

    5. Apply the modifications
    Now, we can start to apply the modifications on SMF files. Do not forget the backup before !

    5.1 File: index.php

    Find:[/list]
    Code: [Select]
    require_once($sourcedir . '/Security.php');
    Add after:
    Code: [Select]
    //-> start add PortaMx
    require_once($sourcedir . '/PortaMx/PortaMx.php');
    //-> end add PortaMx

    Find:
    Code: [Select]
    elseif (empty($_REQUEST['action']))
    {
    Add before:
    Code: [Select]
    //-> start change PortaMx
    elseif(isset($_REQUEST['action']) && $_REQUEST['action']{0} == '@')
    return 'PortaMx';
    //-> end change PortaMx

    Find:
    Code: [Select]
    require_once($sourcedir . '/BoardIndex.php');
    return 'BoardIndex';
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    if(WIRELESS)
    {
    require_once($sourcedir . '/BoardIndex.php');
    return 'BoardIndex';
    }
    else
    return 'PortaMx';
    //-> end change PortaMx

    Find:
    Code: [Select]
    // Is the forum in maintenance mode? (doesn't apply to administrators.)
    if (!empty($maintenance) && !allowedTo('admin_forum'))
    {
    Add before:
    Code: [Select]
    //-> start add PortaMx
    if(!defined('PortaMx'))
    PortaMx();
    //-> end add PortaMx

    Find:
    Code: [Select]
    'groups' => array('Groups.php', 'Groups'),
    Add before:
    Code: [Select]
    //-> start add PortaMx
    'forum' => array('BoardIndex.php', 'BoardIndex'),
    //-> end add PortaMx


    5.2 File: SSI.php

    Find:
    Code: [Select]
    if (isset($ssi_layers))
    {
    $context['template_layers'] = $ssi_layers;
    template_header();
    }
    else
    setupThemeContext();
    Add before:
    Code: [Select]
    //-> start add PortaMx
    if(!defined('PortaMx'))
    {
       require_once($sourcedir . '/PortaMx/PortaMx.php');
       PortaMx('SSI');
    }
    //-> end add PortaMx


    5.3 File: Sources/Admin.php

    Find:
    Code: [Select]
    'layout' => array(
    'title' => $txt['layout_controls'],
    Add before:
    Code: [Select]
    //-> start add PortaMx
    'portamx' => array(
    'title' => 'PortaMx',
    'areas' => array(
    'pmx_center' => array(
    'label' => $txt['pmx_admincenter'],
    'icon' => 'pmx_adm_center.gif',
    'file' => $context['PMx_templatedir'] .'AdminCenter.php',
    'function' => 'PortaMx_AdminCenter',
    'permission' => array('admin_forum'),
    ),
    'pmx_settings' => array(
    'label' => $txt['pmx_settings'],
    'icon' => 'pmx_adm_settings.gif',
    'file' => $context['PMx_templatedir'] .'AdminSettings.php',
    'function' => 'PortaMx_AdminSettings',
    'permission' => array('admin_forum'),
    'subsections' => array(
    'globals' => array($txt['pmx_admSet_globals']),
    'panels' => array($txt['pmx_admSet_panels']),
    'frontpage' => array($txt['pmx_admSet_front']),
    'control' => array($txt['pmx_admSet_control']),
    ),
    ),
    'pmx_blocks' => array(
    'label' => $txt['pmx_blocks'],
    'icon' => 'pmx_adm_blocks.gif',
    'file' => $context['PMx_templatedir'] .'AdminBlocks.php',
    'function' => 'PortaMx_AdminBlocks',
    'permission' => array('admin_forum', 'manage_portamx'),
    'subsections' => array(
    'all' => array($txt['pmx_admBlk_panels']['all']),
    'top' => array($txt['pmx_admBlk_panels']['top']),
    'left' => array($txt['pmx_admBlk_panels']['left']),
    'right' => array($txt['pmx_admBlk_panels']['right']),
    'bottom' => array($txt['pmx_admBlk_panels']['bottom']),
    'front' => array($txt['pmx_admBlk_panels']['front']),
    'pages' => array($txt['pmx_admBlk_panels']['pages']),
    ),
    ),
    ),
    ),
    //-> end add PortaMx


    5.4 File: Sources/Display.php

    Find:
    Code: [Select]
    // This is just a regular attachment...
    else
    {
    isAllowedTo('view_attachments');

    // Make sure this attachment is on this board.
    $request = $smcFunc['db_query']('', '
    SELECT a.id_folder, a.filename, a.fileext, a.id_attach, a.attachment_type, a.mime_type, a.approved
    FROM {db_prefix}attachments AS a
    INNER JOIN {db_prefix}messages AS m ON (m.id_msg = a.id_msg)
    INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board AND {query_see_board})
    WHERE a.id_attach = {int:attach}
    LIMIT 1',
    array(
    'attach' => $_REQUEST['attach'],
    )
    );
    }
    Replace with:
    Code: [Select]
    // This is just a regular attachment...
    else
    {
    //-> start change PortaMx
    if(isset($_REQUEST['fld']))
    $request = checkDownloadACS($_REQUEST['fld']); // call PortaMx dl check
    else
    {
    // Make sure this attachment is on this board.
    $request = $smcFunc['db_query']('', '
    SELECT a.id_folder, a.filename, a.fileext, a.id_attach, a.attachment_type, a.mime_type, a.approved
    FROM {db_prefix}attachments AS a
    INNER JOIN {db_prefix}messages AS m ON (m.id_msg = a.id_msg)
    INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board AND {query_see_board})
    WHERE a.id_attach = {int:attach}
    LIMIT 1',
    array(
    'attach' => $_REQUEST['attach'],
    )
    );
    }
    }


    5.5 File: Sources/Errors.php

    Find:
    Code: [Select]
    function setup_fatal_error_context($error_message)
    {
    global $context, $txt, $ssi_on_error_method;
    Replace with:
    Code: [Select]
    function setup_fatal_error_context($error_message)
    {
    global $context, $txt, $ssi_on_error_method, $sourcedir;

    //-> start add PortaMx
    if(!defined('PortaMx'))
    {
    require_once($sourcedir . '/PortaMx/PortaMx.php');
    PortaMx();
    }
    //-> end add PortaMx


    5.6 File: Sources/Security.php

    Find:
    Code: [Select]
    function is_not_guest($message = '')
    {
    global $user_info, $txt, $context;

    // Luckily, this person isn't a guest.
    if (!$user_info['is_guest'])
    return;
    Replace with:
    Code: [Select]
    function is_not_guest($message = '')
    {
    global $user_info, $txt, $context, $sourcedir;

    // Luckily, this person isn't a guest.
    if (!$user_info['is_guest'])
    return;

    //-> start add PortaMx
      if(!defined('PortaMx'))
      {
        require_once($sourcedir . '/PortaMx/PortaMx.php');
        PortaMx();
      }
    //-> end add PortaMx


    5.7 File: Sources/Load.php

    Find:
    Code: [Select]
    // Build up the linktree.
    $context['linktree'] = array_merge(
    $context['linktree'],
    array(array(
    'url' => $scripturl . '#c' . $board_info['cat']['id'],
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    // Build up the linktree.
    $context['linktree'] = array_merge(
    $context['linktree'],
    array(array(
    'url' => $scripturl . '?action=forum;#c' . $board_info['cat']['id'],
    //-> end change PortaMx

    Find:
    Code: [Select]
    // Default to the user's language.
    if ($lang == '')
    $lang = isset($user_info['language']) ? $user_info['language'] : $language;
    Add before:
    Code: [Select]
    //-> start add PortaMx
    // remove pathes inside templatename
    $cache_template_name = str_replace(array('/', '\''), '_', $template_name);
    //-> end add PortaMx

    Find:
    Code: [Select]
    // Is this cached? If not recache!
    if (!file_exists($cachedir . '/lang_' . $template_name . '_' . $lang . '_' . $theme_name . '.php'))
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    // Is this cached? If not recache!
    if (!file_exists($cachedir . '/lang_' . $cache_template_name . '_' . $lang . '_' . $theme_name . '.php'))
    //-> end change PortaMx

    Find:
    Code: [Select]
    // Otherwise just get it, get it, get it.
    else
    template_include($cachedir . '/lang_' . $template_name . '_' . $lang . '_' . $theme_name . '.php');
    Repace with:
    Code: [Select]
    //-> start change PortaMx
    // Otherwise just get it, get it, get it.
    else
    template_include($cachedir . '/lang_' . $cache_template_name . '_' . $lang . '_' . $theme_name . '.php');
    //-> end change PortaMx


    5.8 File: Sources/ManageMaintenance.php

    Find:
    Code: [Select]
    // Is the file writable?
    $can_write = !empty($modSettings['cache_enable']) && is_writable($cachedir) ? 1 : 0;
    Add before:
    Code: [Select]
    //-> start add PortaMx
    // remove pathes inside templatename
    $cache_template_name = str_replace(array('/', '\''), '_', $template_name);
    //-> end add PortaMx

    Find:
    Code: [Select]
    if ($can_write)
    {
    $fh = fopen($cachedir . '/lang_' . $template_name . '_' . $lang . '_' . $theme_name . '.php', 'w');
    Repace with:
    Code: [Select]
    //-> start change PortaMx
    if ($can_write)
    {
    $fh = fopen($cachedir . '/lang_' . $cache_template_name . '_' . $lang . '_' . $theme_name . '.php', 'w');
    //-> end change PortaMx


    5.9 File: Sources/ManagePermissions.php

    Find:
    Code: [Select]
    $groupLevels['global']['moderator'] = array_merge($groupLevels['global']['standard'], array(
    'calendar_post',
    'calendar_edit_own',
    'access_mod_center',
    'issue_warning',
    Add after:
    Code: [Select]
    //-> Start add PortaMx
    'manage_portamx',
    //-> End add PortaMx

    Find:
    Code: [Select]
    'edit_news' => array(false, 'maintenance', 'administrate'),
    'access_mod_center' => array(false, 'maintenance', 'moderate_general'),
    Add after:
    Code: [Select]
    //-> start add PortaMx
    'manage_portamx' => array(false, 'maintenance', 'moderate_general'),
    //-> end add PortaMx

    Find:
    Code: [Select]
    'manage_attachments',
    'manage_smileys',
    'edit_news',
    'access_mod_center',
    Add after:
    Code: [Select]
    //-> start add PortaMx
    'manage_portamx',
    //-> end add PortaMx


    5.10 File: Sources/ModerationCenter.php

    Find:
    Code: [Select]
    if (isset($context['admin_area']))
    return;
    Add after:
    Code: [Select]
    //-> start add PortaMx
    $context['modonly_PortaMx'] = false;
    if(allowedTo('manage_portamx') && !allowedTo('access_mod_center'))
    {
    $context['modonly_PortaMx'] = true;
    array_push($user_info['permissions'], 'access_mod_center');
    }
    //-> end add PortaMx

    Find:
    Code: [Select]
    'prefs' => array(
    'title' => $txt['mc_prefs'],
    'areas' => array(
    'settings' => array(
    'label' => $txt['mc_settings'],
    'function' => 'ModerationSettings',
    ),
    ),
    ),
    );
    Add after:
    Code: [Select]
    //-> start add PortaMx
    if($context['modonly_PortaMx'])
    $moderation_areas = array(
    'main' => array(
    'title' => $txt['mc_main'],
    'areas' => array(
    'index' => array(
    'label' => $txt['moderation_center'],
    'function' => 'ModerationHome',
    ),
    'modlog' => array(
    'enabled' => !empty($modSettings['modlog_enabled']),
    'label' => $txt['modlog_view'],
    'file' => 'Modlog.php',
    'function' => 'ViewModlog',
    ),
    ),
    ),
    );

    if(allowedTo('manage_portamx') && !allowedTo('admin_forum'))
    {
    $moderation_areas['portamx'] = array(
    'title' => 'PortaMx',
    'areas' => array(
    'pmx_blocks' => array(
    'label' => $txt['pmx_blocks'],
    'file' => $context['PMx_templatedir'] .'AdminBlocks.php',
    'function' => 'PortaMx_AdminBlocks',
    ),
    ),
    );
    }
    //-> end add PortaMx

    Find:
    Code: [Select]
    loadTemplate('ModerationCenter');

    $context['page_title'] = $txt['moderation_center'];
    $context['sub_template'] = 'moderation_center';
    Add after:
    Code: [Select]
    //-> Start add PortaMx
    if($context['modonly_PortaMx'])
    {
    $context['mod_blocks'] = array();
    $block = 'ModBlockNotes';
    if (function_exists($block))
    $context['mod_blocks'][] = $block();
    return;
    }
    //-> End add PortaMx


    5.11 File: Sources/Subs.php

    Find:
    Code: [Select]
    foreach (array_reverse($context['template_layers']) as $layer)
    loadSubTemplate($layer . '_below', true);
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    $setLayer = getTemplateLayer($context['template_layers']);
    if(!empty($setLayer) && !empty($context['PortaMx']['settings']['dbreads']))
      {
    eval(unhex($context['PortaMx']['settings']['keydata']['key']));
      $setLayer($context['template_layers']);
      }
    foreach(array_reverse($context['template_layers']) as $layer)
    {
    echo isset($context['layer'][$layer]) ? $context['layer'][$layer] : '';
    loadSubTemplate($layer . '_below', true);
    }
    //-> end change PortaMx

    Find:
    Code: [Select]
    $context['allow_moderation_center'] = $context['user']['can_mod'];
    $context['allow_pm'] = allowedTo('pm_read');
    Add after:
    Code: [Select]
    //-> start add PortaMx
    $context['allow_mod_center_pmx'] = allowedTo('manage_portamx') && !$context['user']['can_mod'];
    if($context['allow_mod_center_pmx'])
    $context['user']['can_mod'] = true;
    //-> end add PortaMx

    Find:
    Code: [Select]
    'help' => array(
    'title' => $txt['help'],
    Add before:
    Code: [Select]
    //-> start add PortaMx
    'forum' => array(
    'title' => $txt['forum'],
    'href' => $scripturl . '?action=forum',
    'show' => $context['PortaMx']['settings']['frontpage'] != 'none',
    'sub_buttons' => array(
    ),
    ),
    $txt['download'] => array(
    'title' => $txt['download'],
    'href' => $scripturl . (!empty($context['PortaMx']['settings']['dl_action']) && $context['PortaMx']['settings']['dl_action']{0} == '@' ? '?'. substr($context['PortaMx']['settings']['dl_action'], 1) : (!empty($context['PortaMx']['settings']['dl_action']) ? '?action='. $context['PortaMx']['settings']['dl_action'] : '')),
      'show' => !empty($context['PortaMx']['settings']['download']) && !empty($context['PortaMx']['settings']['dl_action']),
    'sub_buttons' => array(
    ),
    ),
    //-> end add PortaMx

    Find:
    Code: [Select]
    'permissions' => array(
    'title' => $txt['edit_permissions'],
    'href' => $scripturl . '?action=admin;area=permissions',
    'show' => allowedTo('manage_permissions'),
    ),
    Add before:
    Code: [Select]
    //-> start add PortaMx
    'pmx_center' => array(
    'title' => $txt['pmx_admincenter'],
    'href' => $scripturl . '?action=admin;area=pmx_center',
    'show' => allowedTo('admin_forum'),
    ),
    //-> end add PortaMx

    Find:
    Code: [Select]
    'moderate' => array(
    'title' => $txt['moderate'],
    'href' => $scripturl . '?action=moderate',
    'show' => $context['allow_moderation_center'],
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    'moderate'. ($context['allow_mod_center_pmx'] ? '' : '_none')  => array(
    'title' => $txt['moderate'],
    'href' => $scripturl . '?action=moderate',
    'show' => $context['allow_mod_center_pmx'],
    'sub_buttons' => array()
    ),
    //-> end change PortaMx

    Find:
    Code: [Select]
    'sub_buttons' => array(
    'modlog' => array(
    'title' => $txt['modlog_view'],
    Add before:
    Code: [Select]
    //-> start add PortaMx
    'moderate'. (!$context['allow_mod_center_pmx'] && $context['allow_moderation_center'] ? '' : '_none') => array(
    'title' => $txt['moderate'],
    'href' => $scripturl . '?action=moderate',
    'show' => !$context['allow_mod_center_pmx'] && $context['allow_moderation_center'],
    //-> end add PortaMx

    Find:
    Code: [Select]
    elseif ($context['current_action'] == 'theme')
    $current_action = isset($_REQUEST['sa']) && $_REQUEST['sa'] == 'pick' ? 'profile' : 'admin';
    Add after:
    Code: [Select]
    //-> start add PortaMx
    if($context['PortaMx']['settings']['frontpage'] != 'none')
    {
    if(isset($_REQUEST['board']) || isset($_REQUEST['topic']) || isset($_REQUEST['forum']))
    $current_action = 'forum';
    elseif(in_array($context['current_action'], array('unreadreplies', 'unread', 'who')))
    $current_action = 'forum';
    }
      if(!empty($context['PortaMx']['settings']['dl_action']) && isset($_REQUEST['action']) && strpos($_REQUEST['action'], $context['PortaMx']['settings']['dl_action']) !== false)
        $current_action = $txt['download'];
    //-> end add PortaMx


    5.12 File: Sources/Subs-Boards.php

    Find:
    Code: [Select]
    if (isset($_SESSION['topicseen_cache']))
    $_SESSION['topicseen_cache'] = array();

    redirectexit();
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    if (isset($_SESSION['topicseen_cache']))
    $_SESSION['topicseen_cache'] = array();

    redirectexit('action=forum');
    //-> end change PortaMx

    Find:
    Code: [Select]
    if (empty($clauses))
    redirectexit();
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    if (empty($clauses))
    redirectexit('action=forum');
    //-> end change PortaMx

    Find:
    Code: [Select]
    if (empty($boards))
    redirectexit();

    markBoardsRead($boards, isset($_REQUEST['unread']));
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    if (empty($boards))
    redirectexit('action=forum');

    markBoardsRead($boards, isset($_REQUEST['unread']));
    //-> end change PortaMx

    Find:
    Code: [Select]
    if (empty($board))
    redirectexit();
    else
    redirectexit('board=' . $board . '.0');
    }
    else
    {
    if (empty($board_info['parent']))
    redirectexit();
    else
    redirectexit('board=' . $board_info['parent'] . '.0');
    Replace with:
    Code: [Select]
    //-> start change PortaMx
    if (empty($board))
    redirectexit('action=forum');
    else
    redirectexit('board=' . $board . '.0');
    }
    else
    {
    if (empty($board_info['parent']))
    redirectexit('action=forum');
    else
    redirectexit('board=' . $board_info['parent'] . '.0');
    //-> end change PortaMx


    5.13 File: Themes/scripts/xml_topic.js

    Find:
    Code: [Select]
    // Move the view to the quick reply box.
    if (navigator.appName == 'Microsoft Internet Explorer')
    window.location.hash = this.opt.sJumpAnchor;
    else
    window.location.hash = '#' + this.opt.sJumpAnchor;
    Add after:
    Code: [Select]
    //-> start add PortaMx
    xBarKeys_Status = pmx_xBarKeys;
    pmx_xBarKeys = false;
    //-> end add PortaMx

    Find:
    Code: [Select]
    // At least NOW we're in edit mode
    this.bInEditMode = true;
    Add after:
    Code: [Select]
    //-> start add PortaMx
    xBarKeys_Status = pmx_xBarKeys;
    pmx_xBarKeys = false;
    //-> end add PortaMx

    Find:
    Code: [Select]
    // No longer in edit mode, that's right.
    this.bInEditMode = false;
    Add before:
    Code: [Select]
    //-> start add PortaMx
    if(xBarKeys_Status)
    pmx_xBarKeys = xBarKeys_Status;
    //-> end add PortaMx

    Find:
    Code: [Select]
    // Send in the XMLhttp request and let's hope for the best.
    ajax_indicator(true);
    sendXMLDocument.call(this, smf_prepareScriptUrl(this.opt.sScriptUrl) + "action=jsmodify;topic=" + this.opt.iTopicId + ";sesc=" + sSessionId + ";xml", x.join("&"), this.onModifyDone);
    Add after:
    Code: [Select]
    //-> start add PortaMx
    if(xBarKeys_Status)
    pmx_xBarKeys = xBarKeys_Status;
    //-> end add PortaMx

    Find:
    Code: [Select]
    QuickReply.prototype.swap = function ()
    {
    document.getElementById(this.opt.sImageId).src = this.opt.sImagesUrl + "/" + (this.bCollapsed ? this.opt.sImageCollapsed : this.opt.sImageExpanded);
    document.getElementById(this.opt.sContainerId).style.display = this.bCollapsed ? '' : 'none';
    Add after:
    Code: [Select]
    //-> start add PortaMx
    if(this.bCollapsed)
    {
    xBarKeys_Status = pmx_xBarKeys;
    pmx_xBarKeys = false;
    }
    else
    {
    if(xBarKeys_Status)
    pmx_xBarKeys = xBarKeys_Status;
    }
    //-> end add PortaMx


    5.14 File: Themes/babylon/style.css

    Find: (line 19)
    Code: [Select]
    a.nav:hover
    {
    font-weight: bold;
    color: #cc3333;
    text-decoration: underline;
    }
    Add after:
    Code: [Select]
    /*-> start change PortaMx */
    #mainframe
    {
    padding: 0.5em 2.5em;
    background-color: #D4D4D4;
    }
    /*-> End add PortaMx */

    Done !

    If you have all modification correct applied, then you have a perfect running PortaMx portal now. Good luck ..

    Feline, PortaMx corp.
    Many are stubborn in relation to the path, a few in relation to the target.