Your IP : 172.28.240.42


Current Path : /var/www/html/clients/kampol.e-nk.ru/plugins/system/nnframework/helpers/
Upload File :
Current File : /var/www/html/clients/kampol.e-nk.ru/plugins/system/nnframework/helpers/assignments.php

<?php
/**
 * NoNumber Framework Helper File: Assignments
 *
 * @package         NoNumber Framework
 * @version         12.11.6
 *
 * @author          Peter van Westen <peter@nonumber.nl>
 * @link            http://www.nonumber.nl
 * @copyright       Copyright © 2012 NoNumber All Rights Reserved
 * @license         http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 */

defined('_JEXEC') or die;

require_once JPATH_PLUGINS . '/system/nnframework/helpers/functions.php';

/**
 * Assignments
 * $assignment = no / include / exclude / none
 */
class NNFrameworkAssignmentsHelper
{
	var $_db = null;
	var $_params = null;
	var $_types = array();
	var $_passes = array();

	function __construct()
	{
		$this->_db = JFactory::getDBO();

		$config = JFactory::getConfig();
		$this->_date = JFactory::getDate();
		$this->_date->setOffset($config->getValue('config.offset'));

		$this->_types = array(
			'MenuItem',
			'HomePage',
			'Date',
			'Seasons',
			'Months',
			'Days',
			'Time',
			'UserGroupLevels',
			'Users',
			'Languages',
			'Templates',
			'URL',
			'OS',
			'Browsers',
			'Components',
			'SecsCats',
			'Articles',
			'Categories_FC',
			'Tags_FC',
			'Types_FC',
			'Items_FC',
			'Categories_K2',
			'Tags_K2',
			'Items_K2',
			'Categories_MR',
			'Categories_ZOO',
			'PHP'
		);
		$this->_classes = array();
	}

	function getRequestParams()
	{
		$params = new stdClass;
		$params->option = JRequest::getCmd('option');
		$params->view = JRequest::getCmd('view');
		$params->task = JRequest::getCmd('task');
		$params->id = JRequest::getInt('id');
		$params->Itemid = JRequest::getInt('Itemid');

		switch ($params->option) {
			case 'com_content':
				if (!$params->view && in_array($params->task, array('add', 'edit'))) {
					$params->view = 'article';
				}
				break;
			case 'com_categories':
				$params->option = 'com_content';
				$params->view = 'category';
				break;
			case 'com_sections':
				$params->option = 'com_content';
				$params->view = 'section';
				break;
			case 'com_mr':
				$params->item_id = JRequest::getInt('article');
				$params->category_id = JRequest::getInt('category_id');
				$params->id = ($params->item_id) ? $params->item_id : $params->category_id;
				break;
			case 'com_zoo':
				$params->item_id = JRequest::getInt('item_id');
				$params->category_id = JRequest::getInt('category_id');
				$params->id = ($params->item_id) ? $params->item_id : $params->category_id;
				break;
			case 'com_virtuemart':
				$params->item_id = JRequest::getInt('virtuemart_product_id');
				$params->category_id = JRequest::getInt('virtuemart_category_id');
				$params->id = ($params->item_id) ? $params->item_id : $params->category_id;
				break;
		}

		if (!$params->id) {
			$cid = JRequest::getVar('cid', array(0), 'method', 'array');
			$cid = array((int) $cid['0']);
			$params->id = $cid['0'];
		}

		return $params;
	}

	function initParams(&$params, $type = '')
	{
		if (!isset($params->assignment)) {
			$params->assignment = 'all';
		} else {
			$this->getAssignmentState($params->assignment);
		}

		if (!isset($params->selection)) {
			$params->selection = array();
		}
		if (!isset($params->params)) {
			$params->params = null;
		}

		$this->maintype = $type;
		switch ($type) {
			case 'MenuItem':
				$this->maintype = 'Menu';
				break;
			case 'SecsCats':
			case 'Articles':
				$this->maintype = 'Content';
				break;
			case 'Categories_FC':
			case 'Tags_FC':
			case 'Types_FC':
			case 'Items_FC':
				$this->maintype = 'FlexiContent';
				break;
			case 'Categories_K2':
			case 'Tags_K2':
			case 'Items_K2':
				$this->maintype = 'K2';
				break;
			case 'Categories_MR':
				$this->maintype = 'Resources';
				break;
			case 'Categories_ZOO':
				$this->maintype = 'ZOO';
				break;
			case 'OS':
				$this->maintype = 'Browsers';
				break;
			case 'Date':
			case 'Seasons':
			case 'Months':
			case 'Days':
			case 'Time':
				$this->maintype = 'DateTime';
				break;
			case 'UserGroupLevels':
			case 'Users':
				$this->maintype = 'Users';
				break;
			case 'Categories_VirtueMart':
			case 'Items_VirtueMart':
				$this->maintype = 'VirtueMart';
				break;
		}

		switch ($type) {
			case 'MenuItem':
				if (!isset($params->params->inc_children)) {
					$params->params->inc_children = 0;
				}
				if (!isset($params->params->inc_noItemid)) {
					$params->params->inc_noItemid = 0;
				}
				break;
			case 'Articles':
				if (!isset($params->params->keywords)) {
					$params->params->keywords = '';
				}
				break;
			case 'SecsCats':
			case 'Cats':
				if (!isset($params->params->inc_children)) {
					$params->params->inc_children = 1;
				}
				if (!isset($params->params->inc_sections)) {
					$params->params->inc_sections = 1;
				}
				if (!isset($params->params->inc_categories)) {
					$params->params->inc_categories = 1;
				}
				if (!isset($params->params->inc_articles)) {
					$params->params->inc_articles = 1;
				}
				if (!isset($params->params->inc_others)) {
					$params->params->inc_others = 0;
				}
				break;
			case 'Categories_FC':
			case 'Categories_K2':
			case 'Categories_MR':
			case 'Categories_ZOO':
			case 'Categories_VirtueMart':
				if (!isset($params->params->inc_children)) {
					$params->params->inc_children = 0;
				}
				if (!isset($params->params->inc_categories)) {
					$params->params->inc_categories = 1;
				}
				if (!isset($params->params->inc_items)) {
					$params->params->inc_items = 1;
				}
				break;
			case 'Tags_FC':
			case 'Tags_K2':
				if (!isset($params->params->inc_tags)) {
					$params->params->inc_tags = 1;
				}
				if (!isset($params->params->inc_items)) {
					$params->params->inc_items = 1;
				}
				break;
			case 'Date':
			case 'Time':
				if (!isset($params->params->publish_up)) {
					$params->params->publish_up = 0;
				}
				if (!isset($params->params->publish_down)) {
					$params->params->publish_down = 0;
				}
				break;
			case 'Seasons':
				if (!isset($params->params->hemisphere)) {
					$params->params->hemisphere = 'northern';
				}
				break;
		}
	}

	function passAll(&$params, $match_method = 'and', $article = 0)
	{
		if (empty($params)) {
			return 1;
		}

		jimport('joomla.filesystem.file');

		$app = JFactory::getApplication();
		$this->_params = $this->getRequestParams();

		// if no id is found, check if menuitem exists to get view and id
		if ($app->isSite() && (!$this->_params->option || !$this->_params->id)) {
			$menu = $app->getMenu('site');
			if (empty($this->_params->Itemid)) {
				$menuItem = $menu->getActive();
			} else {
				$menuItem = $menu->getItem($this->_params->Itemid);
			}
			if (!$this->_params->option) {
				$this->_params->option = (empty($menuItem->query['option'])) ? null : $menuItem->query['option'];
			}
			$this->_params->view = (empty($menuItem->query['view'])) ? null : $menuItem->query['view'];
			$this->_params->task = (empty($menuItem->query['task'])) ? null : $menuItem->query['task'];
			if (!$this->_params->id) {
				$this->_params->id = (empty($menuItem->query['id'])) ? null : $menuItem->query['id'];
			}
			unset($menuItem);
		}

		$aid = ($article && isset($article->id)) ? '[' . $article->id . ']' : '';
		$id = md5($aid . json_encode($params));

		if (isset($this->_passes[$id])) {
			$pass = $this->_passes[$id];
		} else {
			$pass = ($match_method == 'and') ? 1 : 0;
			foreach ($this->_types as $type) {
				if (isset($params[$type])) {
					$this->initParams($params[$type], $type);
					if (($pass && $match_method == 'and') || (!$pass && $match_method == 'or')) {
						$tid = md5($type . $aid . ':' . json_encode($params[$type]));
						if (isset($this->_passes[$tid])) {
							$pass = $this->_passes[$tid];
						} else {
							if ($params[$type]->assignment == 'all') {
								$pass = 1;
							} else if ($params[$type]->assignment == 'none') {
								$pass = 0;
							} else {
								if (!isset($this->_classes[$this->maintype]) && JFile::exists(__DIR__ . '/assignments/' . strtolower($this->maintype) . '.php')) {
									require_once __DIR__ . '/assignments/' . strtolower($this->maintype) . '.php';
									$class = 'NNFrameworkAssignments' . $this->maintype;
									$this->_classes[$this->maintype] = new $class;
								}
								if (isset($this->_classes[$this->maintype])) {
									$func = 'pass' . $type;
									$pass = $this->_classes[$this->maintype]->$func($this, $params[$type]->params, $params[$type]->selection, $params[$type]->assignment, $article);
								}
							}
							$this->_passes[$tid] = $pass;
						}
					}
				}
			}
			$this->_passes[$id] = $pass;
		}

		return ($pass) ? 1 : 0;
	}

	/**
	 * passSimple
	 *
	 * @param  <string> $value
	 * @param  <array> $selection
	 * @param  <string> $assignment
	 *
	 * @return <bool>
	 */
	function passSimple($values = '', $selection = array(), $assignment = 'all', $caseinsensitive = 0)
	{
		$values = $this->makeArray($values, 1);
		$selection = $this->makeArray($selection);

		$pass = 0;
		foreach ($values as $value) {
			if ($caseinsensitive) {
				if (in_array(strtolower($value), array_map('strtolower', $selection))) {
					$pass = 1;
					break;
				}
			} else {
				if (in_array($value, $selection)) {
					$pass = 1;
					break;
				}
			}
		}

		if ($pass) {
			return ($assignment == 'include');
		} else {
			return ($assignment == 'exclude');
		}
	}

	/**
	 * getAssignmentState
	 *
	 * @param <string> $assignment
	 */
	function getAssignmentState(&$assignment)
	{
		switch ($assignment) {
			case 1:
			case 'include':
				$assignment = 'include';
				break;
			case 2:
			case 'exclude':
				$assignment = 'exclude';
				break;
			case 3:
			case -1:
			case 'none':
				$assignment = 'none';
				break;
			default:
				$assignment = 'all';
				break;
		}
	}

	function getMenuItemParams($id = 0)
	{
		$query = 'SELECT params'
			. ' FROM #__menu'
			. ' WHERE id = ' . (int) $id
			. ' LIMIT 1';
		$this->_db->setQuery($query);
		$params = $this->_db->loadResult();

		$parameters = NNParameters::getInstance();
		return $parameters->getParams($params);
	}

	function getParentIds($id = 0, $table = 'menu', $parent = 'parent', $child = 'id')
	{
		$parent_ids = array();

		if (!$id) {
			return $parent_ids;
		}

		while ($id) {
			$query = 'SELECT `' . $parent . '`'
				. ' FROM #__' . $table
				. ' WHERE `' . $child . '` = ' . (int) $id
				. ' LIMIT 1';
			$this->_db->setQuery($query);
			$id = $this->_db->loadResult();
			if ($id) {
				$parent_ids[] = $id;
			}
		}
		return $parent_ids;
	}

	/**
	 * makeArray
	 *
	 * @param <array> $array
	 * @param <boolean> $onlycommas
	 */
	function makeArray($array = '', $onlycommas = 0, $trim = 1)
	{
		if (!is_array($array)) {
			if (!$onlycommas && !(strpos($array, '|') === false)) {
				$array = explode('|', $array);
			} else {
				$array = explode(',', $array);
			}
		}
		if ($trim) {
			if ($trim && !empty($array)) {
				foreach ($array as $key => $val) {
					$array[$key] = trim($val);
				}
			}
		}
		return $array;
	}

	function passMenuItem(&$params, $selection = array(), $assignment = 'all')
	{
		if (!isset($this->_classes['Menu']) && JFile::exists(__DIR__ . '/assignments/menu.php')) {
			require_once __DIR__ . '/assignments/menu.php';
			$this->_classes[$this->maintype] = new NNFrameworkAssignmentsMenu;
		}
		if (isset($this->_classes['Menu'])) {
			return $this->_classes['Menu']->passMenuItem($this, $params, $selection, $assignment);
		}
		return 1;
	}

	function getAssignmentsFromParams(&$params, $use_sef = 2)
	{
		jimport('joomla.filesystem.file');

		$assignments = array();
		if (isset($params->assignto_menuitems) && $params->assignto_menuitems) {
			$assignments['MenuItem'] = new stdClass;
			$assignments['MenuItem']->assignment = $params->assignto_menuitems;
			$assignments['MenuItem']->selection = $params->assignto_menuitems_selection;
			$assignments['MenuItem']->params = new stdClass;
			$assignments['MenuItem']->params->inc_children = $params->assignto_menuitems_inc_children;
			$assignments['MenuItem']->params->inc_noItemid = $params->assignto_menuitems_inc_noitemid;
		}
		if (isset($params->assignto_homepage) && $params->assignto_homepage) {
			$assignments['HomePage'] = new stdClass;
			$assignments['HomePage']->assignment = $params->assignto_homepage;
		}
		if (isset($params->assignto_date) && $params->assignto_date) {
			$assignments['Date'] = new stdClass;
			$assignments['Date']->assignment = $params->assignto_date;
			$assignments['Date']->params = new stdClass;
			$assignments['Date']->params->publish_up = $params->assignto_date_publish_up;
			$assignments['Date']->params->publish_down = $params->assignto_date_publish_down;
		}
		if (isset($params->assignto_seasons) && $params->assignto_seasons) {
			$assignments['Seasons'] = new stdClass;
			$assignments['Seasons']->assignment = $params->assignto_seasons;
			$assignments['Seasons']->selection = $params->assignto_seasons_selection;
			$assignments['Seasons']->params = new stdClass;
			$assignments['Seasons']->params->hemisphere = $params->assignto_seasons_hemisphere;
		}
		if (isset($params->assignto_months) && $params->assignto_months) {
			$assignments['Months'] = new stdClass;
			$assignments['Months']->assignment = $params->assignto_months;
			$assignments['Months']->selection = $params->assignto_months_selection;
		}
		if (isset($params->assignto_days) && $params->assignto_days) {
			$assignments['Days'] = new stdClass;
			$assignments['Days']->assignment = $params->assignto_days;
			$assignments['Days']->selection = $params->assignto_days_selection;
		}
		if (isset($params->assignto_time) && $params->assignto_time) {
			$assignments['Time'] = new stdClass;
			$assignments['Time']->assignment = $params->assignto_time;
			$assignments['Time']->params = new stdClass;
			$assignments['Time']->params->publish_up = $params->assignto_time_publish_up;
			$assignments['Time']->params->publish_down = $params->assignto_time_publish_down;
		}
		if (isset($params->assignto_usergrouplevels) && $params->assignto_usergrouplevels) {
			$assignments['UserGroupLevels'] = new stdClass;
			$assignments['UserGroupLevels']->assignment = $params->assignto_usergrouplevels;
			$assignments['UserGroupLevels']->selection = $params->assignto_usergrouplevels_selection;
		}
		if (isset($params->assignto_users) && $params->assignto_users) {
			$assignments['Users'] = new stdClass;
			$assignments['Users']->assignment = $params->assignto_users;
			$assignments['Users']->selection = $params->assignto_users_selection;
		}
		if (isset($params->assignto_languages) && $params->assignto_languages) {
			$assignments['Languages'] = new stdClass;
			$assignments['Languages']->assignment = $params->assignto_languages;
			$assignments['Languages']->selection = $params->assignto_languages_selection;
		}
		if (isset($params->assignto_templates) && $params->assignto_templates) {
			$assignments['Templates'] = new stdClass;
			$assignments['Templates']->assignment = $params->assignto_templates;
			$assignments['Templates']->selection = $params->assignto_templates_selection;
		}
		if (isset($params->assignto_urls) && $params->assignto_urls) {
			$assignments['URL'] = new stdClass;
			$assignments['URL']->assignment = $params->assignto_urls;

			if ($use_sef == 2) {
				$config = JFactory::getConfig();
				$use_sef = ($config->getValue('config.sef') == 1);
			}
			$assignments['URL']->selection = $use_sef ? $params->assignto_urls_selection_sef : $params->assignto_urls_selection;
			$assignments['URL']->selection = str_replace(array('\|', '\n', "\r"), array('|', "\n", ''), $assignments['URL']->selection);
			$assignments['URL']->selection = explode("\n", $assignments['URL']->selection);
		}
		if (isset($params->assignto_os) && $params->assignto_os) {
			$assignments['OS'] = new stdClass;
			$assignments['OS']->assignment = $params->assignto_os;
			$assignments['OS']->selection = $params->assignto_os_selection;
		}
		if (isset($params->assignto_browsers) && $params->assignto_browsers) {
			$assignments['Browsers'] = new stdClass;
			$assignments['Browsers']->assignment = $params->assignto_browsers;
			$selection = array();
			if (!empty($params->assignto_browsers_selection)) {
				$selection = array_merge($selection, $this->makeArray($params->assignto_browsers_selection));
			}
			if (isset($params->assignto_mobile_selection) && !empty($params->assignto_mobile_selection)) {
				$selection = array_merge($selection, $this->makeArray($params->assignto_mobile_selection));
			}
			if (isset($params->assignto_searchbots_selection) && !empty($params->assignto_searchbots_selection)) {
				$selection = array_merge($selection, $this->makeArray($params->assignto_searchbots_selection));
			}
			$assignments['Browsers']->selection = $selection;
		}
		if (isset($params->assignto_components) && $params->assignto_components) {
			$assignments['Components'] = new stdClass;
			$assignments['Components']->assignment = $params->assignto_components;
			$assignments['Components']->selection = $params->assignto_components_selection;
		}
		if (isset($params->assignto_secscats) && $params->assignto_secscats) {
			$assignments['SecsCats'] = new stdClass;
			$assignments['SecsCats']->assignment = $params->assignto_secscats;
			$assignments['SecsCats']->selection = $params->assignto_secscats_selection;
			$assignments['SecsCats']->params = new stdClass;
			$incs = $this->makeArray($params->assignto_secscats_inc);
			$assignments['SecsCats']->params->inc_sections = in_array('inc_secs', $incs);
			$assignments['SecsCats']->params->inc_categories = in_array('inc_cats', $incs);
			$assignments['SecsCats']->params->inc_articles = in_array('inc_arts', $incs);
			$assignments['SecsCats']->params->inc_others = in_array('inc_others', $incs);
		}
		if (isset($params->assignto_articles) && $params->assignto_articles) {
			$assignments['Articles'] = new stdClass;
			$assignments['Articles']->assignment = $params->assignto_articles;
			$assignments['Articles']->selection = $params->assignto_articles_selection;
			$assignments['Articles']->params = new stdClass;
			$assignments['Articles']->params->keywords = $params->assignto_articles_keywords;
		}
		if (NNFrameworkFunctions::extensionInstalled('flexicontent')) {
			if (isset($params->assignto_fccats) && $params->assignto_fccats) {
				$assignments['Categories_FC'] = new stdClass;
				$assignments['Categories_FC']->assignment = $params->assignto_fccats;
				$assignments['Categories_FC']->selection = $params->assignto_fccats_selection;
				$assignments['Categories_FC']->params = new stdClass;
				$assignments['Categories_FC']->params->inc_children = $params->assignto_fccats_inc_children;
				$incs = $this->makeArray($params->assignto_fccats_inc);
				$assignments['Categories_FC']->params->inc_categories = in_array('inc_cats', $incs);
				$assignments['Categories_FC']->params->inc_items = in_array('inc_items', $incs);
			}
			if (isset($params->assignto_fctags) && $params->assignto_fctags) {
				$assignments['Tags_FC'] = new stdClass;
				$assignments['Tags_FC']->assignment = $params->assignto_fctags;
				$assignments['Tags_FC']->selection = $params->assignto_fctags_selection;
				$assignments['Tags_FC']->params = new stdClass;
				$incs = $this->makeArray($params->assignto_fctags_inc);
				$assignments['Tags_FC']->params->inc_tags = in_array('inc_tags', $incs);
				$assignments['Tags_FC']->params->inc_items = in_array('inc_items', $incs);
			}
			if (isset($params->assignto_fctypes) && $params->assignto_fctypes) {
				$assignments['Types_FC'] = new stdClass;
				$assignments['Types_FC']->assignment = $params->assignto_fctypes;
				$assignments['Types_FC']->selection = $params->assignto_fctypes_selection;
				$assignments['Types_FC']->params = new stdClass;
			}
			if (isset($params->assignto_fcitems) && $params->assignto_fcitems) {
				$assignments['Items_FC'] = new stdClass;
				$assignments['Items_FC']->assignment = $params->assignto_fcitems;
				$assignments['Items_FC']->selection = $params->assignto_fcitems_selection;
			}
		}
		if (NNFrameworkFunctions::extensionInstalled('k2')) {
			if (isset($params->assignto_k2cats) && $params->assignto_k2cats) {
				$assignments['Categories_K2'] = new stdClass;
				$assignments['Categories_K2']->assignment = $params->assignto_k2cats;
				$assignments['Categories_K2']->selection = $params->assignto_k2cats_selection;
				$assignments['Categories_K2']->params = new stdClass;
				$assignments['Categories_K2']->params->inc_children = $params->assignto_k2cats_inc_children;
				$incs = $this->makeArray($params->assignto_k2cats_inc);
				$assignments['Categories_K2']->params->inc_categories = in_array('inc_cats', $incs);
				$assignments['Categories_K2']->params->inc_items = in_array('inc_items', $incs);
			}
			if (isset($params->assignto_k2tags) && $params->assignto_k2tags) {
				$assignments['Tags_K2'] = new stdClass;
				$assignments['Tags_K2']->assignment = $params->assignto_k2tags;
				$assignments['Tags_K2']->selection = $params->assignto_k2tags_selection;
				$assignments['Tags_K2']->params = new stdClass;
				$incs = $this->makeArray($params->assignto_k2tags_inc);
				$assignments['Tags_K2']->params->inc_tags = in_array('inc_tags', $incs);
				$assignments['Tags_K2']->params->inc_items = in_array('inc_items', $incs);
			}
			if (isset($params->assignto_k2items) && $params->assignto_k2items) {
				$assignments['Items_K2'] = new stdClass;
				$assignments['Items_K2']->assignment = $params->assignto_k2items;
				$assignments['Items_K2']->selection = $params->assignto_k2items_selection;
			}
		}
		if (NNFrameworkFunctions::extensionInstalled('resource')) {
			if (isset($params->assignto_mrcats) && $params->assignto_mrcats) {
				$assignments['Categories_MR'] = new stdClass;
				$assignments['Categories_MR']->assignment = $params->assignto_mrcats;
				$assignments['Categories_MR']->selection = $params->assignto_mrcats_selection;
				$assignments['Categories_MR']->params = new stdClass;
				$assignments['Categories_MR']->params->inc_children = $params->assignto_mrcats_inc_children;
				$incs = $this->makeArray($params->assignto_mrcats_inc);
				$assignments['Categories_MR']->params->inc_categories = in_array('inc_cats', $incs);
				$assignments['Categories_MR']->params->inc_items = in_array('inc_items', $incs);
			}
		}
		if (NNFrameworkFunctions::extensionInstalled('zoo')) {
			if (isset($params->assignto_zoocats) && $params->assignto_zoocats) {
				$assignments['Categories_ZOO'] = new stdClass;
				$assignments['Categories_ZOO']->assignment = $params->assignto_zoocats;
				$assignments['Categories_ZOO']->selection = $params->assignto_zoocats_selection;
				$assignments['Categories_ZOO']->params = new stdClass;
				$assignments['Categories_ZOO']->params->inc_children = $params->assignto_zoocats_inc_children;
				$incs = $this->makeArray($params->assignto_zoocats_inc);
				$assignments['Categories_ZOO']->params->inc_apps = in_array('inc_apps', $incs);
				$assignments['Categories_ZOO']->params->inc_categories = in_array('inc_cats', $incs);
				$assignments['Categories_ZOO']->params->inc_items = in_array('inc_items', $incs);
			}
		}
		if (isset($params->assignto_php) && $params->assignto_php) {
			$assignments['PHP'] = new stdClass;
			$assignments['PHP']->assignment = $params->assignto_php;
			$assignments['PHP']->selection = $params->assignto_php_selection;
		}

		return $assignments;
	}
}