コード例 #1
0
ファイル: Model.php プロジェクト: vincium/bourg-la-reine
 public function getModule($createIfNotExist = false)
 {
     if (!isset($this->module)) {
         $this->module = \Rebond\Cms\Module\Data::loadById($this->moduleId, $createIfNotExist);
     }
     return $this->module;
 }
コード例 #2
0
ファイル: Model.php プロジェクト: vincium/bourg-la-reine
 public function loadModule()
 {
     if (!isset($module)) {
         $this->module = \Rebond\Cms\Module\Data::loadByTitle('Slideshow');
         $this->moduleId = $this->module->getId();
     }
 }
コード例 #3
0
ファイル: Gadget.php プロジェクト: vincium/lot
 private function hasFilter()
 {
     $module = \Rebond\Cms\Module\Data::loadByTitle('Standard');
     if (!isset($module)) {
         Util\Error::kill(Util\Code::ITEM_NOT_FOUND, 'Standard module not found', __FILE__, __LINE__);
     }
     return $module->getHasFilter();
 }
コード例 #4
0
ファイル: Form.php プロジェクト: vincium/bourg-la-reine
 public function buildModule()
 {
     $options = [];
     $options['clearSelect'] = true;
     $options['select'][] = \Rebond\Cms\Module\Data::getList(['id', 'title']);
     $options['where'][] = 'module.status = 1';
     $items = \Rebond\Cms\Module\Data::loadAll($options);
     return Util\Form::buildDropdownList('moduleId' . $this->unique, $items, 'id', 'title', $this->getModel()->getModuleId());
 }
コード例 #5
0
ファイル: Form.php プロジェクト: vincium/bourg-la-reine
 public function buildModule()
 {
     $options = [];
     $options['clearSelect'] = true;
     $options['select'][] = \Rebond\Cms\Module\Data::getList(['id', 'has_content', 'title']);
     $options['where'][] = 'module.status = 1';
     $options['order'][] = 'module.title';
     $items = \Rebond\Cms\Module\Data::loadAll($options);
     $form = '<select class="input" name="moduleId" id="moduleId">';
     if ($items) {
         foreach ($items as $item) {
             $selected = $item->getId() == $this->getModel()->getModuleId() ? ' selected="selected"' : '';
             $form .= '<option value="' . $item->getId() . '" data-app=' . $item->getHasContent() . $selected . '>' . $item->getTitle() . '</option>';
         }
     }
     $form .= '</select>';
     return $form;
 }
コード例 #6
0
ファイル: Home.php プロジェクト: vincium/bourg-la-reine
 public function index()
 {
     // auth
     if (!\Rebond\Util\Auth::isAdminAuthorized($this->signedUser, null, false)) {
         header('Location: /profile/sign-in');
         exit;
     }
     // view
     $this->setTpl();
     // main
     $tplMain = new Template(Template::SITE, ['admin']);
     $tplMain->set('title', $this->app->site()->getTitle());
     // right
     $tplRight = new Template(Template::SITE, ['admin']);
     $pendingItems = [];
     if ($this->app->site()->getIsCms()) {
         $options = [];
         $options['where'][] = 'module.status = 1';
         $options['where'][] = 'module.has_content = 1';
         $modules = \Rebond\Cms\Module\Data::loadAll($options);
         if ($modules) {
             foreach ($modules as $module) {
                 $appData = '\\Rebond\\App\\' . $module->getTitle() . '\\Data';
                 $items = $appData::loadByVersion('pending');
                 if (count($items) > 0) {
                     $pendingItems[] = $items;
                 }
             }
         }
     }
     $tplRight->set('items', $pendingItems);
     $tplRight->set('title', \Rebond\Util\Lang::lang('pendingItems'));
     // layout
     $this->tplLayout->set('column1', $tplMain->render('index'));
     $this->tplLayout->set('column2', $tplRight->render('pending'));
     // master
     $this->tplMaster->set('layout', $this->tplLayout->render('layout-2-col'));
     return $this->tplMaster->render('tpl-default');
 }
コード例 #7
0
ファイル: Media.php プロジェクト: vincium/bourg-la-reine
 public function in_use()
 {
     // auth
     Auth::isAdminAuthorized($this->signedUser, 'admin.media.image', true, '/media');
     $id = Converter::int('id');
     if (!isset($id)) {
         return $this->index();
     }
     // find app modules that use medium
     $items = [];
     $moduleMedium = \Rebond\Cms\ModuleMedia\Data::loadAll();
     if ($moduleMedium) {
         foreach ($moduleMedium as $moduleMedia) {
             $module = \Rebond\Cms\Module\Data::loadById($moduleMedia->getModuleId());
             if (isset($module)) {
                 $appData = '\\Rebond\\App\\' . $module->getTitle() . '\\Data';
                 $options = [];
                 $options['where'][] = [$moduleMedia->getField() . ' = ?', $id];
                 $options['where'][] = ['content.version NOT IN (?)', [VersionType::DELETED, VersionType::OLD]];
                 $items = array_merge($items, $appData::loadAll($options));
             }
         }
     }
     // view
     $this->setTpl();
     // main
     $tplMain = new Template(Template::SITE, ['admin', 'media']);
     $tplMain->set('items', $items);
     // layout
     $this->tplLayout->set('column1', $tplMain->render('in-use'));
     // master
     $this->tplMaster->set('layout', $this->tplLayout->render('layout-1-col'));
     return $this->tplMaster->render('tpl-default');
 }
コード例 #8
0
ファイル: Service.php プロジェクト: vincium/bourg-la-reine
 public function search()
 {
     if (!$this->hasPrivilege('admin.content.search')) {
         return $this->noPrivilege('admin.content.search');
     }
     $json = [];
     $json['result'] = ResultType::ERROR;
     // check
     $search = Converter::string('search', 'post');
     if (!isset($search)) {
         $json['message'] = Lang::lang('errorInvalidParameters');
         return json_encode($json);
     }
     $searchResults = [];
     // search and build views
     $options = [];
     $options['clearSelect'] = true;
     $options['select'][] = \Rebond\Cms\Module\Data::getList(['id', 'title']);
     $options['where'][] = 'module.status = 1';
     $options['where'][] = 'module.has_content = 1';
     $modules = \Rebond\Cms\Module\Data::loadAll($options);
     $options2 = [];
     $options2['clearSelect'] = true;
     $options2['where'][] = ['LOWER(content.title) LIKE ?', '%' . strtolower($search) . '%'];
     $options2['where'][] = ['content.version IN (?)', [0, 1, 3]];
     $options2['limit'][] = '0, 10';
     foreach ($modules as $module) {
         $appData = '\\Rebond\\App\\' . $module->getTitle() . '\\Data';
         $options2['select'][] = $appData::getList(['app_id']);
         $options2['select'][] = \Rebond\Cms\Content\Data::getList(['title', 'version']);
         $items = $appData::loadAll($options2);
         if (isset($items) && count($items) > 0) {
             foreach ($items as $item) {
                 $result = new \Rebond\Cms\Search();
                 $result->setType($module->getTitle());
                 $result->setAppId($item->getAppId());
                 $result->setTitle($item->getTitle());
                 $result->setVersion($item->getVersion());
                 $result->setVersionValue($item->getVersionValue());
                 $result->setLink('/content/edit/?module=' . $module->getTitle() . '&id=' . $item->getAppId());
                 $searchResults[] = $result;
             }
         }
     }
     // view
     $tpl = new Template(Template::SITE, ['admin']);
     $tpl->set('search', $search);
     $tpl->set('results', $searchResults);
     $json['result'] = ResultType::SUCCESS;
     $json['message'] = $tpl->render('search');
     return json_encode($json);
 }
コード例 #9
0
ファイル: Content.php プロジェクト: vincium/bourg-la-reine
 private function findModule($moduleName)
 {
     if ($moduleName == '') {
         header('Location: /content/');
         exit;
     }
     $module = \Rebond\Cms\Module\Data::loadByTitle($moduleName);
     if (!isset($module)) {
         Session::adminError('itemNotFound', [$moduleName], '/content/');
     }
     return $module;
 }
コード例 #10
0
ファイル: Dev.php プロジェクト: vincium/bourg-la-reine
 public function bin()
 {
     // auth
     Util\Auth::isAdminAuthorized($this->signedUser, 'admin.dev', true, '/');
     // check
     $result = '';
     $empty = Util\Converter::bool('empty');
     $contentItems = [];
     // content items
     $options = [];
     $options['where'][] = 'module.has_content = 1';
     $modules = \Rebond\Cms\Module\Data::loadAll($options);
     $options = [];
     $options['where'][] = ['content.version IN (?)', [4, 5]];
     $options['order'][] = 'content.modified_date';
     foreach ($modules as $module) {
         $appData = '\\Rebond\\App\\' . $module->getTitle() . '\\Data';
         $items = $appData::loadAll($options);
         if (count($items) > 0) {
             if ($empty) {
                 foreach ($items as $item) {
                     $item->delete();
                 }
             } else {
                 $contentItems[$module->getTitle()] = $items;
             }
         }
     }
     // CSS
     $filePath = \Rebond\Config::getPath('siteFolder') . '/css/skin/';
     $skins = Util\File::getFolders($filePath);
     $cssFiles = [];
     foreach ($skins as $skin) {
         $cssFiles[$skin] = [];
         $path = $filePath . $skin . '/';
         $files = Util\File::getFiles($path);
         foreach ($files as $file) {
             if (Util\File::getExtension($file) == 'css') {
                 continue;
             }
             if ($empty) {
                 Util\File::delete($path, $file);
             } else {
                 $date = Util\Format::date(filemtime(FULL_PATH . $path . $file), 'smart');
                 $cssFiles[$skin][] = ['name' => $file, 'date' => $date];
             }
         }
     }
     // Main Templates
     $path = 'views/' . \Rebond\Config::getPath('siteFolder') . '/';
     $templates = Util\File::getFiles($path);
     $mainTpl = [];
     foreach ($templates as $tpl) {
         if (Util\File::getExtension($tpl) == 'tpl') {
             continue;
         }
         if ($empty) {
             Util\File::delete($path, $tpl);
         } else {
             $date = Util\Format::date(filemtime(FULL_PATH . $path . $tpl), 'smart');
             $mainTpl[] = ['name' => $tpl, 'date' => $date];
         }
     }
     // App Templates
     $appFolders = Util\File::getFolders('Rebond/App/');
     $appTpl = [];
     foreach ($appFolders as $app) {
         $appTpl[$app] = [];
         $path = 'Rebond/App/' . $app . '/template/';
         $templates = Util\File::getFiles($path);
         foreach ($templates as $tpl) {
             if (Util\File::getExtension($tpl) == 'tpl') {
                 continue;
             }
             if ($empty) {
                 Util\File::delete($path, $tpl);
             } else {
                 $date = Util\Format::date(filemtime(FULL_PATH . $path . $tpl), 'smart');
                 $appTpl[$app][] = ['name' => $tpl, 'date' => $date];
             }
         }
     }
     if ($empty) {
         $result = '<p class="bg-success">' . Util\Lang::lang('binEmptied') . '</p>';
     }
     // view
     $this->setTpl();
     // main
     $tplMain = new Util\Template(Util\Template::SITE, ['admin', 'dev']);
     $tplMain->set('contentItems', $contentItems);
     $tplMain->set('cssFiles', $cssFiles);
     $tplMain->set('mainTpl', $mainTpl);
     $tplMain->set('appTpl', $appTpl);
     $tplMain->set('result', $result);
     // layout
     $this->tplLayout->set('column1', $tplMain->render('bin'));
     // master
     $this->tplMaster->set('layout', $this->tplLayout->render('layout-1-col'));
     $this->tplMaster->set('jsLauncher', 'dev');
     return $this->tplMaster->render('tpl-default');
 }
コード例 #11
0
ファイル: Generator.php プロジェクト: vincium/bourg-la-reine
 public function run()
 {
     $entities = $this->xmlModel->getElementsByTagName('entity');
     foreach ($entities as $ent) {
         $sqlEntity = $ent->getAttribute('name');
         $entity = Converter::toCamelCase($sqlEntity, true);
         $main = $ent->getAttribute('main-property');
         $enabled = $ent->getAttribute('enabled') == 'true' ? true : false;
         $hasContent = $ent->getAttribute('has-content') == 'false' ? false : true;
         $isPersistent = $ent->getAttribute('persistent') == 'false' ? false : true;
         $this->info[] = '<h2>' . $entity . '</h2>';
         if (!$enabled) {
             $this->info[] = '<div class="orange">' . $entity . ' skipped.</div>';
             continue;
         }
         if (!$this->validPackage($this->package)) {
             $this->info[] = '<div class="error">Invalid package: ' . $this->package . '. It must be one of the following: core, cms, bus, app.</div>';
             continue;
         }
         if (!$this->validEntity($sqlEntity)) {
             $this->info[] = '<div class="error">Invalid entity: ' . $sqlEntity . '. It must start with a letter and contains alphanumeric characters.</div>';
             continue;
         }
         $properties = $ent->getElementsByTagName('property');
         $views = $ent->getElementsByTagName('view');
         if (!$this->validProperties($properties)) {
             $this->info[] = '<div class="error">Invalid properties. Please check the manual.</div>';
             continue;
         }
         if (!$this->validViews($views)) {
             $this->info[] = '<div class="error">Invalid views. Please check the manual.</div>';
             continue;
         }
         $modelFolder = \Rebond\Config::getPath('rebond') . $this->package . '/' . $entity;
         if (!is_dir($modelFolder)) {
             $this->info[] = '<div>' . $entity . ' created.</div>';
         } else {
             $this->info[] = '<div>' . $entity . ' updated.</div>';
         }
         \Rebond\Util\Nav::createFolder($modelFolder . '/template');
         \Rebond\Util\Nav::createFolder($modelFolder . '/Base');
         // For App with content, Cms, Core, Bus
         if ($hasContent) {
             $model = new \Rebond\Generator\Model($this->package, $entity, $main, $isPersistent, $properties);
             $model->produce();
             $this->info = array_merge($this->info, $model->getInfo());
             $form = new \Rebond\Generator\Form($this->package, $entity, $properties);
             $form->produce();
             $this->info = array_merge($this->info, $form->getInfo());
             $service = new \Rebond\Generator\Service($this->package, $entity);
             $service->produce();
             $this->info = array_merge($this->info, $service->getInfo());
             if ($isPersistent) {
                 $mysql = new \Rebond\Generator\Mysql($this->package, $sqlEntity, $properties);
                 $mysql->produce();
                 $this->info = array_merge($this->info, $mysql->getInfo());
                 $view = new \Rebond\Generator\View($this->package, $entity, $main, $properties, $views, $this->generate);
                 $view->produce();
                 $this->info = array_merge($this->info, $view->getInfo());
                 $data = new \Rebond\Generator\Data($this->package, $sqlEntity, $properties);
                 $data->produce();
                 $this->info = array_merge($this->info, $data->getInfo());
             }
         }
         if ($this->package == 'App') {
             $module = Module\Data::loadByTitle($entity);
             if (!isset($module)) {
                 $module = new Module\Model();
                 $module->setTitle($entity);
                 $module->setSummary($entity . ' summary');
                 $module->setStatus(StatusType::DELETED);
                 $module->setHasContent($hasContent);
                 $module->save();
             }
             $gadget = new \Rebond\Generator\Gadget($entity, $views, $hasContent, $module->getId());
             $gadget->produce();
             $this->info = array_merge($this->info, $gadget->getInfo());
         }
     }
     return implode('', $this->info);
 }
コード例 #12
0
ファイル: Data.php プロジェクト: vincium/bourg-la-reine
 protected static function mapper(array $row, $alias = 'module_media')
 {
     $model = new \Rebond\Cms\ModuleMedia\Model(false);
     if (isset($row[$alias . 'Id'])) {
         $model->setId($row[$alias . 'Id']);
     }
     if (isset($row[$alias . 'ModuleId'])) {
         $model->setModuleId($row[$alias . 'ModuleId']);
         $model->setModule(\Rebond\Cms\Module\Data::join($row, $alias . '_module'));
     }
     if (isset($row[$alias . 'Field'])) {
         $model->setField($row[$alias . 'Field']);
     }
     if (isset($row[$alias . 'Status'])) {
         $model->setStatus($row[$alias . 'Status']);
     }
     if (isset($row[$alias . 'CreatedDate'])) {
         $model->setCreatedDate($row[$alias . 'CreatedDate']);
     }
     if (isset($row[$alias . 'ModifiedDate'])) {
         $model->setModifiedDate($row[$alias . 'ModifiedDate']);
     }
     return $model;
 }
コード例 #13
0
ファイル: Data.php プロジェクト: vincium/bourg-la-reine
 protected static function mapper(array $row, $alias = 'component')
 {
     $model = new \Rebond\Cms\Component\Model(false);
     if (isset($row[$alias . 'Id'])) {
         $model->setId($row[$alias . 'Id']);
     }
     if (isset($row[$alias . 'ModuleId'])) {
         $model->setModuleId($row[$alias . 'ModuleId']);
         $model->setModule(\Rebond\Cms\Module\Data::join($row, $alias . '_module'));
     }
     if (isset($row[$alias . 'Title'])) {
         $model->setTitle($row[$alias . 'Title']);
     }
     if (isset($row[$alias . 'Summary'])) {
         $model->setSummary($row[$alias . 'Summary']);
     }
     if (isset($row[$alias . 'Method'])) {
         $model->setMethod($row[$alias . 'Method']);
     }
     if (isset($row[$alias . 'Type'])) {
         $model->setType($row[$alias . 'Type']);
     }
     if (isset($row[$alias . 'Status'])) {
         $model->setStatus($row[$alias . 'Status']);
     }
     if (isset($row[$alias . 'CreatedDate'])) {
         $model->setCreatedDate($row[$alias . 'CreatedDate']);
     }
     if (isset($row[$alias . 'ModifiedDate'])) {
         $model->setModifiedDate($row[$alias . 'ModifiedDate']);
     }
     return $model;
 }
コード例 #14
0
ファイル: Data.php プロジェクト: vincium/bourg-la-reine
 protected static function mapEntity(Model $model, $row, $alias = 'content')
 {
     if (isset($row[$alias . 'Id'])) {
         $model->setId($row[$alias . 'Id']);
     }
     if (isset($row[$alias . 'ModuleId'])) {
         $model->setModuleId($row[$alias . 'ModuleId']);
         $model->setModule(\Rebond\Cms\Module\Data::join($row, $alias . '_module'));
     }
     if (isset($row[$alias . 'ContentGroup'])) {
         $model->setContentGroup($row[$alias . 'ContentGroup']);
     }
     if (isset($row[$alias . 'FilterId'])) {
         $model->setFilterId($row[$alias . 'FilterId']);
         $model->setFilter(\Rebond\Cms\Filter\Data::join($row, $alias . '_filter'));
     }
     if (isset($row[$alias . 'AuthorId'])) {
         $model->setAuthorId($row[$alias . 'AuthorId']);
         $model->setAuthor(\Rebond\Core\User\Data::join($row, $alias . '_author'));
     }
     if (isset($row[$alias . 'PublisherId'])) {
         $model->setPublisherId($row[$alias . 'PublisherId']);
         $model->setPublisher(\Rebond\Core\User\Data::join($row, $alias . '_publisher'));
     }
     if (isset($row[$alias . 'Title'])) {
         $model->setTitle($row[$alias . 'Title']);
     }
     if (isset($row[$alias . 'UrlFriendlyTitle'])) {
         $model->setUrlFriendlyTitle($row[$alias . 'UrlFriendlyTitle']);
     }
     if (isset($row[$alias . 'UseExpiration'])) {
         $model->setUseExpiration($row[$alias . 'UseExpiration']);
     }
     if (isset($row[$alias . 'GoLiveDate'])) {
         $model->setGoLiveDate($row[$alias . 'GoLiveDate']);
     }
     if (isset($row[$alias . 'ExpiryDate'])) {
         $model->setExpiryDate($row[$alias . 'ExpiryDate']);
     }
     if (isset($row[$alias . 'PublishedDate'])) {
         $model->setPublishedDate($row[$alias . 'PublishedDate']);
     }
     if (isset($row[$alias . 'Version'])) {
         $model->setVersion($row[$alias . 'Version']);
     }
     if (isset($row[$alias . 'CreatedDate'])) {
         $model->setCreatedDate($row[$alias . 'CreatedDate']);
     }
     if (isset($row[$alias . 'ModifiedDate'])) {
         $model->setModifiedDate($row[$alias . 'ModifiedDate']);
     }
     return $model;
 }
コード例 #15
0
ファイル: Cms.php プロジェクト: vincium/bourg-la-reine
 public function filter()
 {
     // auth
     Auth::isAdminAuthorized($this->signedUser, 'admin.cms.filter', true, '/cms');
     $options = [];
     $options['select'][] = \Rebond\Cms\Module\Data::getList([], 'filter_module');
     $options['join'][] = 'cms_module filter_module ON filter_module.id = filter.module_id';
     $options['order'][] = 'filter_module.title, filter.title';
     $filters = \Rebond\Cms\Filter\Data::loadAll($options);
     // view
     $this->setTpl();
     // filter
     $tplFilter = new Template(Template::MODULE, ['cms', 'filter']);
     $tplFilter->set('count', count($filters));
     // main
     $tplMain = new Template(Template::MODULE, ['cms', 'filter']);
     $tplMain->set('items', $filters);
     // layout
     $this->tplLayout->set('column1', $tplFilter->render('filter'));
     $this->tplLayout->set('column2', $tplMain->render('listing'));
     // master
     $this->tplMaster->set('layout', $this->tplLayout->render('layout-2-row'));
     return $this->tplMaster->render('tpl-default');
 }
コード例 #16
0
ファイル: Form.php プロジェクト: vincium/bourg-la-reine
 public function buildModule()
 {
     $options = [];
     $options['clearSelect'] = true;
     $options['select'][] = \Rebond\Cms\Module\Data::getList(['id', 'title']);
     $models = \Rebond\Cms\Module\Data::loadAll($options);
     return Util\Form::buildDropdownList('moduleId' . $this->unique, $models, 'id', 'title', $this->getModel()->getModuleId(), $this->moduleValidator['foreignKey']);
 }
コード例 #17
0
ファイル: Data.php プロジェクト: vincium/bourg-la-reine
 protected static function mapper(array $row, $alias = 'filter')
 {
     $model = new \Rebond\Cms\Filter\Model(false);
     if (isset($row[$alias . 'Id'])) {
         $model->setId($row[$alias . 'Id']);
     }
     if (isset($row[$alias . 'ModuleId'])) {
         $model->setModuleId($row[$alias . 'ModuleId']);
         $model->setModule(\Rebond\Cms\Module\Data::join($row, $alias . '_module'));
     }
     if (isset($row[$alias . 'Title'])) {
         $model->setTitle($row[$alias . 'Title']);
     }
     if (isset($row[$alias . 'DisplayOrder'])) {
         $model->setDisplayOrder($row[$alias . 'DisplayOrder']);
     }
     if (isset($row[$alias . 'Status'])) {
         $model->setStatus($row[$alias . 'Status']);
     }
     if (isset($row[$alias . 'CreatedDate'])) {
         $model->setCreatedDate($row[$alias . 'CreatedDate']);
     }
     if (isset($row[$alias . 'ModifiedDate'])) {
         $model->setModifiedDate($row[$alias . 'ModifiedDate']);
     }
     return $model;
 }