Example #1
0
    /**
     * Update the DB based on previously recorded changes
     */
    function dbdelete()
    {
        global $DB;
        $DB->begin();
        $item_ID = $this->ID;
        if (parent::dbdelete()) {
            // Delete all custom fields of this post type
            $DB->query('DELETE FROM T_items__type_custom_field
				WHERE itcf_ityp_ID = ' . $item_ID);
        }
        $DB->commit();
    }
Example #2
0
    /**
     * Trigger event AfterCommentDelete after calling parent method.
     *
     * @param boolean set true to force permanent delete, leave false otherwise
     * @return boolean true on success
     */
    function dbdelete($force_permanent_delete = false)
    {
        global $Plugins, $DB;
        $DB->begin();
        $was_published = $this->is_published();
        if ($this->status != 'trash') {
            // The comment was not recycled yet
            if ($this->has_replies()) {
                // Move the replies to the one level up
                $new_parent_ID = !empty($this->in_reply_to_cmt_ID) ? $DB->quote($this->in_reply_to_cmt_ID) : 'NULL';
                $DB->query('UPDATE T_comments
				    SET comment_in_reply_to_cmt_ID = ' . $new_parent_ID . '
				  WHERE comment_in_reply_to_cmt_ID = ' . $this->ID);
            }
        }
        if ($force_permanent_delete || $this->status == 'trash') {
            // remember ID, because parent method resets it to 0
            $old_ID = $this->ID;
            // Select comment attachment ids
            $result = $DB->get_col('
				SELECT link_file_ID
					FROM T_links
				 WHERE link_cmt_ID = ' . $this->ID);
            if ($r = parent::dbdelete()) {
                if (!empty($result)) {
                    // remove deleted comment not linked attachments
                    remove_orphan_files($result);
                }
                // re-set the ID for the Plugin event
                $this->ID = $old_ID;
                $this->delete_prerendered_content();
                $Plugins->trigger_event('AfterCommentDelete', $params = array('Comment' => &$this));
                $this->ID = 0;
            }
        } else {
            // don't delete, just move to the trash:
            $this->set('status', 'trash');
            $r = $this->dbupdate();
        }
        if ($r) {
            if ($was_published) {
                // Update last touched date of item if a published comment was deleted
                $comment_Item =& $this->get_Item();
                $comment_Item->update_last_touched_date();
            }
            $DB->commit();
        } else {
            $DB->rollback();
        }
        return $r;
    }
Example #3
0
 /**
  * Delete a blog and dependencies from database
  *
  * Includes WAY TOO MANY requests because we try to be compatible with MySQL 3.23, bleh!
  *
  * @param boolean true if you want to try to delete the static file
  * @param boolean true if you want to echo progress
  */
 function dbdelete($delete_static_file = false, $echo = false)
 {
     global $DB, $Messages;
     // Note: No need to localize the status messages...
     if ($echo) {
         echo '<p>MySQL 3.23 compatibility mode!';
     }
     // Get list of cats that are going to be deleted (3.23)
     if ($echo) {
         echo '<br />Getting category list to delete... ';
     }
     $cat_list = implode(',', $DB->get_col("\r\n\t\t\t\tSELECT cat_ID\r\n\t\t\t\t  FROM T_categories\r\n\t\t\t\t WHERE cat_blog_ID = {$this->ID}"));
     if (empty($cat_list)) {
         // There are no cats to delete
         if ($echo) {
             echo 'None!';
         }
     } else {
         // Delete the cats & dependencies
         // Get list of posts that are going to be deleted (3.23)
         if ($echo) {
             echo '<br />Getting post list to delete... ';
         }
         $post_list = implode(',', $DB->get_col("\r\n\t\t\t\t\tSELECT postcat_post_ID\r\n\t\t\t\t\t  FROM T_postcats\r\n\t\t\t\t\t WHERE postcat_cat_ID IN ({$cat_list})"));
         if (empty($post_list)) {
             // There are no posts to delete
             if ($echo) {
                 echo 'None!';
             }
         } else {
             // Delete the posts & dependencies
             // TODO: There's also a constraint FK_post_parent_ID..
             // Delete postcats
             if ($echo) {
                 echo '<br />Deleting post-categories... ';
             }
             $ret = $DB->query("DELETE FROM T_postcats\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE postcat_cat_ID IN ({$cat_list})");
             if ($echo) {
                 printf('(%d rows)', $ret);
             }
             $Messages->add(T_('Deleted post-categories'), 'success');
             // Delete comments
             if ($echo) {
                 echo '<br />Deleting comments on blog\'s posts... ';
             }
             $ret = $DB->query("DELETE FROM T_comments\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE comment_post_ID IN ({$post_list})");
             if ($echo) {
                 printf('(%d rows)', $ret);
             }
             $Messages->add(T_('Deleted comments on blog\'s posts'), 'success');
             // Delete posts
             if ($echo) {
                 echo '<br />Deleting blog\'s posts... ';
             }
             $ret = $DB->query("DELETE FROM T_items__item\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE post_ID IN ({$post_list})");
             if ($echo) {
                 printf('(%d rows)', $ret);
             }
             $Messages->add(T_('Deleted blog\'s posts'), 'success');
         }
         // / are there posts?
         // Delete categories
         if ($echo) {
             echo '<br />Deleting blog\'s categories... ';
         }
         $ret = $DB->query("DELETE FROM T_categories\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE cat_blog_ID = {$this->ID}");
         if ($echo) {
             printf('(%d rows)', $ret);
         }
         $Messages->add(T_('Deleted blog\'s categories'), 'success');
     }
     // / are there cats?
     if ($delete_static_file) {
         // Delete static file
         if ($echo) {
             echo '<br />Trying to delete static file... ';
         }
         if (!@unlink($this->get('staticfilepath'))) {
             if ($echo) {
                 echo '<span class="error">';
                 printf(T_('ERROR! Could not delete! You will have to delete the file [%s] by hand.'), $this->get('staticfilepath'));
                 echo '</span>';
             }
             $Messages->add(sprintf(T_('Could not delete static file [%s]'), $this->get('staticfilepath')), 'error');
         } else {
             if ($echo) {
                 echo 'OK.';
             }
             $Messages->add(T_('Deleted blog\'s static file'), 'success');
         }
     }
     // Unset cache entry:
     // TODO
     // Delete main (blog) object:
     parent::dbdelete();
     if ($echo) {
         echo '<br />Done.</p>';
     }
 }
Example #4
0
 /**
  * Delete object from DB.
  */
 function dbdelete($Messages = NULL)
 {
     global $DB;
     $DB->begin();
     // Delete group permissions of the current group
     $GroupSettings =& $this->get_GroupSettings();
     $GroupSettings->delete($this->ID);
     $GroupSettings->dbupdate($this->ID);
     parent::dbdelete($Messages);
     $DB->commit();
 }
Example #5
0
 /**
  * Delete a blog and dependencies from database
  *
  * Includes WAY TOO MANY requests because we try to be compatible with MySQL 3.23, bleh!
  *
  * @param boolean true if you want to echo progress
  */
 function dbdelete($echo = false)
 {
     global $DB, $Messages, $Plugins;
     // Try to obtain some serious time to do some serious processing (5 minutes)
     set_max_execution_time(300);
     // Note: No need to localize the status messages...
     if ($echo) {
         echo '<p>MySQL 3.23 compatibility mode!';
     }
     $DB->begin();
     // Get list of cats that are going to be deleted (3.23)
     if ($echo) {
         echo '<br />Getting category list to delete... ';
     }
     $cat_list = implode(',', $DB->get_col("\n\t\t\t\tSELECT cat_ID\n\t\t\t\t  FROM T_categories\n\t\t\t\t WHERE cat_blog_ID = {$this->ID}"));
     if (empty($cat_list)) {
         // There are no cats to delete
         if ($echo) {
             echo 'None!';
         }
     } else {
         // Delete the cats & dependencies
         // Get list of posts that are going to be deleted (3.23)
         if ($echo) {
             echo '<br />Getting post list to delete... ';
         }
         $post_list = implode(',', $DB->get_col("\n\t\t\t\t\tSELECT postcat_post_ID\n\t\t\t\t\t  FROM T_postcats\n\t\t\t\t\t WHERE postcat_cat_ID IN ({$cat_list})"));
         if (empty($post_list)) {
             // There are no posts to delete
             if ($echo) {
                 echo 'None!';
             }
         } else {
             // Delete the posts & dependencies
             // TODO: There's also a constraint FK_post_parent_ID..
             // Delete postcats
             if ($echo) {
                 echo '<br />Deleting post-categories... ';
             }
             $ret = $DB->query("DELETE FROM T_postcats\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE postcat_cat_ID IN ({$cat_list})");
             if ($echo) {
                 printf('(%d rows)', $ret);
             }
             $Messages->add(T_('Deleted post-categories'), 'success');
             // Delete comments
             if ($echo) {
                 echo '<br />Deleting comments on blog\'s posts... ';
             }
             $comments_list = implode(',', $DB->get_col("\n\t\t\t\t\t\tSELECT comment_ID\n\t\t\t\t\t\t  FROM T_comments\n\t\t\t\t\t\t WHERE comment_post_ID IN ({$post_list})"));
             if (!empty($comments_list)) {
                 // Delete the comments & dependencies
                 $DB->query("DELETE FROM T_comments__votes\n\t\t\t\t\t\t\t\t\t\t\t\tWHERE cmvt_cmt_ID IN ({$comments_list})");
                 $ret = $DB->query("DELETE FROM T_comments\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE comment_post_ID IN ({$post_list})");
             } else {
                 // No comments in this blog
                 $ret = 0;
             }
             if ($echo) {
                 printf('(%d rows)', $ret);
             }
             $Messages->add(T_('Deleted comments on blog\'s posts'), 'success');
             // Delete posts
             if ($echo) {
                 echo '<br />Deleting blog\'s posts... ';
             }
             $DB->query("DELETE FROM T_items__itemtag\n\t\t\t\t\t\t\t\t\t\t\tWHERE itag_itm_ID IN ({$post_list})");
             $DB->query("DELETE FROM T_items__item_settings\n\t\t\t\t\t\t\t\t\t\t\tWHERE iset_item_ID IN ({$post_list})");
             $DB->query("DELETE FROM T_items__prerendering\n\t\t\t\t\t\t\t\t\t\t\tWHERE itpr_itm_ID IN ({$post_list})");
             $DB->query("DELETE FROM T_items__status\n\t\t\t\t\t\t\t\t\t\t\tWHERE pst_ID IN ({$post_list})");
             $DB->query("DELETE FROM T_items__subscriptions\n\t\t\t\t\t\t\t\t\t\t\tWHERE isub_item_ID IN ({$post_list})");
             $DB->query("DELETE FROM T_items__version\n\t\t\t\t\t\t\t\t\t\t\tWHERE iver_itm_ID IN ({$post_list})");
             $DB->query("DELETE FROM T_links\n\t\t\t\t\t\t\t\t\t\t\tWHERE link_itm_ID IN ({$post_list})");
             $DB->query("DELETE FROM T_slug\n\t\t\t\t\t\t\t\t\t\t\tWHERE slug_itm_ID IN ({$post_list})");
             $ret = $DB->query("DELETE FROM T_items__item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE post_ID IN ({$post_list})");
             if ($echo) {
                 printf('(%d rows)', $ret);
             }
             $Messages->add(T_('Deleted blog\'s posts'), 'success');
         }
         // / are there posts?
         // Delete categories
         if ($echo) {
             echo '<br />Deleting blog\'s categories... ';
         }
         $ret = $DB->query("DELETE FROM T_categories\n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE cat_blog_ID = {$this->ID}");
         if ($echo) {
             printf('(%d rows)', $ret);
         }
         $Messages->add(T_('Deleted blog\'s categories'), 'success');
     }
     // / are there cats?
     // Delete the blog cache folder - try to delete even if cache is disabled
     load_class('_core/model/_pagecache.class.php', 'PageCache');
     $PageCache = new PageCache($this);
     $PageCache->cache_delete();
     // remember ID, because parent method resets it to 0
     $old_ID = $this->ID;
     // Delete main (blog) object:
     parent::dbdelete();
     $DB->commit();
     // re-set the ID for the Plugin event
     $this->ID = $old_ID;
     $Plugins->trigger_event('AfterCollectionDelete', $params = array('Blog' => &$this));
     $this->ID = 0;
     if ($echo) {
         echo '<br />Done.</p>';
     }
 }
Example #6
0
    /**
     * Trigger event AfterCommentDelete after calling parent method.
     *
     * @param boolean set true to force permanent delete, leave false otherwise
     * @param boolean TRUE to use transaction
     * @return boolean true on success
     */
    function dbdelete($force_permanent_delete = false, $use_transaction = true)
    {
        global $Plugins, $DB;
        if ($use_transaction) {
            $DB->begin();
        }
        $was_published = $this->is_published();
        if ($this->status != 'trash') {
            // The comment was not recycled yet
            if ($this->has_replies()) {
                // Move the replies to the one level up
                $new_parent_ID = !empty($this->in_reply_to_cmt_ID) ? $DB->quote($this->in_reply_to_cmt_ID) : 'NULL';
                $DB->query('UPDATE T_comments
				    SET comment_in_reply_to_cmt_ID = ' . $new_parent_ID . '
				  WHERE comment_in_reply_to_cmt_ID = ' . $this->ID);
            }
        }
        if ($force_permanent_delete || $this->status == 'trash' || $this->is_meta()) {
            // remember ID, because parent method resets it to 0
            $old_ID = $this->ID;
            if ($r = parent::dbdelete()) {
                // re-set the ID for the Plugin event
                $this->ID = $old_ID;
                $Plugins->trigger_event('AfterCommentDelete', $params = array('Comment' => &$this));
                $this->ID = 0;
            }
        } else {
            // don't delete, just move to the trash:
            $this->set('status', 'trash');
            $r = $this->dbupdate();
        }
        if ($r) {
            if ($was_published) {
                // Update last touched date of item if a published comment was deleted
                $this->update_last_touched_date();
            }
            if ($use_transaction) {
                $DB->commit();
            }
        } else {
            if ($use_transaction) {
                $DB->rollback();
            }
        }
        return $r;
    }
Example #7
0
    /**
     * Delete message and dependencies from database
     *
     * @param Log Log object where output gets added (by reference).
     */
    function dbdelete()
    {
        global $DB;
        if ($this->ID == 0) {
            debug_die('Non persistant object cannot be deleted!');
        }
        // Remember ID, because parent method resets it to 0
        $thread_ID = $this->thread_ID;
        $DB->begin();
        // UPDATE last unread msg_ID on this thread statuses from this message ID to the next message ID or NULL if there is no next message
        $DB->query('UPDATE T_messaging__threadstatus
						SET tsta_first_unread_msg_ID =
							( SELECT msg_ID
								FROM T_messaging__message
								WHERE msg_thread_ID = ' . $thread_ID . ' AND msg_datetime > ' . $DB->quote($this->datetime) . '
								ORDER BY msg_datetime ASC
								LIMIT 1
							)
						WHERE tsta_first_unread_msg_ID = ' . $this->ID);
        // Delete Message
        if (!parent::dbdelete()) {
            $DB->rollback();
            return false;
        }
        // Get a count of the messages in the current thread
        $SQL = new SQL();
        $SQL->SELECT('COUNT( msg_ID )');
        $SQL->FROM($this->dbtablename);
        $SQL->WHERE('msg_thread_ID = ' . $DB->quote($thread_ID));
        $msg_count = $DB->get_var($SQL->get());
        if ($msg_count == 0) {
            // Last message was deleted from thread now, We should also delete this thread
            load_class('messaging/model/_thread.class.php', 'Thread');
            $ThreadCache =& get_ThreadCache();
            $Thread =& $ThreadCache->get_by_ID($thread_ID);
            $Thread->dbdelete();
        }
        $DB->commit();
        return true;
    }
Example #8
0
    /**
     * Delete user and dependencies from database
     *
     * Includes WAY TOO MANY requests because we try to be compatible with MySQL 3.23, bleh!
     *
     * @param Log Log object where output gets added (by reference).
     */
    function dbdelete(&$Log)
    {
        global $DB, $Plugins;
        if ($this->ID == 0) {
            debug_die('Non persistant object cannot be deleted!');
        }
        $deltype = param('deltype', 'string', '');
        // spammer
        $DB->begin();
        if ($deltype == 'spammer') {
            // If we delete user as spammer we should delete private messaged of this user
            $this->init_relations(true);
        } else {
            // If we delete user as not spammer we keep his comments as from anonymous user
            // Transform registered user comments to unregistered:
            $ret = $DB->query('UPDATE T_comments
													SET comment_author_user_ID = NULL,
															comment_author = ' . $DB->quote($this->get('preferredname')) . ',
															comment_author_email = ' . $DB->quote($this->get('email')) . ',
															comment_author_url = ' . $DB->quote($this->get('url')) . '
													WHERE comment_author_user_ID = ' . $this->ID);
            if (is_a($Log, 'log')) {
                $Log->add('Transforming user\'s comments to unregistered comments... ' . sprintf('(%d rows)', $ret), 'note');
            }
        }
        // remember ID, because parent method resets it to 0
        $old_ID = $this->ID;
        $old_email = $this->get('email');
        // Delete main object:
        if (!parent::dbdelete()) {
            $DB->rollback();
            $Log->add('User has not been deleted.', 'error');
            return false;
        }
        if ($deltype == 'spammer') {
            // User was deleted as spammer, we should mark email of this user as 'Spammer'
            $EmailAddressCache =& get_EmailAddressCache();
            $EmailAddress =& $EmailAddressCache->get_by_name($old_email, false, false);
            if (!$EmailAddress) {
                // Create new record in the T_email_address table
                $EmailAddress = new EmailAddress();
                $EmailAddress->set('address', $old_email);
            }
            if (!empty($EmailAddress)) {
                // Save status of an email address
                $EmailAddress->set('status', 'spammer');
                $EmailAddress->dbsave();
            }
        }
        $DB->commit();
        if (is_a($Log, 'log')) {
            $Log->add('Deleted User.', 'note');
        }
        // Notify plugins:
        $this->ID = $old_ID;
        $Plugins->trigger_event('AfterUserDelete', $params = array('User' => &$this));
        $this->ID = 0;
        // BLOCK CACHE INVALIDATION:
        // This User has been modified, cached content depending on it should be invalidated:
        BlockCache::invalidate_key('user_ID', $old_ID);
        return true;
    }
Example #9
0
 /**
  * Delete message and dependencies from database
  *
  * @param Log Log object where output gets added (by reference).
  */
 function dbdelete()
 {
     if ($this->ID == 0) {
         debug_die('Non persistant object cannot be deleted!');
     }
     return parent::dbdelete();
 }
Example #10
0
    /**
     * Delete user and dependencies from database
     *
     * Includes WAY TOO MANY requests because we try to be compatible with MySQL 3.23, bleh!
     *
     * @param Log Log object where output gets added (by reference).
     */
    function dbdelete(&$Log)
    {
        global $DB, $Plugins;
        if ($this->ID == 0) {
            debug_die('Non persistant object cannot be deleted!');
        }
        $deltype = param('deltype', 'string', '');
        // spammer
        $DB->begin();
        if ($deltype == 'spammer') {
            // If we delete user as spammer we should delete private messaged of this user
            $this->delete_messages();
        } else {
            // If we delete user as not spammer we keep his comments as from anonymous user
            // Transform registered user comments to unregistered:
            $ret = $DB->query('UPDATE T_comments
													SET comment_author_ID = NULL,
															comment_author = ' . $DB->quote($this->get('preferredname')) . ',
															comment_author_email = ' . $DB->quote($this->get('email')) . ',
															comment_author_url = ' . $DB->quote($this->get('url')) . '
													WHERE comment_author_ID = ' . $this->ID);
            if (is_a($Log, 'log')) {
                $Log->add('Transforming user\'s comments to unregistered comments... ' . sprintf('(%d rows)', $ret), 'note');
            }
        }
        // Get list of posts that are going to be deleted (3.23)
        $post_list = implode(',', $DB->get_col('
				SELECT post_ID
				  FROM T_items__item
				 WHERE post_creator_user_ID = ' . $this->ID));
        if (!empty($post_list)) {
            // Delete comments
            $ret = $DB->query("DELETE FROM T_comments\n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE comment_post_ID IN ({$post_list})");
            if (is_a($Log, 'log')) {
                $Log->add(sprintf('Deleted %d comments on user\'s posts.', $ret), 'note');
            }
            // Delete post extracats
            $ret = $DB->query("DELETE FROM T_postcats\n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE postcat_post_ID IN ({$post_list})");
            if (is_a($Log, 'log')) {
                $Log->add(sprintf('Deleted %d extracats of user\'s posts\'.', $ret));
                // TODO: geeky wording.
            }
            // Posts will we auto-deleted by parent method
        } else {
            // no posts
            if (is_a($Log, 'log')) {
                $Log->add('No posts to delete.', 'note');
            }
        }
        // Get list of sessions that are going to be deleted
        $sessions_SQL = new SQL();
        $sessions_SQL->SELECT('sess_ID');
        $sessions_SQL->FROM('T_sessions');
        $sessions_SQL->WHERE('sess_user_ID = ' . $this->ID);
        $sessions_list = $DB->get_col($sessions_SQL->get());
        if (!empty($sessions_list)) {
            // Delete all hit logs of this user
            $DB->query('DELETE FROM T_hitlog
					WHERE hit_sess_ID IN ( ' . $DB->quote($sessions_list) . ' )');
        }
        // delete user involved ophan threads
        delete_orphan_threads($this->ID);
        // Remove this user from posts where it was as last edit user
        $DB->query('UPDATE T_items__item
								    SET post_lastedit_user_ID = NULL
								  WHERE post_lastedit_user_ID = ' . $this->ID);
        $DB->query('UPDATE T_items__version
								    SET iver_edit_user_ID = NULL
								  WHERE iver_edit_user_ID = ' . $this->ID);
        // Remove this user from links where it was as last edit user
        $DB->query('UPDATE T_links
								    SET link_lastedit_user_ID = NULL
								  WHERE link_lastedit_user_ID = ' . $this->ID);
        // remember ID, because parent method resets it to 0
        $old_ID = $this->ID;
        $old_email = $this->get('email');
        // Delete main object:
        if (!parent::dbdelete()) {
            $DB->rollback();
            $Log->add('User has not been deleted.', 'error');
            return false;
        }
        // user was deleted, also delete this user's media folder recursively
        $FileRootCache =& get_FileRootCache();
        $root_directory = $FileRootCache->get_root_dir('user', $old_ID);
        rmdir_r($root_directory);
        if ($deltype == 'spammer') {
            // User was deleted as spammer, we should mark email of this user as 'Spammer'
            load_class('tools/model/_emailblocked.class.php', 'EmailBlocked');
            $EmailBlockedCache =& get_EmailBlockedCache();
            $EmailBlocked =& $EmailBlockedCache->get_by_name($old_email, false, false);
            if (!$EmailBlocked) {
                // Create new record in the T_email_blocked table
                $EmailBlocked = new EmailBlocked();
                $EmailBlocked->set('address', $old_email);
            }
            if (!empty($EmailBlocked)) {
                // Save status of an email address
                $EmailBlocked->set('status', 'spammer');
                $EmailBlocked->dbsave();
            }
        }
        $DB->commit();
        if (is_a($Log, 'log')) {
            $Log->add('Deleted User.', 'note');
        }
        // Notify plugins:
        $this->ID = $old_ID;
        $Plugins->trigger_event('AfterUserDelete', $params = array('User' => &$this));
        $this->ID = 0;
        return true;
    }
Example #11
0
    /**
     * Delete thread and dependencies from database
     */
    function dbdelete()
    {
        global $DB;
        if ($this->ID == 0) {
            debug_die('Non persistant object cannot be deleted!');
        }
        $DB->begin();
        // Delete Messages
        $ret = $DB->query('DELETE FROM T_messaging__message
												WHERE msg_thread_ID=' . $this->ID);
        // Delete Statuses
        $ret = $DB->query('DELETE FROM T_messaging__threadstatus
												WHERE tsta_thread_ID=' . $this->ID);
        // Delete Thread
        if (!parent::dbdelete()) {
            $DB->rollback();
            return false;
        }
        $DB->commit();
        return true;
    }
Example #12
0
 /**
  * Delete a blog and dependencies from database
  *
  * @param boolean true if you want to echo progress
  */
 function dbdelete($echo = false)
 {
     global $DB, $Messages, $Plugins, $Settings;
     // Try to obtain some serious time to do some serious processing (5 minutes)
     set_max_execution_time(300);
     if ($echo) {
         echo 'Delete collection with all of it\'s content... ';
     }
     // remember ID, because parent method resets it to 0
     $old_ID = $this->ID;
     // Delete main (blog) object:
     if (!parent::dbdelete()) {
         $Messages->add('Blog has not been deleted.', 'error');
         return false;
     }
     // Delete the blog cache folder - try to delete even if cache is disabled
     load_class('_core/model/_pagecache.class.php', 'PageCache');
     $PageCache = new PageCache($this);
     $PageCache->cache_delete();
     // Delete blog's media folder recursively:
     $FileRootCache =& get_FileRootCache();
     if ($root_directory = $FileRootCache->get_root_dir('collection', $old_ID)) {
         // Delete the folder only when it is detected
         rmdir_r($root_directory);
         $Messages->add(T_('Deleted blog\'s files'), 'success');
     }
     // re-set the ID for the Plugin event
     $this->ID = $old_ID;
     $Plugins->trigger_event('AfterCollectionDelete', $params = array('Blog' => &$this));
     $this->ID = 0;
     if (isset($Settings)) {
         // Reset settings related to the deleted blog
         if ($Settings->get('default_blog_ID') == $old_ID) {
             // Reset default blog ID
             $Settings->set('default_blog_ID', 0);
         }
         if ($Settings->get('info_blog_ID') == $old_ID) {
             // Reset info blog ID
             $Settings->set('info_blog_ID', 0);
         }
         if ($Settings->get('login_blog_ID') == $old_ID) {
             // Reset login blog ID
             $Settings->set('login_blog_ID', 0);
         }
         if ($Settings->get('msg_blog_ID') == $old_ID) {
             // Reset messaging blog ID
             $Settings->set('msg_blog_ID', 0);
         }
         $Settings->dbupdate();
     }
     if ($echo) {
         echo '<br />Done.</p>';
     }
     return true;
 }
Example #13
0
 /**
  * Delete object from DB.
  *
  * @return boolean true on success, false on failure to update
  */
 function dbdelete()
 {
     global $DB;
     // Save old extensions and old mimetype to update file types after deleting
     $this->old_extensions = $this->extensions;
     $this->extensions = '';
     $this->old_mimetype = $this->mimetype;
     $this->mimetype = '';
     $DB->begin();
     if (($r = parent::dbdelete()) !== false) {
         // Update types of the Files
         $this->update_file_types();
         $DB->commit();
     } else {
         $DB->rollback();
     }
     return $r;
 }
Example #14
0
 /**
  * Trigger event AfterCommentDelete after calling parent method.
  *
  * @return boolean true on success
  */
 function dbdelete()
 {
     global $Plugins;
     // remember ID, because parent method resets it to 0
     $old_ID = $this->ID;
     if ($r = parent::dbdelete()) {
         // re-set the ID for the Plugin event
         $this->ID = $old_ID;
         $Plugins->trigger_event('AfterCommentDelete', $params = array('Comment' => &$this));
         $this->ID = 0;
     }
     return $r;
 }
Example #15
0
    /**
     * Delete user and dependencies from database
     *
     * Includes WAY TOO MANY requests because we try to be compatible with MySQL 3.23, bleh!
     *
     * @param Log Log object where output gets added (by reference).
     */
    function dbdelete(&$Log)
    {
        global $DB, $Plugins;
        if ($this->ID == 0) {
            debug_die('Non persistant object cannot be deleted!');
        }
        $DB->begin();
        // Transform registered user comments to unregistered:
        $ret = $DB->query('UPDATE T_comments
												SET comment_author_ID = NULL,
														comment_author = ' . $DB->quote($this->get('preferredname')) . ',
														comment_author_email = ' . $DB->quote($this->get('email')) . ',
														comment_author_url = ' . $DB->quote($this->get('url')) . '
												WHERE comment_author_ID = ' . $this->ID);
        if (is_a($Log, 'log')) {
            $Log->add('Transforming user\'s comments to unregistered comments... ' . sprintf('(%d rows)', $ret), 'note');
        }
        // Get list of posts that are going to be deleted (3.23)
        $post_list = implode(',', $DB->get_col('
				SELECT post_ID
				  FROM T_items__item
				 WHERE post_creator_user_ID = ' . $this->ID));
        if (!empty($post_list)) {
            // Delete comments
            $ret = $DB->query("DELETE FROM T_comments\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE comment_post_ID IN ({$post_list})");
            if (is_a($Log, 'log')) {
                $Log->add(sprintf('Deleted %d comments on user\'s posts.', $ret), 'note');
            }
            // Delete post extracats
            $ret = $DB->query("DELETE FROM T_postcats\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE postcat_post_ID IN ({$post_list})");
            if (is_a($Log, 'log')) {
                $Log->add(sprintf('Deleted %d extracats of user\'s posts\'.', $ret));
                // TODO: geeky wording.
            }
            // Posts will we auto-deleted by parent method
        } else {
            // no posts
            if (is_a($Log, 'log')) {
                $Log->add('No posts to delete.', 'note');
            }
        }
        // remember ID, because parent method resets it to 0
        $old_ID = $this->ID;
        // Delete main object:
        if (!parent::dbdelete()) {
            $DB->rollback();
            $Log->add('User has not been deleted.', 'error');
            return false;
        }
        $DB->commit();
        if (is_a($Log, 'log')) {
            $Log->add('Deleted User.', 'note');
        }
        // Notify plugins:
        $this->ID = $old_ID;
        $Plugins->trigger_event('AfterUserDelete', $params = array('User' => &$this));
        $this->ID = 0;
        return true;
    }