name(); $AJAX_ACP = defined('AJAX_ACP'); $config['enable_captcha'] = ! defined('STOP_CAPTCHA'); //for security if (! $username) { is_array($plugin_run_result = Plugins::getInstance()->run('user_not_admin_admin_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook redirect(PATH . 'ucp.php?go=login&return=' . urlencode(ADMIN_PATH . '?cp=' . $go_to)); } elseif (! user_can('enter_acp')) { $usrcp->logout_cp(); redirect($config['siteurl']); } //get language of admin get_lang('acp'); // //need to login again // if ( (empty($_SESSION['ADMINLOGIN']) || $_SESSION['ADMINLOGIN'] != md5(sha1($config['h_key']) . $usrcp->name() . $config['siteurl'])) || (empty($_SESSION['USER_SESS']) || $_SESSION['USER_SESS'] != KJ_SESSION) || (empty($_SESSION['ADMINLOGIN_T']) || $_SESSION['ADMINLOGIN_T'] < time()) ) { if (ig('go') && g('go') == 'login') { if (ip('submit')) { //login $ERRORS = []; $pass_field = 'lpass_' . preg_replace('/[^0-9]/', '', sha1(KJ_SESSION . sha1($config['h_key']) . p('kid'))); if (! empty($_SESSION['SHOW_CAPTCHA'])) { if (! kleeja_check_captcha()) { $ERRORS[] = $lang['WRONG_VERTY_CODE']; } } if (empty(p('lname')) || empty(p($pass_field))) { $ERRORS[] = $lang['EMPTY_FIELDS']; } elseif (! user_can('enter_acp')) { $ERRORS[] = $lang['U_NOT_ADMIN']; } elseif (! kleeja_check_form_key('admin_login')) { $ERRORS[] = $lang['INVALID_FORM_KEY']; } is_array($plugin_run_result = Plugins::getInstance()->run('admin_login_submit', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook if (empty($ERRORS)) { if ($f = $usrcp->data(p('lname'), p($pass_field), false, 3600*6, true)) { $_SESSION['USER_SESS'] = KJ_SESSION; $_SESSION['ADMINLOGIN'] = md5(sha1($config['h_key']) . $usrcp->name() . $config['siteurl']); //to make sure, sometime setting time from functions doesn't work $_SESSION['ADMINLOGIN_T'] = time() + 18000; unset($_SESSION['SHOW_CAPTCHA']); redirect('./' . basename(ADMIN_PATH) . '?cp=' . $go_to); $SQL->close(); exit; } else { //Wrong entries $ERRORS[] = $lang['LOGIN_ERROR']; $_SESSION['SHOW_CAPTCHA'] = function_exists('gd_info') && ! defined('STOP_CAPTCHA'); } } //let's see if there is errors if (sizeof($ERRORS)) { $errs = ''; foreach ($ERRORS as $r) { $errs .= '- ' . $r . '.
'; } } } } //show template login . $action = './' . basename(ADMIN_PATH) . '?go=login&cp=' . $go_to; $H_FORM_KEYS = kleeja_add_form_key('admin_login'); $KEY_FOR_WEE = sha1(microtime() . sha1($config['h_key'])); $KEY_FOR_PASS = preg_replace('/[^0-9]/', '', sha1(KJ_SESSION . sha1($config['h_key']) . $KEY_FOR_WEE)); $not_you = sprintf($lang['USERNAME_NOT_YOU'], '', ''); $show_captcha = ! empty($_SESSION['SHOW_CAPTCHA']); $extra_header_admin_login = ''; $err = false; if (! empty($errs)) { $err = true; } is_array($plugin_run_result = Plugins::getInstance()->run('before_display_template_admin_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook header('HTTP/1.0 401 Unauthorized'); if (ig('_ajax_') || ig('check_msgs')) { echo_ajax(401, $lang['HV_NOT_PRVLG_ACCESS']); } else { echo $tpl->display('admin_login'); } $SQL->close(); exit; }//end login //ummm let's say it's illegal action if ($_SERVER['REQUEST_METHOD'] == 'POST' && defined('STOP_CSRF')) { $t_reff = explode('/', $_SERVER['HTTP_REFERER']); $t_host = explode('/', $_SERVER['HTTP_HOST']); if ($t_reff[2] != $t_host[0]) { $usrcp->logout_cp(); redirect($config['siteurl']); $SQL->close(); exit; } } //current admin theme color if (ig('change_theme')) { $admin_theme_color = g('change_theme', 'str', 'dark'); if (in_array($admin_theme_color, ['dark', 'light'])) { $usrcp->kleeja_set_cookie('klj_adm_theme_color', $admin_theme_color, time() + 31536000); } else { $admin_theme_color = 'dark'; } } else { if (! ($admin_theme_color = $usrcp->kleeja_get_cookie('klj_adm_theme_color'))) { $admin_theme_color = 'dark'; } } //last visit $last_visit = $usrcp->last_visit(); $last_visit = $last_visit && preg_match('/[0-9]{10}/', $last_visit) ? kleeja_date($last_visit) : false; // //exceptional //it won't be included in the menu list // $ext_expt = [ 'start', 'b_lgoutcp', 'i_exts' ]; //confirm message $ext_confirm = []; //formkey extension, CSRF protection $GET_FORM_KEY_GLOBAL = kleeja_add_form_key_get('GLOBAL_FORM_KEY'); $ext_formkey = []; //default icons $ext_icons = [ 'configs' => 'sliders', 'files' => 'folder-open-o', 'img_ctrl' => 'image', 'calls' => 'envelope', 'reports' => 'bell', 'users' => 'user-o', 'search' => 'search', 'plugins' => 'plug', 'ban' => 'minus-circle', 'rules' => 'institution', 'styles' => 'paint-brush', 'extra' => 'window-restore', 'check_update' => 'download', 'repair' => 'wrench', ]; // //We hide list of admin menu and show only if there is auth. // $SHOW_LIST = true; //get adm extensions $adm_extensions = []; if (($dh = @opendir(ADM_FILES_PATH)) !== false) { while (($file = readdir($dh)) !== false) { if (strpos($file, '.php') !== false) { $adm_extensions[] = str_replace('.php', '', $file); } } closedir($dh); } //no extensions ? if (! $adm_extensions || ! is_array($adm_extensions)) { if (ig('_ajax_')) { echo_ajax(888, 'Error while loading admin extensions!.'); } big_error('No Extensions', 'Error while loading admin extensions !'); } is_array($plugin_run_result = Plugins::getInstance()->run('begin_admin_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook /** * Exception of 406 ! dirty hosting * 'configs' word listed as dangrous requested word * so we replaced this word with 'options' instead. */ if ($go_to == 'options') { $go_to = 'a_configs'; } //no request or wrong ! if (! $go_to || empty($go_to) || ! in_array($go_to, $adm_extensions)) { $go_to = 'start'; } //make array for menu $adm_extensions_menu = $adm_topmenu = []; //sort the items as alphabetic ! sort($adm_extensions); $i = 0; $cr_time = $usrcp->last_visit() > 0 ? $usrcp->last_visit() : time() - 3600*12; // check calls and reports numbers if (ig('check_msgs') || ! ig('_ajax_')): //small bubble system //any item can show what is inside it as unread messages $kbubbles = []; //for calls and reports foreach (['call'=>'calls', 'reports'=>'reports'] as $table=>$n) { $query = [ 'SELECT' => 'COUNT(' . $table[0] . '.id) AS total_rows', 'FROM' => "`{$dbprefix}" . $table . '` ' . $table[0] ]; $fetched = $SQL->fetch_array($SQL->build($query)); $kbubbles[$n] = $fetched['total_rows']; $SQL->freeresult(); } //if ajax, echo differntly if (ig('check_msgs')) { $SQL->close(); exit($kbubbles['calls'] . '::' . $kbubbles['reports']); } //add your own bubbles here is_array($plugin_run_result = Plugins::getInstance()->run('kbubbles_admin_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook endif; foreach ($adm_extensions as $m) { //some exceptions if (@in_array($m, $ext_expt)) { continue; } is_array($plugin_run_result = Plugins::getInstance()->run('foreach_ext_admin_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook $s = $m; $m = isset($m[1]) && $m[1] == '_' ? substr($m, 2) : $m; ++$i; $adm_extensions_menu[$i] = [ 'm' => $m, 'i' => $i+1, 'i2' => $i+2, 'icon' => ! empty($ext_icons[$m]) ? $ext_icons[$m] : 'puzzle-piece', 'lang' => ! empty($lang['R_' . strtoupper($m)]) ? $lang['R_' . strtoupper($m)] : (! empty($olang['R_' . strtoupper($m)]) ? $olang['R_' . strtoupper($m)] : strtoupper($m)), 'link' => './' . basename(ADMIN_PATH) . '?cp=' . ($m == 'configs' ? 'options' : $s) . (@in_array($m, $ext_formkey) ? '&' . $GET_FORM_KEY_GLOBAL : ''), 'confirm' => (@in_array($m, $ext_confirm)) ? true : false, 'current' => ($s == $go_to) ? true : false, 'goto' => str_replace('a_configs', 'options', $s), 'bubble' => ! emptY($kbubbles[$m]) ? '' : '', 'counter' => ! emptY($kbubbles[$m]) ? $kbubbles[$m] : '' ]; //add another item to array for title='' in href or other thing $adm_extensions_menu[$i]['title'] = $adm_extensions_menu[$i]['lang']; is_array($plugin_run_result = Plugins::getInstance()->run('endforeach_ext_admin_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook } //to attach kleeja version in the menu start item $assigned_klj_ver = preg_replace('!#([a-z0-9]+)!', '', KLEEJA_VERSION); //for plugins $styleePath = null; //get it if (file_exists(ADM_FILES_PATH . '/' . $go_to . '.php')) { $include = true; is_array($plugin_run_result = Plugins::getInstance()->run("require_admin_page_begin_{$go_to}", get_defined_vars())) ? extract($plugin_run_result) : null; //run hook if ($include) { include_once ADM_FILES_PATH . '/' . $go_to . '.php'; } is_array($plugin_run_result = Plugins::getInstance()->run("require_admin_page_end_{$go_to}", get_defined_vars())) ? extract($plugin_run_result) : null; //run hook } else { $include_alternative = null; is_array($plugin_run_result = Plugins::getInstance()->run("not_exists_{$go_to}", get_defined_vars())) ? extract($plugin_run_result) : null; //run hook if (! empty($include_alternative) && file_exists($include_alternative)) { include_once $include_alternative; } else { if (ig('_ajax_')) { echo_ajax(888, 'Error while loading : ' . $go_to); } big_error('In Loading !', 'Error while loading : ' . $go_to); } } //no style defined if (empty($stylee)) { $text = $lang['NO_TPL_SHOOSED']; $stylee = 'admin_info'; } $go_menu_html = ''; if (isset($go_menu)) { foreach ($go_menu as $m=>$d) { $go_menu_html .= '
  • ' . '' . $d['name'] . '
  • '; } } //add extra html to header or footer $extra_admin_header_code = $extra_admin_footer_code = ''; is_array($plugin_run_result = Plugins::getInstance()->run('end_admin_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook //header if (! ig('_ajax_')) { echo $tpl->display('admin_header'); } //body if (! ig('_ajax_')) { $is_ajax = 'no'; echo $tpl->display($stylee, $styleePath); } else { $is_ajax = 'yes'; echo_ajax( 1, empty($adminAjaxContent) ? $tpl->display($stylee, $styleePath) : $adminAjaxContent, $go_menu_html ); } //footer if (! ig('_ajax_')) { echo $tpl->display('admin_footer'); } //close db $SQL->close(); exit;