Source of file MemberWidgets_Controller.php
Size: 11,437 Bytes - Last Modified: 2021-12-23T10:58:27+00:00
/var/www/docs.ssmods.com/process/src/code/MemberWidgets_Controller.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 | <?php class MemberWidgets_Controller extends Page_Controller { private static $allowed_actions = array( 'addWidget', 'editWidget' => '->canEditWidget', 'disableWidget' => '->canDisableWidget', 'saveAll', 'AddWidgetForm', 'EnableWidgetForm', 'EditWidgetForm' ); private static $url_handlers = array( 'editWidget/$ID' => 'editWidget' ); public function init() { if (!Member::currentUserID()) Security::permissionFailure($this); parent::init(); } public function index() { if (($form = $this->NullForm()) && $form->Message() && $form->MessageType()=="good") { $title = 'Widgets'; $content = ''; } else { $title = 'Widgets'; $content = ''; } $outputData = array ( 'Title' => $title, 'Content' => $content, 'Form' => $form ); return $this->customise($outputData)->renderWith(array("MemberWidgets","Page")); } public function NullForm() { $fields = new FieldList(); $actions = new FieldList(); $validator = null; return Form::create($this, 'NullForm', $fields, $actions, $validator); } public function addWidget() { $title = 'Pridať widget'; $addForm = $this->AddWidgetForm(); $addTitle = 'Pridať widget'; $addContent = ''; $enableForm = null; $enableTitle = 'Obnoviť zakázaný widget'; $enableContent = ''; $disabledWidgets = array(); if ($PageID = $this->request->getVar('PageID')) { $filter = array(); $filter['MemberID'] = Member::currentUserID(); $filter['PageID'] = $PageID; if (($memberWidgets_Page = MemberWidgets_Page::get()->filter($filter)->limit(1)->first()) && $memberWidgets_Page->exists() && $memberWidgets_Page->DisabledWidgets) $disabledWidgets = Widget::get()->filter('ID',explode(',', $memberWidgets_Page->DisabledWidgets))->map(); if (count($disabledWidgets)) { $title = 'Pridať/Obnoviť widget'; $enableForm = $this->EnableWidgetForm(); $enableForm->Fields()->push(new DropdownField('WidgetID','Widget',$disabledWidgets)); $enableForm->Fields()->push(new HiddenField('PageID',null,$PageID)); } } $outputData = array ( 'Title' => $title, 'AddTitle' => $addTitle, 'AddContent' => $addContent, 'AddForm' => $addForm, 'EnableTitle' => $enableTitle, 'EnableContent' => $enableContent, 'EnableForm' => $enableForm ); if ($this->request->isAjax()) return $this->customise($outputData)->renderWith(array("MemberWidgets_add")); else return $this->customise($outputData)->renderWith(array("MemberWidgets_add","Page")); } public function AddWidgetForm() { $availableWidgets = WidgetAreaEditor::create("MemberSideBar")->AvailableWidgets()->map('ClassName','Title'); $fields = new FieldList(); if ($PageID = $this->request->getVar('PageID')) $fields->push(new HiddenField('PageID',null,$PageID)); else $fields->push(new DropdownField('PageID','Stránka',Page::get()->map())); $fields->push(new DropdownField('WidgetClass','Widget',$availableWidgets)); $actions = new FieldList( FormAction::create('doAddMemberWidget', 'Pridať') ); $validator = new MemberWidgets_Validator('PageID','WidgetClass'); $form = Form::create($this, 'AddWidgetForm', $fields, $actions, $validator); return $form; } public function doAddMemberWidget($data, $form) { $filter = array(); $filter['PageID'] = $data['PageID']; $filter['MemberID'] = Member::currentUserID(); if (!($memberWidgetArea = MemberWidgetArea::get()->filter($filter)->limit(1)->first()) || !$memberWidgetArea->exists()) $memberWidgetArea = $this->createMemberWidgetArea($filter['PageID'],$filter['MemberID']); $widgetsIDs = $memberWidgetArea->WidgetControllers()->column('ID'); $widget = $data['WidgetClass']::create(); $widget->ParentID = $memberWidgetArea->ID; $widgetsIDs[] = $widget->write(); if (!($memberWidgets_Page = MemberWidgets_Page::get()->filter($filter)->limit(1)->first()) || !$memberWidgets_Page->exists()) { $memberWidgets_Page = new MemberWidgets_Page(); $memberWidgets_Page->PageID = $filter['PageID']; $memberWidgets_Page->MemberID = Member::currentUserID(); } $memberWidgets_Page->WidgetsSort = implode(',', $widgetsIDs); $memberWidgets_Page->write(); if ($this->request->isAjax()) { return json_encode(array( 'Message' => 'Widget pridaný', 'Type' => 'good', 'EditWidgetLink' => $widget->editMemberWidgetLink(), 'WidgetID' => $widget->ID, 'Widget' => $widget->getController()->WidgetHolder()->getValue() )); } else { $this->NullForm()->sessionMessage('Widget pridaný', 'good'); return $this->redirect($this->Link()); } } public function EnableWidgetForm() { $fields = new FieldList(); $actions = new FieldList( FormAction::create('doEnableWidget', 'Obnoviť') ); $validator = new MemberWidgets_Validator('WidgetID'); $form = Form::create($this, 'EnableWidgetForm', $fields, $actions, $validator); return $form; } public function doEnableWidget($data, $form) { $widget = DataObject::get_by_id('Widget',$data['WidgetID']); $filter = array(); $filter['PageID'] = $data['PageID']; $filter['MemberID'] = Member::currentUserID(); if (($memberWidgets_Page = MemberWidgets_Page::get()->filter($filter)->limit(1)->first()) && $memberWidgets_Page->exists()) { if ($memberWidgets_Page->WidgetsSort) $widgetsSortIDs = explode(',', $memberWidgets_Page->WidgetsSort); else $widgetsSortIDs = array(); $widgetsSortIDs[] = $widget->ID; $memberWidgets_Page->WidgetsSort = implode(',', $widgetsSortIDs); $disabledWidgetsIDs = array_flip(explode(',', $memberWidgets_Page->DisabledWidgets)); unset($disabledWidgetsIDs[$widget->ID]); $memberWidgets_Page->DisabledWidgets = implode(',', array_flip($disabledWidgetsIDs)); $memberWidgets_Page->write(); } if ($this->request->isAjax()) { return json_encode(array( 'Message' => 'Widget obnovený', 'Type' => 'good', 'WidgetID' => $widget->ID, 'Widget' => $widget->getController()->customise(array('currentPageID'=>$filter['PageID']))->renderWith("WidgetHolder")->getValue() )); } else { $this->NullForm()->sessionMessage('Widget obnovený', 'good'); return $this->redirect($this->Link()); } } public function editWidget() { $form = $this->EditWidgetForm(); $title = 'Upraviť widget'; $content = ''; $outputData = array ( 'Title' => $title, 'Content' => $content, 'Form' => $form ); if ($this->request->isAjax()) return $this->customise($outputData)->renderWith(array("MemberWidgets_edit")); else return $this->customise($outputData)->renderWith(array("MemberWidgets_edit","Page")); } public function EditWidgetForm() { $widget = DataObject::get_by_id('Widget',($ID = $this->request->param('ID')) ? $ID : $this->request->postVar('ID')); $currentWidget = singleton($widget->ClassName); $actions = new FieldList( FormAction::create('doEditMemberWidget', 'Uložiť'), FormAction::create('doDeleteMemberWidget', 'Vymazať') ); $validator = null; $form = Form::create($this, 'EditWidgetForm', new FieldList(), $actions, $validator); $form->setFields($currentWidget->getCMSFields()); $form->Fields()->push(new HiddenField('ID')); $form->Fields()->removeByName('Sort'); $form->Fields()->removeByName('ParentID'); $form->Fields()->removeByName('Enabled'); $form->loadDataFrom($widget); return $form; } public function doEditMemberWidget($data, $form) { if (isset($data['ID']) && ($ID = $data['ID']) && is_numeric($ID) && ($widget = DataObject::get_by_id('Widget',$ID)) && $widget->canEditCurrent()) { foreach ($data as $key => $value) if ($widget->hasField($key)) $widget->$key = $value; $widget->write(); if ($this->request->isAjax()) { return json_encode(array( 'Message' => 'Widget uložený', 'Type' => 'good', 'WidgetID' => $widget->ID, 'Widget' => $widget->getController()->WidgetHolder()->getValue() )); } else { $this->NullForm()->sessionMessage('Widget uložený', 'good'); return $this->redirect($this->Link()); } } return $this->redirectBack(); } public function doDeleteMemberWidget($data, $form) { if (isset($data['ID']) && ($ID = $data['ID']) && is_numeric($ID) && ($widget = DataObject::get_by_id('Widget',$ID)) && $widget->canEditCurrent()) { $widget->delete(); if ($this->request->isAjax()) { return json_encode(array( 'Message' => 'Widget vymazaný', 'Type' => 'good', 'WidgetID' => $widget->OldID )); } else { $this->NullForm()->sessionMessage('Widget vymazaný', 'good'); return $this->redirect($this->Link()); } } return $this->redirectBack(); } public function disableWidget() { if (($PageID = $this->request->getVar('PageID')) && ($ID = $this->request->param('ID')) && is_numeric($ID) && ($widget = DataObject::get_by_id('Widget',$ID))) { $filter = array(); $filter['PageID'] = $PageID; $filter['MemberID'] = Member::currentUserID(); if (!($memberWidgets_Page = MemberWidgets_Page::get()->filter($filter)->limit(1)->first()) || !$memberWidgets_Page->exists()) { $memberWidgets_Page = new MemberWidgets_Page(); $memberWidgets_Page->PageID = $filter['PageID']; $memberWidgets_Page->MemberID = Member::currentUserID(); } if ($memberWidgets_Page->DisabledWidgets) $disabledWidgetsIDs = explode(',', $memberWidgets_Page->DisabledWidgets); else $disabledWidgetsIDs = array(); $disabledWidgetsIDs[] = $widget->ID; $memberWidgets_Page->DisabledWidgets = implode(',', $disabledWidgetsIDs); if ($memberWidgets_Page->WidgetsSort) { $widgetsSortIDs = array_flip(explode(',', $memberWidgets_Page->WidgetsSort)); unset($widgetsSortIDs[$widget->ID]); $memberWidgets_Page->WidgetsSort = implode(',', array_flip($widgetsSortIDs)); } $memberWidgets_Page->write(); if ($this->request->isAjax()) { return json_encode(array( 'Message' => 'Widget zakázaný', 'Type' => 'good', 'WidgetID' => $widget->ID )); } else { $this->NullForm()->sessionMessage('Widget zakázaný', 'good'); return $this->redirect($this->Link()); } } return $this->redirectBack(); } public function saveAll() { if ($widgets = $this->request->postVar('widget')) { if ($pageID = $this->request->postVar('pageID')) { $filter = array(); $filter['PageID'] = $pageID; $filter['MemberID'] = Member::currentUserID(); if (!($memberWidgets_Page = MemberWidgets_Page::get()->filter($filter)->limit(1)->first()) || !$memberWidgets_Page->exists()) { $memberWidgets_Page = new MemberWidgets_Page(); $memberWidgets_Page->PageID = $pageID; $memberWidgets_Page->MemberID = Member::currentUserID(); } $memberWidgets_Page->WidgetsSort = implode(',', $widgets); $memberWidgets_Page->write(); } } } public function Link($action = null) { return Controller::join_links(Director::baseURL().'memberwidgets', $action); } public function canEditWidget() { return ($ID = $this->request->param('ID')) && is_numeric($ID) && ($widget = DataObject::get_by_id('Widget',$ID)) && $widget->canEditCurrent(); } public function canDisableWidget() { return ($PageID = $this->request->getVar('PageID')) && ($ID = $this->request->param('ID')) && is_numeric($ID) && ($widget = DataObject::get_by_id('Widget',$ID)) && $widget->canDisableCurrent($PageID); } } |