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); } }
/** * 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]; }
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(); }
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; }
/** * @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); }
/** * @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; }
/** * @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; }
/** * 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; }
/** * 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; }
/** * 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; }
/** * Returns object containing user information from this category. * * @param mixed $user * @return KunenaForumCategoryUser */ public function getUserInfo($user = null) { return KunenaForumCategoryUserHelper::get($this->id, $user); }