760 lines
25 KiB
PHP
Executable File
760 lines
25 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* The control file of user module of XXB.
|
|
*
|
|
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd., www.zentao.net)
|
|
* @license ZOSL (https://zpl.pub/page/zoslv1.html)
|
|
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
|
* @package user
|
|
* @version $Id: control.php 4219 2016-10-25 05:45:16Z daitingting $
|
|
* @link https://xuanim.com
|
|
*/
|
|
class user extends control
|
|
{
|
|
/**
|
|
* The referer
|
|
*
|
|
* @var string
|
|
* @access private
|
|
*/
|
|
private $referer;
|
|
|
|
/**
|
|
* Login.
|
|
*
|
|
* @param string $referer
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function login($referer = '')
|
|
{
|
|
$this->setReferer($referer);
|
|
|
|
/* Load mail config for reset password. */
|
|
$this->app->loadModuleConfig('mail');
|
|
|
|
$loginLink = $this->createLink('user', 'login');
|
|
$denyLink = $this->createLink('user', 'deny');
|
|
|
|
/* Reload lang by lang of get when viewType is json. */
|
|
if($this->app->getViewType() == 'json' and $this->get->lang and $this->get->lang != $this->app->getClientLang())
|
|
{
|
|
$this->app->setClientLang($this->get->lang);
|
|
$this->app->loadLang('user');
|
|
}
|
|
|
|
/* If the user logon already, goto the pre page. */
|
|
if($this->user->isLogon())
|
|
{
|
|
if($this->app->getViewType() == 'json')
|
|
{
|
|
$data = $this->user->getDataInJSON($this->app->user);
|
|
die(helper::removeUTF8Bom(json_encode(array('status' => 'success') + $data)));
|
|
}
|
|
|
|
if($this->referer and strpos($loginLink . $denyLink, $this->referer) !== false) $this->locate($this->referer);
|
|
$this->locate($this->createLink($this->config->default->module));
|
|
exit;
|
|
}
|
|
|
|
/* If the user sumbit post, check the user and then authorize him. */
|
|
if(!empty($_POST))
|
|
{
|
|
$user = $this->user->login($this->post->account, $this->post->password);
|
|
if($this->app->getViewType() == 'json')
|
|
{
|
|
if($user)
|
|
{
|
|
$this->user->addUserAction($user->id, 'login', 'success');
|
|
$data = $this->user->getDataInJSON($user);
|
|
die(helper::removeUTF8Bom(json_encode(array('status' => 'success') + $data)));
|
|
}
|
|
else
|
|
{
|
|
$user = $this->user->getByAccount($this->post->account);
|
|
$this->user->addUserAction($user->id, 'login', 'fail');
|
|
die(helper::removeUTF8Bom(json_encode(array('status' => 'failed', 'reason' => $this->lang->user->loginFailed))));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(!$user)
|
|
{
|
|
$user = $this->user->getByAccount($this->post->account);
|
|
$this->user->addUserAction(0, 'login', 'fail');
|
|
$this->send(array('result'=>'fail', 'message' => $this->lang->user->loginFailed));
|
|
}
|
|
else
|
|
{
|
|
$this->user->addUserAction($user->id, 'login', 'success');
|
|
}
|
|
}
|
|
|
|
/* Goto the referer or to the default module */
|
|
if($this->post->referer != false and strpos($loginLink . $denyLink, $this->post->referer) === false)
|
|
{
|
|
if($this->config->requestType == 'PATH_INFO')
|
|
{
|
|
$path = substr($this->post->referer, strrpos($this->post->referer, '/') + 1);
|
|
$path = rtrim($path, '.html');
|
|
if(empty($path) or strpos($path, $this->config->requestFix) === false) $path = $this->config->requestFix;
|
|
list($module, $method) = explode($this->config->requestFix, $path);
|
|
}
|
|
else
|
|
{
|
|
$url = html_entity_decode($this->post->referer);
|
|
$param = substr($url, strrpos($url, '?') + 1);
|
|
|
|
$module = $this->config->default->module;
|
|
$method = $this->config->default->method;
|
|
if(strpos($param, '&') !== false) list($module, $method) = explode('&', $param);
|
|
$module = str_replace('m=', '', $module);
|
|
$method = str_replace('f=', '', $method);
|
|
}
|
|
|
|
if(commonModel::hasPriv($module, $method))
|
|
{
|
|
$this->send(array('result'=>'success', 'locate' => $this->post->referer));
|
|
}
|
|
else
|
|
{
|
|
$this->send(array('result'=>'success', 'locate' => $this->createLink('index', 'index')));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$this->send(array('result'=>'success', 'locate' => $this->createLink('index', 'index')));
|
|
}
|
|
}
|
|
else if($this->app->getViewType() == 'json')
|
|
{
|
|
die(helper::removeUTF8Bom(json_encode(array('status' => 'failed', 'reason' => $this->lang->user->loginFailed))));
|
|
}
|
|
|
|
if(!$this->session->random) $this->session->set('random', md5(time() . mt_rand()));
|
|
|
|
$ignoreNotice = isset($this->config->global->ignoreNotice) ? json_decode($this->config->global->ignoreNotice) : array();
|
|
$this->view->ignoreNotice = $ignoreNotice;
|
|
|
|
$this->view->title = $this->lang->user->login->common;
|
|
$this->view->referer = $this->referer;
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* logout
|
|
*
|
|
* @param int $referer
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function logout($referer = 0)
|
|
{
|
|
if($this->app->user->account != 'guest') $this->user->addUserAction($this->app->user->id, 'logout', 'success');
|
|
|
|
session_destroy();
|
|
setcookie('keepLogin', 'false', $this->config->cookieLife, $this->config->webRoot);
|
|
$vars = !empty($referer) ? "referer=$referer" : '';
|
|
$this->locate($this->createLink('user', 'login', $vars));
|
|
}
|
|
|
|
/**
|
|
* The deny page.
|
|
*
|
|
* @param mixed $module the denied module
|
|
* @param mixed $method the deinied method
|
|
* @param string $refererBeforeDeny the referer of the denied page.
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function deny($module, $method, $refererBeforeDeny = '')
|
|
{
|
|
$this->app->loadLang($module);
|
|
$this->app->loadLang('index');
|
|
|
|
$this->setReferer();
|
|
|
|
$this->view->title = $this->lang->user->deny;
|
|
$this->view->position[] = $this->lang->user->deny;
|
|
|
|
$this->view->module = $module;
|
|
$this->view->method = $method;
|
|
$this->view->denyPage = $this->referer;
|
|
$this->view->refererBeforeDeny = $refererBeforeDeny;
|
|
|
|
die($this->display());
|
|
}
|
|
|
|
/**
|
|
* The user control panel of the front
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function control()
|
|
{
|
|
if($this->app->user->account == 'guest') $this->locate(inlink('login'));
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* View current user's profile.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function profile()
|
|
{
|
|
if($this->app->user->account == 'guest') $this->locate(inlink('login'));
|
|
$this->view->title = $this->lang->user->profile;
|
|
$this->view->user = $this->user->getByAccount($this->app->user->account);
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Create user
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function create()
|
|
{
|
|
if(!empty($_POST))
|
|
{
|
|
if(in_array(strtolower(trim($this->post->account)), $this->config->user->retainAccount)) $this->send(array('result' => 'fail', 'message' => array('account' => sprintf($this->lang->user->retainAccount, trim($this->post->account)))));
|
|
|
|
$result = $this->user->create();
|
|
|
|
if(dao::isError())
|
|
{
|
|
$this->user->addUserAction(0, 'create', 'fail');
|
|
$this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
if($result)
|
|
{
|
|
$this->user->addUserAction($this->dao->lastInsertID(), 'create', 'success');
|
|
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('admin')));
|
|
}
|
|
else
|
|
{
|
|
$this->user->addUserAction(0, 'create', 'fail');
|
|
$this->send(array('result' => 'fail', 'message' => $this->lang->user->exceedUserLimit, 'locate' => inlink('admin')));
|
|
}
|
|
}
|
|
$this->view->title = $this->lang->user->create;
|
|
$this->view->position[] = $this->lang->user->create;
|
|
|
|
$this->view->treeMenu = $this->loadModel('tree')->getTreeMenu('dept', 0, array('treeModel', 'createDeptAdminLink'));
|
|
$this->view->depts = $this->tree->getOptionMenu('dept');
|
|
|
|
$this->view->exceedUserLimit = $this->user->checkUserLimit();
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Edit a user.
|
|
*
|
|
* @param string $account
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function edit($account = '', $from = '')
|
|
{
|
|
if(!commonModel::hasPriv('user', 'edit')) die(js::locate($this->createLink('user', 'deny', "module=user&method=edit")));
|
|
|
|
die($this->fetch('user', 'editself', "account={$account}&from={$from}"));
|
|
}
|
|
|
|
/**
|
|
* Edit login user.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function editself($account = '', $from = '')
|
|
{
|
|
if($this->app->user->account == 'guest') $this->locate(inlink('login'));
|
|
if(!$account) $account = $this->app->user->account;
|
|
|
|
if(!empty($_POST))
|
|
{
|
|
$user = $this->user->getByAccount($account);
|
|
$this->user->update($account, $from);
|
|
if($_POST['password1'] !== '') unset($_POST['password1']);
|
|
if($_POST['password2'] !== '') unset($_POST['password2']);
|
|
$comment = json_encode($_POST);
|
|
if(dao::isError())
|
|
{
|
|
$this->user->addUserAction($user->id, 'edit', 'fail', $comment);
|
|
$this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
$this->user->addUserAction($user->id, 'edit', 'success', $comment);
|
|
$locate = $from == 'admin' ? inlink('admin') : inlink('profile');
|
|
$this->send(array('result' => 'success', 'locate' => $locate));
|
|
}
|
|
|
|
$this->view->title = $this->lang->user->edit;
|
|
$this->view->position[] = $this->lang->user->edit;
|
|
|
|
$this->view->treeMenu = $this->loadModel('tree')->getTreeMenu('dept', 0, array('treeModel', 'createDeptAdminLink'));
|
|
$this->view->depts = $this->tree->getOptionMenu('dept');
|
|
$this->view->user = $this->user->getByAccount($account);
|
|
if($from == 'admin')
|
|
{
|
|
$clientLang = $this->app->getClientLang();
|
|
$dbFields = $this->loadModel('setting')->getItems("lang=$clientLang,all&module=user§ion=roleList", 'lang');
|
|
|
|
$this->view->roleList = !empty($dbFields) ? array('' => '') + array_column($dbFields, 'value', 'key') : $this->lang->user->roleList;
|
|
$this->display('user', 'edit.admin');
|
|
}
|
|
else
|
|
{
|
|
$this->display('user', 'edit');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Delete a user.
|
|
*
|
|
* @param string $account
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function delete($account = '')
|
|
{
|
|
$user = $this->user->getByAccount($account);
|
|
if($this->user->delete($account))
|
|
{
|
|
$this->user->addUserAction($user->id, 'delete', 'success');
|
|
$this->send(array('result' => 'success'));
|
|
}
|
|
$this->user->addUserAction($user->id, 'delete', 'fail');
|
|
$this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
/**
|
|
* Recover a user.
|
|
*
|
|
* @param string $account
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function recover($account = '')
|
|
{
|
|
if($this->user->recover($account))
|
|
{
|
|
$user = $this->user->getByAccount($account);
|
|
$this->user->addUserAction($user->id, 'recover', 'success');
|
|
$this->send(array('result' => 'success'));
|
|
}
|
|
$this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
/**
|
|
* Admin users list.
|
|
*
|
|
* @param int $deptID
|
|
* @param string $mode
|
|
* @param srting $search
|
|
* @param srting $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pagerID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function admin($deptID = 0, $mode = 'normal', $search = '', $orderBy = 'id_asc', $recTotal = 0, $recPerPage = 10, $pageID = 1)
|
|
{
|
|
if($this->post->search) die($this->locate(inlink('admin', "deptID=$deptID&mode=$mode&search={$this->post->search}&orderBy=$orderBy&recTotal=0&recPerPage=$recPerPage&pageID=1")));
|
|
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = new pager($recTotal, $recPerPage, $pageID);
|
|
|
|
$this->view->treeMenu = $this->loadModel('tree')->getTreeMenu('dept', 0, array('treeModel', 'createDeptAdminLink'));
|
|
$this->view->depts = $this->tree->getOptionMenu('dept');
|
|
$this->view->users = $this->user->getList($deptID, $mode, $accountList = '', $search, $orderBy, $pager);
|
|
$this->view->deptID = $deptID;
|
|
$this->view->mode = $mode;
|
|
$this->view->search = $search;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->type = $mode . 'List';
|
|
|
|
$this->view->title = $this->lang->user->list;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Reset the user client config
|
|
*
|
|
* @param string $account
|
|
* @return void
|
|
*/
|
|
public function resetClientConfig($account = '')
|
|
{
|
|
if(!$account) $this->send(array('result'=>'fail', 'message' => $this->lang->user->actionFail));
|
|
|
|
$result = $this->user->resetClientConfig($account);
|
|
if($result)
|
|
{
|
|
$this->user->addUserAction($this->user->getByAccount($account)->id, 'resetClientConfig', 'success');
|
|
die($this->send(array('result' => 'success', 'message'=> $this->lang->user->resetClientConfigMsg, 'locate' => $this->server->http_referer)));
|
|
}
|
|
|
|
$this->user->addUserAction($this->user->getByAccount($account)->id, 'resetClientConfig', 'fail');
|
|
$this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
/**
|
|
* forbid a user.
|
|
*
|
|
* @param string $account
|
|
* @return void
|
|
*/
|
|
public function forbid($account = '')
|
|
{
|
|
if(!$account) $this->send(array('result'=>'fail', 'message' => $this->lang->user->actionFail));
|
|
|
|
$result = $this->user->forbid($account);
|
|
if($result)
|
|
{
|
|
$this->user->addUserAction($this->user->getByAccount($account)->id, 'forbid', 'success');
|
|
die($this->send(array('result'=>'success', 'locate' => $this->server->http_referer)));
|
|
}
|
|
|
|
$this->user->addUserAction($this->user->getByAccount($account)->id, 'forbid', 'fail');
|
|
$this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
/**
|
|
* Active user
|
|
*
|
|
* @param string $account
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function active($account = '')
|
|
{
|
|
if(!$account) $this->send(array('result'=>'fail', 'message' => $this->lang->user->actionFail));
|
|
|
|
$result = $this->user->active($account);
|
|
if($result)
|
|
{
|
|
$this->user->addUserAction($this->user->getByAccount($account)->id, 'active', 'success');
|
|
die($this->send(array('result'=>'success', 'locate' => $this->server->http_referer)));
|
|
}
|
|
|
|
$this->user->addUserAction($this->user->getByAccount($account)->id, 'active', 'fail');
|
|
$this->send(array( 'result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
/**
|
|
* set the referer
|
|
*
|
|
* @param string $referer
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function setReferer($referer = '')
|
|
{
|
|
if(!empty($referer))
|
|
{
|
|
$this->referer = helper::safe64Decode($referer);
|
|
}
|
|
else
|
|
{
|
|
$this->referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
|
|
}
|
|
|
|
if(strpos($this->referer, 'entry') !== false and strpos($this->referer, 'visit') !== false)
|
|
{
|
|
if($this->config->requestType == 'PATH_INFO')
|
|
{
|
|
if(substr($this->referer, strpos($this->referer, 'entry-visit-') + strlen('entry-visit-'), strpos($this->referer, '.html')) > 4) $this->referer = '';
|
|
}
|
|
else
|
|
{
|
|
$url = parse_url($this->referer);
|
|
parse_str($url['query'], $params);
|
|
if($params['m'] == 'entry' and $params['f'] == 'visit' and $params['entryID'] > 4) $this->referer = '';
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Change password.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function changePassword()
|
|
{
|
|
if($this->app->user->account == 'guest') $this->locate(inlink('login'));
|
|
|
|
if(!empty($_POST))
|
|
{
|
|
$this->user->updatePassword($this->app->user->account);
|
|
if(dao::isError()) $this->send(array( 'result' => 'fail', 'message' => dao::getError() ) );
|
|
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
|
|
}
|
|
|
|
$this->view->user = $this->user->getByAccount($this->app->user->account);
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* upload avatar
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function uploadAvatar($lite = false)
|
|
{
|
|
if($_SERVER['REQUEST_METHOD'] == 'POST')
|
|
{
|
|
$result = $this->user->uploadAvatar($lite);
|
|
$this->send($result);
|
|
}
|
|
|
|
$this->view->user = $this->user->getByAccount($this->app->user->account);
|
|
$this->view->title = $this->lang->user->uploadAvatar;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* crop avatar
|
|
*
|
|
* @param int $image
|
|
* @param boolean|string $lite
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function cropAvatar($image, $lite = false)
|
|
{
|
|
$image = $this->loadModel('file')->getByID($image);
|
|
|
|
if(!empty($_POST))
|
|
{
|
|
$size = fixer::input('post')->get();
|
|
$this->loadModel('file')->cropImage(
|
|
$image->realPath,
|
|
$image->realPath,
|
|
$size->left,
|
|
$size->top,
|
|
$size->right - $size->left,
|
|
$size->bottom - $size->top,
|
|
$size->scaled
|
|
? $size->scaleWidth
|
|
: 0,
|
|
$size->scaled
|
|
? $size->scaleHeight
|
|
: 0
|
|
);
|
|
$user = $this->user->getByAccount($this->app->user->account);
|
|
$this->app->user->avatar = $user->avatar;
|
|
$comment = new stdClass();
|
|
$comment->avatar = $user->avatar;
|
|
$this->user->addUserAction($user->id, 'edit', 'success', json_encode($comment));
|
|
exit('success');
|
|
}
|
|
|
|
$this->view->user = $this->user->getByAccount($this->app->user->account);
|
|
$this->view->title = $this->lang->user->cropAvatar;
|
|
$this->view->image = $image;
|
|
|
|
/* Use lite interface when $lite is true in boolean. */
|
|
$lite = filter_var($lite, FILTER_VALIDATE_BOOLEAN);
|
|
if($lite) $this->display('user', 'cropavatarlite');
|
|
if(!$lite) $this->display();
|
|
}
|
|
|
|
/**
|
|
* Change user's avatar.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function changeAvatar()
|
|
{
|
|
if($this->app->user->account == 'guest') $this->locate(inlink('login'));
|
|
$this->view->title = $this->lang->user->avatar;
|
|
$this->view->user = $this->user->getByAccount($this->app->user->account);
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Batch create users.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function batchCreate()
|
|
{
|
|
$userLeft = $this->ajaxCheckUserLimit();
|
|
|
|
if(!empty($_POST))
|
|
{
|
|
$result = $this->user->batchCreate($userLeft);
|
|
$this->send($result);
|
|
}
|
|
|
|
$this->view->title = $this->lang->user->batchCreate;
|
|
$this->view->deptList = $this->loadModel('tree')->getOptionMenu('dept');
|
|
$this->view->userLeft = $userLeft;
|
|
$this->view->moduleMenu = false;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Export template for user.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function exportTemplate()
|
|
{
|
|
if($_POST)
|
|
{
|
|
$fields = array();
|
|
$rows = array();
|
|
foreach($this->config->user->templateFields as $key)
|
|
{
|
|
$fields[$key] = $key == 'password1' ? $this->lang->user->password : $this->lang->user->{$key};
|
|
for($i = 0; $i < $this->post->num; $i++) $rows[$i][$key] = '';
|
|
}
|
|
|
|
$deptList = $this->loadModel('tree')->getOptionMenu('dept');
|
|
|
|
$data = new stdclass();
|
|
$data->kind = 'user';
|
|
$data->fields = $fields;
|
|
$data->rows = $rows;
|
|
$data->title = $this->lang->user->template;
|
|
$data->customWidth = $this->config->user->excelCustomWidth;
|
|
$data->genderList = array_values((array)$this->lang->genderList);
|
|
$data->deptList = array_values($deptList);
|
|
$data->roleList = array_values($this->lang->user->roleList);
|
|
$data->sysDataList = $this->config->user->listFields;
|
|
$data->listStyle = $this->config->user->listFields;
|
|
|
|
$excelData = new stdclass();
|
|
$excelData->dataList[] = $data;
|
|
$excelData->fileName = $this->lang->user->template;
|
|
|
|
$this->app->loadClass('excel')->export($excelData, $this->post->fileType);
|
|
}
|
|
|
|
$this->display('file', 'exportTemplate');
|
|
}
|
|
|
|
/**
|
|
* Import users.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function import()
|
|
{
|
|
if($_SERVER['REQUEST_METHOD'] == 'POST')
|
|
{
|
|
$file = $this->loadModel('file')->getUpload('files');
|
|
if(empty($file)) $this->send(array('result' => 'fail', 'message' => $this->lang->excel->error->noFile));
|
|
$file = $file[0];
|
|
|
|
$fileName = $this->file->savePath . $this->file->getSaveName($file['pathname']);
|
|
move_uploaded_file($file['tmpname'], $fileName);
|
|
|
|
$phpExcel = $this->app->loadClass('phpexcel');
|
|
$phpReader = new PHPExcel_Reader_Excel2007();
|
|
if(!$phpReader->canRead($fileName))
|
|
{
|
|
$phpReader = new PHPExcel_Reader_Excel5();
|
|
if(!$phpReader->canRead($fileName))
|
|
{
|
|
unlink($fileName);
|
|
$this->send(array('result' => 'fail', 'message' => $this->lang->excel->error->canNotRead));
|
|
}
|
|
}
|
|
$this->session->set('importFile', $fileName);
|
|
$this->send(array('result' => 'success', 'locate' => (inlink('showImport'))));
|
|
}
|
|
|
|
$this->view->title = $this->lang->import;
|
|
$this->display('file', 'import');
|
|
}
|
|
|
|
/**
|
|
* Show the result of import.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function showImport()
|
|
{
|
|
$userLeft = $this->ajaxCheckUserLimit();
|
|
|
|
if(!$this->session->importFile) $this->locate(inlink('admin'));
|
|
|
|
if($_POST)
|
|
{
|
|
$result = $this->user->batchCreate($userLeft);
|
|
|
|
if(zget($result, 'result') != 'fail')
|
|
{
|
|
unlink($this->session->importFile);
|
|
unset($_SESSION['importFile']);
|
|
}
|
|
|
|
$this->send($result);
|
|
}
|
|
|
|
$fields = array();
|
|
foreach($this->config->user->templateFields as $field) $fields[$field] = $this->lang->user->$field;
|
|
|
|
$userList = $this->loadModel('file')->parseExcel($fields);
|
|
$deptList = $this->loadModel('tree')->getOptionMenu('dept');
|
|
|
|
foreach($userList as $key => $user)
|
|
{
|
|
$user->dept = zget(array_flip($deptList), $user->dept);
|
|
$user->role = zget(array_flip($this->lang->user->roleList), $user->role);
|
|
$user->gender = zget(array_flip((array)$this->lang->genderList), $user->gender);
|
|
}
|
|
|
|
$this->view->title = $this->lang->import . $this->lang->user->common;
|
|
$this->view->deptList = $deptList;
|
|
$this->view->userList = $userList;
|
|
$this->view->userLeft = $userLeft;
|
|
$this->view->moduleMenu = false;
|
|
$this->display('user', 'batchCreate');
|
|
}
|
|
|
|
/**
|
|
* Check user limit.
|
|
*
|
|
* @param string $from
|
|
* @access public
|
|
* @return int|bool
|
|
*/
|
|
public function ajaxCheckUserLimit($from = '')
|
|
{
|
|
$userLeft = $this->user->checkUserLimit(true);
|
|
|
|
if(helper::isAjaxRequest())
|
|
{
|
|
if($userLeft > 0 || $userLeft === false)
|
|
{
|
|
if($from == 'js') $this->send(array('result' => 'success'));
|
|
return $userLeft;
|
|
}
|
|
|
|
$this->send(array('result' => 'fail', 'message' => $this->lang->user->exceeded));
|
|
}
|
|
|
|
return $userLeft;
|
|
}
|
|
}
|