244 lines
8.5 KiB
PHP
244 lines
8.5 KiB
PHP
<?php
|
|
/**
|
|
* The model file of custom module of ZenTaoCMS.
|
|
*
|
|
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
|
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
|
* @author Congzhi Chen <congzhi@cnezsoft.com>
|
|
* @package custom
|
|
* @version $Id$
|
|
* @link http://www.zentao.net
|
|
*/
|
|
class customModel extends model
|
|
{
|
|
/**
|
|
* Get all custom lang.
|
|
*
|
|
* @access public
|
|
* @return array
|
|
*/
|
|
public function getAll()
|
|
{
|
|
$allCustomLang = $this->dao->select('*')->from(TABLE_LANG)->orderBy('lang,id')->fetchAll('id');
|
|
|
|
$currentLang = $this->app->getClientLang();
|
|
$processedLang = array();
|
|
foreach($allCustomLang as $id => $customLang)
|
|
{
|
|
if($customLang->lang != $currentLang and $customLang->lang != 'all') continue;
|
|
$processedLang[$customLang->module][$customLang->section][$customLang->key] = $customLang->value;
|
|
}
|
|
|
|
return $processedLang;
|
|
}
|
|
|
|
/**
|
|
* Set value of an item.
|
|
*
|
|
* @param string $path zh-cn.story.soucreList.customer.1
|
|
* @param string $value
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function setItem($path, $value = '')
|
|
{
|
|
$level = substr_count($path, '.');
|
|
$section = '';
|
|
$system = 1;
|
|
|
|
if($level <= 1) return false;
|
|
if($level == 2) list($lang, $module, $key) = explode('.', $path);
|
|
if($level == 3) list($lang, $module, $section, $key) = explode('.', $path);
|
|
if($level == 4) list($lang, $module, $section, $key, $system) = explode('.', $path);
|
|
|
|
$item = new stdclass();
|
|
$item->lang = $lang;
|
|
$item->module = $module;
|
|
$item->section = $section;
|
|
$item->key = $key;
|
|
$item->value = $value;
|
|
$item->system = $system;
|
|
|
|
$this->dao->replace(TABLE_LANG)->data($item)->exec();
|
|
}
|
|
|
|
/**
|
|
* Get some items
|
|
*
|
|
* @param string $paramString see parseItemParam();
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function getItems($paramString)
|
|
{
|
|
return $this->createDAO($this->parseItemParam($paramString), 'select')->orderBy('lang,id')->fetchAll('key');
|
|
}
|
|
|
|
/**
|
|
* Delete items.
|
|
*
|
|
* @param string $paramString see parseItemParam();
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function deleteItems($paramString)
|
|
{
|
|
$this->createDAO($this->parseItemParam($paramString), 'delete')->exec();
|
|
}
|
|
|
|
/**
|
|
* Parse the param string for select or delete items.
|
|
*
|
|
* @param string $paramString lang=xxx&module=story§ion=sourceList&key=customer and so on.
|
|
* @access public
|
|
* @return array
|
|
*/
|
|
public function parseItemParam($paramString)
|
|
{
|
|
/* Parse the param string into array. */
|
|
parse_str($paramString, $params);
|
|
|
|
/* Init fields not set in the param string. */
|
|
$fields = 'lang,module,section,key';
|
|
$fields = explode(',', $fields);
|
|
foreach($fields as $field) if(!isset($params[$field])) $params[$field] = '';
|
|
|
|
return $params;
|
|
}
|
|
|
|
/**
|
|
* Create a DAO object to select or delete one or more records.
|
|
*
|
|
* @param array $params the params parsed by parseItemParam() method.
|
|
* @param string $method select|delete.
|
|
* @access public
|
|
* @return object
|
|
*/
|
|
public function createDAO($params, $method = 'select')
|
|
{
|
|
return $this->dao->$method('*')->from(TABLE_LANG)->where('1 = 1')
|
|
->beginIF($params['lang'])->andWhere('lang')->in($params['lang'])->fi()
|
|
->beginIF($params['module'])->andWhere('module')->in($params['module'])->fi()
|
|
->beginIF($params['section'])->andWhere('section')->in($params['section'])->fi()
|
|
->beginIF($params['key'])->andWhere('`key`')->in($params['key'])->fi();
|
|
}
|
|
|
|
public static function getCustomMenu($module, $method)
|
|
{
|
|
global $app, $lang, $config;
|
|
if(!isset($lang->$module->menu)) return array();
|
|
$allMenu['main'] = $lang->menu;
|
|
$allMenu['module'] = $lang->$module->menu;
|
|
|
|
/* Process main and module menu. */
|
|
$processedMenus = array();
|
|
foreach($allMenu as $type => $menu)
|
|
{
|
|
$menucustom = '';
|
|
$menuOrder = array();
|
|
$menuStatus = array();
|
|
if($type == 'main') $menucustom = isset($config->menucustom->main) ? $config->menucustom->main : '';
|
|
if($type == 'module')$menucustom = isset($config->menucustomModule->$module) ? $config->menucustomModule->$module : '';
|
|
/* Get order and status from config. */
|
|
if($menucustom)
|
|
{
|
|
$menuStatus = json_decode($menucustom, true);
|
|
$i = 1;
|
|
foreach($menuStatus as $menuKey => $status)
|
|
{
|
|
$order = $i * 5;
|
|
$menuOrder[$order] = $menuKey;
|
|
$i++;
|
|
}
|
|
}
|
|
if(empty($menuOrder)) $menuOrder = $type == 'main' ? $lang->menuOrder : $lang->$module->menuOrder;
|
|
|
|
/* Merge all menu. */
|
|
$inOrderMenu = ',' . join(',', $menuOrder) . ',';
|
|
$notInOrderMenu = array();
|
|
foreach($menu as $menuKey => $menuName)
|
|
{
|
|
if(strpos($inOrderMenu, ",$menuKey,") === false) $notInOrderMenu[] = $menuKey;
|
|
}
|
|
if($notInOrderMenu)
|
|
{
|
|
$order = count($menuOrder) * 5;
|
|
foreach($notInOrderMenu as $menuKey)
|
|
{
|
|
$order = $order + 5;
|
|
$menuOrder[$order] = $menuKey;
|
|
}
|
|
}
|
|
ksort($menuOrder, SORT_ASC);
|
|
|
|
/* Rebuild menu. */
|
|
$processedMenu = new stdclass();
|
|
foreach($menuOrder as $order => $menuKey)
|
|
{
|
|
if(!isset($menu->$menuKey)) continue;
|
|
$menuContent = $menu->$menuKey;
|
|
if(is_string($menuContent)) $menuContent = array('link' => $menuContent);
|
|
$menuContent['status'] = isset($menuStatus[$menuKey]) ? $menuStatus[$menuKey] : 'show';
|
|
$menuContent['order'] = $order;
|
|
|
|
if(strpos($menuContent['link'], '|') !== false)
|
|
{
|
|
list($menuTitle, $menuModule, $menuMethod) = explode('|', $menuContent['link']);
|
|
if($menuContent['status'] == 'show' and !common::hasPriv($menuModule, $menuMethod)) $menuContent['status'] = 'hide';
|
|
}
|
|
|
|
$processedMenu->$menuKey = $menuContent;
|
|
}
|
|
$processedMenus[$type] = $processedMenu;
|
|
}
|
|
|
|
/* Process featurebar. */
|
|
$app->loadLang($module);
|
|
$featurebar = '';
|
|
if(isset($lang->$module->featurebar[$method])) $featurebar = $lang->$module->featurebar[$method];
|
|
$menucustomKey = 'menucustom' . $module;
|
|
if($featurebar)
|
|
{
|
|
$menuOrder = array();
|
|
$menuStatus = array();
|
|
if(isset($config->$menucustomKey->$method))
|
|
{
|
|
$menuStatus = json_decode($config->$menucustomKey->$method, true);
|
|
foreach($menuStatus as $menuKey => $status) $menuOrder[] = $menuKey;
|
|
}
|
|
|
|
/* Merge all menu. */
|
|
$inOrderMenu = ',' . join(',', $menuOrder) . ',';
|
|
$notInOrderMenu = array();
|
|
foreach($featurebar as $menuKey => $menuName)
|
|
{
|
|
if(strpos($inOrderMenu, ",$menuKey,") === false) $notInOrderMenu[] = $menuKey;
|
|
}
|
|
if($notInOrderMenu)
|
|
{
|
|
$order = count($menuOrder);
|
|
foreach($notInOrderMenu as $menuKey)
|
|
{
|
|
$menuOrder[$order] = $menuKey;
|
|
$order++;
|
|
}
|
|
}
|
|
ksort($menuOrder, SORT_ASC);
|
|
|
|
$processedMenu = new stdclass();
|
|
foreach($menuOrder as $order => $menuKey)
|
|
{
|
|
$menuContent = $featurebar[$menuKey];
|
|
$menuContent = array('link' => $menuContent);
|
|
$menuContent['status'] = isset($menuStatus[$menuKey]) ? $menuStatus[$menuKey] : 'show';
|
|
$menuContent['order'] = ($order + 1) * 5;
|
|
|
|
$processedMenu->$menuKey = $menuContent;
|
|
}
|
|
$processedMenus['featurebar'] = $processedMenu;
|
|
}
|
|
|
|
return $processedMenus;
|
|
}
|
|
}
|