Version: current

      1 <?php
      2 /**
      3  * Description of SubpageListField
      4  *
      5  * @author inxo
      6  */
      7 class SubpageListField extends TableListField {
      8
      9     protected $page;
     10     protected $subclass;
     11     protected $template = "SubpageListField";
     12
     13     public $Dragable = false;
     14     public $Sortable = false;
     15     public $itemClass = 'SubpageListField_Item';
     16
     17     function __construct($name, $page, $sourceClass, $sourceSort = null) {
     18         $this->page = $page;
     19         $this->subclass = $sourceClass;
     20         $this->setPageSize(30);
     21         $this->setShowPagination(true);
     22         $subpage_fields = singleton($sourceClass)->summaryFields();
     23         $subpage_fields['Status'] = 'Status';
     24         if (isset($sourceSort)) {
     25             $this->sourceSort = $sourceSort;
     26         }
     27         elseif(isset(singleton($sourceClass)->Sort)){
     28             $this->sourceSort = 'Sort';
     29         }
     30         else {
     31             $this->sourceSort = 'Title';
     32         }
     33
     34         $this->sourceFilter = 'ParentID = '.$this->page->ID;
     35
     36         if (isset($_REQUEST['ctf'][$name]['SearchTitle'])) {
     37             $title = Convert::raw2sql($_REQUEST['ctf'][$name]['SearchTitle']);
     38             $this->sourceFilter .= " AND SiteTree.Title LIKE '%{$title}%'";
     39             $this->extraLinkParams["ctf[{$name}][SearchTitle]"] = $_REQUEST['ctf'][$name]['SearchTitle'];
     40         }
     41
     42         parent::__construct(
     43                         $name,
     44                         $sourceClass,
     45                         $subpage_fields,
     46                         $this->sourceFilter,
     47                         $this->sourceSort
     48         );
     49         $this->Markable = true;
     50
     51         if (!empty($_REQUEST['ctf'][$this->Name()]['sort'])) {
     52             $this->extraLinkParams["ctf[{$this->Name()}][sort]"] = urlencode($_REQUEST['ctf'][$this->Name()]['sort']);
     53         }
     54         if (!empty($_REQUEST['ctf'][$this->Name()]['dir'])) {
     55             $this->extraLinkParams["ctf[{$this->Name()}][dir]"] = urlencode($_REQUEST['ctf'][$this->Name()]['dir']);
     56         }
     57
     58     }
     59
     60     function addsubpage($data) {
     61         $className = $this->subclass;
     62         $p = new $className();
     63
     64 //      if (!$p->Title) $p->Title = _t('CMSMain.NEW',"New ",PR_MEDIUM,'"New " followed by a className').singleton($className)->i18n_singular_name();
     65         if (!$p->Title) $p->Title = singleton($className)->i18n_singular_name();
     66         if (!$p->URLSegment) $p->URLSegment = "new-" . strtolower($className);
     67         $p->ClassName = $className;
     68         $p->ParentID = $this->page->ID;
     69
     70         // DataObject::fieldExists only checks the current class, not the hierarchy
     71         // This allows the CMS to set the correct sort value
     72         if($p->castingHelper('Sort')) {
     73             $p->Sort = DB::query("SELECT MAX(\"Sort\") FROM \"SiteTree\" WHERE \"ParentID\" = '" . Convert::raw2sql($this->page->ID) . "'")->value() + 1;
     74         }
     75
     76     }
     77
     78     function handleItem($request) {
     79         return new SubPageListField_ItemRequest($this, $request->param('ID'));
     80     }
     81
     82     function FieldHolder() {
     83         Requirements::javascript('webylon/javascript/SubpageListField.js');
     84         Requirements::javascript('webylon/javascript/SubpageAdmin.js');
     85         Requirements::css('webylon/css/SubpageAdmin.css');
     86
     87         return parent::FieldHolder();
     88     }
     89
     90     function FieldActions() {
     91         $actionSet = new FieldGroup(
     92             $f1 = new FormAction('addsubpage', _t('WebylonSubpage.ADDBUTTON', 'Add')),
     93             $f2 = new FormAction('markall', _t('WebylonSubpage.MARKALL', 'Markall')),
     94             $delete = new FormAction('deletemarked', _t('WebylonSubpage.DELETEBUTTON', 'Delete')),
     95             $f3 = new FormAction('publishmarked', _t('WebylonSubpage.PUBLISHBUTTON', 'Publish')),
     96             $f4 = new FormAction('unpublishmarked', _t('WebylonSubpage.UNPUBLISHBUTTON', 'Unpublish'))
     97         );
     98         $f1->addExtraAttribute('type', 'button');
     99         $f2->addExtraAttribute('type', 'button');
    100         $f3->addExtraAttribute('type', 'button');
    101         $f4->addExtraAttribute('type', 'button');
    102         $delete->addExtraAttribute('type', 'button');
    103         $delete->addExtraClass('delete');
    104         $val = '';
    105         if (isset($_REQUEST['ctf'][$this->Name()]['SearchTitle'])) {
    106             $val = $_REQUEST['ctf'][$this->Name()]['SearchTitle'];
    107         }
    108         $actionSet->push(new TextField('SearchTitle', 'Название', $val));
    109         $actionSet->push(new FormAction('doSearch', _t('WebylonSubpage.SEARCHBUTTON', 'Поиск')));
    110         $actionSet->push(new HiddenField('SubpageListFieldLink', '', $this->Link() . "?ctf[{$this->Name()}][SearchTitle]="));
    111
    112         $actionSet->setForm($this->Form);
    113         $actionSet->setID('group_actions');
    114
    115         return $actionSet;
    116     }
    117
    118     function FieldHiddens() {
    119         $hiddenSet = new HiddenFieldSet(
    120             new HiddenField('SortList', 'SortList'),
    121             new HiddenField('SubpageIDs', 'SubpageIDs'),
    122             new HiddenField('DestID', 'DestID')
    123         );
    124         $hiddenSet->setForm($this->Form);
    125         return $hiddenSet;
    126     }
    127 }
    128
    129 class SubpageListField_Item extends TableListField_Item {
    130     function Fields($xmlSafe = true) {
    131         $data= parent::Fields($xmlSafe);
    132         $items = $data->items;
    133         foreach ($items as $item) {
    134             if($item->Name=='Status') {
    135                 if ($this->item->ExistsOnLive) {
    136                     if ($this->item->IsModifiedOnStage) {
    137                         $item->Value = _t('MediawebPage.StatusSaved (update)',$item->Value);
    138                     } else {
    139                         $item->Value = _t('MediawebPage.StatusPublished',$item->Value);
    140                     }
    141                 } else {
    142                     $item->Value = _t('MediawebPage.StatusUnpublished',$item->Value);
    143                 }
    144             }
    145         }
    146         return new DataObjectSet($items);
    147     }
    148     function Dragable(){
    149         return $this->parent->Dragable;
    150     }
    151     function Sortable(){
    152         return $this->parent->Sortable;
    153     }
    154 }
    155
    156 class SubPageListField_ItemRequest extends TableListField_ItemRequest {
    157
    158     function delete() {
    159         if ($this->ctf->Can('delete') !== true) {
    160             return false;
    161         }
    162         // Объект должен быть наследником от SiteTree
    163         if($this->dataObj()->doUnpublish()){
    164             $this->dataObj()->delete();
    165         }
    166
    167     }
    168
    169 }
    170
    171

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