1 <?php
2
3 4 5 6 7
8 class NewsEntry extends Page {
9
10 static $can_be_root = false;
11 static $allowed_children = "none";
12 static $default_parent = "NewsHolder";
13
14 static $db = array(
15 'Date' => 'Date',
16 'Description' => 'Text',
17 'Important' => 'Boolean',
18 );
19
20 static $has_one = array(
21 'Photo' => 'Image',
22 );
23
24 static $defaults = array(
25 'ShowInMenus' => 0,
26 'ShowInSiteMap' => 0,
27 'ShowInSearch' => 1,
28 'ShowOnlyInTab' => 1,
29 'CanCreateChildren' => array(0),
30 'Viewers' => 'Anyone',
31 'Editors' => 'LoggedInUsers',
32 'Date' => 'now()',
33 );
34
35 static $summary_fields = array(
36 'Date', 'Title', 'Description'
37 );
38
39 static $searchable_fields = array(
40 'Title', 'Description', 'Content'
41 );
42
43
44 protected static $show_only_in_tab = 1;
45
46 static function set_show_only_in_tab($value) {
47 self::$show_only_in_tab = $value;
48 }
49
50 function getCMSFields() {
51 $fields = parent::getCMSFields();
52 $fields->removeByName('MenuTitle');
53
54 $dateField = new DateField('Date', $this->fieldLabel('Date'));
55 if (!property_exists('FormField', 'use_html5') || !FormField::use_html5()) {
56 $dateField->setLocale(Member::currentUser()->Locale);
57 $dateField->setConfig('dateformat', 'dd/MM/yyyy');
58 $dateField->setConfig('showcalendar', true);
59 }
60 $fields->addFieldToTab('Root.Content.Main', $dateField, 'Title');
61
62 $m = new TextareaField('Description', $this->fieldLabel('Description'));
63 $fields->addFieldToTab('Root.Content.Main', $m, 'Content');
64
65 $fields->addFieldToTab('Root.Content.Main', new CheckboxField('Important', $this->fieldLabel('Important')), 'Description');
66
67 $fields->addFieldToTab('Root.Content', new Tab('Image', $this->fieldLabel('Photo')), 'PagePhotos');
68 $i = new ImageField('Photo', $this->fieldLabel('Photo'));
69 $folder = ($this->AssociatedFolderName) ? $this->AssociatedFolderName : 'News';
70 $i->setFolderName($folder);
71 $fields->addFieldToTab("Root.Content.Image", $i);
72 return $fields;
73 }
74
75 public function getCMSActions() {
76 Requirements::javascript('webylon/javascript/SubpageAction.js');
77 $fields = parent::getCMSActions();
78 $fields->push(new HiddenField('backLink', '', $this->Parent()->ID));
79 $fields->insertFirst(new FormAction('goBack', _t('News.BACKBUTTON', 'Back')));
80 return $fields;
81 }
82
83 public function getCMSValidator() {
84 return new RequiredFields('Title');
85
86 }
87
88 public function populateDefaults() {
89 parent::populateDefaults();
90 $this->setField('Date', date('Y-m-d', strtotime('now')));
91 $this->ShowOnlyInTab = (self::$show_only_in_tab) ? 1 : 0;
92 }
93
94 function requireDefaultRecords() {
95 parent::requireDefaultRecords();
96 $state = (int)self::$show_only_in_tab;
97
98 DB::query("UPDATE `Page` SET `ShowOnlyInTab` = {$state} WHERE `ID` in (SELECT `ID` FROM `NewsEntry`)");
99
100 DB::query("UPDATE `Page_Live` SET `ShowOnlyInTab` = {$state} WHERE `ID` in (SELECT `ID` FROM `NewsEntry_Live`)");
101 }
102
103 function onBeforeWrite() {
104 parent::onBeforeWrite();
105 if ($this->PhotoID) {
106 $img = DataObject::get_by_id('Image', $this->PhotoID);
107 if (!$img || !$img->ID) {
108 $this->PhotoID = 0;
109 }
110 }
111 $this->ShowOnlyInTab = (self::$show_only_in_tab) ? 1 : 0;
112 }
113
114 function BackLink() {
115 if (isset($_SERVER['HTTP_REFERER'])) {
116 $baseURL = Director::absoluteBaseURL();
117 if ($_SERVER['HTTP_REFERER'] == $baseURL) {
118 return $baseURL;
119 }
120 if ($archivePage = DataObject::get_one('NewsArchive')) {
121 $link = $archivePage->AbsoluteLink();
122 if (strpos($_SERVER['HTTP_REFERER'], $link) !== false) {
123 return $link;
124 }
125 }
126 }
127 return $this->Parent()->Link();
128 }
129
130 function () {
131 if (strlen($this->Description) > 0) {
132 return $this->Description;
133 }
134 return $this->Content;
135 }
136 }
137
138 class NewsEntry_Controller extends Page_Controller {
139
140 }
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.
-