Webylon 3.2 API Docs
  • Package
  • Class
  • Tree
  • Deprecated
  • Download
Version: current
  • 3.2
  • 3.1

Packages

  • 1c
    • exchange
      • catalog
  • auth
  • Booking
  • building
    • company
  • cart
    • shipping
    • steppedcheckout
  • Catalog
    • monument
  • cms
    • assets
    • batchaction
    • batchactions
    • bulkloading
    • comments
    • content
    • core
    • export
    • newsletter
    • publishers
    • reports
    • security
    • tasks
  • Dashboard
  • DataObjectManager
  • event
  • faq
  • forms
    • actions
    • core
    • fields-basic
    • fields-dataless
    • fields-datetime
    • fields-files
    • fields-formatted
    • fields-formattedinput
    • fields-relational
    • fields-structural
    • transformations
    • validators
  • googlesitemaps
  • guestbook
  • installer
  • newsletter
  • None
  • photo
    • gallery
  • PHP
  • polls
  • recaptcha
  • sapphire
    • api
    • bulkloading
    • control
    • core
    • cron
    • dev
    • email
    • fields-formattedinput
    • filesystem
    • formatters
    • forms
    • i18n
    • integration
    • misc
    • model
    • parsers
    • search
    • security
    • tasks
    • testing
    • tools
    • validation
    • view
    • widgets
  • seo
    • open
      • graph
  • sfDateTimePlugin
  • spamprotection
  • stealth
    • captha
  • subsites
  • userform
    • pagetypes
  • userforms
  • webylon
  • widgets

Classes

  • DataObjectFileTracking
  • DataObjectFileTrackingDecorator

Interfaces

  • DatabaseConfigurationHelper
  1 <?php
  2 /**
  3  * Объект для сохранения трекинга файлов у DataObject
  4  *
  5  *
  6  * @package sapphire
  7  * @author menedem
  8  *
  9  */
 10 
 11 class DataObjectFileTracking extends DataObject {
 12     static $db = array(
 13         'ObjectID' => 'Int',
 14         'ObjectClass' => 'Varchar(150)',
 15         'FieldName' => 'Varchar(150)',
 16     );
 17     
 18     static $has_one = array(
 19         'File' => 'File',
 20     );
 21 
 22     /**
 23      * Возвращает связанный объект
 24      * 
 25      * @return DataObject
 26      */
 27     function LinkedObject() {
 28         return DataObject::get_by_id($this->ObjectClass, $this->ObjectID);
 29     }
 30     
 31     /**
 32      * Получение информации по трекингу файлов для объекта
 33      * 
 34      * @param int $objectID - ID объекта
 35      * @param string $objectClass   - Класс объекта
 36      * @param string $fieldName - Имя поля
 37      *     
 38      * @return DataObjectSet    
 39      */
 40     static function get_track($objectID, $objectClass, $fieldName='') {
 41         $where = "ObjectID = {$objectID} AND ObjectClass = '{$objectClass}'";
 42         if ($fieldName) {
 43             $where .= " AND FieldName = '{$fieldName}'";
 44         }
 45         return DataObject::get('DataObjectFileTracking', $where);
 46     }
 47     
 48     /**
 49      * Обновляет информацию по трекингу файлов для объекта
 50      * 
 51      * @param int $objectID - ID объекта
 52      * @param string $objectClass   - Класс объекта
 53      * @param string $fieldName - Имя поля
 54      * @param array $fileIDs    - Список ID файлов
 55      */
 56     static function update_track($objectID, $objectClass, $fieldName, $fileIDs) {
 57         // берем текущий список файлов по объекту для вычисления разницы
 58         $currentTrackIDs = DB::Query("SELECT FileID FROM DataObjectFileTracking WHERE FieldName = '{$fieldName}' AND ObjectID = {$objectID} AND ObjectClass = '{$objectClass}'")->keyedColumn();
 59         
 60         // сохраняем новый
 61         foreach($fileIDs as $fileID) {
 62             if (isset($currentTrackIDs[$fileID])) {
 63                 // уже присутвует
 64                 unset($currentTrackIDs[$fileID]);
 65             } else {
 66                 // новый
 67                 self::save_track($objectID, $objectClass, $fieldName, $fileID);
 68             }
 69 
 70         }
 71         // удаляем то, что было, но пропало
 72         if (count($currentTrackIDs)) {
 73             self::delete_track($objectID, $objectClass, $fieldName, $currentTrackIDs);
 74         }
 75     }
 76 
 77     /**
 78      * Удаляет информацию о связанных файлах
 79      * Может удалять информацию по объекту, объекту и полю или конретным id файлов
 80      * 
 81      * TODO обновление информации при удалении файлов / фиксация "битых" ссылок на файлы
 82      * 
 83      * @param int $objectID - ID объекта
 84      * @param string $objectClass   - Класс объекта
 85      * @param string $fieldName - Имя поля
 86      * @param array $fileIDs    - Список ID файлов
 87      */
 88     static function delete_track($objectID=0, $objectClass='', $fieldName='', $fileIDs=array()) {
 89         $where = array();
 90         if ($objectID) {
 91             $where[] = "ObjectID = {$objectID}";
 92         }
 93         if ($objectClass) {
 94             $where[] = "ObjectClass = '{$objectClass}'";
 95         }       
 96         if ($fieldName) {
 97             $where[] = "FieldName = '{$fieldName}'";
 98         }
 99         if ($fileIDs) {
100             $where[] = "FileID IN (" . join(',', $fileIDs) . ")";
101         }
102         if (count($where)) {
103             DB::Query("DELETE FROM `DataObjectFileTracking` WHERE " . implode(' AND ', $where));
104         }
105     }
106     
107     /**
108      * Создает запись об использовании файла
109      * 
110      * @param int $objectID - ID объекта
111      * @param string $objectClass   - Класс объекта
112      * @param string $fieldName - Имя поля
113      * @param int $fileID   - ID файла
114      * 
115      * @return DataObjectFileTracking
116      */
117     static function save_track($objectID, $objectClass, $fieldName, $fileID) {
118         $obj = new DataObjectFileTracking();
119         $obj->ObjectID = $objectID;
120         $obj->ObjectClass = $objectClass;
121         $obj->FieldName = $fieldName;
122         $obj->FileID = $fileID;
123         $obj->write();
124         return $obj->ID;
125     }
126 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -
Webylon 3.2 API Docs API documentation generated by ApiGen 2.8.0