Version: current

      1 <?php
      2 /**
      3  * Description of Publication
      4  *
      5  * @author inxo, menedem
      6  */
      7 class Publication extends Page {
      8
      9     static $default_parent = "PublHolder";
     10     static $allowed_children = null;
     11     static $can_be_root = false;
     12     static $icon = "publication/img/publication";
     13
     14     static $db = array(
     15         'Date' => 'Date',
     16         'Description' => 'Text',
     17         'Author' => 'Text',
     18         'Source' => 'Text',
     19         'SourceLink' => 'Varchar(255)',
     20         'IsHidden' => 'Boolean',
     21         'Favorite' => 'Boolean',
     22     );
     23
     24     static $defaults = array(
     25         'AutoChild' => 0,
     26         'ShowInMenus' => 0,
     27         'ShowInSiteMap' => 0,
     28         'ShowInSearch' => 1,
     29         'ShowOnlyInTab' => 1,
     30         'IsHidden' => 0,
     31         'Favorite' => 0,
     32     );
     33
     34     static $has_one = array(
     35         'Photo' => 'Image',
     36     );
     37
     38     static $summary_fields = array('Date', 'Title', 'FavoriteTitle', 'IsHiddenTitle');
     39
     40     function getCMSFields() {
     41         $fields = parent::getCMSFields();
     42
     43         $dateField = new DateField('Date', $this->fieldLabel('Date'));
     44         if (!property_exists('FormField', 'use_html5') || !FormField::use_html5()) {
     45             $dateField->setLocale('ru_RU');
     46             $dateField->setConfig('dateformat', 'dd/MM/yyyy');
     47             $dateField->setConfig('showcalendar', true);
     48         }
     49         $fields->addFieldToTab('Root.Content.Main', $dateField, 'Title');
     50
     51         $PublImage = new ImageField('Photo', _t('Publication.has_one_Photo'));
     52         $PublImage->setFolderName('Publications');
     53         $fields->addFieldToTab('Root.Content.Main', $PublImage);
     54
     55         $fields->addFieldToTab('Root.Content.Main', new TextareaField('Description', _t('Publication.db_Description')));
     56         $fields->addFieldToTab('Root.Content.Main', new TextField('Author', _t('Publication.db_Author')));
     57         $fields->addFieldToTab('Root.Content.Main', new TextField('Source', _t('Publication.db_Source')));
     58         $fields->addFieldToTab('Root.Content.Main', new TextField('SourceLink', _t('Publication.db_SourceLink')));
     59         $fields->addFieldToTab('Root.Content.Main', new CheckboxField('IsHidden', _t('Publication.db_IsHidden','Hidden')));
     60         $fields->addFieldToTab('Root.Content.Main', new CheckboxField('Favorite', _t('Publication.db_Favorite','Favorite')));
     61
     62         $fields->addFieldToTab('Root.Content', new Tab('FullContent', _t('Publication.SINGULARNAME')), 'PagePhotos');
     63         $fields->addFieldToTab('Root.Content.FullContent', $fields->dataFieldByName('Content'));
     64
     65         return $fields;
     66     }
     67
     68     public function FavoriteTitle() {
     69         return ($this->Favorite) ?  _t('CheckboxField.YES', 'Yes') : _t('CheckboxField.NO', 'No');
     70     }
     71
     72     public function IsHiddenTitle() {
     73         return ($this->IsHidden) ? _t('CheckboxField.YES', 'Yes') : _t('CheckboxField.NO', 'No');
     74     }
     75
     76     function fieldLabels($relations = true) {
     77         $labels = parent::fieldLabels($relations);
     78         $labels['FavoriteTitle'] = _t('Publication.FavoriteTitle', 'Favorite');
     79         $labels['IsHiddenTitle'] = _t('Publication.IsHiddenTitle', 'Is Hidden');
     80         return $labels;
     81     }
     82
     83     public function getCMSActions() {
     84         Requirements::javascript('webylon/javascript/SubpageAction.js');
     85         $fields = parent::getCMSActions();
     86         $fields->push(new HiddenField('backLink', '', $this->Parent()->ID));
     87         $fields->insertBefore(new FormAction('goBack', _t('News.BACKBUTTON', 'Back')), 'action_unpublish');
     88         return $fields;
     89     }
     90     public function getCMSValidator() {
     91         return new RequiredFields('Title');
     92     }
     93
     94     public function populateDefaults() {
     95         parent::populateDefaults();
     96         $this->setField('Date', date('Y-m-d'), strtotime('now'));
     97     }
     98
     99     function onBeforeWrite() {
    100         if (!$this->Description)
    101             $this->Description = trim(strip_tags($this->Content));
    102         parent::onBeforeWrite();
    103     }
    104
    105     /*
    106      * Заготовка для анонсов
    107      */
    108     public function DescriptionSummmary() {
    109         if ($this->obj('Description'))
    110             return $this->obj('Description');
    111         else {
    112             return $this->obj('Content')->FirstParagraph('html');
    113         }
    114     }
    115
    116
    117     /**
    118      * возвращает список публикаций для виджета
    119      *
    120      * @param int $count - лимит возвращаемых публикаций [1]
    121      * @param boolean $favorites - отображение только избранных публикаций [1]
    122      * @param int $holderID -  id раздела PubHolder, если не указан - из всех
    123      * @param boolean $random  - флаг случайная сортировка или по умолчанию
    124      *
    125      * @return DataObjectSet
    126      */
    127     static function get_publications($count = 1, $favorites = false, $holderID = false, $random = false) {
    128         $filter = 'IsHidden = 0';
    129         $sort = ($random) ? 'RAND()' : 'Date DESC';
    130         if ($favorites) {
    131             $filter .= " AND Favorite = 1";
    132         }
    133         if ($holderID !== false) {
    134             $filter .= " AND ParentID = $holderID";
    135         }
    136         return DataObject::get('Publication', $filter, $sort, '', $count);
    137     }
    138 }
    139
    140 class Publication_Controller extends Page_Controller {
    141 }
    142

[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. -