add favorite features to admin module

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@8703 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
flyskyko 2011-07-29 15:00:28 +00:00
parent bf2f77fb4d
commit 88638b4ba8
9 changed files with 262 additions and 12 deletions

View file

@ -144,5 +144,118 @@
}
else return $output;
}
/**
* @brief Toggle favorite
**/
function procAdminToggleFavorite()
{
$siteSrl = Context::get('site_srl');
$moduleName = Context::get('module_name');
$key = Context::get('key');
// check favorite exists
$oModel = &getAdminModel('admin');
$output = $oModel->isExistsFavorite($siteSrl, $moduleName, $key);
if (!$output->toBool()) return $output;
// if exists, delete favorite
if ($output->get('result'))
{
$favoriteSrl = $output->get('favoriteSrl');
$output = $this->deleteFavorite($favoriteSrl);
}
// if not exists, insert favorite
else
{
$output = $this->insertFavorite($siteSrl, $moduleName, $key);
}
if (!$output->toBool()) return $output;
$this->setRedirectUrl(Context::get('error_return_url'));
}
/**
* @brief Insert favorite
**/
function insertFavorite($siteSrl, $module, $key)
{
$args->site_srl = $siteSrl;
$args->module = $module;
$args->key = $key;
$output = executeQuery('admin.insertFavorite', $args);
return $output;
}
/**
* @brief Delete favorite
**/
function deleteFavorite($favoriteSrl)
{
$args->admin_favorite_srl = $favoriteSrl;
$output = executeQuery('admin.deleteFavorite', $args);
return $output;
}
/**
* @brief set favorites at one time
**/
function setFavoritesByModule($siteSrl, $module, $keyList)
{
$oModel = &getAdminModel('admin');
$output = $oModel->getFavoriteListByModule($siteSrl, $module);
if (!$output->toBool()) return $output;
$originList = $output->get('list');
// find insert key
$insertKey = array_diff($keyList, $originList);
// find delete key
$deleteKey = array_diff($originList, $keyList);
// start transaction
$oDB = &DB::getInstance();
$oDB->begin();
// insert key
foreach($insertKey as $key)
{
$output = $this->insertFavorite($siteSrl, $module, $key);
if (!$output->toBool())
{
$oDB->rollback();
return $output;
}
}
// delete key
foreach($deleteKey as $key)
{
$output = $oModel->isExistsFavorite($siteSrl, $module, $key);
if (!$output->toBool())
{
$oDB->rollback();
return $output;
}
$favoriteSrl = $output->get('favoriteSrl');
if ($favoriteSrl)
{
$output = $this->deleteFavorite($favoriteSrl);
if (!$output->toBool())
{
$oDB->rollback();
return $output;
}
}
}
// commit
$oDB->commit();
return new Object();
}
}
?>

View file

@ -330,4 +330,78 @@
return $lang->menu_gnb_sub;
}
/**
* @brief Get admin favorite list
**/
function getFavoriteList($siteSrl)
{
$args->site_srl = $siteSrl;
$output = executeQueryArray('admin.getFavoriteList', $args);
if (!$output->toBool()) return $output;
if (!$output->data) return new Object();
foreach($output->data as $row)
{
$targetModule = $row->module;
$oTargetModuleAdminModel = &getAdminModel($targetModule);
if (!$oTargetModuleAdminModel) continue;
if (!method_exists($oTargetModuleAdminModel, 'getFavoriteInfo')) continue;
$favoriteInfo = $oTargetModuleAdminModel->getFavoriteInfo($row->key);
$favoriteList[] = $favoriteInfo;
}
$returnObject = new Object();
$returnObject->add('favoriteList', $favoriteList);
return $returnObject;
}
/**
* @brief Check available insert favorite
**/
function isExistsFavorite($siteSrl, $module, $key)
{
$args->site_srl = $siteSrl;
$args->module = $module;
$args->key = $key;
$output = executeQuery('admin.getFavorite', $args);
if (!$output->toBool()) return $output;
$returnObject = new Object();
if ($output->data)
{
$returnObject->add('result', true);
$returnObject->add('favoriteSrl', $output->data->admin_favorite_srl);
}
else
{
$returnObject->add('result', false);
}
return $returnObject;
}
/**
* @brief Get favorite by module, site
**/
function getFavoriteListByModule($siteSrl, $module)
{
$args->site_srl = $siteSrl;
$args->module = $module;
$columnList = array('key');
$output = executeQueryArray('admin.getFavoriteList', $args, $columnList);
if (!$output->toBool()) return $output;
if (!$output->data) $output->data = array();
$list = array();
foreach($output->data as $row)
{
$list[$row->key] = $row->key;
}
$returnObject = new Object();
$returnObject->add('list', $list);
return $returnObject;
}
}

View file

@ -11,6 +11,7 @@
<action name="procAdminRecompileCacheFile" type="controller" standalone="true" />
<action name="procAdminLogout" type="controller" standalone="true" />
<action name="procAdminInsertThemeInfo" type="controller" standalone="true" ruleset="insertThemeInfo" />
<action name="procAdminToggleFavorite" type="controller" ruleset="toggleFavorite" />
<action name="getAdminFTPList" type="model" standalone="true" />
</actions>

View file

@ -0,0 +1,8 @@
<query id="deleteFavorite" action="delete">
<tables>
<table name="admin_favorite" />
</tables>
<conditions>
<condition operation="equal" column="admin_favorite_srl" var="admin_favorite_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,17 @@
<query id="getFavorite" action="select">
<tables>
<table name="admin_favorite" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="admin_favorite_srl" var="favorite_srl" />
<condition operation="equal" column="site_srl" var="site_srl" pipe="and" />
<condition operation="equal" column="module" var="module" pipe="and" />
<condition operation="equal" column="key" var="key" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="admin_favorite_srl" order="desc" />
</navigation>
</query>

View file

@ -0,0 +1,12 @@
<query id="getFavoriteList" action="select">
<tables>
<table name="admin_favorite" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" />
<condition operation="equal" column="module" var="module" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,10 @@
<query id="insertFavorite" action="insert">
<tables>
<table name="admin_favorite" />
</tables>
<columns>
<column name="site_srl" var="site_srl" filter="number" notnull="notnull" />
<column name="module" var="module" notnull="notnull" />
<column name="key" var="key" notnull="notnull" />
</columns>
</query>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules />
<fields>
<field name="site_srl" required="true" rule="number" />
<field name="module_name" required="true" />
<field name="key" required="true" />
</fields>
</ruleset>

View file

@ -0,0 +1,6 @@
<table name="admin_favorite">
<column name="admin_favorite_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" auto_increment="auto_increment" />
<column name="site_srl" type="number" size="11" />
<column name="module" type="varchar" size="80" />
<column name="key" type="varchar" size="255" />
</table>