Make deleting a post also delete associated resources, a=chris

Chris Pollett [2015-01-02 21:Jan:nd]
Make deleting a post also delete associated resources, a=chris
Filename
controllers/components/social_component.php
models/group_model.php
diff --git a/controllers/components/social_component.php b/controllers/components/social_component.php
index 7633519b6..8a5c77a48 100644
--- a/controllers/components/social_component.php
+++ b/controllers/components/social_component.php
@@ -852,12 +852,19 @@ class SocialComponent extends Component implements CrawlConstants
                         break;
                     }
                     $post_id = $parent->clean($_REQUEST['post_id'], "int");
-                    $success=$group_model->deleteGroupItem($post_id, $user_id);
+                    $group_item = $group_model->getGroupItem($post_id);
+                    $success = false;
+                    if($group_item) {
+                        $success =
+                            $group_model->deleteGroupItem($post_id, $user_id);
+                    }
                     $search_array = array(
                         array("parent_id", "=", $just_thread, ""));
                     $item_count = $group_model->getGroupItemCount($search_array,
                         $user_id, -1);
                     if($success) {
+                        $group_model->deleteResources($group_item["GROUP_ID"],
+                            "post".$post_id);
                         if($item_count == 0) {
                             unset($_REQUEST['just_thread']);
                         }
diff --git a/models/group_model.php b/models/group_model.php
index 49a8c97cf..cc4f36a95 100644
--- a/models/group_model.php
+++ b/models/group_model.php
@@ -1133,9 +1133,11 @@ class GroupModel extends Model
      *
      * @param int $group_id group identifier of group wiki page belongs to
      * @param int $page_id identifier for page want folder paths for
+     * @param bool $create whether to create folders or not if these don't
+     *      exist
      * @return array (page_folder, thumb_folder)
      */
-    function getGroupPageResourcesFolders($group_id, $page_id)
+    function getGroupPageResourcesFolders($group_id, $page_id, $create = false)
     {
         $group_page_folder = crawlHash(
             "group" . $group_id. $page_id . AUTH_KEY);
@@ -1150,6 +1152,8 @@ class GroupModel extends Model
         $thumb_path = "$thumb_prefix_path/$thumb_page_folder";
         if(file_exists($group_path) && file_exists($thumb_path)) {
             return array($group_path, $thumb_path);
+        } else if(!$create) {
+            return false;
         }
         if(!file_exists(APP_DIR) && !mkdir(APP_DIR)) {
             return false;
@@ -1277,8 +1281,8 @@ class GroupModel extends Model
         return $parsed_page;
     }
     /**
-     * Deletes a resource (image, video, etc) associated with a wiki page
-     * belonging to a group.
+     * Deletes a resource (image, video, etc) associated with a wiki page or
+     * group feed post belong to a group
      *
      * @param string $resource_name name of resource to delete
      * @param int $group_id group identifier of group wiki page belongs to
@@ -1301,6 +1305,28 @@ class GroupModel extends Model
         }
         return true;
     }
+    /**
+     * Deletes all resources (image, video, etc) associated with a wiki page
+     * belonging to a group.
+     *
+     * @param int $group_id group identifier of group wiki page belongs to
+     * @param int $page_id identifier for page want to delete resource from
+     * @return bool whether the deletion was successful
+     */
+    function deleteResources($group_id, $page_id)
+    {
+        $folders = $this->getGroupPageResourcesFolders($group_id,
+            $page_id);
+        if(!$folders) {return false; }
+        list($folder, $thumb_folder) = $folders;
+        if($folder && file_exists($folder)) {
+            $this->db->unlinkRecursive($folder);
+        }
+        if($thumb_folder && file_exists($thumb_folder)) {
+            $this->db->unlinkRecursive($thumb_folder);
+        }
+        return true;
+    }
     /**
      * Renames a resource (image, video, etc) associated with a wiki page
      * belonging to a group.
@@ -1345,7 +1371,8 @@ class GroupModel extends Model
     function copyFileToGroupPageResource($tmp_name, $file_name, $mime_type,
         $group_id, $page_id)
     {
-        $folders = $this->getGroupPageResourcesFolders($group_id, $page_id);
+        $folders = $this->getGroupPageResourcesFolders($group_id, $page_id,
+            true);
         if(!$folders) {return false; }
         list($folder, $thumb_folder) = $folders;
         if(move_uploaded_file($tmp_name, "$folder/$file_name")) {
ViewGit