Advertisement
Guest User

miiihi

a guest
Jan 7th, 2011
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 7.94 KB | None | 0 0
  1. diff --git a/uploadify/code/MultipleFileUploadField.php b/uploadify/code/MultipleFileUploadField.php
  2. index a225715..4d8c191 100644
  3. --- a/uploadify/code/MultipleFileUploadField.php
  4. +++ b/uploadify/code/MultipleFileUploadField.php
  5. @@ -21,7 +21,8 @@ class MultipleFileUploadField extends UploadifyField
  6.      * @var array Overrides the "multi" setting
  7.      */
  8.     static $defaults = array (
  9. -       'multi' => true
  10. +       'multi' => true,
  11. +       'deleteEnabled' => false
  12.     );
  13.  
  14.    
  15. @@ -65,7 +66,7 @@ class MultipleFileUploadField extends UploadifyField
  16.     public function importlist(SS_HTTPRequest $request) {
  17.         if($id = $request->requestVar('FolderID')) {
  18.             if(is_numeric($id)) {
  19. -               $files = DataObject::get("File", "ParentID = $id AND ClassName != 'Folder'");
  20. +               $files = DataObject::get("File", "\"ParentID\" = $id AND \"ClassName\" != 'Folder'");
  21.                 if($files && $this->form) {
  22.                     if($record = $this->form->getRecord()) {
  23.                         if($relation_name = $this->getForeignRelationName($record)) {
  24. @@ -115,20 +116,17 @@ class MultipleFileUploadField extends UploadifyField
  25.      * @return null
  26.      */
  27.     public function removefile() {
  28. -       if($form = $this->form) {
  29. -           if($rec = $form->getRecord()) {
  30. -               if($key = $this->getForeignRelationName($rec)) {
  31. -                   if(isset($_REQUEST['FileID'])) {
  32. -                       if($file_class = $rec->has_many($this->name)) {
  33. -                           if($file = DataObject::get_by_id($file_class, (int) $_REQUEST['FileID'])) {
  34. -                               $file->{$key} = 0;
  35. -                               $file->write();
  36. -                               return;
  37. -                           }
  38. -                       }
  39. -                   }
  40. -               }
  41. -           }
  42. +       if((isset($_REQUEST['FileID']))
  43. +           && ($form = $this->form)
  44. +           && ($rec = $form->getRecord())
  45. +           && ($key = $this->getForeignRelationName($rec))
  46. +           && ($file_class = $this->getFileClass($rec))
  47. +           && ($file = DataObject::get_by_id($file_class, (int) $_REQUEST['FileID']))) {
  48. +              
  49. +               $currentComponentSet = $rec->{$this->name}();
  50. +               $currentComponentSet->remove($file);
  51. +               $currentComponentSet->write();
  52. +           return;
  53.         }
  54.     }
  55.    
  56. @@ -160,7 +158,7 @@ class MultipleFileUploadField extends UploadifyField
  57.             if(is_array($val)) {
  58.                 $list = implode(',', $val);
  59.                 $class = $this->baseFileClass;
  60. -               if($files = DataObject::get($class, "`{$class}`.ID IN (".Convert::raw2sql($list).")")) {
  61. +               if($files = DataObject::get($class, "\"{$class}\".\"ID\" IN (".Convert::raw2sql($list).")")) {
  62.                     $ret = new DataObjectSet();
  63.                     foreach($files as $file) {
  64.                         if(is_subclass_of($file->ClassName, "Image") || $file->ClassName == "Image") {
  65. @@ -204,39 +202,56 @@ class MultipleFileUploadField extends UploadifyField
  66.         if(!$record->isInDB()) {
  67.             $record->write();
  68.         }
  69. -       if(!$file_class = $record->has_many($this->name)) {
  70. +       if(!$file_class = $this->getFileClass($record)) {
  71.             return false;
  72.         }
  73.         if(isset($_REQUEST[$this->name]) && is_array($_REQUEST[$this->name])) {
  74.             if($relation_name = $this->getForeignRelationName($record)) {
  75.                 // Null out all the existing relations and reset.
  76. -               if($current = $record->{$this->name}()) {
  77. -                   foreach($current as $rec) {
  78. -                       $rec->$relation_name = 0;
  79. -                       $rec->write();
  80. -                   }
  81. -               }
  82. +               $currentComponentSet = $record->{$this->name}();
  83. +               $currentComponentSet->removeAll();
  84.                 // Assign all the new relations (may have already existed)
  85.                 foreach($_REQUEST[$this->name] as $id) {
  86.                     if($file = DataObject::get_by_id($this->baseFileClass, $id)) {
  87.                         $new = ($file_class != $this->baseFileClass) ? $file->newClassInstance($file_class) : $file;
  88. -                       $new->$relation_name = $record->ID;
  89.                         $new->write();
  90. +                       $currentComponentSet->add($new);
  91.                     }
  92.                 }
  93.             }
  94.         }      
  95.     }
  96.    
  97. +   /**
  98. +    * Returns file class for the $record for field $this->name if has_many or many_many
  99. +    *
  100. +    * @param   DataObject $record  The record to search
  101. +    * @return  string|boolean      File class or false
  102. +    */
  103. +   public function getFileClass (DataObject $record) {
  104. +       if(!$file_class = $record->has_many($this->name)) {
  105. +           if (!$many_class = $record->many_many($this->name)) {
  106. +               return false;
  107. +           }
  108. +           // set child class.
  109. +           $file_class = $many_class[1];
  110. +       }
  111. +       return $file_class;
  112. +   }
  113.    
  114.     /**
  115. -    * Gets the foreign key from the child File class that relates to the $has_many on the parent record
  116. +    * Gets the foreign key from the child File class that relates to the $has_many or $many_many
  117. +    * on the parent record
  118.      *
  119.      * @param DataObject $record The record to search
  120.      * @return string
  121.      */
  122.     public function getForeignRelationName(DataObject $record) {
  123. -       if($file_class = $record->has_many($this->name)) {
  124. +      
  125. +       if ($many_info = $record->many_many($this->name)) {
  126. +           // return parent field
  127. +           return $many_info[2];
  128. +       } elseif ($file_class = $record->has_many($this->name)) {
  129.             $class = $record->class;
  130.             $relation_name = false;
  131.             while($class != "DataObject") {
  132. @@ -246,7 +261,7 @@ class MultipleFileUploadField extends UploadifyField
  133.                 $class = get_parent_class($class);                 
  134.             }
  135.             if(!$relation_name) {
  136. -               user_error("Could not find has_one relation ship on $file_class", E_USER_ERROR);
  137. +               user_error("Could not find has_one or belongs many_many relation ship on $file_class", E_USER_ERROR);
  138.             }
  139.  
  140.             return $relation_name .= "ID";
  141. diff --git a/uploadify/code/UploadifyField.php b/uploadify/code/UploadifyField.php
  142. index c03152b..4687a92 100644
  143. --- a/uploadify/code/UploadifyField.php
  144. +++ b/uploadify/code/UploadifyField.php
  145. @@ -350,7 +350,7 @@ abstract class UploadifyField extends FormField
  146.     public function importlist(SS_HTTPRequest $request) {
  147.         if($id = $request->requestVar('FolderID')) {
  148.             if(is_numeric($id)) {
  149. -               $files = DataObject::get("File", "ParentID = $id AND ClassName != 'Folder'");
  150. +               $files = DataObject::get("File", "\"ParentID\" = $id AND \"ClassName\" != 'Folder'");
  151.                 return $this->customise(array(
  152.                     'Files' => $files
  153.                 ))->renderWith('ImportList');
  154. @@ -484,6 +484,14 @@ abstract class UploadifyField extends FormField
  155.         return $this->getSetting('multi');
  156.     }
  157.  
  158. +   /**
  159. +    * A quick template accessor to determine if delete link is enabled
  160. +    *
  161. +    * @return boolean
  162. +    */
  163. +   public function DeleteEnabled() {
  164. +       return $this->getSetting('deleteEnabled');
  165. +   }
  166.  
  167.     /**
  168.      * A template accessor to determine if we're in the backend.
  169. diff --git a/uploadify/templates/Includes/AttachedFiles.ss b/uploadify/templates/Includes/AttachedFiles.ss
  170. index eedcd94..4f560de 100644
  171. --- a/uploadify/templates/Includes/AttachedFiles.ss
  172. +++ b/uploadify/templates/Includes/AttachedFiles.ss
  173. @@ -9,7 +9,7 @@
  174.                 <div class="delete">
  175.                     <% if Top.Backend %>
  176.                         <a class="remove" title="<% _t('Uploadify.REMOVE','Remove') %>" rel="$ID" title="<% _t('Uploadify.REMOVEANDDELETE','Remove') %>" href="<% control Top %>$Link(removefile)<% end_control %>"><img src="uploadify/images/remove.png" height="16" width="16" alt="<% _t('Uploadify.REMOVEANDDELETE','Remove') %>" /></a>&nbsp;
  177. -                       <a class="delete" title="<% _t('Uploadify.REMOVEANDDELETE','Remove and delete') %>" rel="$ID" title="<% _t('Uploadify.REMOVEANDDELETE','Remove and delete') %>" href="<% control Top %>$Link(deletefile)<% end_control %>"><img src="uploadify/images/delete.png" height="16" width="16" alt="<% _t('Uploadify.REMOVEANDDELETE','Remove and delete') %>" /></a>
  178. +                       <% if Top.DeleteEnabled %> <a class="delete" title="<% _t('Uploadify.REMOVEANDDELETE','Remove and delete') %>" rel="$ID" title="<% _t('Uploadify.REMOVEANDDELETE','Remove and delete') %>" href="<% control Top %>$Link(deletefile)<% end_control %>"><img src="uploadify/images/delete.png" height="16" width="16" alt="<% _t('Uploadify.REMOVEANDDELETE','Remove and delete') %>" /></a><% end_if %>
  179.                     <% else %>
  180.                         <a class="delete" title="<% _t('Uploadify.REMOVE','Remove') %>" rel="$ID" title="<% _t('Uploadify.REMOVEANDDELETE','Remove') %>" href="<% control Top %>$Link(removefile)<% end_control %>"><img src="uploadify/images/delete.png" height="16" width="16" alt="<% _t('Uploadify.REMOVEANDDELETE','Remove') %>" /></a>
  181.                     <% end_if %>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement