Project

General

Profile

wb-2_10_x / branches / main / framework / class.admin.php @ 10

1
<?php
2
/**
3
 *
4
 * @category        framewotk
5
 * @package         backend admin
6
 * @author          Ryan Djurovich, WebsiteBaker Project
7
 * @copyright       WebsiteBaker Org. e.V.
8
 * @link            http://websitebaker.org/
9
 * @license         http://www.gnu.org/licenses/gpl.html
10
 * @platform        WebsiteBaker 2.8.3
11
 * @requirements    PHP 5.3.6 and higher
12
 * @version         $Id: class.admin.php 2 2017-07-02 15:14:29Z Manuela $
13
 * @filesource      $HeadURL: svn://isteam.dynxs.de/wb/2.10.x/branches/main/framework/class.admin.php $
14
 * @lastmodified    $Date: 2017-07-02 17:14:29 +0200 (Sun, 02 Jul 2017) $
15
 *
16
 */
17
/* -------------------------------------------------------- */
18
// Must include code to stop this file being accessed directly
19
if(!defined('WB_PATH')) {
20
    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
21
    throw new IllegalFileException();
22
}
23
/* -------------------------------------------------------- */
24
if (!class_exists('wb', false)) {require(WB_PATH.'/framework/class.wb.php');}
25

    
26
// Get WB version
27
require_once(ADMIN_PATH.'/interface/version.php');
28

    
29
// Include EditArea wrapper functions
30
// require_once(WB_PATH . '/include/editarea/wb_wrapper_edit_area.php');
31
//require_once(WB_PATH . '/framework/SecureForm.php');
32

    
33

    
34
class admin extends wb {
35

    
36
    private $section_name;
37
    private $section_permission;
38

    
39
    // Authenticate user then auto print the header
40
    public function __construct($section_name= '##skip##', $section_permission = 'start', $auto_header = true, $auto_auth = true)
41
    {
42
        parent::__construct(1);
43
    if( $section_name != '##skip##' )
44
    {
45
        global $database, $MESSAGE;
46
        $database = @$GLOBALS['database'];
47
        // Specify the current applications name
48
        $this->section_name = $section_name;
49
        $this->section_permission = $section_permission;
50
        $maintance = ( defined( 'SYSTEM_LOCKED') && ( SYSTEM_LOCKED == true) ? true : false);
51
        // Authenticate the user for this application
52
        if($auto_auth == true)
53
        {
54
            // First check if the user is logged-in
55
            if($this->is_authenticated() == false)
56
            {
57
                header('Location: '.ADMIN_URL.'/login/index.php');
58
                exit(0);
59
            }
60

    
61
            // Now check if they are allowed in this section
62
            if($this->get_permission($section_permission) == false) {
63
                die($MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES']);
64
            }
65
        }
66
        if( ( $maintance == true) || $this->get_session( 'USER_ID') != 1) {
67
          //  check for show maintenance screen and terminate if needed
68
          $this->ShowMaintainScreen( 'locked');
69
        }
70

    
71
        // Check if the backend language is also the selected language. If not, send headers again.
72
        $sql  = 'SELECT `language` FROM `'.TABLE_PREFIX.'users` ';
73
        $sql .= 'WHERE `user_id`='.(int)$this->get_user_id();
74
        $user_language = $database->get_one($sql);
75
        $admin_folder = str_replace(WB_PATH, '', ADMIN_PATH);
76
        if((LANGUAGE != $user_language) && file_exists(WB_PATH .'/languages/' .$user_language .'.php')
77
            && strpos($_SERVER['SCRIPT_NAME'],$admin_folder.'/') !== false) {
78
            // check if page_id is set
79
            $page_id_url = (isset($_GET['page_id'])) ? '&page_id=' .(int) $_GET['page_id'] : '';
80
            $section_id_url = (isset($_GET['section_id'])) ? '&section_id=' .(int) $_GET['section_id'] : '';
81
            $sScriptUrl = $_SERVER['SCRIPT_NAME'];
82
            if(isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') { // check if there is an query-string
83
                header('Location: '.$sScriptUrl.'?lang='.$user_language .$page_id_url .$section_id_url.'&'.$_SERVER['QUERY_STRING']);
84
            } else {
85
                header('Location: '.$sScriptUrl.'?lang='.$user_language .$page_id_url .$section_id_url);
86
            }
87
            exit();
88
        }
89

    
90
        // Auto header code
91
        if($auto_header == true) {
92
            $this->print_header();
93
        }
94
    }
95
    }
96

    
97
    private function mysqlVersion() {
98
      global $database;
99
      $sql = 'SELECT VERSION( ) AS versionsinfo';
100
      if( $oRes = ($database->query($sql)) ) {
101
          $aRes = $oRes->fetchRow(MYSQLI_ASSOC);
102
          return $aRes['versionsinfo'];
103
      }
104
      return 0;
105
    }
106

    
107
    private function mysqlStrict() {
108
      global $database;
109
      $retVal ='';
110
      $sql = 'SELECT @@global.sql_mode AS strictinfo';
111
      if( $oRes = ($database->query($sql)) ) {
112
          $aRes = $oRes->fetchRow(MYSQLI_ASSOC);
113
          $retVal = $aRes['strictinfo'];
114
      }
115
      return is_numeric( strpos( $retVal,'STRICT' ) );
116
    }
117

    
118
    public function print_info (){
119
        global $MENU, $MESSAGE, $TEXT, $database;
120
// Create new template object with phplib
121
        $oTpl = new Template(dirname($this->correct_theme_source('call_help.htt')));
122
        $oTpl->set_file('page', 'call_help.htt');
123
        $oTpl->set_block('page', 'main_block', 'main');
124
        $aLang = array(
125
            'CANCEL' => $TEXT['CANCEL'],
126
            'TITLE_INFO' => 'WebsiteBaker System-Info',
127

    
128
        );
129
        $aTplDefaults = array(
130
            'ADMIN_URL' => ADMIN_URL.'',
131
            'INFO_URL' => ADMIN_URL.'/start/wb_info.php',
132
            'sAddonThemeUrl' => THEME_URL.'',
133
        );
134
        $oTpl->set_var($aLang);
135
        $oTpl->set_var($aTplDefaults);
136
/*-- finalize the page -----------------------------------------------------------------*/
137
        $oTpl->parse('main', 'main_block', false);
138
        $oTpl->pparse('output', 'page');
139

    
140
    }
141

    
142
    // Print the admin header
143
    public function print_header($body_tags = '') {
144
        // Get vars from the language file
145
        global $MENU, $MESSAGE, $TEXT, $database;
146
        // Connect to database and get website title
147
        // $GLOBALS['FTAN'] = $this->getFTAN();
148
//        $this->createFTAN();
149
        $sql = 'SELECT `value` FROM `'.TABLE_PREFIX.'settings` '
150
             . 'WHERE `name`=\'website_title\'';
151
        $get_title = $database->query($sql);
152
        $aWebsiteTitle= $get_title->fetchRow( MYSQLI_ASSOC );
153
        // Setup template object, parse vars to it, then parse it
154
        $header_template = new Template(dirname($this->correct_theme_source('header.htt')));
155
        $header_template->set_file('page', 'header.htt');
156
        $header_template->set_block('page', 'header_block', 'header');
157
        if(defined('DEFAULT_CHARSET')) {
158
            $charset=DEFAULT_CHARSET;
159
        } else {
160
            $charset='utf-8';
161
        }
162

    
163
        // work out the URL for the 'View menu' link in the WB backend
164
        // if the page_id is set, show this page otherwise show the root directory of WB
165
        $view_url = WB_URL;
166
        $info_url = ($this->get_user_id()==1 ? ADMIN_URL.'/start/info.php':ADMIN_URL);
167
        if(isset($_GET['page_id'])) {
168
            // extract page link from the database
169
            $sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` '
170
                 . 'WHERE `page_id`='.intval($_GET['page_id']);
171
            $result = @$database->query($sql);
172
            $row = @$result->fetchRow( MYSQLI_ASSOC );
173
            if($row) $view_url .= PAGES_DIRECTORY .$row['link']. PAGE_EXTENSION;
174
        }
175

    
176

    
177
        $convertToReadableSize = function ($size){
178
          $base = log($size) / log(1024);
179
          $suffix = array("", " KB", " MB", " GB", " TB");
180
          $f_base = floor($base);
181
          return round(pow(1024, $base - floor($base)), 1) . $suffix[$f_base];
182
        };
183

    
184
        $sIconPost = '0';
185
        $aFileStat = array();
186
        $sErrorlogFile = WB_PATH.'/var/logs/php_error.log.php';
187
        $sErrorlogUrl  = WB_URL.'/var/logs/php_error.log.php';
188
        if (is_readable($sErrorlogFile)){
189
            clearstatcache($sErrorlogFile);
190
            $iFileSize = filesize($sErrorlogFile);
191
            $sIconPost = (($iFileSize>3000)?'1':'0');
192
        }
193
        $header_template->set_var('ERROR_SIZE', $convertToReadableSize($iFileSize)); //
194
//        $header_template->set_var('ERROR_MSG', $sErrorlogMsg); //
195
        $header_template->set_var('ERROR_LOG', $sErrorlogUrl); // $sErrorlogUrl
196
        $header_template->set_var('POST',$sIconPost);
197

    
198
        $datalist['Header'] =
199
                      array(
200
                            'FTAN_GET' => ( DEBUG ? $this->getFTAN('GET') : '' ),
201
                            'SECTION_NAME'        => $MENU[strtoupper($this->section_name)],
202
                            'TEMPLATE_DIR'        => DEFAULT_THEME,
203
                            'STYLE'               => strtolower($this->section_name),
204
                            'BODY_TAGS'           => $body_tags,
205
                            'WEBSITE_TITLE'       => ($aWebsiteTitle['value']),
206
                            'TEXT_ADMINISTRATION' => $TEXT['ADMINISTRATION'],
207
                            'CURRENT_USER'        => $MESSAGE['START_CURRENT_USER'],
208
                            'DISPLAY_NAME'        => $this->get_display_name(),
209
                            'CHARSET'             => $charset,
210
                            'LANGUAGE'            => strtolower(LANGUAGE),
211
                            'WB_URL'              => WB_URL,
212
                            'ADMIN_URL'           => ADMIN_URL,
213
                            'THEME_URL'           => THEME_URL,
214
                            'TEMPLATE'            => defined('TEMPLATE')?TEMPLATE:DEFAULT_TEMPLATE,
215
                            'EDITOR'              => WYSIWYG_EDITOR,
216
                            'TITLE_START'         => $MENU['START'],
217
                            'TITLE_VIEW'          => $MENU['VIEW'],
218
                            'TITLE_HELP'          => $MENU['HELP'],
219
                            'TITLE_INFO'          => 'WebsiteBaker System-Info',
220
                            'TITLE_LOGOUT'        =>  $MENU['LOGOUT'],
221
                            'URL_VIEW'            => $view_url,
222
                            'INFO_URL'            => $info_url,
223
                            'URL_HELP'            => 'http://help.websitebaker.org/',
224
                            'BACKEND_MODULE_CSS'  => $this->register_backend_modfiles('css'),    // adds backend.css
225
                            'BACKEND_MODULE_JS'   => $this->register_backend_modfiles('js')      // adds backend.js
226
                        );
227

    
228
/*------------------------------------------------------------------------------------*/
229
    $header_template->set_var($datalist['Header'] );
230
    $header_template->set_block( 'header_block', 'maintenance_block', 'maintenance');
231
    if( $this->get_user_id() == 1) {
232

    
233
      $sys_locked = ( ( ( int)( defined( 'SYSTEM_LOCKED') ? SYSTEM_LOCKED : 0)) == 1);
234
      $header_template->set_var( 'MAINTENANCE_MODE', ( $sys_locked ? $this->_oTrans->TEXT_MAINTENANCE_OFF :
235
        $this->_oTrans->TEXT_MAINTENANCE_ON));
236
      $header_template->set_var( 'MAINTENANCE_ICON', THEME_URL.'/images/'.( $sys_locked ? 'lock' :
237
        'unlock').'.png');
238
      $header_template->set_var( 'MAINTAINANCE_URL', ADMIN_URL.'/settings/locking.php');
239
      $header_template->parse( 'maintenance', 'maintenance_block', true);
240
    } else {
241
      $header_template->set_block( 'maintenance_block', '');
242
    }
243
/*------------------------------------------------------------------------------------*/
244

    
245
        // Create the backend menu
246
        $aMenu = array(
247
//                    array(ADMIN_URL.'/start/index.php',               '', $MENU['START'],       'start',       1),
248
                    array(ADMIN_URL.'/pages/index.php',               '', $MENU['PAGES'],       'pages',       1),
249
                    array(ADMIN_URL.'/media/index.php',               '', $MENU['MEDIA'],       'media',       1),
250
                    array(ADMIN_URL.'/addons/index.php',              '', $MENU['ADDONS'],      'addons',      1),
251
                    array(ADMIN_URL.'/preferences/index.php',         '', $MENU['PREFERENCES'], 'preferences', 0),
252
                    array(ADMIN_URL.'/settings/index.php?advanced=0', '', $MENU['SETTINGS'],    'settings',    1),
253
                    array(ADMIN_URL.'/admintools/index.php',          '', $MENU['ADMINTOOLS'],  'admintools',  1),
254
                    array(ADMIN_URL.'/access/index.php',              '', $MENU['ACCESS'],      'access',      1),
255
                    );
256
        $header_template->set_block('header_block', 'linkBlock', 'link');
257
        foreach($aMenu AS $menu_item)
258
        {
259
            $link = $menu_item[0];
260
            $target = ($menu_item[1] == '') ? '_self' : $menu_item[1];
261
            $titleMenu = $menu_item[2];
262
            $permission_title = $menu_item[3];
263
            $required = $menu_item[4];
264
            $replace_old = array(ADMIN_URL, WB_URL, '/', 'index.php');
265
            if ($required == false || $this->get_link_permission($permission_title)) {
266
                $header_template->set_var('LINK', $link);
267
                $header_template->set_var('TARGET', $target);
268
                // If link is the current section apply a class name
269
                if ($permission_title == strtolower($this->section_name)) {
270
                    $info_url = ($this->get_user_id()==1 ? ADMIN_URL.'/start/info.php?url='.$link:ADMIN_URL);
271
                    $header_template->set_var('CLASS', $menu_item[3] . ' current');
272
                } else {
273
                    $header_template->set_var('CLASS', $menu_item[3]);
274
                }
275
                $header_template->set_var('TITLE', $titleMenu);
276
                // Print link
277
                $header_template->parse('link', 'linkBlock', true);
278
                $header_template->set_block('header_block', 'infoBlockBasis',   'infoBasis');
279
                $header_template->set_block('header_block', 'infoBlockExented', 'infoExented');
280

    
281
                $header_template->set_block('header_block', 'button_info_block', 'button_info');
282
                $bCanShowInfoBlock = (DEBUG&&$this->ami_group_member('1') || ($this->get_user_id()=='1'));
283
                if (!$bCanShowInfoBlock){
284
                    $header_template->set_block('button_info', '');
285
                } else {
286
                    $header_template->parse('button_info', 'button_info_block', true);
287
                }
288
                if ((strtolower($this->section_name) == 'admintools') && (!$bCanShowInfoBlock))
289
                {
290
//                    print ($this->section_name).'<br />';
291
                    $header_template->set_block('infoBasis', '');
292
                    $header_template->set_var( array(
293
                                        'VERSION'             => WB_VERSION,
294
                                        'SP'                  => (defined('WB_SP') ? WB_SP : ''),
295
                                        'REVISION'            => WB_REVISION,
296
                                        'PHP_VERSION'         => phpversion(),
297
                                        'TEXT_EXT_INFO'       => 'SQL  Server:',
298
                                        'EXT_INFO'            => $this->mysqlVersion(),
299
                                        'EXT_INFO1'           => ( ($this->mysqlStrict())?'STRICT': 'NON STRICT' ),
300
                                    ) );
301

    
302
                    $header_template->parse('infoExented', 'infoBlockExented', true);
303
                } else {
304
//                    print '<b>'.$menu_item[3].'/<b><br />';
305
//                    $header_template->set_block('infoExented', '');
306
                    $header_template->set_block('infoExented', '');
307
                    $header_template->set_var( array(
308
                                        'VERSION'             => VERSION,
309
                                        'SP'                  => (defined('SP') ? SP : ''),
310
                                        'REVISION'            => REVISION,
311
                                        'PHP_VERSION'         => phpversion(),
312
                                        'SERVER_ADDR'         => ($this->get_user_id() == 1
313
                                                                   ? (!isset($_SERVER['SERVER_ADDR'])
314
                                                                      ? '127.0.0.1'
315
                                                                      : $_SERVER['SERVER_ADDR'])
316
                                                                  : ''),
317
                                    ) );
318
                    $header_template->parse('infoBasis', 'infoBlockBasis', true);
319
                }
320
            }
321
        }
322

    
323
        $header_template->parse('header', 'header_block', false);
324
        $header_template->pparse('output', 'page');
325
    }
326

    
327
    // Print the admin footer
328
        public function print_footer($activateJsAdmin = false) {
329
        // include the required file for Javascript admin
330
        if($activateJsAdmin != false) {
331
            if(file_exists(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php')){
332
                @include_once(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php');
333
            }
334
        }
335

    
336
        // Setup template object, parse vars to it, then parse it
337
        $footer_template = new Template(dirname($this->correct_theme_source('footer.htt')));
338
        $footer_template->set_file('page', 'footer.htt');
339
        $footer_template->set_block('page', 'footer_block', 'header');
340
        $footer_template->set_var(array(
341
                        'BACKEND_BODY_MODULE_JS' => $this->register_backend_modfiles_body('js'),
342
                        'WB_URL' => WB_URL,
343
                        'ADMIN_URL' => ADMIN_URL,
344
                        'THEME_URL' => THEME_URL,
345
                        'INFO_URL' =>  ADMIN_URL.'/start/wb_info.php',
346
             ) );
347
        $footer_template->parse('header', 'footer_block', false);
348
        $footer_template->pparse('output', 'page');
349
    }
350

    
351
    // Return a system permission
352
    public function get_permission($name, $type = 'system') {
353
        // Append to permission type
354
        $type .= '_permissions';
355
        // Check if we have a section to check for
356
        if($name == 'start') {
357
            return true;
358
        } else {
359
            // Set system permissions var
360
            $system_permissions = $this->get_session('SYSTEM_PERMISSIONS');
361
            // Set module permissions var
362
            $module_permissions = $this->get_session('MODULE_PERMISSIONS');
363
            // Set template permissions var
364
            $template_permissions = $this->get_session('TEMPLATE_PERMISSIONS');
365
            // Return true if system perm = 1
366
            if (isset($$type) && is_array($$type) && is_numeric(array_search($name, $$type))) {
367
                if($type == 'system_permissions') {
368
                    return true;
369
                } else {
370
                    return false;
371
                }
372
            } else {
373
                if($type == 'system_permissions') {
374
                    return false;
375
                } else {
376
                    return true;
377
                }
378
            }
379
        }
380
    }
381

    
382
 public function get_user_details($user_id) {
383
  global $database;
384
  $retval = array('username'=>'unknown','display_name'=>'Unknown','email'=>'');
385
  $sql  = 'SELECT `username`,`display_name`,`email` ';
386
  $sql .= 'FROM `'.TABLE_PREFIX.'users` ';
387
  $sql .= 'WHERE `user_id`='.(int)$user_id;
388
  if( ($resUsers = $database->query($sql)) ) {
389
   if( ($recUser = $resUsers->fetchRow(MYSQLI_ASSOC)) ) {
390
    $retval = $recUser;
391
   }
392
  }
393
  return $retval;
394
 }
395

    
396
    //
397
    public function get_section_details( $section_id, $backLink = 'index.php' ) {
398
    global $database, $TEXT;
399
        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'sections` ';
400
        $sql .= 'WHERE `section_id`='.intval($section_id);
401
        if(($resSection = $database->query($sql))){
402
            if(!($recSection = $resSection->fetchRow(MYSQLI_ASSOC))) {
403
                $this->print_header();
404
                $this->print_error($TEXT['SECTION'].' '.$TEXT['NOT_FOUND'], $backLink, true);
405
            }
406
            } else {
407
                $this->print_header();
408
                $this->print_error($database->get_error(), $backLink, true);
409
            }
410
        return $recSection;
411
    }
412

    
413
    public function get_page_details( $page_id, $backLink = 'index.php' ) {
414
        global $database, $TEXT;
415
        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'pages` ';
416
        $sql .= 'WHERE `page_id`='.intval($page_id);
417
        if(($resPages = $database->query($sql))){
418
            if(!($recPage = $resPages->fetchRow(MYSQLI_ASSOC))) {
419
            $this->print_header();
420
            $this->print_error($TEXT['PAGE'].' '.$TEXT['NOT_FOUND'], $backLink, true);
421
            }
422
        } else {
423
            $this->print_header();
424
            $this->print_error($database->get_error(), $backLink, true);
425
        }
426
        return $recPage;
427
    }
428

    
429
    public function get_page_permission($page,$action='admin') {
430
        if($action != 'viewing') { $action = 'admin'; }
431
        $action_groups = $action.'_groups';
432
        $action_users  = $action.'_users';
433
        $groups = $users = '0';
434
        if(is_array($page)) {
435
            $groups = $page[$action_groups];
436
            $users  = $page[$action_users];
437
        } else {
438
            global $database;
439
            $sql  = 'SELECT `'.$action_groups.'`,`'.$action_users.'` ';
440
            $sql .= 'FROM `'.TABLE_PREFIX.'pages` ';
441
            $sql .= 'WHERE `page_id`='.(int)$page;
442
            if( ($res = $database->query($sql)) ) {
443
                if( ($rec = $res->fetchRow(MYSQLI_ASSOC)) ) {
444
                    $groups = $rec[$action_groups];
445
                    $users  = $rec[$action_users];
446
                }
447
            }
448
        }
449
        return ($this->ami_group_member($groups) || $this->is_group_match($this->get_user_id(), $users));
450
    }
451

    
452
    // Returns a system permission for a menu link
453
    public function get_link_permission($title) {
454
        $title = str_replace('_blank', '', $title);
455
        $title = strtolower($title);
456
        // Set system permissions var
457
        $system_permissions = $this->get_session('SYSTEM_PERMISSIONS');
458
        // Set module permissions var
459
        $module_permissions = $this->get_session('MODULE_PERMISSIONS');
460
        if($title == 'start') {
461
            return true;
462
        } else {
463
            // Return true if system perm = 1
464
            if(is_numeric(array_search($title, $system_permissions))) {
465
                return true;
466
            } else {
467
                return false;
468
            }
469
        }
470
    }
471

    
472
    // Function to add optional module Javascript or CSS stylesheets into the <body> section of the backend
473
    public function register_backend_modfiles_body($file_id="js")
474
    {
475
        $sCallingScript = $_SERVER['SCRIPT_NAME'];
476
        $AcpDir = str_replace('\\','/', ADMIN_PATH).'/';
477
        if( preg_match( '/'.'pages\/(settings|sections)\.php$/is', $sCallingScript)) {
478
          return;
479
        }
480
        // sanity check of parameter passed to the function
481
        $file_id = strtolower($file_id);
482
        if($file_id !== "javascript" && $file_id !== "js")
483
        {
484
            return;
485
        }
486
        global $database;
487
        $body_links = "";
488
        // define default baselink and filename for optional module javascript and stylesheet files
489
        if($file_id == "js") {
490
            $base_link = '<script src="'.WB_URL.'/modules/{MODULE_DIRECTORY}/backend_body.js" type="text/javascript"></script>';
491
            $base_file = "backend_body.js";
492
        }
493
        // check if backend_body.js files needs to be included to the <body></body> section of the backend
494
        if(isset($_GET['tool']))
495
        {
496
            // check if displayed page contains a installed admin tool
497
            $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` ';
498
            $sql .= 'WHERE `type`=\'module\' AND `function`=\'tool\' AND `directory`=\''.$database->escapeString($_GET['tool']).'\'';
499
            $result = $database->query($sql);
500
            if($result->numRows())
501
            {
502
                // check if admin tool directory contains a backend_body.js file to include
503
                $tool = $result->fetchRow(MYSQLI_ASSOC);
504
                if(file_exists(WB_PATH .'/modules/' .$tool['directory'] .'/'.$base_file))
505
                {
506
                    // return link to the backend_body.js file
507
                    return str_replace('{MODULE_DIRECTORY}', $tool['directory'], $base_link);
508
                }
509
            }
510
        } elseif(isset($_GET['page_id']) || isset($_POST['page_id']))
511
        {
512
            // check if displayed page in the backend contains a page module
513
            if (isset($_GET['page_id']))
514
            {
515
                $page_id = (int) $database->escapeString($_GET['page_id']);
516
            } else {
517
                $page_id = (int) $database->escapeString($_POST['page_id']);
518
            }
519
            // gather information for all models embedded on actual page
520
            $sql = 'SELECT DISTINCT `module` FROM `'.TABLE_PREFIX.'sections` WHERE `page_id`='.(int)$page_id;
521
            $query_modules = $database->query($sql);
522
            while($row = $query_modules->fetchRow(MYSQLI_ASSOC)) {
523
                // check if page module directory contains a backend_body.js file
524
                if(file_exists(WB_PATH .'/modules/' .$row['module'] .'/'.$base_file)) {
525
                    // create link with backend_body.js source for the current module
526
                    $tmp_link = str_replace("{MODULE_DIRECTORY}", $row['module'], $base_link);
527
                    // ensure that backend_body.js is only added once per module type
528
                    if(strpos($body_links, $tmp_link) === false) {
529
                        $body_links .= $tmp_link ."\n";
530
                    }
531
                }
532
            }
533
            // write out links with all external module javascript/CSS files, remove last line feed
534
            return rtrim($body_links);
535
        }
536
    }
537

    
538

    
539
    // Function to add optional module Javascript or CSS stylesheets into the <head> section of the backend  preg_quote($AcpDir,'/').
540
    public function register_backend_modfiles($file_id="css") {
541
        $sCallingScript = $_SERVER['SCRIPT_NAME'];
542
        $AcpDir = str_replace('\\','/', ADMIN_PATH).'/';
543
        if( preg_match( '/'.'pages\/(settings|sections)\.php$/is', $sCallingScript)) {
544
          return;
545
        }
546
        // sanity check of parameter passed to the function
547
        $file_id = strtolower($file_id);
548
        if($file_id !== "css" && $file_id !== "javascript" && $file_id !== "js") {
549
            return;
550
        }
551

    
552
        global $database;
553
        // define default baselink and filename for optional module javascript and stylesheet files
554
        $head_links = "";
555
        if($file_id == "css") {
556
          $base_link = '<link href="'.WB_URL.'/modules/{MODULE_DIRECTORY}/backend.css"';
557
            $base_link.= ' rel="stylesheet" type="text/css" media="screen" />';
558
            $base_file = "backend.css";
559
        } else {
560
            $base_link = '<script src="'.WB_URL.'/modules/{MODULE_DIRECTORY}/backend.js" type="text/javascript"></script>';
561
            $base_file = "backend.js";
562
        }
563

    
564
        // check if backend.js or backend.css files needs to be included to the <head></head> section of the backend
565
        if(isset($_GET['tool'])) {
566
            // check if displayed page contains a installed admin tool
567
            $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` ';
568
            $sql .= 'WHERE `type`=\'module\' AND `function`=\'tool\' AND `directory`=\''.$database->escapeString($_GET['tool']).'\'';
569
            $result = $database->query($sql);
570
            if($result->numRows()) {
571
                // check if admin tool directory contains a backend.js or backend.css file to include
572
                $tool = $result->fetchRow(MYSQLI_ASSOC);
573
                if(file_exists(WB_PATH .'/modules/' .$tool['directory'] .'/'.$base_file)) {
574
                    // return link to the backend.js or backend.css file
575
                    return str_replace("{MODULE_DIRECTORY}", $tool['directory'], $base_link);
576
                }
577
            }
578
        } elseif(isset($_GET['page_id']) || isset($_POST['page_id'])) {
579
            // check if displayed page in the backend contains a page module
580
            if (isset($_GET['page_id'])) {
581
                $page_id = (int)$_GET['page_id'];
582
            } else {
583
                $page_id = (int)$_POST['page_id'];
584
            }
585
            // gather information for all models embedded on actual page
586
            $sql = 'SELECT `module` FROM `'.TABLE_PREFIX.'sections` WHERE `page_id`='.(int)$page_id;
587
            $query_modules = $database->query($sql);
588
            while($row = $query_modules->fetchRow(MYSQLI_ASSOC)) {
589
//                if ($row['module']=='wysiwyg') {$row['module']=WYSIWYG_EDITOR;}
590
                // check if page module directory contains a backend.js or backend.css file
591
                if(file_exists(WB_PATH .'/modules/' .$row['module'] .'/'.$base_file))
592
                {
593
                    // create link with backend.js or backend.css source for the current module
594
                    $tmp_link = str_replace("{MODULE_DIRECTORY}", $row['module'], $base_link);
595
                    // ensure that backend.js or backend.css is only added once per module type
596
                    if(strpos($head_links, $tmp_link) === false) {
597
                        $head_links .= $tmp_link ."\n";
598
                    }
599
                }
600
            }
601
            // write out links with all external module javascript/CSS files, remove last line feed
602
            return rtrim($head_links);
603
        }
604
    }
605
}