num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE id=" . g('deleteuserfile', 'int')))) { redirect($action_all); } $query = array( 'SELECT' => 'size, name, folder', 'FROM' => "{$dbprefix}files", 'WHERE' => 'user=' . g('deleteuserfile', 'int'), ); $result = $SQL->build($query); $sizes = $num = 0; while($row=$SQL->fetch_array($result)) { //delete from folder .. kleeja_unlink (PATH . $row['folder'] . "/" . $row['name']); //delete thumb if (file_exists(PATH . $row['folder'] . "/thumbs/" . $row['name'])) { kleeja_unlink (PATH . $row['folder'] . "/thumbs/" . $row['name']); } $num++; $sizes += $row['size']; } $SQL->freeresult($result); if($num == 0) { kleeja_admin_err($lang['ADMIN_DELETE_NO_FILE'], true, '', true, $action_all, 2); } else { //update number of stats $update_query = array( 'UPDATE' => "{$dbprefix}stats", 'SET' => "sizes=sizes-$sizes, files=files-$num", ); $SQL->build($update_query); if($SQL->affected()) { delete_cache('data_stats'); } //delete all files in just one query $d_query = array( 'DELETE' => "{$dbprefix}files", 'WHERE' => "user=" . g('deleteuserfile', 'int'), ); $SQL->build($d_query); kleeja_admin_info($lang['ADMIN_DELETE_FILE_OK'], true, '', true, $action_all, 3); } } // //Delete a user // if(ig('del_user')) { //check _GET Csrf token if(!kleeja_check_form_key_get('adm_users')) { kleeja_admin_err($lang['INVALID_GET_KEY'], true, $lang['ERROR'], true, $action_all, 2); } //is exists ? if(!$SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE id=" . g('del_user', 'int')))) { redirect($action_all); } //delete all files in just one query $d_query = array( 'DELETE' => "{$dbprefix}users", 'WHERE' => "id=" . g('del_user', 'int'), ); $SQL->build($d_query); kleeja_admin_info($lang['USER_DELETED'], true, '', true, './'); } // //add new user // else if (ip('newuser')) { if (trim(p('lname')) == '' || trim(p('lpass')) == '' || trim(p('lmail')) == '') { $ERRORS[] = $lang['EMPTY_FIELDS']; } else if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i", trim(strtolower(p('lmail'))))) { $ERRORS[] = $lang['WRONG_EMAIL']; } else if (strlen(trim(p('lname'))) < 2 || strlen(trim(p('lname'))) > 25) { $ERRORS[] = str_replace('4', '2', $lang['WRONG_NAME']); } else if ($SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE clean_name='" . trim($SQL->escape($usrcp->cleanusername(p('lname')))) . "'")) != 0) { $ERRORS[] = $lang['EXIST_NAME']; } else if ($SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE mail='" . trim($SQL->escape(strtolower(p('lmail')))) . "'")) != 0) { $ERRORS[] = $lang['EXIST_EMAIL']; } //no errors, lets do process if(empty($ERRORS)) { $name = (string) $SQL->escape(trim(p('lname'))); $user_salt = (string) substr(kleeja_base64_encode(pack("H*", sha1(mt_rand()))), 0, 7); $pass = (string) $usrcp->kleeja_hash_password($SQL->escape(trim(p('lpass'))) . $user_salt); $mail = (string) trim(strtolower(p('lmail'))); $clean_name = (string) $usrcp->cleanusername($name); $group = (int) p('lgroup'); $insert_query = array( 'INSERT' => 'name ,password, password_salt ,group_id, mail,founder, session_id, clean_name', 'INTO' => "{$dbprefix}users", 'VALUES' => "'$name', '$pass', '$user_salt', $group , '$mail', 0 , '', '$clean_name'" ); if ($SQL->build($insert_query)) { $last_user_id = $SQL->insert_id(); //update number of stats $update_query = array( 'UPDATE' => "{$dbprefix}stats", 'SET' => "users=users+1, lastuser='$name'", ); $SQL->build($update_query); if($SQL->affected()) { delete_cache('data_stats'); } } #User added .. kleeja_admin_info($lang['USER_ADDED'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users', 3); } else { $errs = ''; foreach($ERRORS as $r) { $errs .= '- ' . $r . '. '; } $current_smt = 'new_u'; #kleeja_admin_err($errs, true, '', true, $action_all, 3); } } // //edit user // if(ip('edituser')) { $userid = p('uid', 'int'); //is exists ? if(!$SQL->num_rows($SQL->query("SELECT id FROM {$dbprefix}users WHERE id=" . $userid))) { kleeja_admin_err('ERROR-NO-ID', true, '', true, basename(ADMIN_PATH) . '?cp=' . basename(__file__, '.php')); } $query = array( 'SELECT' => 'name, mail, clean_name, group_id, founder, show_my_filecp', 'FROM' => "{$dbprefix}users", 'WHERE' => 'id=' . $userid, ); $result = $SQL->build($query); $udata = $SQL->fetch_array($result); $SQL->freeresult($result); $new_clean_name = trim($SQL->escape($usrcp->cleanusername(p('l_name')))); $new_name = $new_mail = false; $pass = ''; if (trim(p('l_name')) == '') { $ERRORS[] = $lang['EMPTY_FIELDS'] . ' (' . $lang['USERNAME'] . ')'; } elseif (trim(p('l_mail')) == '') { $ERRORS[] = $lang['EMPTY_FIELDS'] . ' (' . $lang['EMAIL'] . ')'; } else if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i", trim(strtolower(p('l_mail'))))) { $ERRORS[] = $lang['WRONG_EMAIL']; } elseif($udata['clean_name'] != $new_clean_name) { $new_name = true; if (strlen(trim(p('l_name'))) < 2 || strlen(trim(p('l_name'))) > 100) { $ERRORS[] = str_replace('4', '2', $lang['WRONG_NAME']); } else if ($SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE clean_name='" . $new_clean_name . "'")) != 0) { $ERRORS[] = $lang['EXIST_NAME']; } } else if ($udata['mail'] != trim(p('l_mail'))) { $new_mail = true; if($SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE mail='" . trim($SQL->escape(strtolower(p('lmail')))) . "'")) != 0) { $ERRORS[] = $lang['EXIST_EMAIL']; } } else if (trim(p('l_pass')) != '') { $user_salt = substr(kleeja_base64_encode(pack("H*", sha1(mt_rand()))), 0, 7); $pass = "password = '" . $usrcp->kleeja_hash_password(trim(p('l_pass')) . $user_salt) . "', password_salt='" . $user_salt . "',"; } //no errors, lets do process if(empty($ERRORS)) { $update_query = array( 'UPDATE' => "{$dbprefix}users", 'SET' => ($new_name ? "name = '" . $SQL->escape(p('l_name')) . "', clean_name='" . $SQL->escape($new_clean_name) . "', " : '') . ($new_mail ? "mail = '" . $SQL->escape(p('l_mail')) . "'," : '') . $pass . (ip('l_founder') ? "founder=" . p('l_founder', 'int') . "," : '') . "group_id=" . p('l_group', 'int') . "," . "show_my_filecp=" . p('l_show_filecp', 'int'), 'WHERE' => 'id=' . $userid ); $SQL->build($update_query); if($SQL->affected()) { kleeja_admin_info($lang['USER_UPDATED'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users&smt=show_group&qg=' . p('l_qg', 'int') . '&page='. p('l_page', 'int'), 2); } else { kleeja_admin_info($lang['NO_UP_CHANGE_S'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users&smt=show_group&qg=' . p('l_qg', 'int') . '&page='. p('l_page', 'int'), 2); } } else { $errs = ''; foreach($ERRORS as $r) { $errs .= '- ' . $r . '. '; } $current_smt = 'edit_user'; $_GET['uid'] = $userid; $_GET['page'] = p('l_page'); //kleeja_admin_err($errs, true, '', true, $action_all, 3); } } // //add new group // if(ip('newgroup')) { if (trim(p('gname')) == '' || trim(p('gname')) == '' || trim(p('gname')) == '') { $ERRORS[] = $lang['EMPTY_FIELDS']; } else if (strlen(trim(p('gname'))) < 2 || strlen(trim(p('gname'))) > 100) { $ERRORS[] = str_replace('4', '1', $lang['WRONG_NAME']); } else if ($SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}groups WHERE group_name='" . trim($SQL->escape(p('gname'))) . "'")) != 0) { $ERRORS[] = $lang['EXIST_NAME']; } elseif (in_array(trim(p('gname')), array($lang['ADMINS'], $lang['GUESTS'], $lang['USERS']))) { $ERRORS[] = $lang['TAKEN_NAMES']; } //no errors, lets do process if(empty($ERRORS)) { #Insert the group .. $insert_query = array( 'INSERT' => 'group_name', 'INTO' => "{$dbprefix}groups", 'VALUES' => "'" . trim($SQL->escape(p('gname'))) . "'" ); $SQL->build($insert_query); #Then, get the ID $new_group_id = $SQL->insert_id(); $org_group_id = p('cfrom', 'int'); if(!$new_group_id or !$org_group_id) { kleeja_admin_err('ERROR-NO-ID', true, '', true, basename(ADMIN_PATH) . '?cp=' . basename(__file__, '.php')); } if($org_group_id == -1) { $org_group_id = (int) $config['default_group']; } #copy acls from the other group to this group $query = array( 'SELECT' => 'acl_name, acl_can', 'FROM' => "{$dbprefix}groups_acl", 'WHERE' => 'group_id=' . $org_group_id, 'ORDER BY' => 'acl_name ASC' ); $result = $SQL->build($query); while($row=$SQL->fetch_array($result)) { $insert_query = array( 'INSERT' => 'acl_name, acl_can, group_id', 'INTO' => "{$dbprefix}groups_acl", 'VALUES' => "'" . $row['acl_name'] . "', " . $row['acl_can'] . ", " . $new_group_id ); $SQL->build($insert_query); } $SQL->free($result); #copy configs from the other group to this group $query = array( 'SELECT' => 'd.name, d.value', 'FROM' => "{$dbprefix}groups_data d", 'WHERE' => 'd.group_id=' . $org_group_id, 'ORDER BY' => 'd.name ASC' ); $result = $SQL->build($query); while($row=$SQL->fetch_array($result)) { $insert_query = array( 'INSERT' => 'name, value, group_id', 'INTO' => "{$dbprefix}groups_data", 'VALUES' => "'" . $row['name'] . "', '" . $SQL->escape($row['value']) . "', " . $new_group_id ); $SQL->build($insert_query); } $SQL->free($result); #copy exts from the other group to this group $query = array( 'SELECT' => 'e.ext, e.size', 'FROM' => "{$dbprefix}groups_exts e", 'WHERE' => 'e.group_id=' . $org_group_id, 'ORDER BY' => 'e.ext_id ASC' ); $result = $SQL->build($query); while($row=$SQL->fetch_array($result)) { $insert_query = array( 'INSERT' => 'ext, size, group_id', 'INTO' => "{$dbprefix}groups_exts", 'VALUES' => "'" . $row['ext'] . "', " . $row['size'] . ", " . $new_group_id ); $SQL->build($insert_query); } $SQL->free($result); #show group-is-added message delete_cache('data_groups'); kleeja_admin_info(sprintf($lang['GROUP_ADDED'], p('gname')), true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } else { $errs = ''; foreach($ERRORS as $r) { $errs .= '- ' . $r . '. '; } kleeja_admin_err($errs, true, '', true, $action, 3); } } // //delete group // if(ip('delgroup')) { $from_group = ip('dgroup') ? p('dgroup', 'int') : 0; $to_group = ip('tgroup') ? p('tgroup', 'int') : 0; #if missing IDs of groups, deleted one and transfering-to one. if(!$from_group or !$to_group) { kleeja_admin_err('ERROR-NO-ID', true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } #We can not move users to the same group we deleting ! that's stupid pro! if($from_group == $to_group) { kleeja_admin_err($lang['NO_MOVE_SAME_GRP'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } #to_group = '-1' : means default group .. so now we get the real ID. if($to_group == -1) { $to_group = (int) $config['default_group']; } #you can not delete default group ! if($from_group == (int) $config['default_group']) { kleeja_admin_err($lang['DEFAULT_GRP_NO_DEL'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } #delete the exts $query_del = array( 'DELETE' => "{$dbprefix}groups_exts", 'WHERE' => 'group_id=' . $from_group ); $SQL->build($query_del); #then, delete the configs $query_del = array( 'DELETE' => "{$dbprefix}groups_data", 'WHERE' => 'group_id=' . $from_group ); $SQL->build($query_del); #then, delete acls $query_del = array( 'DELETE' => "{$dbprefix}groups_acl", 'WHERE' => 'group_id=' . $from_group ); $SQL->build($query_del); #then, delete the group itself $query_del = array( 'DELETE' => "{$dbprefix}groups", 'WHERE' => 'group_id=' . $from_group ); $SQL->build($query_del); #then, move users to the dest. group $update_query = array( 'UPDATE' => "{$dbprefix}users", 'SET' => "group_id=" . $to_group, 'WHERE' => "group_id=". $from_group ); $SQL->build($update_query); #get those groups name $group_name_from = str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$from_group]['data']['group_name']); $group_name_to =str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$to_group]['data']['group_name']); #delete cache .. delete_cache('data_groups'); kleeja_admin_info(sprintf($lang['GROUP_DELETED'], $group_name_from, $group_name_to), true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } // //begin of default users page // $query = array(); $show_results = false; switch($current_smt): case 'general': $query = array( 'SELECT' => 'COUNT(group_id) AS total_groups', 'FROM' => "{$dbprefix}groups", 'ORDER BY' => 'group_id ASC' ); $result = $SQL->build($query); $nums_rows = 0; $n_fetch = $SQL->fetch_array($result); $nums_rows = $n_fetch['total_groups']; $no_results = false; $e_groups = $c_groups = array(); $l_groups = array(); $groups_background_color = array( 1 => array('background' => 'dark', 'icon' => ' fa-star'), 2 => array('background' => 'secondary', 'icon' => 'fa-user-secret'), 3 => array('background' => 'primary', 'icon' => 'fa-user-circle'), ); if ($nums_rows > 0) { $query['SELECT'] = 'group_id, group_name, group_is_default, group_is_essential'; $result = $SQL->build($query); while($row=$SQL->fetch_array($result)) { $r = array( 'id' => $row['group_id'], 'name' => str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $row['group_name']), 'style' => !empty($groups_background_color[$row['group_id']]) ? $groups_background_color[$row['group_id']] : array('background' => 'secondary', 'icon' => ''), 'is_default' => (int) $row['group_is_default'] ? true : false ); if((int) $row['group_is_essential'] == 1) { $e_groups[] = $r; } else { $c_groups[] = $r; } } } if($user_not_normal) { $c_groups = false; } $SQL->freeresult($result); break; #handling editing ACLs(permissions) for the requesting groups case 'group_acl': $req_group = ig('qg') ? g('qg', 'int') : 0; if(!$req_group) { kleeja_admin_err('ERROR-NO-ID', true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } $group_name = str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$req_group]['data']['group_name']); $query = array( 'SELECT' => 'acl_name, acl_can', 'FROM' => "{$dbprefix}groups_acl", 'WHERE' => 'group_id=' . $req_group, 'ORDER BY' => 'acl_name ASC' ); $result = $SQL->build($query); $acls = $submitted_on_acls = $submitted_off_acls = array(); while($row=$SQL->fetch_array($result)) { #if submit if(ip('editacl')) { if(ip($row['acl_name'])) { $submitted_on_acls[] = $row['acl_name']; } else if(!ip($row['acl_name'])) { $submitted_off_acls[] = $row['acl_name']; } } if($req_group == 2 && in_array($row['acl_name'], array('access_fileuser', 'enter_acp'))) { continue; } $acls[] = array( 'acl_title' => $lang['ACLS_' . strtoupper($row['acl_name'])], 'acl_name' => $row['acl_name'], 'acl_can' => (int) $row['acl_can'] ); } $SQL->freeresult($result); #if submit if(ip('editacl')) { #update 'can' acls if(sizeof($submitted_on_acls)) { $update_query = array( 'UPDATE' => "{$dbprefix}groups_acl", 'SET' => "acl_can=1", 'WHERE' => "acl_name IN ('" . implode("', '", $submitted_on_acls) . "') AND group_id=". $req_group ); $SQL->build($update_query); } #update 'can not' acls if(sizeof($submitted_off_acls)) { $update_query2 = array( 'UPDATE' => "{$dbprefix}groups_acl", 'SET' => "acl_can=0", 'WHERE' => "acl_name IN ('" . implode("', '", $submitted_off_acls) . "') AND group_id=". $req_group ); $SQL->build($update_query2); } #delete cache .. delete_cache('data_groups'); kleeja_admin_info($lang['CONFIGS_UPDATED'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } break; #handling editing settings for the requested group case 'group_data': $req_group = ig('qg') ? g('qg', 'int') : 0; if(!$req_group) { kleeja_admin_err('ERROR-NO-ID', true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } # When user change language from start page, hurry hurry section, he comes here if(ig('lang_change')) { //check _GET Csrf token if(!kleeja_check_form_key_get('adm_start_actions')) { kleeja_admin_err($lang['INVALID_GET_KEY'], true, $lang['ERROR'], true, basename(ADMIN_PATH) . '?cp=start', 2); } $got_lang = preg_replace('[^a-zA-Z0-9]', '', g('lang_change')); # -1 means all if($req_group == -1) { //general update_config('language', $got_lang); //all groups foreach ($d_groups as $group_id => $group_info) { update_config('language', $got_lang, true, $group_id); } $group_name = $lang['ALL']; } else { update_config('language', $got_lang, true, $req_group); $group_name = str_replace( array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$req_group]['data']['group_name'] ); } delete_cache('data_lang' . $got_lang); #msg, done kleeja_admin_info($lang['CONFIGS_UPDATED'] . ', ' . $lang['LANGUAGE'] . ':' . $got_lang . ' - ' . $lang['FOR'] . ':' . $group_name, true, '', true, basename(ADMIN_PATH) . '?cp=start'); } $group_name = str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$req_group]['data']['group_name']); $gdata = $d_groups[$req_group]['data']; $query = array( 'SELECT' => 'c.name, c.option', 'FROM' => "{$dbprefix}config c", 'WHERE' => "c.type='groups'", 'ORDER BY' => 'c.display_order ASC' ); $result = $SQL->build($query); $data = array(); $cdata= $d_groups[$req_group]['configs']; $STAMP_IMG_URL = file_exists(PATH . 'images/watermark.gif') ? PATH . 'images/watermark.gif' : PATH . 'images/watermark.png'; while($row=$SQL->fetch_array($result)) { #submit, why here ? dont ask me just accept it as it. if(ip('editdata')) { is_array($plugin_run_result = Plugins::getInstance()->run('after_submit_adm_users_groupdata', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook $new[$row['name']] = p($row['name'] ,'str', $row['value']); $update_query = array( 'UPDATE' => "{$dbprefix}groups_data", 'SET' => "value='" . $SQL->escape($new[$row['name']]) . "'", 'WHERE' => "name='" . $row['name'] . "' AND group_id=". $req_group ); $SQL->build($update_query); continue; } if($row['name'] == 'language') { //get languages if ($dh = @opendir(PATH . 'lang')) { while (($file = readdir($dh)) !== false) { if(strpos($file, '.') === false && $file != '..' && $file != '.') { $lngfiles .= '' . $file . '' . "\n"; } } @closedir($dh); } } if($req_group == 2 && in_array($row['name'], array('enable_userfile'))) { continue; } $data[] = array( 'option' => str_replace( array('', '', '', '', ''), array('', '', '', '', ''), '' . "\n" . '' . (!empty($lang[strtoupper($row['name'])]) ? $lang[strtoupper($row['name'])] : $olang[strtoupper($row['name'])]) . '' . "\n" . '' . (empty($row['option']) ? '' : $tpl->admindisplayoption(preg_replace(array('!{con.[a-z0-9_]+}!', '!NAME="con.!'), array('{cdata.' . $row['name'] . '}', 'NAME="cdata.'), $row['option']))) . '' . "\n" . '' . "\n" . '') ); } $SQL->freeresult($result); #submit if(ip('editdata')) { #Remove group_is_default from the current one if(p('group_is_default', 'int') == 1) { $update_query = array( 'UPDATE' => "{$dbprefix}groups", 'SET' => "group_is_default=0", 'WHERE' => "group_is_default=1" ); $SQL->build($update_query); #update config value of the current default group update_config('default_group', $req_group); delete_cache('data_config'); } #update not-configs data $update_query = array( 'UPDATE' => "{$dbprefix}groups", 'SET' => "group_is_default=" . p('group_is_default', 'int') . (ip('group_name') ? ", group_name='" . $SQL->escape(p('group_name')) . "'" : ''), 'WHERE' => "group_id=". $req_group ); $SQL->build($update_query); #delete cache .. delete_cache('data_groups'); kleeja_admin_info($lang['CONFIGS_UPDATED'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users'); } break; #handling adding-editing allowed file extensions for requested group case 'group_exts': $req_group = ig('qg') ? g('qg', 'int') : 0; if(!$req_group) { kleeja_admin_err('ERROR-NO-ID', true, '', true, basename(ADMIN_PATH) . '?cp=' . basename(__file__, '.php')); } $group_name =str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$req_group]['data']['group_name']); #check if there is klj_exts which means this is an upgraded website ! if(empty($config['exts_upraded1_5'])) { $ex_exts = $SQL->query("SHOW TABLES LIKE '{$dbprefix}exts';"); if($SQL->num_rows($ex_exts)) { $xquery = array( 'SELECT' => 'ext, gust_size, user_size, gust_allow, user_allow', 'FROM' => "{$dbprefix}exts", 'WHERE' => 'gust_allow=1 OR user_allow=1', ); $xresult = $SQL->build($xquery); $xexts = ''; while($row=$SQL->fetch_array($xresult)) { if($row['gust_allow']) { $xexts .= ($xexts == '' ? '' : ',') . "('" . $SQL->escape($row['ext']) . "', 2, " . $row['gust_size'] . ")"; } if($row['user_allow']) { $xexts .= ($xexts == '' ? '' : ',') . "('" . $SQL->escape($row['ext']) . "', 3, " . $row['user_size'] . ")"; } } $SQL->freeresult($result); #delete prev exts before adding $query_del = array( 'DELETE' => "{$dbprefix}groups_exts", 'WHERE' => 'group_id=2 OR group_id=3' ); $SQL->build($query_del); $SQL->query("INSERT INTO {$dbprefix}groups_exts (ext, group_id, size) VALUES " . $xexts . ";"); add_config('exts_upraded1_5', 'done'); } } #delete ext? $DELETED_EXT = $GE_INFO = false; if(ig('del')) { //check _GET Csrf token if(!kleeja_check_form_key_get('adm_users')) { kleeja_admin_err($lang['INVALID_GET_KEY'], true, $lang['ERROR'], true, $action, 2); } $req_ext = ig('del') ? g('del', 'int') : 0; if(!$req_ext) { kleeja_admin_err('ERROR-NO-EXT-ID', true, '', true, $action, 2); } $query_del = array( 'DELETE' => "{$dbprefix}groups_exts", 'WHERE' => 'ext_id=' . $req_ext ); $SQL->build($query_del); #done $DELETED_EXT = $GE_INFO = 2; delete_cache('data_groups'); } #add ext? $ADDED_EXT = false; if(ip('newext')) { $new_ext = ip('extisnew') ? preg_replace('/[^a-z0-9]/', '', strtolower(p('extisnew'))) : false; if(!$new_ext) { kleeja_admin_err($lang['EMPTY_EXT_FIELD'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users&smt=group_exts&qg=' . $req_group); } //check if it's welcomed one //if he trying to be smart, he will add like ext1.ext2.php //so we will just look at last one $new_ext = explode('.', $new_ext); $new_ext = array_pop($new_ext); $check_ext = strtolower($new_ext); $not_welcomed_exts = array('php', 'php3', 'php5', 'php4', 'asp', 'aspx', 'shtml', 'html', 'htm', 'xhtml', 'phtml', 'pl', 'cgi', 'ini', 'htaccess', 'sql', 'txt'); if(in_array($check_ext, $not_welcomed_exts)) { kleeja_admin_err(sprintf($lang['FORBID_EXT'], $check_ext), true, '', true, $action); } //check if there is any exists of this ext in db $query = array( 'SELECT' => '*', 'FROM' => "{$dbprefix}groups_exts", 'WHERE' => "ext='" . $new_ext . "' and group_id=" . $req_group, ); $result = $SQL->build($query); if ($SQL->num_rows($result)) { kleeja_admin_err(sprintf($lang['NEW_EXT_EXISTS_B4'], $new_ext), true, '', true, $action); } #add $default_size = '2097152';#bytes $insert_query = array( 'INSERT' => 'ext ,group_id, size', 'INTO' => "{$dbprefix}groups_exts", 'VALUES' => "'$new_ext', $req_group, $default_size" ); $SQL->build($insert_query); #done $ADDED_EXT = $GE_INFO = 2; delete_cache('data_groups'); } #if submit/update if(ip('editexts')) { $ext_ids = $_POST['size']; #is an array if(is_array($ext_ids)) { foreach($ext_ids as $e_id=>$e_val) { $update_query = array( 'UPDATE' => "{$dbprefix}groups_exts", 'SET' => "size=" . (intval($e_val)*1024), 'WHERE' => "ext_id=" . intval($e_id) . " AND group_id=". $req_group ); $SQL->build($update_query); } #delete cache .. delete_cache('data_groups'); kleeja_admin_info($lang['UPDATED_EXTS'], true, '', true, $action); } } #show exts $query = array( 'SELECT' => 'ext_id, ext, size', 'FROM' => "{$dbprefix}groups_exts", 'WHERE' => 'group_id=' . $req_group, 'ORDER BY' => 'ext_id ASC' ); $result = $SQL->build($query); $exts = array(); while($row=$SQL->fetch_array($result)) { //handle big int $size = preg_match('/^[0-9]+/', $row['size'], $matches) ? $matches[0] : 0; $exts[] = array( 'ext_id' => $row['ext_id'], 'ext_name' => $row['ext'], 'ext_size' => round($size / 1024), 'ext_icon' => file_exists(PATH . "images/filetypes/". $row['ext'] . ".png") ? PATH . "images/filetypes/" . $row['ext'] . ".png" : PATH. 'images/filetypes/file.png' ); } $SQL->freeresult($result); break; #show users (from search keyword) case 'show_su': $filter = get_filter(g('search_id'), 'user_search', false, 'filter_uid'); if(!$filter) { kleeja_admin_err($lang['ERROR_TRY_AGAIN'], true, $lang['ERROR'], true, basename(ADMIN_PATH) . '?cp=h_search&smt=users', 1); } $search = unserialize(htmlspecialchars_decode($filter['filter_value'])); $usernamee = $search['username'] != '' ? 'AND (name LIKE \'%' . $SQL->escape($search['username']) . '%\' OR clean_name LIKE \'%' . $SQL->escape($search['username']) . '%\') ' : ''; $usermailee = $search['usermail'] != '' ? 'AND mail LIKE \'%' . $SQL->escape($search['usermail']) . '%\' ' : ''; $is_search = true; $query['WHERE'] = "name <> '' $usernamee $usermailee"; #show users (for requested group) case 'show_group': if($current_smt != 'show_su') { $is_search = true; $req_group = ig('qg') ? g('qg', 'int') : 0; $group_name =str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$req_group]['data']['group_name']); $query['WHERE'] = "name != '' AND group_id = " . $req_group; } #show users (all) case 'users': $query['SELECT'] = 'COUNT(id) AS total_users'; $query['FROM'] = "{$dbprefix}users"; $query['ORDER BY'] = 'id ASC'; $result = $SQL->build($query); $nums_rows = 0; $n_fetch = $SQL->fetch_array($result); $nums_rows = $n_fetch['total_users']; //pagination $currentPage = ig('page') ? g('page', 'int') : 1; $Pager = new Pagination($perpage, $nums_rows, $currentPage); $start = $Pager->getStartRow(); $no_results = false; if ($nums_rows > 0) { $query['SELECT'] = 'id, name, founder, group_id, last_visit'; $query['LIMIT'] = "$start, $perpage"; $result = $SQL->build($query); while($row=$SQL->fetch_array($result)) { $userfile = $config['siteurl'] . ($config['mod_writer'] ? 'fileuser-' . $row['id'] . '.html' : 'ucp.php?go=fileuser&id=' . $row['id']); $arr[] = array( 'id' => $row['id'], 'name' => $row['name'], 'userfile_link' => $userfile, 'delusrfile_link' => $row['founder'] && (int) $userinfo['founder'] == 0 ? false : basename(ADMIN_PATH) .'?cp=' . basename(__file__, '.php') . '&deleteuserfile='. $row['id'] . (ig('page') ? '&page=' . g('page', 'int') : ''), 'delusr_link' => $userinfo['id'] == $row['id'] || ($row['founder'] && (int) $userinfo['founder'] == 0) ? false : basename(ADMIN_PATH) .'?cp=' . basename(__file__, '.php') . '&del_user='. $row['id'] . (ig('page') ? '&page=' . g('page', 'int') : ''), 'editusr_link' => basename(ADMIN_PATH) .'?cp=' . basename(__file__, '.php') . '&smt=edit_user&uid='. $row['id'] . (ig('page') ? '&page=' . g('page', 'int') : ''), 'founder' => (int) $row['founder'], 'last_visit' => empty($row['last_visit']) ? $lang['NOT_YET'] : kleeja_date($row['last_visit']), 'group' => str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$row['group_id']]['data']['group_name']) ); } $SQL->freeresult($result); } else #num rows { $no_results = true; } //pages $total_pages = $Pager->getTotalPages(); $page_nums = $Pager->print_nums( basename(ADMIN_PATH) . '?cp=' . basename(__file__, '.php') . (ig('search_id') ? '&search_id=' . g('search_id') : '') . (ig('qg') ? '&qg=' . g('qg', 'int') : '') . (ig('smt') ? '&smt=' . $current_smt : '') ); $show_results = true; break; #editing a user, form case 'edit_user': //is exists ? if(!isset($userid)) { $userid = g('uid', 'int'); if(!$SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE id=" . $userid))) { kleeja_admin_err('ERROR-NO-USER-FOUND', true, '', true, basename(ADMIN_PATH) . '?cp=' . basename(__file__, '.php')); } } $query = array( 'SELECT' => 'name, mail, group_id, founder, show_my_filecp', 'FROM' => "{$dbprefix}users", 'WHERE' => 'id=' . $userid, ); $result = $SQL->build($query); $udata = $SQL->fetch_array($result); $SQL->freeresult($result); //If founder, just founder can edit him; $u_founder = ip('l_founder') ? p('l_founder', 'int') : (int) $udata['founder']; $im_founder = (int) $userinfo['founder']; $u_group = ip('l_group') ? p('l_group', 'int') : $udata['group_id']; $u_qg = ip('l_qg') ? p('u_qg', 'int') : $udata['group_id']; if($u_founder && !$im_founder) { kleeja_admin_err($lang['HV_NOT_PRVLG_ACCESS'], true, '', true, basename(ADMIN_PATH) . '?cp=g_users&smt=show_group&qg=' . $u_group); } $errs = isset($errs) ? $errs : false; #prepare them for the template $title_name = $udata['name']; $u_name = p('l_name', 'str', $udata['name']); $u_mail = p('l_mail', 'str', $udata['mail']); $u_show_filecp = p('l_show_filecp', 'int', $udata['show_my_filecp']); $u_page = ig('page') ? g('page', 'int') : 0; $k_groups = array_keys($d_groups); $u_groups = array(); foreach($k_groups as $id) { $u_groups[] = array( 'id' => $id, 'name' => str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$id]['data']['group_name']), 'default' => $config['default_group'] == $id ? true : false, 'selected' => $id == $u_group ); } break; #new user adding form case 'new_u': #preparing the template $errs = isset($errs) ? $errs : false; $uname = p('lname'); $umail = p('lmail'); $k_groups = array_keys($d_groups); $u_groups = array(); foreach($k_groups as $id) { $u_groups[] = array( 'id' => $id, 'name' => str_replace(array('{lang.ADMINS}', '{lang.USERS}', '{lang.GUESTS}'), array($lang['ADMINS'], $lang['USERS'], $lang['GUESTS']), $d_groups[$id]['data']['group_name']), 'default' => $config['default_group'] == $id ? true : false, 'selected' => ip('lgroup') ? p('lgroup') == $id : $id == $config['default_group'] ); } break; endswitch; //after submit if (ip('submit')) { $g_link = basename(ADMIN_PATH) . '?cp=' . basename(__file__, '.php') . '&page=' . (ig('page') ? g('page', 'int') : 1) . (ig('search_id') ? '&search_id=' . g('search_id') : '') . '&smt=' . $current_smt; $text = ($affected ? $lang['USERS_UPDATED'] : $lang['NO_UP_CHANGE_S']) . '' . "\n"; $stylee = "admin_info"; } //secondary menu $go_menu = array( 'general' => array('name'=>$lang['R_GROUPS'], 'link'=> basename(ADMIN_PATH) . '?cp=g_users&smt=general', 'goto'=>'general', 'current'=> $current_smt == 'general'), #'users' => array('name'=>$lang['R_USERS'], 'link'=> basename(ADMIN_PATH) . '?cp=g_users&smt=users', 'goto'=>'users', 'current'=> $current_smt == 'users'), 'show_su' => array('name'=>$lang['SEARCH_USERS'], 'link'=> basename(ADMIN_PATH) . '?cp=h_search&smt=users', 'goto'=>'show_su', 'current'=> $current_smt == 'show_su'), ); #user adding is not allowed in integration if(!$user_not_normal) { $go_menu['new_u'] = array('name'=>$lang['NEW_USER'], 'link'=> basename(ADMIN_PATH) . '?cp=g_users&smt=new_u', 'goto'=>'new_u', 'current'=> $current_smt == 'new_u'); }