Skip to content
Snippets Groups Projects
class_core_tools.php 126 KiB
Newer Older
  • Learn to ignore specific revisions
  • SNA's avatar
    SNA committed
    <?php
    /*
    
    *   Copyright 2008-2015 Maarch
    
    SNA's avatar
    SNA committed
    *
    
    *   This file is part of Maarch Framework.
    
    SNA's avatar
    SNA committed
    *
    *   Maarch Framework is free software: you can redistribute it and/or modify
    *   it under the terms of the GNU General Public License as published by
    *   the Free Software Foundation, either version 3 of the License, or
    *   (at your option) any later version.
    *
    *   Maarch Framework is distributed in the hope that it will be useful,
    *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    *   GNU General Public License for more details.
    *
    *   You should have received a copy of the GNU General Public License
    
    *   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
    
    SNA's avatar
    SNA committed
    */
    
    
    /****************************************************************************/
    /*                                                                          */
    /*                                                                          */
    /*               THIS PAGE CAN NOT BE OVERWRITTEN IN A CUSTOM               */
    /*                                                                          */
    /*                                                                          */
    /* **************************************************************************/
    
    
    SNA's avatar
    SNA committed
    /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
     * @defgroup core Framework core
     */
    
    SNA's avatar
    SNA committed
    
    /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
     * @brief   Contains all the functions to load core and modules
     *
     * @file
     *
     * @author  Laurent Giovannoni  <dev@maarch.org>
     * @date $date$
     *
     * @version $Revision$
     * @ingroup core
     */
    
    SNA's avatar
    SNA committed
    
    /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
     * @brief   Contains all the functions to load core and modules
     *
     * <ul>
     * <li>Loads core tables into session</li>
     * <li>Loads modules settings into session</li>
     * <li>Builds the application menu</li>
     *  <li>Management and building the framework</li>
     *  <li>Modules services loading</li>
     *  <li>Execution of the module services </li>
     *</ul>
     *
     * @ingroup core
     */
    
    SNA's avatar
    SNA committed
    class core_tools extends functions
    {
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Load Maarch core configuration into sessions vars from the core/xml/config.xml file.
         */
    
    SNA's avatar
    SNA committed
        public function build_core_config($pathtoxmlcore)
        {
            $xmlconfig = simplexml_load_file($pathtoxmlcore);
    
            // Loads  core tables into session ($_SESSION['tablename'] array)
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            $TABLENAME = $xmlconfig->TABLENAME;
            $_SESSION['tablename']['actions'] = (string) $TABLENAME->actions;
            $_SESSION['tablename']['authors'] = (string) $TABLENAME->authors;
            $_SESSION['tablename']['docservers'] = (string) $TABLENAME->docservers;
            $_SESSION['tablename']['doctypes'] = (string) $TABLENAME->doctypes;
            $_SESSION['tablename']['history'] = (string) $TABLENAME->history;
            $_SESSION['tablename']['history_batch'] = (string) $TABLENAME->history_batch;
            $_SESSION['tablename']['param'] = (string) $TABLENAME->param;
            $_SESSION['tablename']['security'] = (string) $TABLENAME->security;
            $_SESSION['tablename']['status'] = (string) $TABLENAME->status;
            $_SESSION['tablename']['usergroups'] = (string) $TABLENAME->usergroups;
            $_SESSION['tablename']['usergroup_content'] = (string) $TABLENAME->usergroupcontent;
    
    SNA's avatar
    SNA committed
            $_SESSION['tablename']['usergroup_services'] = (string) $TABLENAME->usergroups_services;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            $_SESSION['tablename']['users'] = (string) $TABLENAME->users;
    
    SNA's avatar
    SNA committed
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Load Maarch modules configuration into sessions vars from modules/module_name/xml/config.xml files.
         *
         * @param $modules array  Enabled modules of the application
         */
        public function load_modules_config($modules, $mode_batch = false)
    
    SNA's avatar
    SNA committed
        {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            require_once 'core/class/class_request.php';
    
    SNA's avatar
    SNA committed
            // Browses enabled modules
    
            for ($i = 0; $i < count($modules); ++$i) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR
                    .$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR
                    .'modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR
                    .'config.xml'
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $configPath = $_SESSION['config']['corepath'].'custom'
                        .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                        .DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'xml'
                        .DIRECTORY_SEPARATOR.'config.xml';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $configPath = 'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'xml'
                        .DIRECTORY_SEPARATOR.'config.xml';
    
    SNA's avatar
    SNA committed
                }
    
    
                if (file_exists('modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'lang'.DIRECTORY_SEPARATOR.$_SESSION['config']['lang'].'.php')) {
                    include_once 'modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'lang'.DIRECTORY_SEPARATOR.$_SESSION['config']['lang'].'.php';
                }
    
                if (file_exists($configPath)) {
                    // Reads the config.xml file of the current module
                    $xmlconfig = simplexml_load_file($configPath);
    
                    // Loads into $_SESSION['modules_loaded'] module's informations
                    foreach ($xmlconfig->CONFIG as $CONFIG) {
                        $_SESSION['modules_loaded'][$modules[$i]['moduleid']]['name'] =
                            (string) $CONFIG->name;
                        $_SESSION['modules_loaded'][$modules[$i]['moduleid']]['path'] =
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                            'modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                            .DIRECTORY_SEPARATOR;
    
                        $comment = (string) $CONFIG->comment;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        if (!empty($comment) && defined($comment)
                            && constant($comment) != null
    
                        ) {
                            $comment = constant($comment);
                        }
                        $_SESSION['modules_loaded'][$modules[$i]['moduleid']]['comment'] =
                            $comment;
    
    SNA's avatar
    SNA committed
    
    
                        $_SESSION['modules_loaded'][$modules[$i]['moduleid']]['fileprefix'] = (string) $CONFIG->fileprefix;
                        $_SESSION['modules_loaded'][$modules[$i]['moduleid']]['loaded'] = (string) $CONFIG->loaded;
                    }
    
    SNA's avatar
    SNA committed
                }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'custom'
                        .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                        .DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'class'
                        .DIRECTORY_SEPARATOR.'class_modules_tools.php'
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $path_module_tools = $_SESSION['config']['corepath'].'custom'
                        .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                        .DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'class'
                        .DIRECTORY_SEPARATOR.'class_modules_tools.php';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $path_module_tools = 'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'class'
                        .DIRECTORY_SEPARATOR.'class_modules_tools.php';
    
                if (file_exists($path_module_tools)) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    require_once $path_module_tools;
                    $modules_tools = new $modules[$i]['moduleid']();
    
    SNA's avatar
    SNA committed
                    //Loads the tables of the module into session
                    $modules_tools->build_modules_tables();
                    //Loads log keywords of the module
                }
    
                foreach ($xmlconfig->KEYWORDS as $keyword) {
    
                    $tmp = (string) $keyword->label;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    if (!empty($tmp) && defined($tmp) && constant($tmp) != null) {
    
                        $tmp = constant($tmp);
    
    SNA's avatar
    SNA committed
                    }
    
    SNA's avatar
    SNA committed
    
    
    SNA's avatar
    SNA committed
                    $id = (string) $keyword->id;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    if (!$this->is_var_in_history_keywords_tab($id)) {
    
                            $_SESSION['history_keywords'],
                            array(
                                'id' => $id,
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                'label' => $tmp,
    
    SNA's avatar
    SNA committed
                    }
                }
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (!$mode_batch) {
    
    SNA's avatar
    SNA committed
                //Loads logs keywords of the actions
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $db = new Database();
                $stmt = $db->query(
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    'select id, label_action from '
                    .$_SESSION['tablename']['actions']
                    ." where enabled = 'Y' and history = 'Y'"
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                while ($res = $stmt->fetchObject()) {
    
                        $_SESSION['history_keywords'],
                        array(
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                            'id' => 'ACTION#'.$res->id,
                            'label' => $this->show_string($res->label_action),
    
    SNA's avatar
    SNA committed
                }
            }
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Check if the log keyword is known in the apps.
         *
         * @param $id  string Log keyword to check
         *
         * @return bool True if the keyword is found, False otherwise
         */
    
    SNA's avatar
    SNA committed
        public function is_var_in_history_keywords_tab($id)
        {
            $found = false;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            for ($i = 0; $i < count($_SESSION['history_keywords']); ++$i) {
                if ($_SESSION['history_keywords'][$i]['id'] == $id) {
    
    SNA's avatar
    SNA committed
                    $found = $_SESSION['history_keywords'][$i]['label'];
                    break;
                }
            }
    
    SNA's avatar
    SNA committed
            return $found;
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Loads the modules specific vars into session.
         *
         * @param $modules Enabled modules of the application
         */
    
    SNA's avatar
    SNA committed
        public function load_var_session($modules, $userData)
        {
    
            for ($i = 0; $i < count($modules); ++$i) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'custom'
                        .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                        .DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'class'
                        .DIRECTORY_SEPARATOR.'class_modules_tools.php'
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $path_module_tools = $_SESSION['config']['corepath'].'custom'
                        .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                        .DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'class'
                        .DIRECTORY_SEPARATOR.'class_modules_tools.php';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $path_module_tools = 'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'class'
                        .DIRECTORY_SEPARATOR.'class_modules_tools.php';
    
    SNA's avatar
    SNA committed
                if (file_exists($path_module_tools)) {
                    require_once $path_module_tools;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $modules_tools = new $modules[$i]['moduleid']();
    
    SNA's avatar
    SNA committed
                    if (method_exists(
                        $modules[$i]['moduleid'], 'load_module_var_session'
                    )
                    ) {
                        $modules_tools->load_module_var_session($userData);
                    }
                }
    
                //$this->show_array($_SESSION['user']['baskets']);
    
    SNA's avatar
    SNA committed
            }
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Loads language variables into session.
         */
    
        public static function load_lang($lang = 'fr', $maarch_directory = '', $maarch_apps = '')
    
    SNA's avatar
    SNA committed
        {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            if (isset($_SESSION['config']['lang']) && !empty($_SESSION['config']['lang'])) {
    
    SNA's avatar
    SNA committed
                $lang = $_SESSION['config']['lang'];
            }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            if (isset($_SESSION['config']['corepath']) && !empty($_SESSION['config']['corepath'])) {
                $maarch_directory = $_SESSION['config']['corepath'];
    
    SNA's avatar
    SNA committed
            }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            if (isset($_SESSION['config']['app_id']) && !empty($_SESSION['config']['app_id'])) {
                $maarch_apps = $_SESSION['config']['app_id'];
    
    SNA's avatar
    SNA committed
            }
            //Loading custom lang file if present, this means that language constants are defined in the custom language file before other language files
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            if (isset($_SESSION['custom_override_id']) && !empty($_SESSION['custom_override_id'])) {
    
    SNA's avatar
    SNA committed
                self::load_lang_custom_override($_SESSION['custom_override_id']);
            }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
    
            if (isset($lang) && file_exists($maarch_directory.'apps/maarch_entreprise/lang'.DIRECTORY_SEPARATOR.$lang.'.php')) {
                include $maarch_directory.'apps/maarch_entreprise/lang'.DIRECTORY_SEPARATOR.$lang.'.php';
            } else {
                $_SESSION['error'] = 'Language file missing';
    
    SNA's avatar
    SNA committed
            }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            if (isset($_SESSION['modules'])) {
    
    SNA's avatar
    SNA committed
                self::load_lang_modules($_SESSION['modules']);
            }
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Loads language variables of each module.
         *
         * @param $modules array Enabled modules of the application
         */
    
        private static function load_lang_modules($modules)
    
    SNA's avatar
    SNA committed
        {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            for ($i = 0; $i < count($modules); ++$i) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                    .DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR
                    .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR
                    .'lang'.DIRECTORY_SEPARATOR
                    .$_SESSION['config']['lang'].'.php';
    
                if (!file_exists($file_path)) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    .DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                    .DIRECTORY_SEPARATOR.'lang'.DIRECTORY_SEPARATOR
                    .$_SESSION['config']['lang'].'.php';
    
                if (isset($_SESSION['config']['lang']) && file_exists($file_path)) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    include $file_path;
                } elseif ($_SESSION['config']['debug'] === 'true') {
                    $_SESSION['info'] .= 'Language file missing for module : '
                    .$modules[$i]['moduleid'].'<br/>';
    
    SNA's avatar
    SNA committed
                }
            }
        }
    
    
        private static function load_lang_custom_override($custom_id)
    
    SNA's avatar
    SNA committed
        {
            $pathname = $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR.$custom_id.DIRECTORY_SEPARATOR.$_SESSION['config']['lang'].'.php';
    
            if (file_exists($pathname)) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                include $pathname;
    
    SNA's avatar
    SNA committed
            }
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Loads menu items of each module and the application into session from menu.xml files.
         *
         * @param $modules array Enabled modules of the application
         */
    
    SNA's avatar
    SNA committed
        public function load_menu($modules)
        {
    
            if (file_exists(
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR
                .$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR.'apps'
                .DIRECTORY_SEPARATOR.$_SESSION['config']['app_id']
                .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml'
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $path = $_SESSION['config']['corepath'].'custom'
                    .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                    .DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR
                    .$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR.'xml'
                    .DIRECTORY_SEPARATOR.'menu.xml';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $path = 'apps'.DIRECTORY_SEPARATOR.$_SESSION['config']['app_id']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml';
    
            }
            // Reads the apps/apps_name/xml/menu.xml file  and loads into session
            $xmlconfig = simplexml_load_file($path);
            foreach ($xmlconfig->MENU as $MENU2) {
                $_SESSION['menu'][$k]['id'] = (string) $MENU2->id;
    
                $_SESSION['menu'][$k]['angular'] = empty((string) $MENU2->angular) ? 'false' : (string) $MENU2->angular;
    
                if (isset($_SESSION['menu'][$k]['id'])
                    && isset($_SESSION['user']['services'][$_SESSION['menu'][$k]['id']])
                    && $_SESSION['user']['services'][$_SESSION['menu'][$k]['id']] == true
                ) { // Menu Identifier must be equal to the Service identifier
                    $libmenu = (string) $MENU2->libconst;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    if (!empty($libmenu) && defined($libmenu)
                        && constant($libmenu) != null
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        $libmenu = constant($libmenu);
    
                    }
                    $_SESSION['menu'][$k]['libconst'] = $libmenu;
    
                    if ($_SESSION['menu'][$k]['angular'] == 'true') {
    
                        $_SESSION['menu'][$k]['url'] = (string) $MENU2->url;
                    } else {
    
                        $_SESSION['menu'][$k]['url'] = $_SESSION['config']['businessappurl'].(string) $MENU2->url;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    if (trim((string) $MENU2->target) != '') {
    
                        $tmp = preg_replace(
                            '/\/core\/$/', '/', $_SESSION['urltocore']
                        );
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        $_SESSION['menu'][$k]['url'] = $tmp.(string) $MENU2->url;
    
                        $_SESSION['menu'][$k]['target'] = (string) $MENU2->target;
                    }
                    $_SESSION['menu'][$k]['style'] = (string) $MENU2->style;
                    $_SESSION['menu'][$k]['show'] = true;
                } else {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['menu'][$k]['libconst'] = '';
                    $_SESSION['menu'][$k]['url'] = '';
    
                    $_SESSION['menu'][$k]['style'] = '';
                    $_SESSION['menu'][$k]['show'] = false;
                }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                ++$k;
    
            }
            // Browses the enabled modules array
    
            for ($i = 0; $i < count($modules); ++$i) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR
                    .$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR
                    .'modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml'
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $menuPath = $_SESSION['config']['corepath'].'custom'
                        .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                        .DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'xml'
                        .DIRECTORY_SEPARATOR.'menu.xml';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $menuPath = 'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'xml'
                        .DIRECTORY_SEPARATOR.'menu.xml';
    
    SNA's avatar
    SNA committed
                }
    
    SNA's avatar
    SNA committed
    
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'modules'
                    .DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml'
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR
                    .$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR
                    .'modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml'
    
                )
                ) {
                    $xmlconfig = simplexml_load_file($menuPath);
                    foreach ($xmlconfig->MENU as $MENU) {
    
    SNA's avatar
    SNA committed
                        $_SESSION['menu'][$k]['id'] = (string) $MENU->id;
    
                        $_SESSION['menu'][$k]['angular'] = empty((string) $MENU->angular) ? 'false' : (string) $MENU->angular;
    
                            $_SESSION['user']['services'][$_SESSION['menu'][$k]['id']]
    
    SNA's avatar
    SNA committed
                        )
    
                        && $_SESSION['user']['services'][$_SESSION['menu'][$k]['id']] == true
                        ) {
    
                            $libmenu = (string) $MENU->libconst;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                            if (!empty($libmenu) && defined($libmenu)
                                && constant($libmenu) != null
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                $libmenu = constant($libmenu);
    
                            }
                            $_SESSION['menu'][$k]['libconst'] = $libmenu;
    
                            if ($_SESSION['menu'][$k]['angular'] == 'true') {
    
                                $_SESSION['menu'][$k]['url'] = (string) $MENU->url;
                            } else {
    
                                $_SESSION['menu'][$k]['url'] = $_SESSION['config']['businessappurl'].(string) $MENU->url;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                            if (trim((string) $MENU->target) != '') {
    
                                    '/\/core\/$/', '/', $_SESSION['urltocore']
    
    SNA's avatar
    SNA committed
                                $_SESSION['menu'][$k]['url'] = $tmp
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                    .(string) $MENU->url;
    
    SNA's avatar
    SNA committed
                                $_SESSION['menu'][$k]['target'] = (string) $MENU->target;
                            }
                            $_SESSION['menu'][$k]['style'] = (string) $MENU->style;
                            $_SESSION['menu'][$k]['show'] = true;
    
    SNA's avatar
    SNA committed
                            $_SESSION['menu'][$k]['libconst'] = '';
                            $_SESSION['menu'][$k]['url'] = '';
                            $_SESSION['menu'][$k]['style'] = '';
                            $_SESSION['menu'][$k]['show'] = false;
                        }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        ++$k;
    
    SNA's avatar
    SNA committed
                    }
                }
            }
    
            $this->load_quicklaunch($modules);
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Builds the application menu from the session var menu.
         *
         * @param  $menu array Enabled menu items
         * @param  $myProfil boolean Enabled my profil item
         * @param  $logout boolean Enabled logout item
         */
    
        public function build_menu($menu, $myProfil = true, $logout = true)
    
            //menu tri
    
    Damien's avatar
    Damien committed
            $i = 0;
    
            foreach ($menu as $key => $row) {
                $label[$i] = $row['libconst'];
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                ++$i;
    
            }
            // Trie les données par volume décroissant, edition croissant
            // Ajoute $data en tant que dernier paramètre, pour trier par la clé commune
            array_multisort($label, SORT_ASC, $label, SORT_ASC, $menu);
    
            // Browses the menu items
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            for ($i = 0; $i < count($menu); ++$i) {
                if ($menu[$i]['show'] == true) {
    
                    if ($menu[$i]['angular'] == 'true') {
    
                        echo '<li onmouseover="this.className=\'on\';" onmouseout="this.className=\'\';">';
                        echo '<a style="display:flex;align-items:center;" onClick="triggerAngular(\'#'.$menu[$i]['url'].'\')">';
                        echo "<i style='width:40px;text-align:center;' class='{$menu[$i]['style']} fa-2x'></i>";
                        echo '<span>';
                        echo trim($menu[$i]['libconst']);
                        echo '</span></span></a></li>';
    
    Damien's avatar
    Damien committed
                    } else {
                        $tmp = $menu[$i]['url'];
    
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        if (preg_match('/php$/', $tmp)) {
                            $tmp .= '?reinit=true';
                        } else {
                            $tmp .= '&reinit=true';
    
                        $tmp = htmlentities($tmp, ENT_COMPAT, 'UTF-8', true); // Encodes
                        echo "<li onmouseover=\"this.className='on';\" onmouseout=\"this.className='';\">";
                        echo '<a style="display:flex;align-items:center;" href="#" ';
                        if ($menu[$i]['id'] == 'index_mlb') {
                            echo 'onclick="checkMultiIndexingGroup(\''.$tmp.'\');">';
                        } else {
                            echo 'onclick="window.open(\''.$tmp.'\',\'';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                            if (isset($menu[$i]['target']) && $menu[$i]['target'] != '') {
    
    Damien's avatar
    Damien committed
                                echo $menu[$i]['target'];
                            } else {
                                echo '_self';
    
                            }
                            echo '\');">';
                        }
                        echo '<i style="width:40px;text-align:center;" class="'.$menu[$i]['style'].' fa-2x"></i>';
                        echo '<span>';
                        echo trim($menu[$i]['libconst']);
                        echo '</span></span></a></li>';
    
                }
            }
    
            // Menu items always displayed
    
                echo '<li onmouseover="this.className=\'on\';" onmouseout="this.className=\'\';">';
                echo '<a style="display:flex;align-items:center;" onClick="triggerAngular(\'#/profile\')">';
                echo '<i style="width:40px;text-align:center;" class="fa fa-user fa-2x"></i>';
                echo '<span>'._MY_INFO.'</span></a></li>';
    
                echo '<li onmouseover="this.className=\'on\';" onmouseout="this.className=\'\';">';
                echo '<a style="display:flex;align-items:center;" href="'.$_SESSION['config']['businessappurl'].'index.php?display=true&amp;page=logout&amp;logout=true">';
                echo '<i style="width:40px;text-align:center;" class="fa fa-power-off fa-2x"></i>';
                echo '<span>'._LOGOUT.'</span></a></li>';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Loads menu items of each module and the application into session from menu.xml files.
         *
         * @param $modules array Enabled modules of the application
         */
    
        public function load_quicklaunch($modules)
        {
            $k = 0;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR
                .$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR.'apps'
                .DIRECTORY_SEPARATOR.$_SESSION['config']['app_id']
                .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml'
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $path = $_SESSION['config']['corepath'].'custom'
                    .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                    .DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR
                    .$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR.'xml'
                    .DIRECTORY_SEPARATOR.'menu.xml';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $path = 'apps'.DIRECTORY_SEPARATOR.$_SESSION['config']['app_id']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml';
    
    SNA's avatar
    SNA committed
            }
            // Reads the apps/apps_name/xml/menu.xml file  and loads into session
            $xmlconfig = simplexml_load_file($path);
            foreach ($xmlconfig->MENU as $MENU2) {
    
                $_SESSION['quicklaunch'][$k]['id'] = (string) $MENU2->id;
    
                $_SESSION['quicklaunch'][$k]['angular'] = empty((string) $MENU2->angular) ? 'false' : (string) $MENU2->angular;
    
                if (isset($_SESSION['quicklaunch'][$k]['id'])
                    && isset($_SESSION['user']['services'][$_SESSION['quicklaunch'][$k]['id']])
                    && $_SESSION['user']['services'][$_SESSION['quicklaunch'][$k]['id']] == true
    
    SNA's avatar
    SNA committed
                ) { // Menu Identifier must be equal to the Service identifier
    
                    $libmenu = (string) $MENU2->libconst;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    if (!empty($libmenu) && defined($libmenu)
                        && constant($libmenu) != null
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        $libmenu = constant($libmenu);
    
    SNA's avatar
    SNA committed
                    }
    
                    $_SESSION['quicklaunch'][$k]['libconst'] = $libmenu;
    
                    if ($_SESSION['quicklaunch'][$k]['angular'] == 'true') {
    
                        $_SESSION['quicklaunch'][$k]['url'] = (string) $MENU2->url;
                    } else {
                        $_SESSION['quicklaunch'][$k]['url'] = $_SESSION['config']['businessappurl'].(string) $MENU2->url;
                    }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    if (trim((string) $MENU2->target) != '') {
    
    Cyril Vazquez's avatar
    Cyril Vazquez committed
                            '/\/core\/$/', '/', $_SESSION['urltocore']
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        $_SESSION['quicklaunch'][$k]['url'] = $tmp.(string) $MENU2->url;
    
                        $_SESSION['quicklaunch'][$k]['target'] = (string) $MENU2->target;
    
    SNA's avatar
    SNA committed
                    }
    
                    $_SESSION['quicklaunch'][$k]['style'] = (string) $MENU2->style;
                    $_SESSION['quicklaunch'][$k]['show'] = true;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['quicklaunch'][$k]['libconst'] = '';
                    $_SESSION['quicklaunch'][$k]['url'] = '';
    
                    $_SESSION['quicklaunch'][$k]['style'] = '';
                    $_SESSION['quicklaunch'][$k]['show'] = false;
    
    SNA's avatar
    SNA committed
                }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                ++$k;
    
    SNA's avatar
    SNA committed
            }
    
            // Browses the enabled modules array
    
            for ($i = 0; $i < count($modules); ++$i) {
    
                if (file_exists(
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR
                    .$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR
                    .'modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml'
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $menuPath = $_SESSION['config']['corepath'].'custom'
                        .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                        .DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'xml'
                        .DIRECTORY_SEPARATOR.'menu.xml';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $menuPath = 'modules'.DIRECTORY_SEPARATOR
                        .$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'xml'
                        .DIRECTORY_SEPARATOR.'menu.xml';
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'modules'
                    .DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml'
    
                ) || file_exists(
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR
                    .$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR
                    .'modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'menu.xml'
    
                )
                ) {
                    $xmlconfig = simplexml_load_file($menuPath);
                    foreach ($xmlconfig->MENU as $MENU) {
                        $_SESSION['quicklaunch'][$k]['id'] = (string) $MENU->id;
    
                        $_SESSION['quicklaunch'][$k]['angular'] = empty((string) $MENU->angular) ? 'false' : (string) $MENU->angular;
    
                        if (isset(
                            $_SESSION['user']['services'][$_SESSION['quicklaunch'][$k]['id']]
                        )
                        && $_SESSION['user']['services'][$_SESSION['quicklaunch'][$k]['id']] == true
                        ) {
                            $libmenu = (string) $MENU->libconst;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                            if (!empty($libmenu) && defined($libmenu)
                                && constant($libmenu) != null
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                $libmenu = constant($libmenu);
    
                            }
                            $_SESSION['quicklaunch'][$k]['libconst'] = $libmenu;
    
                            if ($_SESSION['quicklaunch'][$k]['angular'] == 'true') {
    
                                $_SESSION['quicklaunch'][$k]['url'] = (string) $MENU->url;
                            } else {
                                $_SESSION['quicklaunch'][$k]['url'] = $_SESSION['config']['businessappurl'].(string) $MENU->url;
                            }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                            if (trim((string) $MENU->target) != '') {
    
                                $tmp = preg_replace(
                                    '/\/core\/$/', '/', $_SESSION['urltocore']
                                );
                                $_SESSION['quicklaunch'][$k]['url'] = $tmp
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                    .(string) $MENU->url;
    
                                $_SESSION['quicklaunch'][$k]['target'] = (string) $MENU->target;
                            }
                            $_SESSION['quicklaunch'][$k]['style'] = (string) $MENU->style;
                            $_SESSION['quicklaunch'][$k]['show'] = true;
                        } else {
                            $_SESSION['quicklaunch'][$k]['libconst'] = '';
                            $_SESSION['quicklaunch'][$k]['url'] = '';
                            $_SESSION['quicklaunch'][$k]['style'] = '';
                            $_SESSION['quicklaunch'][$k]['show'] = false;
                        }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        ++$k;
    
    SNA's avatar
    SNA committed
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Loads application services into session.
         */
    
    SNA's avatar
    SNA committed
        public function load_app_services()
        {
            // Reads the application config.xml file
            if (file_exists(
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $_SESSION['config']['corepath'].'custom'.DIRECTORY_SEPARATOR
                .$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR.'apps'
                .DIRECTORY_SEPARATOR.$_SESSION['config']['app_id']
                .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'services.xml'
    
    SNA's avatar
    SNA committed
            )
            ) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $path = $_SESSION['config']['corepath'].'custom'
                    .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id']
                    .DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR
                    .$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR.'xml'
                    .DIRECTORY_SEPARATOR.'services.xml';
    
    SNA's avatar
    SNA committed
            } else {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                $path = 'apps'.DIRECTORY_SEPARATOR.$_SESSION['config']['app_id']
                    .DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR
                    .'services.xml';
    
    SNA's avatar
    SNA committed
            }
            $xmlconfig = simplexml_load_file($path);
            $k = 0;
            $m = 0;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            include_once 'apps/'.$_SESSION['config']['app_id'].'/lang/'.$_SESSION['config']['lang'].'.php';
    
    SNA's avatar
    SNA committed
            // Browses the services in that file and loads $_SESSION['app_services']
            foreach ($xmlconfig->SERVICE as $service) {
                $_SESSION['app_services'][$k] = array();
                $_SESSION['app_services'][$k]['id'] = (string) $service->id;
    
                $name = (string) $service->name;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                if (!empty($name) && defined($name) && constant($name) != null) {
                    $name = constant($name);
    
    SNA's avatar
    SNA committed
                }
    
                $_SESSION['app_services'][$k]['name'] = $name;
                $comment = (string) $service->comment;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                if (!empty($comment) && defined($comment)
                    && constant($comment) != null
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    $comment = constant($comment);
    
    SNA's avatar
    SNA committed
                }
    
                $_SESSION['app_services'][$k]['comment'] = $comment;
    
    SNA's avatar
    SNA committed
                if (isset($service->servicepage)) {
                    $_SESSION['app_services'][$k]['servicepage'] = (string) $service->servicepage;
                    $_SESSION['app_services'][$k]['servicepage'] = preg_replace(
    
                        '/&admin/', '&amp;admin',
    
    SNA's avatar
    SNA committed
                        $_SESSION['app_services'][$k]['servicepage']
                    );
                    $_SESSION['app_services'][$k]['servicepage'] = preg_replace(
    
                        '/&module/', '&amp;module',
    
    SNA's avatar
    SNA committed
                        $_SESSION['app_services'][$k]['servicepage']
                    );
                }
                $_SESSION['app_services'][$k]['servicetype'] = (string) $service->servicetype;
    
                if (isset($service->style)) {
                    $_SESSION['app_services'][$k]['style'] = (string) $service->style;
                }
    
                $systemService = (string) $service->system_service;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                if ($systemService == 'false') {
    
    SNA's avatar
    SNA committed
                    $_SESSION['app_services'][$k]['system_service'] = false;
                } else {
                    $_SESSION['app_services'][$k]['system_service'] = true;
                }
                $_SESSION['app_services'][$k]['enabled'] = (string) $service->enabled;
                $l = 0;
                foreach ($service->WHEREAMIUSED as $whereAmIUsed) {
                    if (isset($whereAmIUsed)) {
                        $_SESSION['app_services'][$k]['whereamiused'][$l]['page'] = (string) $whereAmIUsed->page;
                        $_SESSION['app_services'][$k]['whereamiused'][$l]['nature'] = (string) $whereAmIUsed->nature;
                        if (isset($whereAmIUsed->button_label)) {
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['button_label'] = (string) $whereAmIUsed->button_label;
                        }
                        if (isset($whereAmIUsed->tab_label)) {
    
                            $label = (string) $whereAmIUsed->tab_label;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                            if (!empty($label) && defined($label)
                                && constant($label) != null
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                $label = constant($label);
    
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['tab_label'] = $label;
    
    SNA's avatar
    SNA committed
                        }
                        if (isset($whereAmIUsed->tab_order)) {
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['tab_order'] = (string) $whereAmIUsed->tab_order;
                        }
                        if (isset($whereAmIUsed->width)) {
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['width'] = (string) $whereAmIUsed->width;
                        }
                        if (isset($whereAmIUsed->frame_id)) {
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['frame_id'] = (string) $whereAmIUsed->frame_id;
                        }
                        if (isset($whereAmIUsed->height)) {
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['height'] = (string) $whereAmIUsed->height;
                        }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        if (isset($whereAmIUsed->scrolling)) {
    
    SNA's avatar
    SNA committed
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['scrolling'] = (string) $whereAmIUsed->scrolling;
                        }
                        if (isset($whereAmIUsed->style)) {
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['style'] = (string) $whereAmIUsed->style;
                        }
                        if (isset($whereAmIUsed->border)) {
                            $_SESSION['app_services'][$k]['whereamiused'][$l]['border'] = (string) $whereAmIUsed->border;
                        }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                        ++$l;
    
    SNA's avatar
    SNA committed
                    }
                }
                $m = 0;
                // Loads preprocess and postprocess
                foreach ($service->PROCESSINBACKGROUND as $processInBackground) {
                    $_SESSION['app_services'][$k]['processinbackground'][$m]['page'] = (string) $processInBackground->page;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    if ((string) $processInBackground->preprocess != '') {
    
    SNA's avatar
    SNA committed
                        $_SESSION['app_services'][$k]['processinbackground'][$m]['preprocess'] = (string) $processInBackground->preprocess;
                    }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    if ((string) $processInBackground->postprocess != '') {
    
    SNA's avatar
    SNA committed
                        $_SESSION['app_services'][$k]['processinbackground'][$m]['postprocess'] = (string) $processInBackground->postprocess;
                    }
                    $_SESSION['app_services'][$k]['processinbackground'][$m]['processorder'] = (string) $processInBackground->processorder;
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                    ++$m;
    
    SNA's avatar
    SNA committed
                }
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                ++$k;
    
    SNA's avatar
    SNA committed
            }
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Loads the services of each module into session.
         *
         * @param $modules array Enabled modules of the application
         */
    
    SNA's avatar
    SNA committed
        public function load_modules_services($modules)
        {
            // Browses the enabled modules array
    
            for ($i = 0; $i < count($modules); ++$i) {
    
    SNA's avatar
    SNA committed
                // Reads the module config.xml file
    
                $path = '';
                $moduleServiceXml = 'modules'.DIRECTORY_SEPARATOR.$modules[$i]['moduleid'].DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'services.xml';
    
                    'custom'.DIRECTORY_SEPARATOR . $_SESSION['custom_override_id'].DIRECTORY_SEPARATOR.$moduleServiceXml
    
                    $path = 'custom' .DIRECTORY_SEPARATOR.$_SESSION['custom_override_id'].DIRECTORY_SEPARATOR.$moduleServiceXml;
                } elseif (file_exists($moduleServiceXml)) {
                    $path = $moduleServiceXml;
    
    SNA's avatar
    SNA committed
                }
    
                if (!empty($path)) {
                    $xmlconfig = simplexml_load_file($path);
                    $k = 0;
                    $m = 0;
                    foreach ($xmlconfig->SERVICE as $service) {
                        if ((string) $service->enabled == 'true') {
                            $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['id'] = (string) $service->id;
                            $name = (string) $service->name;
                            if (!empty($name) && defined($name)
                                && constant($name) != null
                            ) {
                                $name = constant($name);
    
    SNA's avatar
    SNA committed
                            }
    
                            $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['name'] =
                                $name;
        
                            $comment = (string) $service->comment;
                            if (!empty($comment) && defined($comment)
                                && constant($comment) != null
                            ) {
                                $comment = constant($comment);
    
    SNA's avatar
    SNA committed
                            }
    
                            $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['comment'] =
                                $comment;
        
                            if (isset($service->servicepage)) {
                                $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['servicepage'] = (string) $service->servicepage;
    
    SNA's avatar
    SNA committed
                            }
    
                            $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['servicetype'] = (string) $service->servicetype;
        
                            if (isset($service->style)) {
                                $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['style'] = (string) $service->style;
    
    SNA's avatar
    SNA committed
                            }
    
                            $systemService = (string) $service->system_service;
                            if ($systemService == 'false') {
                                $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['system_service'] = false;
                            } else {
                                $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['system_service'] = true;
    
    SNA's avatar
    SNA committed
                            }
    
                            $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['enabled'] = (string) $service->enabled;
        
                            $l = 0;
                            foreach ($service->WHEREAMIUSED as $whereAmIUsed) {
                                $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['page'] = (string) $whereAmIUsed->page;
                                $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['nature'] = (string) $whereAmIUsed->nature;
                                if (isset($whereAmIUsed->button_label)) {
                                    $label = (string) $whereAmIUsed->button_label;
                                    if (!empty($label) && defined($label)
                                        && constant($label) != null
                                    ) {
                                        $label = constant($label);
                                    }
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['button_label'] =
                                        $label;
                                }
                                if (isset($whereAmIUsed->tab_label)) {
                                    $label = (string) $whereAmIUsed->tab_label;
                                    if (!empty($label) && defined($label)
                                        && constant($label) != null
                                    ) {
                                        $label = constant($label);
                                    }
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['tab_label'] =
                                        $label;
                                }
                                if (isset($whereAmIUsed->tab_order)) {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['tab_order'] = (string) $whereAmIUsed->tab_order;
                                }
                                if (isset($whereAmIUsed->frame_id)) {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['frame_id'] = (string) $whereAmIUsed->frame_id;
                                }
                                if (isset($whereAmIUsed->width)) {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['width'] = (string) $whereAmIUsed->width;
                                }
                                if (isset($whereAmIUsed->height)) {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['height'] = (string) $whereAmIUsed->height;
                                }
                                if (isset($whereAmIUsed->scrolling)) {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['scrolling'] = (string) $whereAmIUsed->scrolling;
                                }
                                if (isset($whereAmIUsed->style)) {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['style'] = (string) $whereAmIUsed->style;
                                }
                                if (isset($whereAmIUsed->border)) {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['whereamiused'][$l]['border'] = (string) $whereAmIUsed->border;
                                }
                                ++$l;
    
    SNA's avatar
    SNA committed
                            }
    
                            $m = 0;
                            foreach ($service->PROCESSINBACKGROUND as $processInBackground) {
                                $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['processinbackground'][$m]['page'] = (string) $processInBackground->page;
                                if ((string) $processInBackground->preprocess != '') {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['processinbackground'][$m]['preprocess'] = (string) $processInBackground->preprocess;
                                }
                                if ((string) $processInBackground->postprocess != '') {
                                    $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['processinbackground'][$m]['postprocess'] = (string) $processInBackground->postprocess;
                                }
                                $_SESSION['modules_services'][$modules[$i]['moduleid']][$k]['processinbackground'][$m]['processorder'] = (string) $processInBackground->processorder;
                                ++$m;
    
    SNA's avatar
    SNA committed
                            }
    
    SNA's avatar
    SNA committed
                        }
                    }
                }
            }
        }
    
        /**
    
    Alex ORLUC's avatar
    Alex ORLUC committed
         * Executes the module' s services in the page.
         *
         * @param $modules_services  array List of the module's services
         * @param $whereami  string Page where to execute the service
         * @param $servicenature string  Nature of the service (by default, the function takes all the services natures)
         * @param  $id_service string Identifier of one specific service (empty by default)
         * @param  $id_module string Identifier of one specific module (empty by default)
         */
        public function execute_modules_services($modules_services, $whereami, $servicenature = 'all', $id_service = '', $id_module = '')
    
    SNA's avatar
    SNA committed
        {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
            if (!empty($id_service) && !empty($id_module)) {
    
                for ($i = 0; $i < count($modules_services[$id_module]); ++$i) {
    
    SNA's avatar
    SNA committed
                    if ($modules_services[$id_module][$i]['id'] == $id_service
    
                        && isset($modules_services[$id_module][$i]['whereamiused'])
    
    SNA's avatar
    SNA committed
                    ) {
                        for ($k = 0; $k < count(
    
                            $modules_services[$id_module][$i]['whereamiused']
    
    SNA's avatar
    SNA committed
                        ) {
                            $name = $id = $width = $height = $frameborder = $scrolling = $style = '';
                            if ($modules_services[$id_module][$i]['whereamiused'][$k]['page'] == $whereami) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                if ($modules_services[$id_module][$i]['whereamiused'][$k]['nature'] == 'frame'
    
                                    && $_SESSION['user']['services'][$modules_services[$id_module][$i]['id']]
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                    && !in_array(
    
                                        $modules_services[$id_module][$i]['id'],
                                        $executedServices
                                    )
    
    SNA's avatar
    SNA committed
                                ) {
                                    array_push(
    
                                        $executedServices,
                                        $modules_services[$id_module][$i]['id']
    
    SNA's avatar
    SNA committed
                                    );
    
                                    if (isset(
    
                                        $modules_services[$id_module][$i]['whereamiused'][$k]['frame_id']
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                    ) && !empty(
    
                                        $modules_services[$id_module][$i]['whereamiused'][$k]['frame_id']
    
    SNA's avatar
    SNA committed
                                    ) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                        $name = 'name="'.$modules_services[$id_module][$i]['whereamiused'][$k]['frame_id'].'"';
    
                                        $modules_services[$id_module][$i]['whereamiused'][$k]['frame_id']
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                    ) && !empty(
    
                                            $modules_services[$id_module][$i]['whereamiused'][$k]['frame_id']
    
    SNA's avatar
    SNA committed
                                    ) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                        $id = 'id="'.$modules_services[$id_module][$i]['whereamiused'][$k]['frame_id'].'"';
    
                                        $modules_services[$id_module][$i]['whereamiused'][$k]['width']
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                    ) && strlen(
    
                                        $modules_services[$id_module][$i]['whereamiused'][$k]['width']
    
    SNA's avatar
    SNA committed
                                    ) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                        $width = 'width="'.$modules_services[$id_module][$i]['whereamiused'][$k]['width'].'" ';
    
                                        $modules_services[$id_module][$i]['whereamiused'][$k]['height']
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                    ) && strlen(
    
                                        $modules_services[$id_module][$i]['whereamiused'][$k]['height']
    
    SNA's avatar
    SNA committed
                                    ) {
    
    Alex ORLUC's avatar
    Alex ORLUC committed
                                        $height = 'height="'.$modules_services[$id_module][$i]['whereamiused'][$k]['height'].'"';