Your IP : 216.73.216.240


Current Path : /home/juvelize/martine/components/com_jcomments/classes/
Upload File :
Current File : /home/juvelize/martine/components/com_jcomments/classes/acl.php

<?php

/**

 * JComments - Joomla Comment System

 *

 * @version 3.0

 * @package JComments

 * @author Sergey M. Litvinov (smart@joomlatune.ru)

 * @copyright (C) 2006-2013 by Sergey M. Litvinov (http://www.joomlatune.ru)

 * @license GNU/GPL: http://www.gnu.org/copyleft/gpl.html

 */



defined('_JEXEC') or die;



/**

 * JComments ACL

 */

class JCommentsACL

{

	var $canDelete = 0;

	var $canDeleteOwn = 0;

	var $canDeleteForMyObject = 0;

	var $canEdit = 0;

	var $canEditOwn = 0;

	var $canEditForMyObject = 0;

	var $canPublish = 0;

	var $canPublishForMyObject = 0;

	var $canViewIP = 0;

	var $canViewEmail = 0;

	var $canViewHomepage = 0;

	var $canComment = 0;

	var $canQuote = 0;

	var $canReply = 0;

	var $canVote = 0;

	var $canReport = 0;

	var $canBan = 0;

	var $userID = 0;

	var $userIP = 0;

	var $deleteMode = 0;

	var $userBlocked = 0;


	
function __construct()

	{

		$user = JFactory::getUser();

		$config = JCommentsFactory::getConfig();



		$this->canDelete = $this->check('can_delete');

		$this->canDeleteOwn = $this->check('can_delete_own');

		$this->canDeleteForMyObject = $this->check('can_delete_for_my_object');

		$this->canEdit = $this->check('can_edit');

		$this->canEditOwn = $this->check('can_edit_own');

		$this->canEditForMyObject = $this->check('can_edit_for_my_object');

		$this->canPublish = $this->check('can_publish');

		$this->canPublishForMyObject = $this->check('can_publish_for_my_object');

		$this->canViewIP = $this->check('can_view_ip');

		$this->canViewEmail = $this->check('can_view_email');

		$this->canViewHomepage = $this->check('can_view_homepage');

		$this->canComment = $this->check('can_comment');

		$this->canVote = $this->check('can_vote');

		$this->canReport = intval($this->check('can_report') && $config->getInt('enable_reports'));

		$this->canBan = 0;

		$this->canQuote = intval($this->canComment && $this->check('enable_bbcode_quote'));

		$this->canReply = intval($this->canComment && $this->check('can_reply') && $config->get('template_view') == 'tree');



		$this->userID = (int)$user->id;

		$this->userIP = $_SERVER['REMOTE_ADDR'];

		$this->userBlocked = 0;



		$this->deleteMode = $config->getInt('delete_mode');



		$this->commentsLocked = false;



		if ($config->getInt('enable_blacklist', 0) == 1) {

			$options = array();

			$options['ip'] = $this->getUserIP();

			$options['userid'] = $this->getUserID();

			if (!JCommentsSecurity::checkBlacklist($options)) {

				$this->userBlocked = 1;

				$this->canComment = 0;

				$this->canQuote = 0;

				$this->canReply = 0;

				$this->canVote = 0;

				$this->canBan = 0;

			} else {

				$this->canBan = $this->check('can_ban');

			}

		}

	}



	public static function check($str, $isName = true)

	{

		static $group = null;



		if ($isName) {

			$str = JCommentsFactory::getConfig()->get($str);

		}



		if (!empty($str)) {

			$user = JFactory::getUser();



			$list = explode(',', $str);



			if ($group === null) {

				if ($user->id) {

					$db = JFactory::getDbo();

					// get highest group

					$query = $db->getQuery(true);

					$query->select('a.id');

					$query->from('#__user_usergroup_map AS map');

					$query->leftJoin('#__usergroups AS a ON a.id = map.group_id');

					$query->where('map.user_id = ' . (int)$user->id);

					$query->order('a.lft desc');

					$db->setQuery($query, 0, 1);



					$group = $db->loadResult();

				} else {

					$group = JComponentHelper::getParams('com_users')->get('guest_usergroup', 1);

				}

			}



			if (in_array($group, $list)) {

				return 1;

			}

		}



		return 0;

	}



	function getUserIP()

	{

		return $this->userIP;

	}



	function getUserId()

	{

		return $this->userID;

	}



	function getUserBlocked()

	{

		return $this->userBlocked;

	}



	function getUserAccess()

	{

		static $access = null;



		if (!isset($access)) {

			$user = JFactory::getUser();

			$access = array_unique(JAccess::getAuthorisedViewLevels($user->get('id')));

			$access[] = 0; // for backward compatibility

		}



		return $access;

	}



	function isLocked($obj)

	{

		if (isset($obj) && ($obj != null)) {

			return ($obj->checked_out && $obj->checked_out != $this->userID) ? 1 : 0;

		}



		return 0;

	}



	function isDeleted($obj)

	{

		if (isset($obj) && ($obj != null)) {

			return $obj->deleted ? 1 : 0;

		}



		return 0;

	}



	function isObjectOwner($obj)

	{

		if (is_null($obj)) {

			return false;

		} else {

			$objectOwner = $this->userID ? JCommentsObjectHelper::getOwner($obj->object_id, $obj->object_group) : 0;



			return $this->userID ? ($this->userID == $objectOwner) : false;

		}

	}



	function canDelete($obj)

	{

		return (($this->canDelete || ($this->canDeleteForMyObject && $this->isObjectOwner($obj))

				|| ($this->canDeleteOwn && ($obj->userid == $this->userID)))

			&& (!$this->isLocked($obj)) && (!$this->isDeleted($obj) || $this->deleteMode == 0)) ? 1 : 0;

	}



	function canEdit($obj)

	{

		return (($this->canEdit || ($this->canEditForMyObject && $this->isObjectOwner($obj))

				|| ($this->canEditOwn && ($obj->userid == $this->userID)))

			&& (!$this->isLocked($obj)) && (!$this->isDeleted($obj))) ? 1 : 0;

	}



	function canPublish($obj = null)

	{

		return (($this->canPublish || ($this->canPublishForMyObject && $this->isObjectOwner($obj)))

			&& (!$this->isLocked($obj)) && (!$this->isDeleted($obj))) ? 1 : 0;

	}



	function canPublishForObject($object_id, $object_group)

	{

		return ($this->userID

			&& $this->canPublishForMyObject

			&& $this->userID == JCommentsObjectHelper::getOwner($object_id, $object_group)) ? 1 : 0;

	}



	function canViewIP($obj = null)

	{

		if (is_null($obj)) {

			return ($this->canViewIP) ? 1 : 0;

		} else {

			return ($this->canViewIP && ($obj->ip != '') && (!$this->isDeleted($obj))) ? 1 : 0;

		}

	}



	function canViewEmail($obj = null)

	{

		if (is_null($obj)) {

			return ($this->canViewEmail) ? 1 : 0;

		} else {

			return ($this->canViewEmail && ($obj->email != '')) ? 1 : 0;

		}

	}



	function canViewHomepage($obj = null)

	{

		if (is_null($obj)) {

			return ($this->canViewHomepage) ? 1 : 0;

		} else {

			return ($this->canViewHomepage && ($obj->homepage != '')) ? 1 : 0;

		}

	}



	function canComment()

	{

		return $this->canComment;

	}



	function canQuote($obj = null)

	{

		if (is_null($obj)) {

			return $this->canQuote && !$this->commentsLocked;

		} else {

			return ($this->canQuote && !$this->commentsLocked && (!isset($obj->_disable_quote)) && (!$this->isDeleted($obj))) ? 1 : 0;

		}

	}



	function canReply($obj = null)

	{

		if (is_null($obj)) {

			return $this->canReply && !$this->commentsLocked;

		} else {

			return ($this->canReply && !$this->commentsLocked && (!isset($obj->_disable_reply)) && (!$this->isDeleted($obj))) ? 1 : 0;

		}

	}



	function canVote($obj)

	{

		if ($this->userID) {

			return ($this->canVote && $obj->userid != $this->userID && !isset($obj->voted) && (!$this->isDeleted($obj)));

		} else {

			return ($this->canVote && $obj->ip != $this->userIP && !isset($obj->voted) && (!$this->isDeleted($obj)));

		}



	}



	function canReport($obj = null)

	{

		if (is_null($obj)) {

			return $this->canReport;

		} else {

			return ($this->canReport && (!isset($obj->_disable_report)) && (!$this->isDeleted($obj))) ? 1 : 0;

		}

	}



	function canModerate($obj)

	{

		return ($this->canEdit($obj) || $this->canDelete($obj)

			|| $this->canPublish($obj) || $this->canViewIP($obj) || $this->canBan($obj)) && (!$this->isDeleted($obj) || $this->deleteMode == 0);

	}



	function canBan($obj = null)

	{

		if (is_null($obj)) {

			return $this->canBan;

		} else {

			return ($this->canBan && (!$this->isDeleted($obj))) ? 1 : 0;

		}

	}



	function setCommentsLocked($value)

	{

		$this->commentsLocked = $value;



		//$this->canComment = $this->canComment && !$this->commentsLocked;

		$this->canQuote = $this->canQuote && !$this->commentsLocked;

		$this->canReply = $this->canReply && !$this->commentsLocked;

	}



	function isCommentsLocked()

	{

		return $this->commentsLocked;

	}

}