/** * Authorise list of userids to topic or category. * * @param mixed $topic Category or topic. * @param array $userids list(allow, deny). * * @return array */ public function authoriseUsers(KunenaDatabaseObject $topic, array &$userids) { $allow = $deny = array(); if (empty($userids)) { return array($allow, $deny); } $category = $topic->getCategory(); if ($category->accesstype == 'communitybuilder') { $params = array('category' => $category, 'topic' => $topic, 'userids' => $userids, 'allow' => &$allow, 'deny' => &$deny); KunenaIntegrationComprofiler::trigger('authoriseUsers', $params); } return array($allow, $deny); }
/** * Authorise list of userids to topic or category. * * @param mixed $topic Category or topic. * @param array $userids list(allow, deny). * @return array */ public function authoriseUsers(KunenaDatabaseObject $topic, array &$userids) { if (empty($userids)) { return array(array(), array()); } $category = $topic->getCategory(); $userlist = implode(',', $userids); $db = JFactory::getDBO(); $query = "SELECT c.id FROM #__kunena_categories AS c\n\t\t\tINNER JOIN #__community_groups_members AS g ON c.accesstype='jomsocial' AND c.access=g.groupid\n\t\t\tWHERE c.id={$category->id} AND g.approved=1 AND g.memberid IN ({$userlist})"; $db->setQuery($query); $allow = (array) $db->loadColumn(); $deny = array(); KunenaError::checkDatabaseError(); return array($allow, $deny); }
/** * Method to delete the KunenaForumTopic object from the database. * * @param bool $recount * * @return bool True on success. */ public function delete($recount = true) { if (!$this->exists()) { return true; } if (!parent::delete()) { return false; } // Clear authentication cache $this->_authfcache = $this->_authccache = $this->_authcache = array(); // NOTE: shadow topic doesn't exist, DO NOT DELETE OR CHANGE ANY EXTERNAL INFORMATION if ($this->moved_id == 0) { $db = JFactory::getDBO(); // Delete user topics $queries[] = "DELETE FROM #__kunena_user_topics WHERE topic_id={$db->quote($this->id)}"; // Delete user read $queries[] = "DELETE FROM #__kunena_user_read WHERE topic_id={$db->quote($this->id)}"; // Delete poll (users) $queries[] = "DELETE FROM #__kunena_polls_users WHERE pollid={$db->quote($this->poll_id)}"; // Delete poll (options) $queries[] = "DELETE FROM #__kunena_polls_options WHERE pollid={$db->quote($this->poll_id)}"; // Delete poll $queries[] = "DELETE FROM #__kunena_polls WHERE id={$db->quote($this->poll_id)}"; // Delete thank yous $queries[] = "DELETE t FROM #__kunena_thankyou AS t INNER JOIN #__kunena_messages AS m ON m.id=t.postid WHERE m.thread={$db->quote($this->id)}"; // Delete all messages $queries[] = "DELETE m, t FROM #__kunena_messages AS m INNER JOIN #__kunena_messages_text AS t ON m.id=t.mesid WHERE m.thread={$db->quote($this->id)}"; foreach ($queries as $query) { $db->setQuery($query); $db->query(); KunenaError::checkDatabaseError(); } // FIXME: add recount statistics if ($recount) { KunenaUserHelper::recount(); KunenaForumCategoryHelper::recount(); KunenaAttachmentHelper::cleanup(); KunenaForumMessageThankyouHelper::recount(); } } return true; }
/** * Method to delete the KunenaForumMessage object from the database. * * @return bool True on success */ public function delete() { if (!$this->exists()) { return true; } if (!parent::delete()) { return false; } $this->hold = 1; $attachments = $this->getAttachments(); foreach ($attachments as $attachment) { if (!$attachment->delete()) { $this->setError($attachment->getError()); } } $db = JFactory::getDBO(); // Delete thank yous $queries[] = "DELETE FROM #__kunena_thankyou WHERE postid={$db->quote($this->id)}"; // Delete message $queries[] = "DELETE FROM #__kunena_messages_text WHERE mesid={$db->quote($this->id)}"; // Cascade changes into other tables $this->update(); foreach ($queries as $query) { $db->setQuery($query); $db->query(); KunenaError::checkDatabaseError(); } KunenaForumMessageThankyouHelper::recount(); return true; }
/** * Delete this category and all related information from the database. * * @return bool True on success */ public function delete() { if (!$this->exists()) { return true; } if (!parent::delete()) { return false; } $access = KunenaAccess::getInstance(); $access->clearCache(); $db = JFactory::getDBO(); $queries[] = "DELETE FROM #__kunena_aliases WHERE type='catid' AND item={$db->quote($this->id)}"; // Delete user topics $queries[] = "DELETE FROM #__kunena_user_topics WHERE category_id={$db->quote($this->id)}"; // Delete user categories $queries[] = "DELETE FROM #__kunena_user_categories WHERE category_id={$db->quote($this->id)}"; // Delete user read $queries[] = "DELETE FROM #__kunena_user_read WHERE category_id={$db->quote($this->id)}"; // Delete thank yous $queries[] = "DELETE t FROM #__kunena_thankyou AS t INNER JOIN #__kunena_messages AS m ON m.id=t.postid WHERE m.catid={$db->quote($this->id)}"; // Delete poll users $queries[] = "DELETE p FROM #__kunena_polls_users AS p INNER JOIN #__kunena_topics AS tt ON tt.poll_id=p.pollid WHERE tt.category_id={$db->quote($this->id)} AND tt.moved_id=0"; // Delete poll options $queries[] = "DELETE p FROM #__kunena_polls_options AS p INNER JOIN #__kunena_topics AS tt ON tt.poll_id=p.pollid WHERE tt.category_id={$db->quote($this->id)} AND tt.moved_id=0"; // Delete polls $queries[] = "DELETE p FROM #__kunena_polls AS p INNER JOIN #__kunena_topics AS tt ON tt.poll_id=p.id WHERE tt.category_id={$db->quote($this->id)} AND tt.moved_id=0"; // Delete messages $queries[] = "DELETE m, t FROM #__kunena_messages AS m INNER JOIN #__kunena_messages_text AS t ON m.id=t.mesid WHERE m.catid={$db->quote($this->id)}"; // TODO: delete attachments // TODO: delete keywords // Delete topics $queries[] = "DELETE FROM #__kunena_topics WHERE category_id={$db->quote($this->id)}"; foreach ($queries as $query) { $db->setQuery($query); $db->query(); KunenaError::checkDatabaseError(); } KunenaUserHelper::recount(); KunenaForumMessageThankyouHelper::recount(); $this->id = null; KunenaForumCategoryHelper::register($this); return true; }
/** * Authorise list of userids to topic or category. * * @param mixed $topic Category or topic. * @param array $userids list(allow, deny). * * @return array */ public function authoriseUsers(KunenaDatabaseObject $topic, array &$userids) { $allow = $deny = array(); if (empty($userids)) { return array($allow, $deny); } $category = $topic->getCategory(); if ($category->accesstype == 'joomla.level') { // Check against Joomla access levels $groups = $this->getGroupsByViewLevel($category->access); $allow = $this->getUsersByGroup($groups, true, $userids); } elseif ($category->accesstype == 'joomla.group') { if ($category->pub_access <= 0) { return array($allow, $deny); } // Check against Joomla user groups $public = $this->getUsersByGroup($category->pub_access, $category->pub_recurse, $userids); $admin = $category->admin_access && $category->admin_access != $category->pub_access ? $this->getUsersByGroup($category->admin_access, $category->admin_recurse, $userids) : array(); $allow = array_merge($public, $admin); } return array($allow, $deny); }
/** * Authorise list of userids to topic or category. * * @param mixed Category or topic. * @param array list(allow, deny). */ public function authoriseUsers(KunenaDatabaseObject $topic, array &$userids) { if (empty($userids)) { return; } $userlist = implode(',', $userids); $db = JFactory::getDBO(); $query = new KunenaDatabaseQuery(); $query->select('u.id'); $query->from('#__users AS u'); $query->where("u.block=0"); $query->where("u.id IN ({$userlist})"); $category = $topic->getCategory(); if ($category->accesstype == 'joomla.level') { // Check against Joomla access level if ($category->access > 1) { // Special users: not in registered group $query->where("u.gid!=18"); } } elseif ($category->accesstype == 'joomla.group') { // All users are allowed to see Public (0) or All Registered (-1) categories if ($category->pub_access <= 0) { return array($userids, array()); } // Check against Joomla user groups $public = $this->_get_groups($category->pub_access, $category->pub_recurse); // Ignore admin_access if pub_access has the same group $admin = $category->admin_access != $category->pub_access ? $this->_get_groups($category->admin_access, $category->admin_recurse) : array(); $groups = implode(',', array_unique(array_merge($public, $admin))); if ($groups) { $query->join('INNER', "#__core_acl_aro AS a ON u.id=a.value AND a.section_value='users'"); $query->join('INNER', "#__core_acl_groups_aro_map AS g ON g.aro_id=a.id"); $query->where("g.group_id IN ({$groups})"); } } else { return; } $db->setQuery($query); $allow = (array) $db->loadResultArray(); $deny = array(); KunenaError::checkDatabaseError(); return array($allow, $deny); }