searchableFields() as $fieldName => $fieldSpec) { if(strpos($fieldName, '.') === false) $searchFilters[] = "`$fieldName` LIKE '%{$SQL_search}%'"; } $this->sourceFilter = '(' . implode(' OR ', $searchFilters) . ')'; $this->searchingFor = $_REQUEST['FileSearch']; // @todo Integrate search form more closely and don't rely on deprecated // $extraLinkParams. $this->extraLinkParams = array( 'FileSearch' => $SQL_search ); } $this->sourceSort = 'Title'; $this->Markable = true; } function FieldHolder() { $ret = parent::FieldHolder(); Requirements::javascript(CMS_DIR . '/javascript/AssetTableField.js'); Requirements::javascript('cms/javascript/ImageEditor/Activator.js'); return $ret; } function setFolder($folder) { $this->folder = $folder; $this->sourceFilter .= ($this->sourceFilter) ? " AND " : ""; // If you are searching for files then show all those from subfolders if($this->searchingFor) { $folderIDs = $nextIDSet = array($folder->ID); $folderClasses = "'" . implode("','", ClassInfo::subclassesFor("Folder")) . "'"; while($nextIDSet) { // TO DO: In 2.4 this should be refactored to use the new data mapper. $nextIDSet = DB::query("SELECT ID FROM `File` WHERE ParentID IN (" . implode(", " , $nextIDSet) . ") AND ClassName IN ($folderClasses)")->column(); if($nextIDSet) $folderIDs = array_merge($folderIDs, $nextIDSet); } $this->sourceFilter .= " ParentID IN (" . implode(", ", $folderIDs) . ") AND ClassName <> 'Folder'"; // Otherwise just show the direct contents } else { $this->sourceFilter .= " ParentID = '" . $folder->ID . "' AND ClassName <> 'Folder'"; } } function Folder() { return $this->folder; } function sourceID() { if($this->folder) return $this->folder->ID; } /** * Get the pop-up fields for the given record. */ function getCustomFieldsFor($childData) { if(!$childData) { user_error("AssetTableField::DetailForm No record found"); return null; } if($childData->ParentID) { $folder = DataObject::get_by_id('File', $childData->ParentID ); } else { $folder = singleton('Folder'); } $urlLink = "
". _t('AssetTableField.NOLINKS',"This file hasn't been linked to from any pages.") ."
"; $detailFormFields->addFieldToTab("BottomRoot.Links", new LiteralField("Backlinks", $backlinks)); } // the ID field confuses the Controller-logic in finding the right view for ReferencedField $detailFormFields->removeByName('ID'); if($childData) $childData->extend('updateCMSFields', $detailFormFields); return $detailFormFields; } /** * Provide some HTML for a search form, to be * added above the AssetTable field, allowing * a user to filter the current table's files * by their filename. * * @return string HTML for search form */ function SearchForm() { $searchFields = new FieldGroup( new TextField('FileSearch', _t('MemberTableField.SEARCH', 'Search'), $this->searchingFor), new HiddenField("ctf[ID]", '', $this->ID), new HiddenField('FileFieldName', '', $this->name) ); $actionFields = new LiteralField( 'FileFilterButton', '' ); $fieldContainer = new FieldGroup( $searchFields, $actionFields ); return $fieldContainer->FieldHolder(); } } ?>