768 lines
29 KiB
PHP
768 lines
29 KiB
PHP
<?php
|
|
/**
|
|
* The control file of entry 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 entry
|
|
* @version $Id: control.php 4227 2016-10-25 08:27:56Z liugang $
|
|
* @link https://xuanim.com
|
|
*/
|
|
class entry extends control
|
|
{
|
|
/**
|
|
* Manage all entries.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function admin($category = 0)
|
|
{
|
|
$entries = $this->entry->getEntries($type = 'custom', $category);
|
|
$categories = $this->dao->select('id, name')->from(TABLE_CATEGORY)->where('type')->eq('entry')->andWhere('deleted')->eq(0)->orderBy('`order`')->fetchPairs();
|
|
$tmpEntries = array();
|
|
$maxOrder = 0;
|
|
foreach($entries as $key => $entry)
|
|
{
|
|
if($maxOrder < $entry->order) $maxOrder = $entry->order;
|
|
|
|
/* Remove category that has in entries. */
|
|
if($entry->code == '' and isset($categories[$entry->id])) unset($categories[$entry->id]);
|
|
|
|
/* add web root if logo not start with / */
|
|
if(!empty($entry->logo) && substr($entry->logo, 0, 1) != '/') $entry->logo = $this->config->webRoot . $entry->logo;
|
|
if($entry->category)
|
|
{
|
|
$tmpEntries[$entry->category][] = $entry;
|
|
unset($entries[$key]);
|
|
}
|
|
}
|
|
|
|
/* Append children for category. */
|
|
$categoryEntry = '';
|
|
foreach($entries as $key => $entry)
|
|
{
|
|
if($entry->code == '' and empty($categoryEntry)) $categoryEntry = json_decode(json_encode($entry));
|
|
if($entry->code == '' and isset($tmpEntries[$entry->id])) $entry->children = $tmpEntries[$entry->id];
|
|
}
|
|
|
|
/* Merge category. */
|
|
foreach($categories as $categoryID => $category)
|
|
{
|
|
$entry = (object) json_decode(json_encode($categoryEntry));
|
|
$entry->id = $categoryID;
|
|
$entry->name = $category;
|
|
$entry->abbr = $category;
|
|
$entry->order = $maxOrder ++;
|
|
$entries[] = $entry;
|
|
}
|
|
|
|
$this->view->title = $this->lang->entry->common . $this->lang->colon . $this->lang->entry->admin;
|
|
$this->view->entries = $entries;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Create auth.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function create()
|
|
{
|
|
if(!empty($_POST))
|
|
{
|
|
if((!$this->post->buildin) and $this->post->login !== '' and (strpos($this->post->login, '/') !== 0) and (!preg_match('/https?\:\/\//Ui', $this->post->login))) $this->send(array('result' => 'fail', 'message' => $this->lang->entry->error->url));
|
|
$comment = json_encode($_POST);
|
|
if($this->post->zentao)
|
|
{
|
|
/* Check admin account, password and code. */
|
|
$error = array();
|
|
if($this->post->adminPassword == '') $error['adminPassword'] = sprintf($this->lang->error->notempty, $this->lang->password);
|
|
if($this->post->adminAccount == '') $error['adminAccount'] = sprintf($this->lang->error->notempty, $this->lang->account);
|
|
if($this->post->code == '') $error['code'] = sprintf($this->lang->error->notempty, $this->lang->entry->code);
|
|
if(!empty($error))
|
|
{
|
|
$this->entry->addEntryAction(0, 'create', 'fail', $comment);
|
|
$this->send(array('result' => 'fail', 'message' => $error));
|
|
}
|
|
|
|
/* Get zentao url. */
|
|
$loginUrl = $this->post->login;
|
|
if(strpos($loginUrl, '&') === false) $zentaoUrl = substr($loginUrl, 0, strrpos($loginUrl, '/') + 1);
|
|
if(strpos($loginUrl, '&') !== false) $zentaoUrl = substr($loginUrl, 0, strpos($loginUrl, '?'));
|
|
|
|
/* Get zentao config. */
|
|
$zentaoConfig = $this->loadModel('sso')->getZentaoServerConfig($zentaoUrl);
|
|
if(empty($zentaoConfig))
|
|
{
|
|
$this->entry->addEntryAction(0, 'create', 'fail', $comment);
|
|
$this->send(array('result' => 'fail', 'message' => $this->lang->entry->error->zentaoUrl));
|
|
}
|
|
if(isset($zentaoConfig->result) and $zentaoConfig->result == 'fail') $this->send($zentaoConfig);
|
|
if(strpos($zentaoConfig->version, 'pro') !== false and version_compare($zentaoConfig->version, 'pro5.0', '<')) $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->entry->error->version, 'pro5.0')));
|
|
if(strpos($zentaoConfig->version, 'pro') === false and is_numeric($zentaoConfig->version[0]) and version_compare($zentaoConfig->version, '7.4', '<')) $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->entry->error->version, '7.4')));
|
|
|
|
$_POST['login'] = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, "sso", "login", '', 'html', false);
|
|
$_POST['logout'] = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, "sso", "logout", '', 'html', false);
|
|
$_POST['block'] = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, "block", "main", '', 'html', false);
|
|
|
|
/* Init zentao setting. */
|
|
$result = $this->loadModel('sso')->initZentaoSSO($zentaoConfig, $zentaoUrl, $this->post->adminAccount, $this->post->adminPassword, $this->post->code, $this->post->key);
|
|
if($result['result'] != 'success')
|
|
{
|
|
$this->entry->addEntryAction(0, 'create', 'fail', $comment);
|
|
$this->send($result);
|
|
}
|
|
}
|
|
|
|
$entryID = $this->entry->create();
|
|
if(dao::isError())
|
|
{
|
|
$this->entry->addEntryAction(0, 'create', 'fail', $comment);
|
|
$this->send(array('result' => 'fail', 'message' => dao::geterror()));
|
|
}
|
|
$locate = inlink('admin');
|
|
if($this->post->zentao) $locate = inlink('bindUser', "id=$entryID&sessionID=$zentaoConfig->sessionID");
|
|
$this->entry->addEntryAction($this->dao->lastInsertID(), 'create', 'success', $comment);
|
|
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate, 'entries' => $this->entry->getJSONEntries()));
|
|
}
|
|
$this->view->title = $this->lang->entry->create;
|
|
$this->view->position[] = $this->lang->entry->create;
|
|
|
|
$this->view->key = $this->entry->createKey();
|
|
$this->view->groups = $this->loadModel('group')->getPairs();
|
|
$this->view->categories = array('0' => '') + $this->loadModel('tree')->getOptionMenu('entry', 0, $removeRoot = true);
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Visit entry.
|
|
*
|
|
* @param int $entryID
|
|
* @param string $referer
|
|
* @param int $userID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function visit($entryID, $referer = '', $userID)
|
|
{
|
|
$referer = !empty($_GET['referer']) ? $this->get->referer : $referer;
|
|
$entry = $this->entry->getById($entryID);
|
|
$location = $entry->login;
|
|
$pathinfo = parse_url($location);
|
|
if($entry->integration && !$entry->buildin)
|
|
{
|
|
$token = $this->loadModel('sso')->createToken(session_id(), $entryID, $userID, helper::getRemoteIp());
|
|
if(!empty($pathinfo['query']))
|
|
{
|
|
$location = rtrim($location, '&') . "&token=$token";
|
|
}
|
|
else
|
|
{
|
|
$location = rtrim($location, '?') . "?token=$token";
|
|
}
|
|
if(!empty($referer)) $location .= '&referer=' . $referer;
|
|
}
|
|
|
|
$this->locate($location);
|
|
}
|
|
|
|
/**
|
|
* Logout
|
|
*
|
|
* @param int $entryID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function logout($entryID)
|
|
{
|
|
$entry = $this->entry->getById($entryID);
|
|
$logout = $entry->logout;
|
|
$token = $this->loadModel('sso')->createToken(session_id(), $entryID);
|
|
|
|
if(strpos('&', $logout) !== false)
|
|
{
|
|
$location = rtrim($logout, '&') . "&token=$token";
|
|
}
|
|
else
|
|
{
|
|
$location = rtrim($logout, '?') . "?token=$token";
|
|
}
|
|
|
|
$this->locate($location);
|
|
}
|
|
|
|
/**
|
|
* Integration entry.
|
|
*
|
|
* @param string $code
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function integration($code)
|
|
{
|
|
if(!empty($_POST))
|
|
{
|
|
$this->entry->integration($code);
|
|
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::geterror()));
|
|
$this->send(array('result' => 'success', 'locate' => inlink('admin'), 'entries' => $this->entry->getJSONEntries()));
|
|
}
|
|
|
|
$entry = $this->entry->getByCode($code);
|
|
if($entry->size != 'max')
|
|
{
|
|
$size = json_decode($entry->size);
|
|
$entry->size = 'custom';
|
|
$entry->width = $size->width;
|
|
$entry->height = $size->height;
|
|
}
|
|
|
|
$this->view->title = $this->lang->entry->common . $this->lang->colon . $this->lang->entry->integration;
|
|
$this->view->entry = $entry;
|
|
$this->view->code = $code;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Set style for entry.
|
|
*
|
|
* @param string $code
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function style($code)
|
|
{
|
|
if(!empty($_POST))
|
|
{
|
|
$entryID = $this->entry->setStyle($code);
|
|
$this->entry->updateLogo($entryID);
|
|
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::geterror()));
|
|
$this->send(array('result' => 'success', 'locate' => inlink('admin'), 'entries' => $this->entry->getJSONEntries()));
|
|
}
|
|
|
|
$entry = $this->entry->getByCode($code);
|
|
if($entry->size != 'max')
|
|
{
|
|
$size = json_decode($entry->size);
|
|
$entry->size = 'custom';
|
|
$entry->width = $size->width;
|
|
$entry->height = $size->height;
|
|
}
|
|
|
|
$this->view->title = $this->lang->entry->common . $this->lang->colon . $this->lang->entry->style;
|
|
$this->view->entry = $entry;
|
|
$this->view->code = $code;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Edit auth.
|
|
*
|
|
* @param string $code
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function edit($code)
|
|
{
|
|
$entry = $this->entry->getByCode($code);
|
|
|
|
if(!empty($_POST))
|
|
{
|
|
if((!$this->post->buildin) and $this->post->login !== '' and (strpos($this->post->login, '/') !== 0) and (!preg_match('/https?\:\/\//Ui', $this->post->login))) $this->send(array('result' => 'fail', 'message' => $this->lang->entry->error->url));
|
|
$comment = json_encode($_POST);
|
|
if($entry->zentao)
|
|
{
|
|
/* Get zentao url. */
|
|
$loginUrl = $this->post->login;
|
|
if(strpos($loginUrl, '&') === false) $zentaoUrl = substr($loginUrl, 0, strrpos($loginUrl, '/') + 1);
|
|
if(strpos($loginUrl, '&') !== false) $zentaoUrl = substr($loginUrl, 0, strpos($loginUrl, '?'));
|
|
|
|
/* Get zentao config. */
|
|
$zentaoConfig = $this->loadModel('sso')->getZentaoServerConfig($zentaoUrl);
|
|
if(empty($zentaoConfig))
|
|
{
|
|
$this->entry->addEntryAction($entry->id, 'edit', 'fail', $comment);
|
|
$this->send(array('result' => 'fail', 'message' => $this->lang->entry->error->zentaoUrl));
|
|
}
|
|
|
|
$_POST['login'] = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, "sso", "login", '', 'html', false);
|
|
$_POST['logout'] = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, "sso", "logout", '', 'html', false);
|
|
$_POST['block'] = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, "block", "main", '', 'html', false);
|
|
}
|
|
|
|
$this->entry->update($code);
|
|
if(dao::isError())
|
|
{
|
|
$this->entry->addEntryAction($entry->id, 'edit', 'fail', $comment);
|
|
$this->send(array('result' => 'fail', 'message' => dao::geterror()));
|
|
}
|
|
$this->entry->addEntryAction($entry->id, 'edit', 'success', $comment);
|
|
$this->send(array('result' => 'success', 'locate' => inlink('admin'), 'entries' => $this->entry->getJSONEntries()));
|
|
}
|
|
|
|
if($entry->size != 'max')
|
|
{
|
|
$size = json_decode($entry->size);
|
|
$entry->size = 'custom';
|
|
$entry->width = $size->width;
|
|
$entry->height = $size->height;
|
|
}
|
|
|
|
$file = $this->dao->select('*')->from(TABLE_FILE)->where('id')->eq($entry->package)->fetch();
|
|
|
|
$this->view->title = $this->lang->entry->edit;
|
|
$this->view->position[] = $this->lang->entry->edit;
|
|
|
|
$this->view->file = $file;
|
|
$this->view->entry = $entry;
|
|
$this->view->filename = empty($file) ? $this->lang->entry->empty : "$file->title.$file->extension";
|
|
$this->view->code = $code;
|
|
$this->view->categories = array('0' => '') + $this->loadModel('tree')->getOptionMenu('entry', 0, $removeRoot = true);
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Order entry.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function order()
|
|
{
|
|
if($_POST)
|
|
{
|
|
/* Sort entries by order and id. */
|
|
$entries = array();
|
|
foreach($this->post->order as $id => $order)
|
|
{
|
|
$entry = new stdclass();
|
|
$entry->id = $id;
|
|
$entry->order = $order;
|
|
$entries[$id] = $entry;
|
|
}
|
|
usort($entries, 'commonModel::sortEntryByOrder');
|
|
|
|
/* Update order. */
|
|
$order = 10;
|
|
foreach($entries as $entry)
|
|
{
|
|
$this->dao->update(TABLE_ENTRY)->set('`order`')->eq($order)->where('id')->eq($entry->id)->exec();
|
|
$order += 10;
|
|
}
|
|
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
|
|
/* delete custome sort data. */
|
|
$allEntries = isset($this->config->personal->common->customApp) ? json_decode($this->config->personal->common->customApp->value) : new stdclass();
|
|
foreach($allEntries as $entry)
|
|
{
|
|
unset($entry->order);
|
|
}
|
|
$this->loadModel('setting')->setItem("{$this->app->user->account}.sys.common.customApp", json_encode($allEntries));
|
|
/* Refresh config to sort custom apps. */
|
|
$this->config->personal->common->customApp->value = helper::jsonEncode($entries);
|
|
|
|
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('admin'), 'entries' => $this->entry->getJSONEntries()));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sort entries.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function sort()
|
|
{
|
|
if(!empty($_POST))
|
|
{
|
|
if(!$this->post->name) die(js::alert($this->lang->entry->error->name));
|
|
if(!$this->post->ip) die(js::alert($this->lang->entry->error->ip));
|
|
|
|
$this->entry->updateEntry($code);
|
|
if(dao::isError()) die(js::error(dao::getError()));
|
|
$this->send(array('result' => 'success', 'locate'=>inlink('admin')));
|
|
}
|
|
|
|
$this->view->title = $this->lang->entry->common . $this->lang->colon . $this->lang->entry->sort;
|
|
$this->view->entries = $this->entry->getEntries();
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Delete entry.
|
|
*
|
|
* @param string $code
|
|
* @param string $confirm
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function delete($code)
|
|
{
|
|
$entry = $this->entry->getByCode($code);
|
|
if($this->entry->delete($code))
|
|
{
|
|
$this->entry->addEntryAction($entry->id, 'delete', 'success');
|
|
$this->send(array('result' => 'success', 'entries' => $this->entry->getJSONEntries()));
|
|
}
|
|
$this->entry->addEntryAction($entry->id, 'delete', 'fail');
|
|
$this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
/**
|
|
* Update status for entry.
|
|
*
|
|
* @param $code
|
|
*/
|
|
public function status($code)
|
|
{
|
|
$entry = $this->entry->getByCode($code);
|
|
$status = $entry->status == 'online' ? 'offline' : 'online';
|
|
$comment = json_encode(array('status' => $status));
|
|
if($this->entry->updateStatus($code))
|
|
{
|
|
$this->entry->addEntryAction($entry->id, 'updateStatus', 'success', $comment);
|
|
$this->send(array('result' => 'success'));
|
|
}
|
|
$this->entry->addEntryAction($entry->id, 'updateStatus', 'fail', $comment);
|
|
$this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
/**
|
|
* Get all departments.
|
|
*
|
|
* @param string $entry
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function depts($entry)
|
|
{
|
|
if($this->post->key) $key = $this->post->key;
|
|
if($this->get->key) $key = $this->get->key;
|
|
if($this->entry->checkIP($entry) and $this->entry->getAppKey($entry) == $key)
|
|
{
|
|
$depts = $this->entry->getAllDepts();
|
|
$response['status'] = 'success';
|
|
$response['data'] = json_encode($depts);
|
|
$this->send($response);
|
|
}
|
|
|
|
$response['status'] = 'fail';
|
|
$response['data'] = 'key error';
|
|
$this->send($response);
|
|
}
|
|
|
|
/**
|
|
* Get all users.
|
|
*
|
|
* @param string $entry
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function users($entry)
|
|
{
|
|
if($this->post->key) $key = $this->post->key;
|
|
if($this->get->key) $key = $this->get->key;
|
|
if($this->entry->checkIP($entry) and $this->entry->getAppKey($entry) == $key)
|
|
{
|
|
$depts = $this->entry->getAllUsers();
|
|
$response['status'] = 'success';
|
|
$response['data'] = json_encode($depts);
|
|
$this->send($response);
|
|
}
|
|
|
|
$response['status'] = 'fail';
|
|
$response['data'] = 'key error';
|
|
$this->send($response);
|
|
}
|
|
|
|
/**
|
|
* Get entry blocks.
|
|
*
|
|
* @param int $entryID
|
|
* @param int $index
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function blocks($entryID, $index = 0)
|
|
{
|
|
$entry = $this->entry->getByCode($entryID);
|
|
if($entry->buildin)
|
|
{
|
|
$this->get->set('mode', 'getblocklist');
|
|
$this->get->set('hash', $entry->key);
|
|
$this->get->set('lang', $this->app->getClientLang());
|
|
$blocks = $this->fetch('block', 'index', array(), $entry->code);
|
|
$blocks = json_decode($blocks, true);
|
|
}
|
|
else
|
|
{
|
|
$blocks = $this->entry->getBlocksByAPI($entry);
|
|
}
|
|
|
|
if(empty($blocks)) return false;
|
|
|
|
$blockPairs = array('' => '') + $blocks;
|
|
|
|
$block = $this->loadModel('block')->getBlock($index);
|
|
|
|
echo "<th>{$this->lang->entry->lblBlock}</th>";
|
|
echo '<td>' . html::select('entryBlock', $blockPairs, ($block and $block->source != '') ? $block->block : '', "class='form-control' onchange='getBlockParams(this.value, \"$entryID\")'") . '</td>';
|
|
if(isset($block->source)) echo "<script>$(function(){getBlockParams($('#entryBlock').val(), '{$block->source}')})</script>";
|
|
}
|
|
|
|
/**
|
|
* Set block that is from entry.
|
|
*
|
|
* @param int $index
|
|
* @param int $entryID
|
|
* @param int $blockID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function setBlock($index, $entryID, $blockID)
|
|
{
|
|
$block = $this->loadModel('block')->getBlock($index);
|
|
|
|
$entry = $this->entry->getByCode($entryID);
|
|
if($entry->buildin)
|
|
{
|
|
$this->get->set('mode', 'getblockform');
|
|
$this->get->set('blockid', $blockID);
|
|
$this->get->set('hash', $entry->key);
|
|
$this->get->set('lang', $this->app->getClientLang());
|
|
$params = $this->fetch('block', 'index', array(), $entry->code);
|
|
$params = json_decode($params, true);
|
|
}
|
|
else
|
|
{
|
|
$params = $this->entry->getBlockParams($entry, $blockID);
|
|
}
|
|
|
|
$this->view->params = $params;
|
|
$this->view->block = $block ? $block : array();
|
|
$this->view->index = $index;
|
|
$this->view->blockID = $blockID;
|
|
$this->view->entryID = $entryID;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Print buildin entry block.
|
|
*
|
|
* @param int $index
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function printBlock($index)
|
|
{
|
|
$block = $this->loadModel('block')->getBlock($index);
|
|
if(empty($block)) return false;
|
|
if($block->source == '') $this->locate($this->createLink('block', 'printBlock', "index=$index"));
|
|
|
|
$entry = $this->loadModel('entry')->getByCode($block->source);
|
|
if(!$entry->buildin) $this->locate($this->createLink('block', 'printBlock', "index=$index"));
|
|
|
|
$html = '';
|
|
$block->params->account = $this->app->user->account;
|
|
$block->params->uid = $this->app->user->id;
|
|
$params = base64_encode(json_encode($block->params));
|
|
|
|
$this->get->set('mode', 'getblockdata');
|
|
$this->get->set('blockid', $block->block);
|
|
$this->get->set('hash', $entry->key);
|
|
$this->get->set('entry', $entry->id);
|
|
$this->get->set('app');
|
|
$this->get->set('lang', $this->app->getClientLang());
|
|
$this->get->set('sso', base64_encode(commonModel::getSysURL() . helper::createLink('entry', 'visit', "entry=$entry->id")));
|
|
$this->get->set('param', $params);
|
|
$html = $this->fetch('block', 'index', array(), $entry->code);
|
|
|
|
die($html);
|
|
}
|
|
|
|
/**
|
|
* custom sort apps.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function customSort()
|
|
{
|
|
if($_POST)
|
|
{
|
|
$orders = $_POST;
|
|
$allEntries = isset($this->config->personal->common->customApp) ? json_decode($this->config->personal->common->customApp->value) : new stdclass();
|
|
/* Merge entries settings. */
|
|
foreach($orders as $id => $order)
|
|
{
|
|
if(!isset($allEntries->$id))
|
|
{
|
|
$allEntries->$id = new stdclass();
|
|
$allEntries->{$id}->id = $id;
|
|
}
|
|
$allEntries->{$id}->order = $order * 10;
|
|
|
|
$this->dao->update(TABLE_ENTRY)->set('`order`')->eq($order * 10)->where('`id`')->eq($id)->exec();
|
|
}
|
|
$this->loadModel('setting')->setItem("{$this->app->user->account}.sys.common.customApp", json_encode($allEntries));
|
|
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
|
|
}
|
|
|
|
/**
|
|
* update entry menu.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function updateEntryMenu()
|
|
{
|
|
if($_POST)
|
|
{
|
|
$id = $this->post->id;
|
|
$visible = $this->post->menu == 'all' ? 1 : 0;
|
|
|
|
if($this->app->user->admin == 'super')
|
|
{
|
|
$this->dao->update(TABLE_ENTRY)->set('visible')->eq($visible)->where('id')->eq($id)->exec();
|
|
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
}
|
|
|
|
$allEntries = isset($this->config->personal->common->customApp) ? json_decode($this->config->personal->common->customApp->value) : new stdclass();
|
|
if(!isset($allEntries->$id))
|
|
{
|
|
$allEntries->$id = new stdclass();
|
|
$allEntries->{$id}->id = $id;
|
|
}
|
|
$allEntries->{$id}->visible = $visible;
|
|
|
|
$this->loadModel('setting')->setItem("{$this->app->user->account}.sys.common.customApp", json_encode($allEntries));
|
|
if(dao::isError()) $this->send(array('result' => 'fael', 'message' => dao::getError()));
|
|
}
|
|
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
|
|
}
|
|
|
|
/**
|
|
* Input admin of zentao.
|
|
*
|
|
* @param int $id
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function zentaoAdmin($id)
|
|
{
|
|
$entry = $this->entry->getByID($id);
|
|
if($_POST)
|
|
{
|
|
/* Get zentao url. */
|
|
if(strpos($entry->login, '&') === false) $zentaoUrl = substr($entry->login, 0, strrpos($entry->login, '/') + 1);
|
|
if(strpos($entry->login, '&') !== false) $zentaoUrl = substr($entry->login, 0, strpos($entry->login, '?'));
|
|
/* Get zentao config. */
|
|
$zentaoConfig = $this->loadModel('sso')->getZentaoServerConfig($zentaoUrl);
|
|
$result = $this->loadModel('sso')->initZentaoSSO($zentaoConfig, $zentaoUrl, $this->post->account, $this->post->password, $entry->code, $entry->key);
|
|
if($result['result'] != 'success') $this->send($result);
|
|
$this->send(array('result' => 'success', 'locate' => inlink('bindUser', "id=$id&sessionID=$zentaoConfig->sessionID")));
|
|
}
|
|
|
|
$this->view->title = $this->lang->entry->bindUser;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Bind user with zentao.
|
|
*
|
|
* @param int $id
|
|
* @param string $sessionID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function bindUser($id, $sessionID)
|
|
{
|
|
$entry = $this->entry->getByID($id);
|
|
|
|
/* Get zentao url. */
|
|
if(strpos($entry->login, '&') === false) $zentaoUrl = substr($entry->login, 0, strrpos($entry->login, '/') + 1);
|
|
if(strpos($entry->login, '&') !== false) $zentaoUrl = substr($entry->login, 0, strpos($entry->login, '?'));
|
|
|
|
/* Get zentao config. */
|
|
$zentaoConfig = $this->loadModel('sso')->getZentaoServerConfig($zentaoUrl);
|
|
$zentaoConfig->sessionID = $sessionID;
|
|
|
|
if($_POST)
|
|
{
|
|
foreach($this->post->ranzhiAccounts as $key => $ranzhiAccount)
|
|
{
|
|
if(isset($this->post->createUsers[$key]) and $this->post->createUsers[$key])
|
|
{
|
|
$user = $this->loadModel('user')->getByAccount($ranzhiAccount);
|
|
if($user->gender == 'u') $user->gender = 'm';
|
|
$createUrl = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, 'sso', 'createUser');
|
|
$result = commonModel::http($createUrl, $user);
|
|
if($result != 'success') $this->send(array('result' => 'fail', 'message' => $result));
|
|
}
|
|
else
|
|
{
|
|
$data = new stdclass();
|
|
$data->ranzhiAccount = $ranzhiAccount;
|
|
$data->zentaoAccount = $this->post->zentaoAccounts[$key];
|
|
$bindUrl = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, 'sso', 'bindUser');
|
|
$result = commonModel::http($bindUrl, $data);
|
|
if($result != 'success') $this->send(array('result' => 'fail', 'message' => $result));
|
|
}
|
|
}
|
|
|
|
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('bindUser', "id=$id&sessionID=$sessionID")));
|
|
}
|
|
|
|
$getUsersUrl = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, 'sso', 'getUserPairs');
|
|
$getUsersUrl .= "&hash={$entry->key}";
|
|
$results = commonModel::http($getUsersUrl);
|
|
$zentaoUsers = json_decode($results, true);
|
|
|
|
$getBindUsersUrl = $this->sso->createZentaoLink($zentaoConfig, $zentaoUrl, 'sso', 'getBindUsers');
|
|
$getBindUsersUrl .= "&hash={$entry->key}";
|
|
$results = commonModel::http($getBindUsersUrl);
|
|
$bindUsers = json_decode($results, true);
|
|
|
|
$this->view->title = $this->lang->entry->bindUser;
|
|
$this->view->ranzhiUsers = $this->loadModel('user')->getPairs('noempty,noclosed,nodeleted,noforbidden');
|
|
$this->view->zentaoUsers = $zentaoUsers;
|
|
$this->view->bindUsers = $bindUsers;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Set category.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function category()
|
|
{
|
|
if($_POST)
|
|
{
|
|
$result = $this->loadModel('tree')->manageChildren('entry', 0, $this->post->children);
|
|
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
|
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('admin')));
|
|
}
|
|
|
|
$this->view->title = $this->lang->entry->common . $this->lang->colon . $this->lang->entry->setCategory;
|
|
$this->view->children = $this->loadModel('tree')->getChildren(0, 'entry');
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Get entries of json.
|
|
*
|
|
* @access public
|
|
* @return json
|
|
*/
|
|
public function getJSONEntries()
|
|
{
|
|
die($this->entry->getJSONEntries());
|
|
}
|
|
}
|