Example #1
0
 public static function markRead(array $ids, $user = null)
 {
     $user = KunenaUserHelper::get($user);
     $items = KunenaForumCategoryUserHelper::getCategories($ids, $user);
     $updateList = array();
     $insertList = array();
     $db = JFactory::getDbo();
     $time = JFactory::getDate()->toUnix();
     foreach ($items as $item) {
         if ($item->exists()) {
             $updateList[] = (int) $item->category_id;
         } else {
             $insertList[] = "{$db->quote($user->userid)}, {$db->quote($item->category_id)}, {$db->quote($time)}";
         }
     }
     if ($updateList) {
         $idlist = implode(',', $updateList);
         $query = $db->getQuery(true);
         $query->update('#__kunena_user_categories')->set("allreadtime={$db->quote($time)}")->where("user_id={$db->quote($user->userid)}")->where("category_id IN ({$idlist})");
         $db->setQuery($query);
         $db->execute();
     }
     if ($insertList) {
         $query = $db->getQuery(true);
         $query->insert('#__kunena_user_categories')->columns('user_id, category_id, allreadtime')->values($insertList);
         $db->setQuery($query);
         $db->execute();
     }
 }
	/**
	 * Test getCategories()
	 */
	public function testGetCategories() {
		$categories = KunenaForumCategoryHelper::getCategories();
		$categoryusers = KunenaForumCategoryUserHelper::getCategories();
		foreach ($categories as $category) {
			$this->assertTrue(isset($categoryusers[$category->id]));
			$this->assertEquals($category->id, $categoryusers[$category->id]->category_id);
		}
	}
Example #3
0
 /**
  * Get an instance of KunenaForumCategoryUser object.
  *
  * @param null|int	$category	The category id to load.
  * @param mixed		$user		The user id to load - Can be only an integer.
  * @param bool		$reload		Reload objects from the database.
  *
  * @return KunenaForumCategoryUser	The user category object.
  */
 public static function get($category = null, $user = null, $reload = false)
 {
     if ($category instanceof KunenaForumCategory) {
         $category = $category->id;
     }
     $category = intval($category);
     $user = KunenaUserHelper::get($user);
     if ($category === null) {
         return new KunenaForumCategoryUser(null, $user);
     }
     if ($reload || empty(self::$_instances[$user->userid][$category])) {
         $user_categories = KunenaForumCategoryUserHelper::getCategories($category, $user);
         self::$_instances[$user->userid][$category] = array_pop($user_categories);
     }
     return self::$_instances[$user->userid][$category];
 }
Example #4
0
 function markread()
 {
     if (!JSession::checkToken('request')) {
         $this->app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error');
         $this->setRedirectBack();
         return;
     }
     $catid = JRequest::getInt('catid', 0);
     $children = JRequest::getBool('children', 0);
     if (!$catid) {
         // All categories
         $session = KunenaFactory::getSession();
         $session->markAllCategoriesRead();
         if (!$session->save()) {
             $this->app->enqueueMessage(JText::_('COM_KUNENA_ERROR_SESSION_SAVE_FAILED'), 'error');
         } else {
             $this->app->enqueueMessage(JText::_('COM_KUNENA_GEN_ALL_MARKED'));
         }
     } else {
         // One category
         $category = KunenaForumCategoryHelper::get($catid);
         if (!$category->authorise('read')) {
             $this->app->enqueueMessage($category->getError(), 'error');
             $this->setRedirectBack();
             return;
         }
         $session = KunenaFactory::getSession();
         if ($session->userid) {
             $categories = array($category->id => $category);
             if ($children) {
                 // Include all levels of child categories.
                 $categories += $category->getChildren(-1);
             }
             // Mark all unread topics in selected categories as read.
             KunenaForumCategoryUserHelper::markRead(array_keys($categories));
             if (count($categories) > 1) {
                 $this->app->enqueueMessage(JText::_('COM_KUNENA_GEN_ALL_MARKED'));
             } else {
                 $this->app->enqueueMessage(JText::_('COM_KUNENA_GEN_FORUM_MARKED'));
             }
         }
     }
     $this->setRedirectBack();
 }
Example #5
0
 public function isNew($user = null)
 {
     $user = KunenaUserHelper::get($user);
     if (!KunenaFactory::getConfig()->shownew || !$user->exists()) {
         return false;
     }
     $session = KunenaFactory::getSession();
     if ($this->time < $session->lasttime) {
         return false;
     }
     $allreadtime = KunenaForumCategoryUserHelper::get($this->getCategory(), $user)->allreadtime;
     if ($allreadtime && $this->time < JFactory::getDate($allreadtime)->toUnix()) {
         return false;
     }
     $read = KunenaForumTopicUserReadHelper::get($this->getTopic(), $user);
     if ($this->id == $read->message_id || $this->time < $read->time) {
         return false;
     }
     return true;
 }
Example #6
0
 /**
  * @param null|int $id
  * @param mixed $user
  * @param bool $reload
  *
  * @return KunenaForumCategoryUser
  */
 public static function getInstance($id = null, $user = null, $reload = false)
 {
     return KunenaForumCategoryUserHelper::get($id, $user, $reload);
 }
Example #7
0
 /**
  * @param mixed $user
  *
  * @return bool
  */
 public function hasNew($user = null)
 {
     $user = KunenaUserHelper::get($user);
     if (!KunenaFactory::getConfig()->shownew || !$user->exists()) {
         return false;
     }
     $session = KunenaFactory::getSession();
     if ($this->last_post_time <= $session->getAllReadTime()) {
         return false;
     }
     $userinfo = KunenaForumCategoryUserHelper::get($this->getCategory(), $user);
     if ($userinfo->allreadtime && $this->last_post_time <= $userinfo->allreadtime) {
         return false;
     }
     $read = KunenaForumTopicUserReadHelper::get($this, $user);
     if ($this->last_post_time <= $read->time) {
         return false;
     }
     return true;
 }
Example #8
0
 /**
  * @param   array $ids
  * @param   bool  $value
  * @param   mixed $user
  *
  * @return integer
  *
  * @since	2.0.0
  */
 public static function subscribe($ids, $value = true, $user = null)
 {
     $count = 0;
     // Pre-load all items
     $usercategories = KunenaForumCategoryUserHelper::getCategories($ids, $user);
     foreach ($usercategories as $usercategory) {
         if ($usercategory->subscribed != (int) $value) {
             $count++;
         }
         $usercategory->subscribed = (int) $value;
         $usercategory->save();
     }
     return $count;
 }
Example #9
0
 /**
  * Get if the user has subscribed on this category.
  *
  * @param mixed $userid
  *
  * @return bool
  *
  * @since	2.0.0
  */
 public function getSubscribed($userid = null)
 {
     if (!$this->exists()) {
         return false;
     }
     if (!$userid) {
         return false;
     }
     $usercategory = KunenaForumCategoryUserHelper::get($this->id, $userid);
     return (bool) $usercategory->subscribed;
 }
Example #10
0
 /**
  * Method to save the KunenaSession object to the database
  *
  * @access	public
  * @param   boolean $updateOnly Save the object only if not a new session
  * @return	boolean True on success
  * @since 1.5
  */
 public function save($updateOnly = false)
 {
     // Do not save session for anonymous users
     if (!$this->userid) {
         return false;
     }
     // Create the user table object
     $table = $this->getTable();
     $table->bind($this->getProperties());
     $table->exists($this->_exists);
     // Check and store the object.
     if (!$table->check()) {
         $this->setError($table->getError());
         return false;
     }
     //are we creating a new user
     $isnew = !$this->_exists;
     // If we aren't allowed to create new users return
     if ($isnew && $updateOnly) {
         return true;
     }
     //Store the user data in the database
     if (!($result = $table->store())) {
         $this->setError($table->getError());
     }
     // Set the id for the JUser object in case we created a new user.
     if (empty($this->userid)) {
         $this->userid = $table->get('userid');
     }
     // Read indication has moved outside of the session table -- let's update it too.
     $userCategory = KunenaForumCategoryUserHelper::get(0, $this->userid);
     if ($userCategory->allreadtime != $this->allreadtime) {
         $userCategory->allreadtime = $this->allreadtime;
         $userCategory->save();
     }
     return $result;
 }
Example #11
0
 /**
  * Assign user as moderator or resign him.
  *
  * @param KunenaForumCategory $category
  * @param mixed $user
  * @param bool $status
  *
  * @return bool
  *
  * @example if ($category->authorise('admin')) $category->setModerator($user, true);
  */
 public function setModerator($category, $user = null, $status = true)
 {
     // Check if category exists
     if ($category && !$category->exists()) {
         return false;
     }
     $category_id = $category ? $category->id : 0;
     $status = intval($status);
     // Check if user exists
     $user = KunenaUserHelper::get($user);
     if (!$user->exists()) {
         return false;
     }
     $success = true;
     $usercategory = KunenaForumCategoryUserHelper::get($category_id, $user);
     if ($usercategory->role == 0 && $status || $usercategory->role == 1 && !$status) {
         $usercategory->role = $status;
         $success = $usercategory->save();
         // Clear role cache
         $this->clearCache();
         // Change user moderator status
         $moderator = $this->getModeratorStatus($user);
         if ($user->moderator != !empty($moderator)) {
             $user->moderator = intval(!empty($moderator));
             $success = $user->save();
         }
     }
     return $success;
 }
Example #12
0
	/**
	 * Returns object containing user information from this category.
	 *
	 * @param mixed $user
	 * @return KunenaForumCategoryUser
	 */
	public function getUserInfo($user = null) {
		return KunenaForumCategoryUserHelper::get($this->id, $user);
	}