Files
Kleeja/ucp.php
Abdulrahman 1e09a96da4 enhancements
2019-01-18 23:42:23 +03:00

934 lines
30 KiB
PHP
Executable File

<?php
/**
*
* @package Kleeja
* @copyright (c) 2007 Kleeja.com
* @license ./docs/license.txt
*
*/
/**
* @ignore
*/
define('IN_KLEEJA', true);
define('IN_UCP', true);
require_once 'includes/common.php';
is_array($plugin_run_result = Plugins::getInstance()->run('begin_usrcp_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$extra = '';
$show_style = true;
switch (g('go'))
{
//
//login page
//
case 'login' :
//page info
$stylee = 'login';
$titlee = $lang['LOGIN'];
$action = 'ucp.php?go=login' . (ig('return') ? '&amp;return=' . g('return') : '');
$forget_pass_link = !empty($forgetpass_script_path) && (int) $config['user_system'] != 1 ? $forgetpass_script_path : 'ucp.php?go=get_pass';
$H_FORM_KEYS = kleeja_add_form_key('login');
//no error yet
$ERRORS = false;
//_post
$t_lname = p('lname');
$t_lpass = p('lpass');
is_array($plugin_run_result = Plugins::getInstance()->run('login_before_submit', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//logon before !
if ($usrcp->name())
{
is_array($plugin_run_result = Plugins::getInstance()->run('login_logon_before', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$errorpage = true;
$text = $lang['LOGINED_BEFORE'] . ' ..<br /> <a href="' . $config['siteurl'] . ($config['mod_writer'] ? 'logout.html' : 'ucp.php?go=logout') . '">' . $lang['LOGOUT'] . '</a>';
kleeja_info($text);
}
elseif (ip('submit'))
{
$ERRORS = array();
is_array($plugin_run_result = Plugins::getInstance()->run('login_after_submit', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//check for form key
if(!kleeja_check_form_key('login'))
{
$ERRORS['form_key'] = $lang['INVALID_FORM_KEY'];
}
if(!kleeja_check_captcha())
{
if (function_exists('gd_info'))
{
$ERRORS['captcha'] = $lang['WRONG_VERTY_CODE'];
}
}
if (empty(p('lname')) || empty(p('lpass')))
{
$ERRORS['empty_fields'] = $lang['EMPTY_FIELDS'];
}
is_array($plugin_run_result = Plugins::getInstance()->run('login_after_submit2', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
if(empty($ERRORS))
{
if(!$usrcp->data(p('lname'), p('lpass'), false, (!ip('remme') ? false : p('remme'))))
{
$ERRORS['login_check'] = $lang['LOGIN_ERROR'];
}
else
{
if (ig('return'))
{
redirect(urldecode(g('return')));
$SQL->close();
exit;
}
$errorpage = true;
is_array($plugin_run_result = Plugins::getInstance()->run('login_data_no_error', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$text = $lang['LOGIN_SUCCESFUL'] . ' <br /> <a href="' . $config['siteurl'] . '">' . $lang['HOME'] . '</a>';
kleeja_info($text, '', true, $config['siteurl'], 1);
}
}
}
break;
//
//register page
//
case 'register' :
//page info
$stylee = 'register';
$titlee = $lang['REGISTER'];
$action = 'ucp.php?go=register';
$H_FORM_KEYS = kleeja_add_form_key('register');
//no error yet
$ERRORS = false;
//config register
if ((int) $config['register'] != 1 && (int) $config['user_system'] == 1)
{
kleeja_info($lang['REGISTER_CLOSED'], $lang['PLACE_NO_YOU']);
}
else if ($config['user_system'] != '1')
{
is_array($plugin_run_result = Plugins::getInstance()->run('register_not_default_sys', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
if(!empty($register_script_path))
{
$goto_forum_link = $register_script_path;
}
else
{
if(isset($script_path))
{
$goto_forum_link = ($config['user_system'] == 'api') ? dirname($script_path) : $script_path;
if($config['user_system'] == 'phpbb' || ($config['user_system'] == 'api' && strpos($script_path, 'phpbb') !== false))
{
$goto_forum_link .= '/ucp.php?mode=register';
}
else if($config['user_system'] == 'vb' || ($config['user_system'] == 'api' && strpos($script_path, 'vb') !== false))
{
$goto_forum_link .= '/register.php';
}
}
else
{
$goto_forum_link = '...';
}
}
kleeja_info('<a href="' . $goto_forum_link . '" title="' . $lang['REGISTER'] . '" target="_blank">' . $lang['REGISTER']. '</a>', $lang['REGISTER']);
}
//logon before !
if ($usrcp->name())
{
is_array($plugin_run_result = Plugins::getInstance()->run('register_logon_before', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
kleeja_info($lang['REGISTERED_BEFORE']);
}
//_post
$t_lname = p('lname');
$t_lpass = p('lpass');
$t_lpass2 = p('lpass2');
$t_lmail = p('lmail');
//no submit
if (!ip('submit'))
{
is_array($plugin_run_result = Plugins::getInstance()->run('register_no_submit', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
}
else // submit
{
$ERRORS = array();
is_array($plugin_run_result = Plugins::getInstance()->run('register_submit', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//check for form key
if(!kleeja_check_form_key('register'))
{
$ERRORS['form_key'] = $lang['INVALID_FORM_KEY'];
}
if(!kleeja_check_captcha())
{
$ERRORS['captcha'] = $lang['WRONG_VERTY_CODE'];
}
if (trim(p('lname')) == '' || trim(p('lpass')) == '' || trim(p('lmail')) == '')
{
$ERRORS['empty_fields'] = $lang['EMPTY_FIELDS'];
}
if ($t_lpass != $t_lpass2)
{
$ERRORS['pass_neq_pass2'] = $lang['PASS_NEQ_PASS2'];
}
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i", trim(p('lmail'))))
{
$ERRORS['lmail'] = $lang['WRONG_EMAIL'];
}
if (strlen(trim(p('lname'))) < 3 || strlen(trim(p('lname'))) > 50)
{
$ERRORS['lname'] = $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['name_exists_before'] = $lang['EXIST_NAME'];
}
else if ($SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE mail='" . strtolower(trim($SQL->escape(p('lmail')))) . "'")) != 0)
{
$ERRORS['mail_exists_before'] = $lang['EXIST_EMAIL'];
}
is_array($plugin_run_result = Plugins::getInstance()->run('register_submit2', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//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) strtolower(trim($SQL->escape(p('lmail'))));
$session_id = (string) session_id();
$clean_name = (string) $usrcp->cleanusername($name);
$insert_query = array(
'INSERT' => 'name ,password, password_salt ,mail, register_time, session_id, clean_name, group_id',
'INTO' => "{$dbprefix}users",
'VALUES' => "'$name', '$pass', '$user_salt', '$mail', " . time() . ", '$session_id','$clean_name', " . $config['default_group']
);
is_array($plugin_run_result = Plugins::getInstance()->run('qr_insert_new_user_register', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
if ($SQL->build($insert_query))
{
$last_user_id = $SQL->insert_id();
$text = $lang['REGISTER_SUCCESFUL'] . ' <br /> <a href="' . $config['siteurl'] . '">' . $lang['HOME'] . '</a>';
//update number of stats
$update_query = array(
'UPDATE' => "{$dbprefix}stats",
'SET' => "users=users+1, lastuser='$name'",
);
is_array($plugin_run_result = Plugins::getInstance()->run('ok_added_users_register', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
if($SQL->build($update_query))
{
//delete cache ..
delete_cache('data_stats');
}
//auto login
$usrcp->data($t_lname, $t_lpass, false, false);
kleeja_info($text, '', true, $config['siteurl'], 3);
}
}
}
break;
//
//logout action
//
case 'logout' :
is_array($plugin_run_result = Plugins::getInstance()->run('begin_logout', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
if ($usrcp->logout())
{
$text = $lang['LOGOUT_SUCCESFUL'] . '<br /> <a href="' . $config['siteurl'] . '">' . $lang['HOME'] . '</a>';
kleeja_info($text, $lang['LOGOUT'], true, $config['siteurl'], 1);
}
else
{
kleeja_err($lang['LOGOUT_ERROR']);
}
is_array($plugin_run_result = Plugins::getInstance()->run('end_logout', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
break;
//
//files user page
//
case 'fileuser' :
is_array($plugin_run_result = Plugins::getInstance()->run('begin_fileuser', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$stylee = 'fileuser';
$H_FORM_KEYS = kleeja_add_form_key('fileuser');
$user_id_get = ig('id') ? g('id', 'int') : false;
$user_id = (!$user_id_get && $usrcp->id()) ? $usrcp->id() : $user_id_get;
$user_himself = $usrcp->id() == $user_id;
$action = $config['siteurl'] . 'ucp.php?go=fileuser' . (ig('page') ? '&amp;page=' . g('page', 'int') : '');
//no logon before
if (!$usrcp->name() && !ig('id'))
{
kleeja_err($lang['USER_PLACE'], $lang['PLACE_NO_YOU'], true, 'index.php');
}
//Not allowed to browse files's folders of other users
if (!user_can('access_fileusers') && !$user_himself)
{
is_array($plugin_run_result = Plugins::getInstance()->run('user_cannot_access_fileusers', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
kleeja_info($lang['HV_NOT_PRVLG_ACCESS'], $lang['HV_NOT_PRVLG_ACCESS']);
}
#Not allowed to access this page ?
if (!user_can('access_fileuser') && $user_himself) {
is_array($plugin_run_result = Plugins::getInstance()->run('user_cannot_access_fileuser', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
kleeja_info($lang['HV_NOT_PRVLG_ACCESS'], $lang['HV_NOT_PRVLG_ACCESS']);
}
#fileuser is closed ?
if ((int) $config['enable_userfile'] != 1 && !user_can('enter_acp'))
{
kleeja_info($lang['USERFILE_CLOSED'], $lang['CLOSED_FEATURE']);
}
#get user options and name
$data_user = $config['user_system'] == 1 ? $usrcp->get_data('name, show_my_filecp', $user_id) : array('name' => $usrcp->usernamebyid($user_id), 'show_my_filecp' => '1');
#if there is no username, then there is no user at all
if(!$data_user['name'])
{
kleeja_err($lang['NOT_EXSIT_USER'], $lang['PLACE_NO_YOU']);
}
#this user closed his folder, and it's not the current user folder
if(!$data_user['show_my_filecp'] && ($usrcp->id() != $user_id) && !user_can('enter_acp'))
{
kleeja_info($lang['USERFILE_CLOSED'], $lang['CLOSED_FEATURE']);
}
$query = array(
'SELECT' => 'f.id, f.name, f.real_filename, f.folder, f.type, f.uploads, f.time, f.size',
'FROM' => "{$dbprefix}files f",
'WHERE' => 'f.user=' . $user_id,
'ORDER BY' => 'f.id DESC'
);
//pager
$perpage = 16;
$result_p = $SQL->build($query);
$nums_rows = $SQL->num_rows($result_p);
$currentPage = ig('page') ? g('page', 'int') : 1;
$Pager = new Pagination($perpage, $nums_rows, $currentPage);
$start = $Pager->getStartRow();
$your_fileuser = $config['siteurl'] . ($config['mod_writer'] ? 'fileuser-' . $usrcp->id() . '.html' : 'ucp.php?go=fileuser&amp;id=' . $usrcp->id());
$total_pages = $Pager->getTotalPages();
$linkgoto = $config['siteurl'] . (
$config['mod_writer']
? 'fileuser-' . $user_id . ($currentPage > 1 && $currentPage <= $total_pages ? '-' . $currentPage : '') . '.html'
: 'ucp.php?go=fileuser' . ($currentPage > 1 && $currentPage <= $total_pages ? '&amp;page=' . $currentPage : '')
);
$page_nums = $Pager->print_nums(str_replace('.html', '', $linkgoto));
$no_results = true;
if((int) $config['user_system'] != 1 && $usrcp->id() != $user_id)
{
$data_user['name'] = $usrcp->usernamebyid($user_id);
}
$user_name = !$data_user['name'] ? false : $data_user['name'];
#set page title
$titlee = $lang['FILEUSER'] . ': ' . $user_name;
#there is result ? show them
if($nums_rows != 0)
{
$no_results = false;
if (!ip('submit_all_files')) // in delete all files we do not need any limit;
{
$query['LIMIT'] = "$start, $perpage";
}
is_array($plugin_run_result = Plugins::getInstance()->run('qr_select_files_in_fileuser', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$result = $SQL->build($query);
$i = ($currentPage * $perpage) - $perpage;
$tdnumi = $num = $files_num = $imgs_num = 0;
while($row=$SQL->fetch_array($result))
{
++$i;
$file_info = array('::ID::' => $row['id'], '::NAME::' => $row['name'], '::DIR::' => $row['folder'], '::FNAME::' => $row['real_filename']);
$is_image = in_array(strtolower(trim($row['type'])), array('gif', 'jpg', 'jpeg', 'bmp', 'png')) ? true : false;
$url = $is_image ? kleeja_get_link('image', $file_info) : kleeja_get_link('file', $file_info);
$url_thumb = kleeja_get_link('thumb', $file_info);
$url_fileuser = $is_image
? $url
: (file_exists("images/filetypes/". $row['type'] . ".png") ? "images/filetypes/" . $row['type'] . ".png" : 'images/filetypes/file.png');
$file_name = $row['real_filename'] == '' ? $row['name'] : $row['real_filename'];
//make new lovely arrays !!
$arr[] = array(
'id' => $row['id'],
'name_file' => shorten_text($file_name, 25),
'file_type' => $row['type'],
'uploads' => $row['uploads'],
'tdnum' => $tdnumi == 0 ? '<ul>': '',
'tdnum2' => $tdnumi == 4 ? '</ul>' : '',
'href' => $url,
'size' => readable_size($row['size']),
'time' => !empty($row['time']) ? kleeja_date($row['time']) : '...',
'thumb_link'=> $is_image ? $url_thumb : $url_fileuser,
'is_image' => $is_image,
);
$tdnumi = $tdnumi == 2 ? 0 : $tdnumi+1;
if (ip('submit_files') && $user_himself)
{
is_array($plugin_run_result = Plugins::getInstance()->run('submit_in_fileuser', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//check for form key
if(!kleeja_check_form_key('fileuser', 1800 /* half hour */))
{
kleeja_info($lang['INVALID_FORM_KEY']);
}
if ($_POST['del_' . $row['id']])
{
//delete from folder ..
@kleeja_unlink($row['folder'] . '/' . $row['name'] );
//delete thumb
if (file_exists($row['folder'] . '/thumbs/' . $row['name'] ))
{
@kleeja_unlink($row['folder'] . '/thumbs/' . $row['name'] );
}
$ids[] = $row['id'];
if($is_image)
{
$imgs_num++;
}
else
{
$files_num++;
}
$sizes += $row['size'];
}
}
if (ip('submit_all_files') && $user_himself)
{
is_array($plugin_run_result = Plugins::getInstance()->run('submit_in_all_fileuser', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//delete all files
foreach($arr as $row)
{
@kleeja_unlink($row['folder'] . '/' . $row['name'] );
//delete thumb
if (file_exists($row['folder'] . '/thumbs/' . $row['name'] ))
{
@kleeja_unlink($row['folder'] . '/thumbs/' . $row['name'] );
}
$ids[] = $row['id'];
if($is_image)
{
$imgs_num++;
}
else
{
$files_num++;
}
$sizes += $r['size'];
}
}
}
$SQL->freeresult($result_p);
$SQL->freeresult($result);
//
//after submit
//
if (ip('submit_files') && $user_himself)
{
//no files to delete
if(isset($ids) && !empty($ids))
{
$query_del = array(
'DELETE' => "{$dbprefix}files",
'WHERE' => "id IN (" . implode(',', $ids) . ")"
);
is_array($plugin_run_result = Plugins::getInstance()->run('qr_del_files_in_filecp', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$SQL->build($query_del);
if(($files_num <= $stat_files) && ($imgs_num <= $stat_imgs))
{
//update number of stats
$update_query = array(
'UPDATE' => "{$dbprefix}stats",
'SET' => "sizes=sizes-$sizes,files=files-$files_num, imgs=imgs-$imgs_num",
);
$SQL->build($update_query);
}
//delete is ok, show msg
kleeja_info($lang['FILES_DELETED'], '', true, $linkgoto, 2);
}
else
{
//no file selected, show msg
kleeja_info($lang['NO_FILE_SELECTED'], '', true, $linkgoto, 2);
}
}
if (ip('submit_all_files') && $user_himself)
{
if(isset($ids) && !empty($ids))
{
$query_del = array(
'DELETE' => "{$dbprefix}files",
'WHERE' => "id IN (" . implode(',', $ids) . ")"
);
is_array($plugin_run_result = Plugins::getInstance()->run('qr_del_files_in_filecp', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$SQL->build($query_del);
if(($files_num <= $stat_files) && ($imgs_num <= $stat_imgs))
{
//update number of stats
$update_query = array(
'UPDATE' => "{$dbprefix}stats",
'SET' => "sizes=sizes-$sizes,files=files-$files_num, imgs=imgs-$imgs_num",
);
$SQL->build($update_query);
}
//write all delete log for current user for last time only
$log_msg=$usrcp->name()." has deleted all his/her files at this time : " . date('H:i a, d-m-Y') . "] \r\n".
"files numbers:".$files_num."\r\n".
"images numbers:".$imgs_num."\r\n";
$last_id=PATH . 'cache/'.$usrcp->id().$usrcp->name(); //based on user id
file_put_contents($last_id,$log_msg);
//delete all files , show msg
kleeja_info($lang['ALL_DELETED'], '', true, $linkgoto, 2);
}
else
{
//no file selected, show msg
kleeja_info($lang['NO_FILES_DELETE'], '', true, $linkgoto, 2);
}
}
}#num result
is_array($plugin_run_result = Plugins::getInstance()->run('end_fileuser', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
break;
case 'profile' :
//not a user
if (!$usrcp->name())
{
kleeja_info($lang['USER_PLACE'], $lang['PLACE_NO_YOU']);
}
$stylee = 'profile';
$titlee = $lang['PROFILE'];
$action = 'ucp.php?go=profile';
$name = $usrcp->name();
$mail = $usrcp->mail();
extract($usrcp->get_data('show_my_filecp, password_salt'));
$data_forum = (int) $config['user_system'] == 1 ? true : false ;
$link_avater = sprintf($lang['EDIT_U_AVATER_LINK'], '<a target="_blank" href="http://www.gravatar.com/">' , '</a>');
$H_FORM_KEYS = kleeja_add_form_key('profile');
//no error yet
$ERRORS = false;
if(!empty($profile_script_path))
{
$goto_forum_link = $profile_script_path;
}
else
{
if(isset($script_path))
{
$goto_forum_link = ($config['user_system'] == 'api') ? dirname($script_path) : $script_path;
if($config['user_system'] == 'phpbb' || ($config['user_system'] == 'api' && strpos(strtolower($script_path), 'phpbb') !== false))
{
$goto_forum_link .= '/ucp.php?i=164';
}
else if($config['user_system'] == 'vb' || ($config['user_system'] == 'api' && strpos(strtolower($script_path), 'vb') !== false))
{
$goto_forum_link .= '/profile.php?do=editprofile';
}
}
else
{
$goto_forum_link = '...';
}
}
//_post
$t_pppass_old = p('pppass_old');
$t_ppass_old = p('ppass_old');
$t_ppass_new = p('ppass_new');
$t_ppass_new2 = p('ppass_new2');
is_array($plugin_run_result = Plugins::getInstance()->run('no_submit_profile', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//
// after submit
//
if (ip('submit_data'))
{
$ERRORS = array();
is_array($plugin_run_result = Plugins::getInstance()->run('submit_profile', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//check for form key
if(!kleeja_check_form_key('profile'))
{
$ERRORS['form_key'] = $lang['INVALID_FORM_KEY'];
}
#if there is new pass AND new pass1 = new pass2 AND old pass is exists & true
if(!empty(p('ppass_new')))
{
if(p('ppass_new') != p('ppass_new2'))
{
$ERRORS['pass1_neq_pass2'] = $lang['PASS_O_PASS2'];
}
#if current pass is not correct
elseif(empty(p('ppass_old')) || !$usrcp->kleeja_hash_password(p('ppass_old') . $password_salt, $userinfo['password']))
{
$ERRORS['curnt_old_pass'] = $lang['CURRENT_PASS_WRONG'];
}
}
#if email is not equal to current email AND email not exists before
$new_mail = false;
if($usrcp->mail() != trim(strtolower(p('pmail'))))
{
#if current pass is not correct
if(empty(p('pppass_old')) || !$usrcp->kleeja_hash_password(p('pppass_old') . $password_salt, $userinfo['password']))
{
$ERRORS['curnt_old_pass'] = $lang['CURRENT_PASS_WRONG'];
}
#If email is not valid
elseif(!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i', trim(p('pmail'))) || trim(p('pmail')) == '')
{
$ERRORS['wrong_email'] = $lang['WRONG_EMAIL'];
}
#if email already exists
elseif ($SQL->num_rows($SQL->query("SELECT * FROM {$dbprefix}users WHERE mail='" . strtolower(trim($SQL->escape(p('pmail')))) . "'")) != 0)
{
$ERRORS['mail_exists_before'] = $lang['EXIST_EMAIL'];
}
$new_mail = true;
}
is_array($plugin_run_result = Plugins::getInstance()->run('submit_profile2', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//no errors , do it
if(empty($ERRORS))
{
$user_salt = substr(kleeja_base64_encode(pack("H*", sha1(mt_rand()))), 0, 7);
$mail = $new_mail ? "mail='" . $SQL->escape(strtolower(trim(p('pmail')))) . "'" : '';
$showmyfile = p('show_my_filecp', 'int') != $show_my_filecp ? ($mail == '' ? '': ',') . "show_my_filecp='" . p('show_my_filecp', 'int') . "'" : '';
$pass = !empty(p('ppass_new')) ? ($showmyfile != '' || $mail != '' ? ',' : '') . "password='" . $usrcp->kleeja_hash_password($SQL->escape(p('ppass_new')) . $user_salt) .
"', password_salt='" . $user_salt . "'" : "";
$id = (int) $usrcp->id();
$update_query = array(
'UPDATE' => "{$dbprefix}users",
'SET' => $mail . $showmyfile . $pass,
'WHERE' => 'id=' . $id,
);
is_array($plugin_run_result = Plugins::getInstance()->run('qr_update_data_in_profile', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
if(trim($update_query['SET']) == '')
{
$text = $lang['DATA_CHANGED_NO'];
}
else
{
$text = $lang['DATA_CHANGED_O_LO'];
$SQL->build($update_query);
}
kleeja_info($text, '', true, $action);
}
}#else submit
is_array($plugin_run_result = Plugins::getInstance()->run('end_profile', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
break;
//
//reset password page
//
case 'get_pass' :
//if not default system, let's give him a link for integrated script
if ((int) $config['user_system'] != 1)
{
$text = '<a href="' . (!empty($forgetpass_script_path) ? $forgetpass_script_path : $script_path) . '">' . $lang['LOST_PASS_FORUM'] . '</a>';
kleeja_info($text, $lang['PLACE_NO_YOU']);
}
//page info
$stylee = 'get_pass';
$titlee = $lang['GET_LOSTPASS'];
$action = 'ucp.php?go=get_pass';
$H_FORM_KEYS = kleeja_add_form_key('get_pass');
//no error yet
$ERRORS = false;
//after sent mail .. come here
//example: http://www.moyad.com/up/ucp.php?go=get_pass&activation_key=1af3405662ec373d672d003cf27cf998&uid=1
#
if(ig('activation_key') && ig('uid'))
{
is_array($plugin_run_result = Plugins::getInstance()->run('get_pass_activation_key', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$h_key = preg_replace('![^a-z0-9]!', '', g('activation_key'));
$u_id = g('uid', 'int');
#if it's empty ?
if(trim($h_key) == '')
{
big_error('No hash key', 'This is not a good link ... try again!');
}
$result = $SQL->query("SELECT new_password FROM {$dbprefix}users WHERE hash_key='" . $SQL->escape($h_key) . "' AND id=" . $u_id . "");
if($SQL->num_rows($result))
{
$npass = $SQL->fetch_array($result);
$npass = $npass['new_password'];
//password now will be same as new password
$update_query = array(
'UPDATE'=> "{$dbprefix}users",
'SET' => "password = '" . $npass . "', new_password = '', hash_key = ''",
'WHERE' => 'id=' . $u_id,
);
is_array($plugin_run_result = Plugins::getInstance()->run('qr_update_newpass_activation', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$SQL->build($update_query);
$text = $lang['OK_APPLY_NEWPASS'] . '<br /><a href="' . $config['siteurl'] . ($config['mod_writer'] ? 'login.html' : 'ucp.php?go=login') . '">' . $lang['LOGIN'] . '</a>';
kleeja_info($text);
exit;
}
//no else .. just do nothing cuz it's wrong and wrong mean spams !
redirect($config['siteurl'], true, true);
exit;//i dont trust functions :)
}
//logon before ?
if ($usrcp->name())
{
is_array($plugin_run_result = Plugins::getInstance()->run('get_pass_logon_before', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
kleeja_info($lang['LOGINED_BEFORE']);
}
//_post
$t_rmail = p('rmail');
//no submit
if (!ip('submit'))
{
is_array($plugin_run_result = Plugins::getInstance()->run('no_submit_get_pass', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
}
else // submit
{
$ERRORS = array();
is_array($plugin_run_result = Plugins::getInstance()->run('submit_get_pass', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//check for form key
if(!kleeja_check_form_key('get_pass'))
{
$ERRORS['form_key'] = $lang['INVALID_FORM_KEY'];
}
if(!kleeja_check_captcha())
{
$ERRORS['captcha'] = $lang['WRONG_VERTY_CODE'];
}
if (empty(p('rmail')))
{
$ERRORS['empty_fields'] = $lang['EMPTY_FIELDS'];
}
if (!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i', trim(strtolower(p('rmail')))))
{
$ERRORS['rmail'] = $lang['WRONG_EMAIL'];
}
else if ($SQL->num_rows($SQL->query("SELECT name FROM {$dbprefix}users WHERE mail='" . $SQL->escape(strtolower(p('rmail'))) . "'")) == 0)
{
$ERRORS['no_rmail'] = $lang['WRONG_DB_EMAIL'];
}
is_array($plugin_run_result = Plugins::getInstance()->run('submit_get_pass2', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//no errors, lets do it
if(empty($ERRORS))
{
$query = array(
'SELECT'=> 'u.*',
'FROM' => "{$dbprefix}users u",
'WHERE' => "u.mail='" . $SQL->escape(strtolower(trim(p('rmail')))) . "'"
);
is_array($plugin_run_result = Plugins::getInstance()->run('qr_select_mail_get_pass', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$result = $SQL->build($query);
$row = $SQL->fetch_array($result);
//generate password
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
$newpass = '';
for ($i = 0; $i < 7; ++$i)
{
$newpass .= substr($chars, (mt_rand() % strlen($chars)), 1);
}
$hash_key = md5($newpass . time());
$pass = (string) $usrcp->kleeja_hash_password($SQL->escape($newpass) . $row['password_salt']);
$to = $row['mail'];
$subject = $lang['GET_LOSTPASS'] . ':' . $config['sitename'];
$activation_link = $config['siteurl'] . 'ucp.php?go=get_pass&activation_key=' . urlencode($hash_key) . '&uid=' . $row['id'];
$message = "\n " . $lang['WELCOME'] . " " . $row['name'] . "\r\n " . sprintf($lang['GET_LOSTPASS_MSG'], $activation_link, $newpass) . "\r\n\r\n kleeja.com";
$update_query = array(
'UPDATE'=> "{$dbprefix}users",
'SET' => "new_password = '" . $SQL->escape($pass) . "', hash_key = '" . $hash_key . "'",
'WHERE' => 'id=' . $row['id'],
);
is_array($plugin_run_result = Plugins::getInstance()->run('qr_update_newpass_get_pass', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
$SQL->build($update_query);
$SQL->freeresult($result);
//send it
$send = send_mail($to, $message, $subject, $config['sitemail'], $config['sitename']);
if (!$send)
{
kleeja_err($lang['CANT_SEND_NEWPASS']);
}
else
{
$text = $lang['OK_SEND_NEWPASS'] . '<br /><a href="' . $config['siteurl'] . ($config['mod_writer'] ? 'login.html' : 'ucp.php?go=login') . '">' . $lang['LOGIN'] . '</a>';
kleeja_info($text);
}
//no need of this var
unset($newpass);
}
}
is_array($plugin_run_result = Plugins::getInstance()->run('end_get_pass', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
break;
//
// Wrapper for captcha file
//
case 'captcha':
include PATH . 'includes/captcha.php';
exit;
break;;
//
//add your own code here
//
default:
is_array($plugin_run_result = Plugins::getInstance()->run('default_usrcp_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
kleeja_err($lang['ERROR_NAVIGATATION']);
break;
}#end switch
is_array($plugin_run_result = Plugins::getInstance()->run('end_usrcp_page', get_defined_vars())) ? extract($plugin_run_result) : null; //run hook
//
//show style ...
//
$titlee = empty($titlee) ? $lang['USERS_SYSTEM'] : $titlee;
$stylee = empty($stylee) ? 'info' : $stylee;
//show style
if($show_style)
{
Saaheader($titlee, $extra);
echo $tpl->display($stylee);
Saafooter();
}