%PDF- %PDF-
| Direktori : /home1/lightco1/www/kichler.com.au/administrator/components/com_poweradmin/controllers/ |
| Current File : //home1/lightco1/www/kichler.com.au/administrator/components/com_poweradmin/controllers/history.php |
<?php
/*------------------------------------------------------------------------
# JSN PowerAdmin
# ------------------------------------------------------------------------
# author JoomlaShine.com Team
# copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved.
# Websites: http://www.joomlashine.com
# Technical Support: Feedback - http://www.joomlashine.com/joomlashine/contact-us.html
# @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
# @version $Id: history.php 16339 2012-09-24 10:22:59Z hiepnv $
-------------------------------------------------------------------------*/
// no direct access
defined('_JEXEC') or die;
jimport('joomla.application.component.controllerform');
// Register tables class path
JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.'/tables');
// Load helper
require_once JPATH_COMPONENT_ADMINISTRATOR.'/helpers/poweradmin.php';
error_reporting(0);
/**
* This is a controller class, it have some methods to load, save
* activities. All methods will be called from client-side by ajax request
*
* @author binhpt
*/
class PoweradminControllerHistory extends JControllerLegacy
{
var $_descriptionMaps = array(
'com_menus.item' => "Menu: \n{desc}",
'com_categories.category' => "Category description: \n{desc}",
'com_content.article' => "Article intro text: \n{desc}",
'com_modules.module' => "Module description: \n{desc}",
'com_plugins.plugin' => "Plug-in description: \n{desc}",
'com_templates.style' => "Template description: \n{desc}",
'com_banners.banner' => "Banners: \n{desc}",
'com_contacts.contact' => "Contacts: \r{desc}",
'com_weblinks.weblink' => "Web Links: \r{desc}"
);
/**
* Retrieve all activities of current user in database
* and response to client as JSON format.
*
* @return void
* @author binhpt
*/
public function load()
{
JSession::checkToken('get') or die( 'Invalid Token' );
// Get current user
$user = JFactory::getUser();
// Get Database object instance
$dbo = JFactory::getDBO();
$params = JSNConfigHelper::get('com_poweradmin');
// Query histories
$limit = $params->get('history_count', 30);
$dbo->setQuery("SELECT * FROM #__jsn_poweradmin_history WHERE user_id={$user->id} AND is_deleted = 0 ORDER BY visited DESC LIMIT {$limit}");
$histories = $dbo->loadObjectList();
$_histories = array();
foreach ($histories as $history) {
$_history = new stdClass();
$_history->title = (strlen($history->title) > 40) ? substr($history->title, 0, 40).' ...' : $history->title;
$_history->link = "index.php?option=com_poweradmin&task=history.open&id={$history->id}"."&" . JSession::getFormToken() . "=1";
$_history->css = '';
$_history->deleted = $history->is_deleted;
$_history->fulltitle = $history->description;
if (!empty($_history->fulltitle)) {
$params = array();
parse_str($history->object_key, $params);
// Remove unnecessarily while space
while (strpos($_history->fulltitle, ' ')) {
$_history->fulltitle = str_replace(' ', ' ', $_history->fulltitle);
}
$wordsLimit = 30;
if (str_word_count($_history->fulltitle) > $wordsLimit) {
$words = explode(' ', $_history->fulltitle);
$usableWords = array_slice($words, 0, $wordsLimit);
$_history->fulltitle = trim(implode(' ', $usableWords), '\'".');
$_history->fulltitle.= '...';
}
if (isset($params['view']) && isset($this->_descriptionMaps["{$params['option']}.{$params['view']}"]))
$_history->fulltitle = str_replace('{desc}', $_history->fulltitle, $this->_descriptionMaps["{$params['option']}.{$params['view']}"]);
}
else {
$_history->fulltitle = "{$history->list_page} \"{$history->title}\"";
}
$_histories[] = $_history;
}
echo json_encode($_histories);
jexit();
}
/**
* This task will receive id of history and redirect browser
* to edit form that allow user to edit item information
* @return void
*/
public function open()
{
JSession::checkToken('get') or die( 'Invalid Token' );
$id = JRequest::getInt('id', 0);
if ($id == 0) {
header("location: {$_SERVER['HTTP_RERFERER']}");
jexit();
}
$history = JTable::getInstance('History', 'PowerAdminTable');
$history->load($id);
if ($history->is_deleted == 1) {
header("location: {$_SERVER['HTTP_RERFERER']}");
jexit();
}
if (empty($history->form)) {
$params = array();
parse_str($history->params, $params);
if (preg_match('/admin|config|checkin|cache|login|users|menus|content|categories|media|banners|contact|messages|newsfeeds|redirect|search|weblinks|installer|modules|plugins|templates|languages/i', $params['option']) && isset($params['view']) && isset($params['layout'])) {
$params['task'] = "{$params['view']}.{$params['layout']}";
unset($params['view']);
unset($params['layout']);
$history->params = str_replace('&', '&', http_build_query($params));
}
header("location: index.php?{$history->params}");
}
else {
$form = json_decode($history->form, true);
$fields = '';
foreach ($form as $name => $value) {
if (!is_array($value))
$fields.= "<input type=\"hidden\" name=\"{$name}\" value=\"{$value}\" />";
else {
foreach ($value as $key => $val) {
$fields.= "<input type=\"hidden\" name=\"{$name}[{$key}]\" value=\"{$val}\" />";
}
}
}
echo "<form id=\"edit-form\" action=\"\" method=\"post\">{$fields}</form>";
echo "<script type=\"text/javascript\">document.getElementById('edit-form').submit()</script>";
}
jexit();
}
/**
* Save activity object that received from client
*
* @return void
*/
public function save()
{
JSession::checkToken('get') or die( 'Invalid Token' );
if (JRequest::getMethod() == 'GET')
jexit();
$post = JRequest::get('post');
$session = JFactory::getSession();
if (!isset($post['pageKey']) || !isset($post['title']) || empty($post['title']))
jexit();
if (isset($post['postSessionKey'])) {
$historyId = $this->saveByPost($session, $post, $post['pageKey'], $post['title']);
$session->clear($post['postSessionKey']);
}
elseif (isset($post['lastClickedLink'])) {
$historyId = $this->saveByGet($session, $post, $post['pageKey'], $post['title']);
}
$params = JSNConfigHelper::get('com_poweradmin');
$limit = $params->get('history_count', 10);
$dbo = JFactory::getDBO();
$query = $dbo->getQuery(true);
$query->select('id')
->from('#__jsn_poweradmin_history')
->orderBy('visited DESC');
$dbo->setQuery($query, 0, $limit);
$ids = $dbo->loadColumn();
if(!empty($ids))
{
$dbo->setQuery("DELETE FROM #__jsn_poweradmin_history WHERE id NOT IN(".implode(', ', $ids).")");
$dbo->execute();
}
echo $historyId;
// Close proccess to prevent output
jexit();
}
/**
* Save history that associated with query string
*
* @param JSession $session
* @param mixed $post
* @param string $pageKey
* @param string $title
*
* @return int ID of saved history
*/
private function saveByGet($session, $post, $pageKey, $title)
{
$link = $post['lastClickedLink'];
if ($post['lastClickedLink'] != $post['currentLink'] && preg_match('/(cid|id)=([0-9]+)/i', $post['currentLink']) && !preg_match('/(cid|id)=([0-9]+)/i', $post['lastClickedLink'])) {
$link = $post['currentLink'];
}
if (preg_match('/(cid|id)=[0-9]+/i', $link) && preg_match('/(cid|id)=([0-9]+)/i', $post['currentLink'], $matches)) {
$link = preg_replace('/(cid|id)=([0-9]+)/i', '\\1='.$matches[2], $link);
}
$params = array();
parse_str($link, $params);
$object_id = 0;
if (isset($params['id']))
$object_id = $params['id'];
else if (isset($params['cid'])) {
$object_id = (is_array($params['cid'])) ? array_shift($params['cid']) : $params['cid'];
}
else {
foreach ($params as $key => $value) {
if (preg_match('/[\-_\.]?id$/i', $key) && is_numeric($value)) {
$object_id = $value;
break;
}
}
}
// Skip save history if object id is not found
if ($object_id == 0)
return;
$userId = JFactory::getUser()->id;
$history = JTable::getInstance('History', 'PowerAdminTable');
$history->load(array('user_id' => $userId, 'object_key' => $pageKey, 'object_id' => $object_id));
if ($history->id == null) {
$history->load(array('user_id' => $userId, 'object_id' => $object_id, 'params' => $link));
if ($history->id == null) {
$history->bind(array(
'object_key'=> $pageKey,
'user_id' => $userId,
'object_id' => $object_id
));
}
}
$history->title = $title;
$history->params = $link;
$history->visited = time();
$history->component = (empty($history->component) && !empty($post['parent'])) ? $post['parent'] : $history->component;
$history->list_page = (empty($history->list_page) && !empty($post['name'])) ? $post['name'] : $history->list_page;
$history->list_page_params = (empty($history->list_page_params) && !empty($post['params'])) ? $post['params'] : $history->list_page_params;
$history->icon = (empty($history->icon) && !empty($post['iconPath'])) ? $post['iconPath'] : $history->icon;
$history->css = (empty($history->css) && !empty($post['iconCss'])) ? $post['iconCss'] : $history->css;
$history->description = $post['description'];
$get = array();
parse_str($history->params, $get);
if ($get['option'] == 'com_templates') {
if (!isset($get['task'])) {
$history->params = "option=com_templates&task={$get['view']}.{$get['layout']}&id={$object_id}";
unset($get['view']);
unset($get['layout']);
}
$history->icon = 'templates/bluestork/images/menu/icon-16-themes.png';
$history->css = 'icon-16-themes';
$history->component = 'Template Manager';
$history->list_page = 'Template Manager';
}
$history->store();
return $history->id;
}
/**
* Save history that associated with form data
*
* @param JSession $session
* @param mixed $post
* @param string $pageKey
* @param string $title
*
* @return int ID of saved history
*/
private function saveByPost($session, $post, $pageKey, $title)
{
if (!$session->has($post['postSessionKey']))
return;
$formData = $session->get($post['postSessionKey']);
$formHash = md5($formData);
$form = json_decode($formData);
$id = $form->cid;
if (is_array($id))
$id = array_shift($id);
$userId = JFactory::getUser()->id;
$history = JTable::getInstance('History', 'PowerAdminTable');
$history->load(array('user_id' => $userId, 'object_key' => $pageKey, 'object_id' => $id));
if ($history->id == null) {
$history->bind(array(
'user_id' => $userId,
'object_key'=> $pageKey,
'object_id' => $id
));
}
$history->bind(array(
'title' => $title,
'visited' => time(),
'form' => $formData,
'form_hash' => $formHash,
'component' => (empty($history->component) && !empty($post['parent'])) ? $post['parent'] : $history->component,
'list_page' => (empty($history->list_page) && !empty($post['name'])) ? $post['name'] : $history->list_page,
'list_page_params' => (empty($history->list_page_params) && !empty($post['params'])) ? $post['params'] : $history->list_page_params,
'icon' => (empty($history->icon) && !empty($post['iconPath'])) ? $post['iconPath'] : $history->icon,
'css' => (empty($history->css) && !empty($post['iconCss'])) ? $post['iconCss'] : $history->css
));
$history->description = $post['description'];
$history->store();
return $history->id;
}
}