%PDF- %PDF-
Direktori : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_poweradmin/models/ |
Current File : /home/lightco1/upgrade.lightco.com.au/administrator/components/com_poweradmin/models/search.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: search.php 16477 2012-09-27 03:23:59Z hiepnv $ -------------------------------------------------------------------------*/ defined( '_JEXEC' ) or die( 'Restricted access' ); jimport('joomla.application.component.modellist'); class PoweradminModelSearch extends JModelList { private function getDescriptionMap() { $_descriptionMap = array( 'menus' => "Menu: \n{desc}", 'users' => "Login name – Email: \n{desc}", 'categories' => "Category description: \n{desc}", 'articles' => "Article intro text: \n{desc}", 'modules' => "Position: \n {desc}\n\nLocation: {location}", 'plugins' => "Plug-in type: \n{desc}", 'templates' => "Description: \n{desc}\n\nLocation: {location}", // Component specific 'com_banners' => "Banners: \n{desc}", 'com_banners_categories' => "Categories: \r{desc}", 'com_banners_clients' => "Clients: \r{desc}", 'com_contacts' => "Contacts: \r{desc}", 'com_contacts_categories' => "Categories: \r{desc}", 'com_messages' => "Messages: \r{desc}", 'com_newsfeeds' => "News Feed: \r{desc}", 'com_newsfeeds_categories' => "Categories: \r{desc}", 'com_weblinks' => "Web Links: \r{desc}", 'com_weblinks_categories' => "Categories: \r{desc}" // 'com_zoo' => "Item intro text: \r", // 'com_zoo_categories' => "Category description: \r", // 'com_easyblog' => "Item intro text: \r", // 'com_easyblog_categories' => "Category description: \r", // 'com_virtuemart' => "Item intro text: \r", // 'com_virtuemart_categories' => "Category description: \r", ); JPluginHelper::importPlugin('jsnpoweradmin'); $dispatcher = JDispatcher::getInstance(); $extDescMap = $dispatcher->trigger('getSpotLightDescriptionMap'); if (count($extDescMap)) { foreach ($extDescMap as $k=>$v) { $_descriptionMap = array_merge($v, $_descriptionMap); } } return $_descriptionMap; } /** * Retrieve the number of results that matched with condition * @return int */ public function getTotal () { $this->context = $this->getState('search.coverage'); $query = $this->getListQuery(true); $mapping = $this->_getTableMapping($this->context); if ($mapping == null) return 0; $this->_db->setQuery($query); return $this->_db->loadResult(); } public function getItems () { $params = JSNConfigHelper::get('com_poweradmin'); $resultLimit = (int)$params->get('search_result_num', 10); $this->context = $this->getState('search.coverage'); $mapping = $this->_getTableMapping($this->context); if ($mapping == null) return array(); $results = $this->_getList($this->getListQuery(), 0, $resultLimit); if (!is_array($results) || count($results) == 0) return array(); $items = array(); foreach ($results as $record) { $item = new stdClass; $item->type = 'item'; $item->icon = $mapping['icon']; //$item->data = $record; if (isset($record->manifest_cache)) { $lang = JFactory::getLanguage(); $item->title = (isset($record->name)) ? $record->name : $record->title; switch ($this->context) { case 'plugins': $lang->load("{$record->name}.sys", JPATH_ADMINISTRATOR); $item->title = $this->_title(JText::_(strtoupper($record->name),true)); $item->description = $this->_description(ucfirst($record->folder)); break; case 'modules': $lang->load("{$record->element}.sys", JPATH_SITE); $_location = $record->client_id ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); $_location = $_location; $item->description = $this->_description($record->position, $_location); break; case 'templates': $lang->load("tpl_{$record->element}.sys", JPATH_ADMINISTRATOR); $lang->load("tpl_{$record->element}.sys", JPATH_SITE); $_location = $record->client_id ? JText::_('JSITE') : JText::_('JADMINISTRATOR'); $_location = $_location; $manifest = json_decode($record->manifest_cache); $item->description = $this->_description(JText::_(strtoupper($manifest->description),true), $_location); break; } } elseif (!isset($mapping['fields'])) { $item->title = $this->_title($record->title); $item->description = $this->_description($record->description); } else { $_title = $mapping['fields']['title']; $_parts = array(); if(preg_match_all('/{([^\}]+)}/i', $_title, $_parts)){ $found = $_parts[0]; $replaced = $_parts[1]; foreach ($found as $k=>$value){ $replaceTitle = $replaced[$k]; $_title = str_replace($value, $record->$replaceTitle, $_title); } } $item->title = $this->_title($_title); $_description = $mapping['fields']['description']; $_parts = array(); if(preg_match_all('/{([^\}]+)}/i', $_description, $_parts)){ $found = $_parts[0]; $replaced = $_parts[1]; foreach ($found as $k=>$value){ $replaceDesc = $replaced[$k]; $_description = str_replace($value, $record->$replaceDesc, $_description); } } $item->description = $this->_description($_description); } $_link = $mapping['link']; $_parts = array(); if(preg_match_all('/{([^\}]+)}/i', $_link, $_parts)){ $found = $_parts[0]; $replaced = $_parts[1]; foreach ($found as $k=>$value){ $replaceLink = $replaced[$k]; $_link = str_replace($value, $record->$replaceLink, $_link); } } $item->link = $_link; $item->checkedOut = $record->checked_out; $items[] = $item; } return $items; } /** * Build an SQL query to load the list data. * * @return JDatabaseQuery */ protected function getListQuery ($countable = false) { $query = $this->_db->getQuery(true); $coverage = $this->getState('search.coverage'); $keyword = $this->getState('search.keyword'); if ($coverage == 'menus') { if ($countable == true) { $query->select('COUNT(*)'); } else { $query->select('m.*, t.title as type_name'); } $query->from('#__menu AS m'); $query->innerJoin('#__menu_types AS t ON m.menutype=t.menutype'); $query->where("m.title LIKE '%{$keyword}%' AND m.published!=-2"); return $query; } elseif ($coverage == 'modules') { if ($countable == true) { $query->select('COUNT(*)'); } else { $query->select('m.*, e.element, e.manifest_cache'); } $query->from('#__modules AS m'); $query->innerJoin('#__extensions AS e ON (m.module = e.element AND e.type=\'module\')'); $query->where("m.title LIKE '%{$keyword}%' AND e.client_id=0 AND m.published!=-2"); return $query; } elseif ($coverage == 'templates') { if ($countable == true) { $query->select('COUNT(*)'); } else { $query->select('t.*, e.element, e.manifest_cache'); } $query->from('#__template_styles AS t'); $query->innerJoin('#__extensions AS e ON t.template=e.element'); $query->where("t.title LIKE '%{$keyword}%'"); return $query; } if ($countable == true) { $query->select('COUNT(*)'); } else { $query->select('*'); } $query->from($this->_getDataTable()); $query->where($this->_getDataConditions()); return $query; } private function _getTableMapping ($name) { // Support Virtuemart. // $vmLang = ''; // if(file_exists(JPATH_ROOT . DS . 'administrator' . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'config.php')){ // require_once JPATH_ROOT . DS . 'administrator' . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'config.php'; // $langs = (array) VmConfig::get('active_languages'); // jimport('joomla.language.helper'); // $languages = JLanguageHelper::getLanguages('lang_code'); // $vmLang = JFactory::getLanguage()->getTag(); // if ( ! $vmLang ) { // // use user default // $lang =JFactory::getLanguage(); // $vmLang = $lang->getTag(); // } // if(!in_array($vmLang, $langs)) { // $params = JComponentHelper::getParams('com_languages'); // $vmLang = $params->get('site', 'en-GB');//use default joomla // } // } // $vmLang = $vmLang ? '_' . strtolower(strtr($vmLang,'-','_')) : ''; // ------------------------ $mappings = array( 'menus' => array( 'fields' => array('title' => '{title}', 'description' => '{type_name}'), //'icon' => 'cls:icon-16-menu', 'link' => 'index.php?option=com_menus&task=item.edit&id={id}' ), 'users' => array( 'name' => '#__users', 'lookup' => array('name', 'username'), 'fields' => array('title' => '{name}', 'description' => '{username} - {email}'), //'icon' => 'cls:icon-16-user', 'link' => 'index.php?option=com_users&task=user.edit&id={id}', ), 'categories' => array( 'name' => '#__categories', 'lookup' => array('title'), //'icon' => 'cls:icon-16-category', 'link' => 'index.php?option=com_categories&task=category.edit&id={id}&extension={extension}', 'conditions' => 'extension=\'com_content\'' ), 'articles' => array( 'name' => '#__content', 'lookup' => array('title'), 'fields' => array('title' => '{title}', 'description' => "{introtext}"), //'icon' => 'cls:icon-16-article', 'link' => 'index.php?option=com_content&task=article.edit&id={id}', ), 'modules' => array( 'name' => '#__modules', 'lookup' => array('title'), 'fields' => array('title' => '{title}', 'description' => ''), //'icon' => 'cls:icon-16-module', 'link' => 'index.php?option=com_modules&task=module.edit&id={id}' ), 'plugins' => array( 'name' => '#__extensions', 'lookup' => array('name'), 'conditions' => 'type=\'plugin\'', 'fields' => array('title' => '{name}', 'description' => ''), //'icon' => 'cls:icon-16-plugin', 'link' => 'index.php?option=com_plugins&task=plugin.edit&extension_id={extension_id}', ), 'templates' => array( 'name' => '#__template_styles', 'lookup' => array('title'), 'fields' => array('title' => '{title}','description' => ''), //'icon' => 'cls:icon-16-themes', 'link' => 'index.php?option=com_templates&task=style.edit&id={id}' ), 'com_banners' => array( 'name' => '#__banners', 'lookup' => array('name'), 'fields' => array('title' => '{name}', 'description' => '{description}'), //'icon' => 'cls:icon-16-banners', 'link' => 'index.php?option=com_banners&task=banner.edit&id={id}', ), 'com_banners_categories' => array( 'name' => '#__categories', 'lookup' => array('title'), //'icon' => 'cls:icon-16-banners-cat', 'link' => 'index.php?option=com_categories&task=category.edit&id={id}&extension=com_banners', 'conditions' => 'extension=\'com_banners\'', ), 'com_banners_clients' => array( 'name' => '#__banner_clients', 'lookup' => array('name'), //'icon' => 'cls:icon-16-banners-clients', 'fields' => array('title' => '{name}', 'description' => '{contact} - {email}'), 'link' => 'index.php?option=com_banners&task=client.edit&id={id}', ), 'com_contacts' => array( 'name' => '#__contact_details', 'lookup' => array('name'), //'icon' => 'cls:icon-16-contact', 'fields' => array('title' => '{name}', 'description' => '{misc}'), 'link' => 'index.php?option=com_contacts&task=contact.edit&id={id}', ), 'com_contacts_categories' => array( 'name' => '#__categories', 'lookup' => array('title'), //'icon' => 'cls:icon-16-contact-cat', 'link' => 'index.php?option=com_categories&task=category.edit&id={id}&extension=com_contacts', 'conditions' => 'extension=\'com_contacts\'', ), 'com_messages' => array( 'name' => '#__messages', 'lookup' => array('subject'), //'icon' => 'cls:icon-16-messages-read', 'fields' => array('title' => '{subject}', 'description' => '{message}'), 'link' => 'index.php?option=com_messages&view=message&message_id={message_id}' ), 'com_newsfeeds' => array( 'name' => '#__newsfeeds', 'lookup' => array('name'), //'icon' => 'cls:icon-16-messages-read', 'fields' => array('title' => '{name}', 'description' => ''), 'link' => 'index.php?option=com_newsfeeds&task=newsfeeds.edit&id={id}', ), 'com_newsfeeds_categories' => array( 'name' => '#__categories', 'lookup' => array('title'), //'icon' => 'cls:icon-16-newsfeeds-cat', 'link' => 'index.php?option=com_categories&task=category.edit&id={id}&extension=com_newsfeeds', 'conditions' => 'extension=\'com_newsfeeds\'', ), 'com_weblinks' => array( 'name' => '#__weblinks', 'lookup' => array('title'), //'icon' => 'cls:icon-16-weblinks', 'link' => 'index.php?option=com_weblinks&task=weblink.edit&id={id}', ), 'com_weblinks_categories' => array( 'name' => '#__categories', 'lookup' => array('title'), //'icon' => 'cls:icon-16-weblinks-cat', 'link' => 'index.php?option=com_categories&task=category.edit&id={id}&extension=com_weblinks', 'conditions' => 'extension=\'com_weblinks\'', ) ); $supportedExtList = JPluginHelper::getPlugin('jsnpoweradmin'); if (count($supportedExtList)) { foreach ($supportedExtList as $supportedExt) { $_mappings = JSNPaExtensionsHelper::executeExtMethod($supportedExt->name, 'getTableMapping'); if (count($_mappings)) { foreach ($_mappings as $k=>$m) { $mappings[$k] = $m; } } } } $params = JSNConfigHelper::get('com_poweradmin'); if (intval($params->get('search_trashed', 0)) == 0) { $mappings['categories']['conditions'] .= ' AND published!=-2'; $mappings['articles']['conditions'] = 'state!=-2'; $mappings['com_banners']['conditions'] = 'state!=-2'; $mappings['com_banners_categories']['conditions'] .= ' AND published!=-2'; $mappings['com_banners_clients']['conditions'] = 'state!=-2'; $mappings['com_contacts']['conditions'] = 'published!=-2'; $mappings['com_contacts_categories']['conditions'] .= ' AND published!=-2'; $mappings['com_newsfeeds']['conditions'] = 'published!=-2'; $mappings['com_newsfeeds_categories']['conditions'] .= ' AND published!=-2'; $mappings['com_weblinks']['conditions'] = 'state!=-2'; $mappings['com_weblinks_categories']['conditions'] .= ' AND published!=-2'; } return !isset($mappings[$name]) ? null : $mappings[$name]; } private function _getDataTable () { $coverage = $this->getState('search.coverage'); $mapping = $this->_getTableMapping($coverage); return $mapping['name']; } private function _getDataConditions () { $coverage = $this->getState('search.coverage'); $keyword = $this->getState('search.keyword'); $mapping = $this->_getTableMapping($coverage); $conditions = array(); foreach ($mapping['lookup'] as $field) { $conditions[] = "`{$field}` LIKE '%{$keyword}%'"; } $where = implode(' OR ', $conditions); if (isset($mapping['conditions'])) { $where = "({$where}) AND ({$mapping['conditions']})"; } return $where; } private function _description ($description, $location = null) { $description = trim(strip_tags($description)); // Remove unnecessarily while space while (strpos($description, ' ')) { $description = str_replace(' ', ' ', $description); } $wordsLimit = 30; if (str_word_count($description) > $wordsLimit) { $words = explode(' ', $description); $usableWords = array_slice($words, 0, $wordsLimit); $description = trim(implode(' ', $usableWords), '\'".'); $description.= '...'; } $coverage = $this->getState('search.coverage'); $_descriptionMap = $this->getDescriptionMap(); if (isset($_descriptionMap[$coverage]) && !empty($description)) { $description = str_replace('{desc}', $description, $_descriptionMap[$coverage]); if(isset($location)) { $description = str_replace('{location}', $location, $description); } } return $description; } function _title ($title) { $keyword = strtolower($this->getState('search.keyword')); $lowerTitle = strtolower($title); $maxLength = 30; if (strpos($lowerTitle, $keyword) >= $maxLength) { $totalLength = strlen($title); $keywordLength = strlen($keyword); $keywordPosition = strpos($lowerTitle, $keyword); $leftLength = ($maxLength - $keywordLength)/2; if ($totalLength <= $keywordPosition + $keywordLength) { $startPos = $totalLength - $maxLength; } else { $startPos = $keywordPosition - $leftLength; } $title = '... ' . mb_substr($title, (int)$startPos); } return (strlen($title) > 30) ? mb_substr($title, 0, 30).' ...' : $title; } } ?>