Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

miiihi

By: a guest on Jan 7th, 2011  |  syntax: Diff  |  size: 7.94 KB  |  views: 96  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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 %>