Example #1
0
 /**
  * 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);
 }
Example #2
0
 /**
  * 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);
 }
Example #3
0
 /**
  * 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;
 }
Example #4
0
 /**
  * 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;
 }
Example #5
0
 /**
  * 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;
 }
Example #6
0
 /**
  * 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);
 }
Example #7
0
 /**
  * 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);
 }