public function site() { // auth Auth::isAdminAuthorized($this->signedUser, 'admin.config.site', true, '/configuration'); $site = \Rebond\Core\Site\Data::loadById(1); if (!isset($site)) { \Rebond\Util\Error::kill(\Rebond\Util\Error::SITE_NOT_FOUND, 'id: 1', __FILE__, __LINE__); } $siteForm = new \Rebond\Core\Site\Form($site); // action if (isset($_POST['save'])) { Auth::isAdminAuthorized($this->signedUser, 'admin.config.site.edit', true, '/'); if ($siteForm->setFromPost()->validate()->isValid()) { $siteForm->getModel()->save(); \Rebond\Core\Site\Service::updateIsCms($siteForm->getModel()->getIsCms()); Session::adminSuccess('saved', '/configuration/site'); } else { Session::set('adminError', $siteForm->getValidation()->getMessage()); } } // view $this->setTpl(); // main $tplMain = new Template(Template::MODULE, ['core', 'site']); $tplMain->set('item', $siteForm); // layout if (Auth::isAdminAuthorized($this->signedUser, 'admin.config.site.edit', false)) { $this->tplLayout->set('column1', $tplMain->render('editor')); } else { $this->tplLayout->set('column1', $tplMain->render('view')); } // master $this->tplMaster->set('layout', $this->tplLayout->render('layout-1-col')); return $this->tplMaster->render('tpl-default'); }
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(); }
public function generate() { $configFile = FULL_PATH . '/files/config.xml'; if (!file_exists($configFile)) { Util\Error::kill(Util\Error::XML_CONFIG_NOT_FOUND, $configFile, __FILE__, __LINE__); } $conf = simplexml_load_string(file_get_contents($configFile)); $configTpl = new Util\Template(Util\Template::SITE, ['generator', 'config']); foreach ($conf->servers->server as $server) { if (strpos($_SERVER['HTTP_HOST'], $server->attributes()->host->__toString()) === false) { continue; } $configTpl->set('httpHost', $server->attributes()->host); $configTpl->set('siteFolder', $server->siteFolder); $configTpl->set('adminFolder', $server->adminFolder); $configTpl->set('dbHost', $server->db->host); $configTpl->set('dbPort', $server->db->port); $configTpl->set('dbUsername', $server->db->username); $configTpl->set('dbPassword', $server->db->password); $configTpl->set('dbName', $server->db->name); $configTpl->set('type', $server->mail->type); $configTpl->set('email', $server->mail->email); if ($server->mail->type == 'smtp') { $configTpl->set('host', $server->mail->host); $configTpl->set('port', $server->mail->port); $configTpl->set('option', $server->mail->option); $configTpl->set('password', $server->mail->password); } else { $configTpl->set('host', ''); $configTpl->set('port', ''); $configTpl->set('option', ''); $configTpl->set('password', ''); } break; } $langs = []; foreach ($conf->languages->language as $language) { $tpl = new Util\Template(Util\Template::SITE, ['generator', 'config']); $tpl->set('lang', $language->attributes()->lang); $tpl->set('locale', $language->locale); $langs[] = $tpl->render('lang'); } $configTpl->set('lang', implode('', $langs)); $settings = []; foreach ($conf->settings->setting as $setting) { $tpl = new Util\Template(Util\Template::SITE, ['generator', 'config']); $tpl->set('key', $setting->attributes()->key); $tpl->set('value', $setting); $settings[] = $tpl->render('setting'); } $configTpl->set('key', implode('', $settings)); $configPath = \Rebond\Config::getPath('rebond') . 'Cache/Config.php'; Util\File::save($configPath, 'w', str_replace('<#php', '<?php', $configTpl->render('config'))); }
public function __construct($package, $generate) { if (!isset($package) || !in_array($package, ['app', 'bus', 'cms', 'core'])) { Error::kill(Error::INVALID_PARAMETERS, '$package cannot be null and must be either app, bus, cms or core', __FILE__, __LINE__); } $this->info = []; $this->package = ucfirst(strtolower($package)); $this->generate = $generate; $this->xmlModel = new \DOMDocument(); $this->xmlModel->formatOutput = true; $this->xmlModel->preserveWhiteSpace = false; $modelPath = \Rebond\Config::getPath('model') . $package . '.xml'; if (!file_exists($modelPath)) { Error::killException(Error::XML_MODEL_NOT_FOUND, $modelPath, __FILE__, __LINE__); } $this->xmlModel->load($modelPath); }
public function __construct() { $rebondLang = \Rebond\Config::getPath('lang') . 'rebond.xml'; if (!file_exists($rebondLang)) { Error::kill(Error::XML_LANG_NOT_FOUND, $rebondLang, __FILE__, __LINE__); } $customLang = \Rebond\Config::getPath('lang') . 'custom.xml'; if (!file_exists($customLang)) { Error::kill(Error::XML_LANG_NOT_FOUND, $customLang, __FILE__, __LINE__); } $this->xmlRebondLang = new \DOMDocument(); $this->xmlRebondLang->formatOutput = true; $this->xmlRebondLang->preserveWhiteSpace = false; $this->xmlRebondLang->load($rebondLang); $this->xmlCustomLang = new \DOMDocument(); $this->xmlCustomLang->formatOutput = true; $this->xmlCustomLang->preserveWhiteSpace = false; $this->xmlCustomLang->load($customLang); }
protected static function autoJoin(Util\Data $db, $moduleName, $select = true) { $module = \Rebond\Cms\Module\Data::loadByTitle($moduleName); if (!isset($module)) { Util\Error::kill(Util\Error::ITEM_NOT_FOUND, 'module ' . $module . ' not found', __FILE__, __LINE__); } if ($select) { $db->buildQuery('select', \Rebond\Cms\Content\Data::getList()); $db->buildQuery('select', \Rebond\Cms\Module\Data::getList([], 'content_module')); if ($module->getHasFilter()) { $db->buildQuery('select', \Rebond\Cms\Filter\Data::getList([], 'content_filter')); } } $db->buildQuery('join', 'cms_content content ON x.app_id = content.app_id'); $db->buildQuery('join', 'cms_module content_module ON content_module.id = content.module_id'); if ($module->getHasFilter()) { $db->buildQuery('leftJoin', 'cms_filter content_filter ON content_filter.id = content.filter_id'); } $db->buildQuery('where', ['content.module_id = ?', $module->getId()]); }
<?php require '../Rebond/Config.php'; $app = \Rebond\Config::start(); $app->launch(); // read request uri list($module, $action) = \Rebond\Util\Nav::readRequest($_SERVER['REQUEST_URI']); $file = '../Rebond/Controller/Site/' . $module . '.php'; // check controller if (!file_exists($file)) { \Rebond\Util\Error::kill(\Rebond\Util\Error::PAGE_NOT_FOUND, $module . '/' . $action, __FILE__, __LINE__); } // call controller $request = '\\Rebond\\Controller\\Site\\' . $module; $controller = new $request($app); // check method if (!method_exists($controller, $action)) { \Rebond\Util\Error::kill(\Rebond\Util\Error::PAGE_NOT_FOUND, $module . '/' . $action, __FILE__, __LINE__); } // call method echo $controller->{$action}();
private function login() { $this->cookie = new \GuzzleHttp\Cookie\CookieJar(); $this->client = new \GuzzleHttp\Client(['base_uri' => $this->baseUri, 'cookies' => true]); $login = $this->client->request('POST', 'ttk/?K1=Logg inn', ['cookies' => $this->cookie, 'form_params' => ['K16' => 'Logg inn', 'K16_U' => '*****@*****.**', 'K16_P' => \Rebond\Config::getKey('ttkPassword')]]); if ($login->getStatusCode() != 200) { Util\Error::kill('could not login to TTK reservation', 500, __FILE__, __LINE__); } }
public function run($app, $friendlyUrl) { // is site active if ($app->site()->getStatus() == 0) { $friendlyUrl = '/inactive'; } // retrieve page $page = \Rebond\Cms\Page\Data::loadByUrl($friendlyUrl); // this should never occur if (!isset($page)) { Error::kill(Error::PAGE_NOT_FOUND, $friendlyUrl, __FILE__, __LINE__); } // redirection if ($page->getRedirect() != '' && $page->getRedirect() != $friendlyUrl) { $friendlyUrl = Nav::readCmsRequest($page->getRedirect()); echo $this->run($app, $friendlyUrl); return; } // permission Auth::isAuthorized($app->user(), $page->getPermission(), true, $app->site()->getSignInUrl()); $app->setUrl($friendlyUrl); // layout $layout = \Rebond\Cms\Layout\Data::loadById($page->getLayoutId()); $tplLayout = new Template(Template::SITE, ['www']); // page components $options = []; $options['where'][] = 'gadget.status = 1'; $options['order'][] = 'gadget.display_order'; $gadgets = \Rebond\Cms\Gadget\Data::loadAllByPageId($page->getId(), $options); $cacheTime = $app->site()->getCacheTime(); if ($gadgets) { $this->app = $app; $this->gadgets = []; foreach ($gadgets as $gadget) { if ($gadget->getComponent()->getId() == 0) { Log::log(Error::COMPONENT_NOT_FOUND, 'title: ' . $gadget->getTitle() . ', componentId: ' . $gadget->getComponentId(), __FILE__, __LINE__); continue; } $component = $gadget->getComponent(); $appGadget = '\\Rebond\\App\\' . $component->getModule()->getTitle() . '\\Gadget'; $appMethod = $component->getMethod(); if (!method_exists($appGadget, $appMethod)) { Log::log(Error::GADGET_NOT_FOUND, 'gadget: ' . $appGadget . ', method: ' . $appMethod, __FILE__, __LINE__); continue; } if ($component->getStatus() !== StatusType::ACTIVE) { continue; } if ($component->getModule()->getStatus() !== StatusType::ACTIVE) { continue; } $name = $component->getModule()->getTitle() . '_' . $component->getMethod(); // look for cache if ($cacheTime > 0) { $html = Cache::getGadgetCache($name, $cacheTime); if (isset($html)) { $tplLayout->add('column' . $gadget->getCol(), $html); continue; } } $gadgetClass = $this->getGadget($appGadget); // get filter if ($component->getType() == ComponentType::SINGLE_ITEM || $component->getType() == ComponentType::FILTERED_LISTING) { if ($gadget->getFilterId() == 0) { Log::log(Error::EMPTY_FILTER, $name, __FILE__, __LINE__); continue; } else { $render = $gadgetClass->{$appMethod}($gadget->getFilterId()); } } else { if ($component->getType() == ComponentType::CUSTOM_LISTING) { $render = $gadgetClass->{$appMethod}($gadget->getCustomFilter()); } else { $render = $gadgetClass->{$appMethod}(); } } $tplLayout->add('column' . $gadget->getCol(), $render); // save cache if ($cacheTime > 0) { Cache::saveGadgetCache($name, $cacheTime, $render); } } } // check for empty columns $columns = $layout->getColumns(); $noComponent = '<div class="no-component">' . Lang::lang('noComponent') . '</div>'; $emptyValue = $app->logLevel() == 0 ? $noComponent : ''; for ($i = 1; $i <= $columns; $i++) { if ($tplLayout->varIsSet('column' . $i) === false) { $tplLayout->set('column' . $i, $emptyValue); } } // template $template = \Rebond\Cms\Template\Data::loadById($page->getTemplateId()); $tplMaster = new Template(Template::SITE, ['www']); // navHeader $isMenuCached = false; if ($template->getMenu() != \Rebond\Cms\MenuType::NONE) { // Get cache if ($cacheTime > 0) { $navHeader = Cache::getCache('navHeader', $template->getMenu() . '_' . $template->getMenuLevel(), $cacheTime); if (isset($navHeader)) { $isMenuCached = true; } } if (!$isMenuCached) { $navHeader = \Rebond\Cms\Page\Data::buildHeaderNav($template->getMenuLevel(), $template->getMenu()); // Save cache if ($cacheTime > 0) { Cache::saveCache('navHeader', $template->getMenu() . '_' . $template->getMenuLevel(), $cacheTime, $navHeader); } } $tpl = new Template(Template::SITE, ['www']); $tpl->set('title', $app->site()->getTitle()); $tpl->set('nav', \Rebond\Cms\Page\Service::renderNav($navHeader, $page->getFullUrl())); $tplMaster->set('navHeader', $tpl->render('nav-header')); } // breacrumb $isMenuCached = false; if ($template->getInBreadcrumb()) { // Get cache if ($cacheTime > 0) { $breadcrumb = Cache::getCache('breadcrumb', $page->getId(), $cacheTime); if (isset($breadcrumb)) { $isMenuCached = true; } } if (!$isMenuCached) { $breadcrumb = \Rebond\Cms\Page\Service::renderBreadcrumb($page->getId()); // Save cache if ($cacheTime > 0) { Cache::saveCache('breadcrumb', $page->getId(), $cacheTime, $breadcrumb); } } $tplMaster->set('breadcrumb', $breadcrumb); } // navSide $isMenuCached = false; if ($template->getSideNav() != \Rebond\Cms\SideNavType::NONE) { // Get cache if ($cacheTime > 0) { $navSide = Cache::getCache('navSide', $template->getSideNav() . '_' . $template->getSideNavLevel(), $cacheTime); if (isset($navSide)) { $isMenuCached = true; } } if (!$isMenuCached) { switch ($template->getSideNav()) { case \Rebond\Cms\SideNavType::PARENT_1: $currentId = $page->getParentId(); break; case \Rebond\Cms\SideNavType::CHILDREN: $currentId = $page->getId(); break; case \Rebond\Cms\SideNavType::HOME: $currentId = 1; break; case \Rebond\Cms\SideNavType::PARENT_2: $currentId = \Rebond\Cms\Page\Data::loadByParent($page->getParentId(), 1); break; case \Rebond\Cms\SideNavType::PARENT_3: $currentId = \Rebond\Cms\Page\Data::loadByParent($page->getParentId(), 2); break; } $navSide = \Rebond\Cms\Page\Data::buildSideNav($currentId, $template->getSideNavLevel()); // Save cache if ($cacheTime > 0) { Cache::saveCache('navSide', $template->getSideNav() . '_' . $template->getSideNavLevel(), $cacheTime, $navSide); } } $tpl = new Template(Template::SITE, ['www']); $tpl->set('nav', \Rebond\Cms\Page\Service::renderNav($navSide, $page->getFullUrl())); $tplMaster->set('navSide', $tpl->render('nav-side')); } // navFooter $isMenuCached = false; if ($template->getInFooter() != 0) { // Get cache if ($cacheTime > 0) { $navFooter = Cache::getCache('navFooter', $template->getFooterLevel(), $cacheTime); if (isset($navFooter)) { $isMenuCached = true; } } if (!$isMenuCached) { $navFooter = \Rebond\Cms\Page\Data::buildFooterNav($template->getFooterLevel()); // Save cache if ($cacheTime > 0) { Cache::saveCache('navFooter', $template->getFooterLevel(), $cacheTime, $navFooter); } } $tpl = new Template(Template::SITE, ['www']); $tpl->set('nav', \Rebond\Cms\Page\Service::renderNav($navFooter, $page->getFullUrl())); $tplMaster->set('navFooter', $tpl->render('nav-footer')); } $tplMaster->set('layout', $tplLayout->render($layout->getFilename())); // master // head if ($app->site()->getKeywords() != '') { $tplMaster->addMeta('keywords', $app->site()->getKeywords()); } if ($app->site()->getDescription() != '') { $tplMaster->addMeta('description', $app->site()->getDescription()); } $tplMaster->set('title', $page->getTitle()); $tplMaster->set('site', $app->site()->getTitle()); $tplMaster->set('skin', $app->skin()); $tplMaster->set('siteUrl', \Rebond\Config::getPath('siteUrl')); // bodyClass $tplMaster->set('bodyClass', $page->getClass()); // footer $ga = \Rebond\Core\Site\Service::renderGoogleAnalytics($app->site()->getGoogleAnalytics()); $tplMaster->set('footer', $ga); $tplMaster->addJs('//code.jquery.com/jquery-2.1.4.min.js'); $tplMaster->addJs('/js/lang-' . $app->lang() . '.js'); if ($app->site()->getJs() != '') { $jsList = explode(',', $app->site()->getJs()); foreach ($jsList as $js) { $tplMaster->addJs($js); } } if ($page->getJs() != '') { $jsList = explode(',', $page->getJs()); foreach ($jsList as $js) { $tplMaster->addJs($js); } } if ($app->env() == \Rebond\Config::ENV_PROD) { $tplMaster->addCss('/css/skin/' . $app->skin() . '/min.css'); $tplMaster->addJs('/js/min.js'); } else { $tplMaster->addCss('/css/normalize.css'); $tplMaster->addCss('/css/skin/' . $app->skin() . '/rebond.css'); $tplMaster->addCss('/css/skin/' . $app->skin() . '/custom.css'); $tplMaster->addJs('/js/rebond.js'); $tplMaster->addJs('/js/custom.js'); } if ($app->site()->getCss() != '') { $cssList = explode(',', $app->site()->getCss()); foreach ($cssList as $css) { $tplMaster->addCss($css); } } if ($page->getCss() != '') { $cssList = explode(',', $page->getCss()); foreach ($cssList as $css) { $tplMaster->addCss($css); } } return $tplMaster->render($template->getFilename()); }
public static function uploadForm($field) { $obj = []; $obj['result'] = ResultType::ERROR; if (!isset($_FILES[$field]) || $_FILES[$field]['name'] == '') { $obj['result'] = ResultType::NO_CHANGE; return json_decode(json_encode($obj)); } $file = $_FILES[$field]; $url = 'http://' . \Rebond\Config::getPath('adminUrl') . '/service/uploadify'; $post = ['userId' => 1, 'folderId' => 1, 'isSelectable' => 0]; $data = ''; $boundary = '---------------------' . substr(md5(rand(0, 32000)), 0, 10); //Collect Postdata foreach ($post as $key => $val) { $data .= "--{$boundary}\n"; $data .= "Content-Disposition: form-data; name=\"" . $key . "\"\n\n" . $val . "\n"; } $data .= "--{$boundary}\n"; //Collect Filedata $fileContents = file_get_contents($file['tmp_name']); $data .= "Content-Disposition: form-data; name=\"Filedata\"; filename=\"{$file['name']}\"\n"; $data .= "Content-Type: {$file['type']}\n"; $data .= "Content-Transfer-Encoding: binary\n\n"; $data .= $fileContents . "\n"; $data .= "--{$boundary}\n"; $params = ['http' => ['method' => 'POST', 'header' => 'Content-Type: multipart/form-data; boundary=' . $boundary, 'content' => $data]]; $ctx = stream_context_create($params); $fp = fopen($url, 'rb', false, $ctx); if (!$fp) { Error::kill(Error::MEDIA_NOT_UPLOADED, 'could not open file in uploadForm', __FILE__, __LINE__); } $obj = stream_get_contents($fp); if ($obj === false) { Error::kill(Error::MEDIA_NOT_UPLOADED, 'could not get content in uploadForm', __FILE__, __LINE__); } return json_decode($obj); }