function indexAction() { $config_table = new Config(); $modules_table = new Modules("core"); $request = new Bolts_Request($this->getRequest()); if ($request->has('modid')) { $modid = $request->modid; } else { $modid = 'bolts'; } if ($this->_request->isPost()) { //we are posting $config_params = $this->_request->getParams(); foreach ($config_params as $ckey => $value) { $data = array('value' => $value); $config_table->update($data, "ckey = '" . $ckey . "' and module='" . $modid . "'"); } $this->view->success = $this->_T('Configuration Updated.'); $config_table->cache(); $params = array(); $this->_Bolts_plugin->doAction($this->_mca . '_post_save', $params); // ACTION HOOK } $config = $config_table->fetchAll($config_table->select()->where('module = ?', $modid)); if (count($config) > 0) { $config = $config->toArray(); sort($config); $this->view->config = $config; } $modules = $modules_table->getEnabledModules(); sort($modules); $this->view->modules = $modules; $this->view->current = $modid; $this->view->modid = $modid; }
function indexAction() { $config_table = new Config(); // $modules_table = new Modules('core'); $modules_table = new Modules('modules'); $modules_table_core = new Modules('core'); $request = new RivetyCore_Request($this->getRequest()); $modid = $request->has('modid') ? $request->modid : 'default'; if ($this->_request->isPost()) { $config_params = $this->_request->getParams(); foreach ($config_params as $ckey => $value) { $data = array('value' => $value); $config_table->update($data, "ckey = '" . $ckey . "' and module = '" . $modid . "'"); } $this->view->success = $this->_T('Configuration Updated.'); $config_table->cache(); $params = array(); $this->_rivety_plugin->doAction($this->_mca . '_post_save', $params); // ACTION HOOK } $config = $config_table->fetchAll($config_table->select()->where('module = ?', $modid)); if (count($config) > 0) { $config = $config->toArray(); sort($config); $this->view->config = $config; } $modules = $modules_table_core->getEnabledModules(); sort($modules); $this->view->modules = $modules; $this->view->current = $modid; $this->view->modid = $modid; if ($modid == 'default') $mod_cfg = $modules_table_core->parseIni($modid); else $mod_cfg = $modules_table->parseIni($modid); $this->view->module_title = $mod_cfg['general']['name']; $this->view->breadcrumbs = array('Module Config' => null); }
global $site; $actions = []; foreach ($API as $aname => &$a) { $methods = []; foreach ($a['methods'] as $mname => &$m) { if (isset($m['len'])) { $md = ['name' => $mname, 'len' => $m['len']]; } else { $md = ['name' => $mname, 'params' => $m['params']]; } if (isset($m['formHandler']) && $m['formHandler']) { $md['formHandler'] = true; } $methods[] = $md; } $actions[$aname] = $methods; } $url = $moduleDir === false ? "data/router.php?site={$site}" : "data/router.php?site={$site}&module={$moduleDir}"; return json_encode(['url' => $url, 'type' => 'remoting', 'actions' => $actions, 'timeout' => 760000000]); } require 'config.php'; // convert API config to Ext.Direct spec header('Content-Type: text/javascript'); echo 'Ext.ns("App.data");'; echo 'App.data = [];'; echo 'App.data.push(' . getREMOTING_API($API) . ');'; if (isset($_SESSION['install']) && $_SESSION['install'] != true) { foreach ($m->getEnabledModules() as $module) { echo 'App.data.push(' . getREMOTING_API($module['actionsAPI'], $module['dir']) . ');'; } }
// client data $_SESSION['client']['browser'] = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $_SESSION['client']['os'] = isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'Windows') === false ? 'Linux' : 'Windows'; // default site $site = isset($_GET['site']) ? $_GET['site'] : 'default'; if (!isset($_SESSION['styles'])) { $_SESSION['styles'] = []; } if (file_exists(ROOT . '/sites/' . $site . '/conf.php')) { include_once ROOT . '/sites/' . $site . '/conf.php'; unset($_SESSION['site']['error']); // load modules hooks if (!isset($_SESSION['hooks'])) { include_once ROOT . '/dataProvider/Modules.php'; $Modules = new Modules(); $modules = $Modules->getEnabledModules(); unset($Modules); $_SESSION['styles'] = []; foreach ($modules as $module) { /** * Styles */ if (isset($module['styles'])) { foreach ($module['styles'] as $style) { $_SESSION['styles'][] = 'modules/' . $module['name'] . '/resources/css/' . $style; } } /** * Hooks */ $HooksFile = ROOT . '/modules/' . $module['name'] . '/dataProvider/Hooks.php';
function editAction() { $request = new RivetyCore_Request($this->getRequest()); $modules_table = new Modules('modules'); $modules_table_core = new Modules('core'); $roles_resources_table = new RolesResources(); $roles_res_extra_table = new RolesResourcesExtra(); if ($request->has("id")) { $role_id = $request->id; $roles_table = new Roles(); $role = $roles_table->fetchRow("id = " . $role_id); if (!is_null($role)) { $this->view->role = $role->toArray(); $this->view->roleshortname = $role->shortname; } else { $this->_redirect("/role"); } } else { $this->_redirect("/role"); } if ($request->has("modid")) { if ($modules_table->exists($request->modid)) { $module_id = $request->modid; } else { $module_id = "default"; } } else { $module_id = "default"; } if ($this->getRequest()->isPost()) { $resources = $this->getRequest()->getPost('resource'); // Hose everything for this role and module $where = $roles_resources_table->getAdapter()->quoteInto("role_id = ? and ", $role_id); $where .= $roles_resources_table->getAdapter()->quoteInto("module = ? ", $module_id); $roles_resources_table->delete($where); foreach ($resources as $resource) { $resource_array = explode("-", $resource); $resource_module = $resource_array[0]; $resource_controller = $resource_array[1]; $resource_action = $resource_array[2]; $data = array( 'role_id' => $role_id, 'module' => $resource_module, 'controller' => $resource_controller, 'action' => $resource_action, ); $roles_resources_table->insert($data); } $where = $roles_res_extra_table->getAdapter()->quoteInto("role_id = ? and ", $role_id); $where .= $roles_res_extra_table->getAdapter()->quoteInto("module = ? ", $module_id); $roles_res_extra_table->delete($where); if ($request->has("extra_resource")) { foreach ($request->extra_resource as $extra_resource_item) { $data = array( 'role_id' => $role_id, 'module' => $module_id, 'resource'=> $extra_resource_item, ); $roles_res_extra_table->insert($data); } } $this->view->success = $this->_T("Resources updated."); } $db_roles_resources = $roles_resources_table->fetchAll('role_id = ' . $role_id ); $resources = array(); foreach ($db_roles_resources as $resource) { if (!array_key_exists($resource->module, $resources)) { $resources[$resource->module] = array(); } if (!array_key_exists($resource->controller, $resources[$resource->module])) { $resources[$resource->module][$resource->controller] = array(); } $resources[$resource->module][$resource->controller][] = $resource->action; } /* * This is a poor man's introspector. The reflection API needs the classes actually available, * which creates naming conflicts between modules. What I do instead is read the physical files, * line by line, find the lines with "function fooAction" and determine that the action name is * "foo". It's a hack, but it works. */ $all_actions = array(); $modules = array(); $controllerdirs = array(); $enabled_modules = $modules_table->getEnabledModules(); foreach ($enabled_modules as $enabled_module) { $module_dir = 'modules'; if ($enabled_module == 'default') $module_dir = 'core'; $controllerdirs[$enabled_module] = Zend_Registry::get("basepath") . DIRECTORY_SEPARATOR . $module_dir . DIRECTORY_SEPARATOR . $enabled_module . DIRECTORY_SEPARATOR . "controllers"; } $controllerdir = $controllerdirs[$module_id]; $d = dir($controllerdir); $modules[] = $module_id; while (($entry = $d->read()) !== false) { if ($entry != '.' and $entry != '..' and $entry != '.svn') { $controller_name = substr($entry, 0, stripos($entry, 'Controller.php')); if ($module_id != "default" && substr($controller_name, 0, 1) == "_") { $controller_name = substr($controller_name, stripos($controller_name, '_') + 1); } $lines = file($controllerdir . DIRECTORY_SEPARATOR . $entry); foreach ($lines as $line) { if (preg_match('/function.*Action.*\(.*\).*\{?/', $line)) { $action_name = trim(preg_replace('/Action.*/', '', preg_replace('/^.*function/', '', $line))); $allowed = false; if (array_key_exists($module_id, $resources)) { if (array_key_exists($controller_name, $resources[$module_id])) { if (in_array($action_name, $resources[$module_id][$controller_name])) { $allowed = true; } } } $inherited = false; if (count($roles_table->getInheritedRoles($role_id)) > 0) { $inherited = $this->isResourceInherited($module_id, $controller_name, $action_name, $role_id); } $all_actions[$module_id][$controller_name][$action_name] = array( 'allowed' => $allowed, 'inherited' => $inherited, ); } } } } $d->close(); $this->view->modid = $module_id; if ($module_id == 'default') $mod_cfg = $modules_table_core->parseIni($module_id); else $mod_cfg = $modules_table->parseIni($module_id); $this->view->module_title = $mod_cfg['general']['name']; $this->view->actions = $all_actions; $this->view->modules = $enabled_modules; // get "extra" resources $extra_resources = array(); if (array_key_exists('resources', $mod_cfg)) { foreach ($mod_cfg['resources'] as $resource_name => $nicename) { $extra_resources[$resource_name]['nicename'] = $nicename; $extra_resources[$resource_name]['inherited'] = $this->isExtraResourceInherited($module_id, $resource_name, $role_id); $extra_resources[$resource_name]['allowed'] = $roles_res_extra_table->isAllowed($role_id, $module_id, $resource_name); } } $this->view->extra_resources = $extra_resources; $this->view->breadcrumbs = array( 'Roles' => '/default/role/index', $role['shortname'] => '/default/role/edit/id/' . $role['id'], 'Resources' => null, ); }
function init() { $params = array('username' => null); $modules_table = new Modules("core"); $roles_table = new Roles(); $enabled_modules = $modules_table->getEnabledModules(); foreach ($enabled_modules as $enabled_module) { $this->view->{"module_" . $enabled_module} = true; } if (!empty($_SERVER['HTTPS'])) { $this->view->is_ssl = true; $this->_is_ssl = true; } else { $this->view->is_ssl = false; $this->_is_ssl = false; } $this->_uri = $_SERVER['REQUEST_URI']; $this->_host_id = Zend_Registry::get('host_id'); $this->view->host_id = $this->_host_id; $this->view->session_id = Zend_Session::getId(); $this->view->site_url = Bolts_Registry::get('site_url'); $this->view->site_name = Bolts_Registry::get('site_name'); $this->registry = Zend_Registry::getInstance(); $this->session = new Zend_Session_Namespace('Default'); $this->_mca = $this->_request->getModuleName() . "_" . $this->_request->getControllerName() . "_" . $this->_request->getActionName(); $this->view->mca = str_replace("_", "-", $this->_mca); $this->view->controller_name = $this->_request->getControllerName(); $this->module_name = $this->_request->getModuleName(); $this->view->module_name = $this->_request->getModuleName(); $this->view->action_name = $this->_request->getActionName(); $this->_auth = Zend_Auth::getInstance(); if ($this->_auth->hasIdentity()) { $this->_identity = $this->_auth->getIdentity(); $this->view->isLoggedIn = true; $params['username'] = $this->_identity->username; $users_table = new Users(); $loggedInUser = $users_table->fetchByUsername($this->_identity->username); if (!is_null($loggedInUser)) { $this->_loggedInUser = $loggedInUser; $this->view->loggedInUser = $loggedInUser->toArray(); } $this->view->loggedInUsername = $this->_identity->username; $this->view->loggedInFullName = $this->_identity->full_name; $loggedInRoleIds = $roles_table->getRoleIdsByUsername($this->_identity->username); $this->view->loggedInRoleIds = $loggedInRoleIds; foreach ($loggedInRoleIds as $role_id) { $role = $roles_table->fetchRow('id = ' . $role_id); if ((bool) $role->isadmin) { $this->view->isAdmin = true; $this->_identity->isAdmin = true; } } } else { $this->_identity = null; $this->view->isLoggedIn = false; } $appNamespace = new Zend_Session_Namespace('Bolts_Temp'); $this->view->last_login = $appNamespace->last_login; $this->_Bolts_plugin = Bolts_Plugin::getInstance(); $this->_theme_locations = Zend_Registry::get('theme_locations'); // Theme filter block: Allow plugin's to alter the current theme based on request, locale, etc. $theme_params = array('request' => $this->_request, 'admin' => array('current_theme' => $this->_theme_locations['admin']['current_theme']), 'frontend' => array('current_theme' => $this->_theme_locations['frontend']['current_theme'])); $theme_params = $this->_Bolts_plugin->doFilter('current_themes', $theme_params); // FILTER HOOK if (file_exists($theme_params['admin']['current_theme']['path'])) { $this->_theme_locations['admin']['current_theme'] = $theme_params['admin']['current_theme']; } if (file_exists($theme_params['frontend']['current_theme']['path'])) { $this->_theme_locations['frontend']['current_theme'] = $theme_params['frontend']['current_theme']; $template_path = $this->_theme_locations['frontend']['current_theme']['path'] . "/modules/" . $this->getRequest()->getModuleName(); $this->view->setScriptPath($template_path); } // Theme filter block: End. $this->view->theme_path = $this->_theme_locations['frontend']['current_theme']['path']; $this->view->theme_url = $this->_theme_locations['frontend']['current_theme']['url']; $this->view->theme_global_path = $this->_theme_locations['frontend']['current_theme']['path'] . "/global"; $this->view->theme_global = $this->view->theme_global_path; $this->view->theme_controller_path = $this->_theme_locations['frontend']['current_theme']['path'] . '/modules/' . $this->getRequest()->getModuleName() . "/" . $this->getRequest()->getControllerName(); $this->view->theme_module_path = $this->_theme_locations['frontend']['current_theme']['path'] . '/modules/' . $this->getRequest()->getModuleName(); $this->view->default_theme_path = $this->_theme_locations['frontend']['default_theme']['path']; $this->view->default_theme_url = $this->_theme_locations['frontend']['default_theme']['url']; $this->view->default_theme_global_path = $this->_theme_locations['frontend']['default_theme']['path'] . "/global"; $this->view->default_theme_controller_path = $this->_theme_locations['frontend']['default_theme']['path'] . '/modules/' . $this->getRequest()->getModuleName() . "/" . $this->getRequest()->getControllerName(); $this->view->default_theme_module_path = $this->_theme_locations['frontend']['default_theme']['path'] . '/modules/' . $this->getRequest()->getModuleName(); Bolts_Log::report("Current path " . $this->_mca, null, Zend_Log::INFO); $this->view->isAdminController = false; $this->view->title_prefix = Bolts_Registry::get('title_prefix'); $locale_is_valid = true; $default_locale_code = str_replace('_', '-', trim(strtolower(Bolts_Registry::get('default_locale')))); $this->locale_code = $default_locale_code; if (Bolts_Registry::get('enable_localization') == '1') { // to set the locale code, look in the URL, not in the cookie // the only thing that should check the cookie is the home page and optionally the locale chooser page $locales_table = new Locales(); $db_locales_full = $locales_table->getLocaleCodesArray(true); $db_locales = array_keys($db_locales_full); // Get the locales allowed in the config $allowed_locales = explode(',', Bolts_Registry::get('allowed_locales')); if (!empty($allowed_locales) && (bool) array_filter($allowed_locales)) { $allowed_locales = array_map('trim', $allowed_locales); $allowed_locales = array_map('strtolower', $allowed_locales); $allowed_locales = str_replace('_', '-', $allowed_locales); } else { throw new Exception('Localization is enabled, but no locales are set in `allowed_locales`'); } // Load the allowed locales into Smarty for the admin drop down $all_locales = array(); foreach ($db_locales_full as $code => $name) { if (in_array($code, $allowed_locales)) { $all_locales[$code] = $name; } } $this->view->locale_codes = $all_locales; // Get the locales allowed on the frontend in the config $live_locales = explode(',', Bolts_Registry::get('live_locales')); if (!empty($live_locales) && (bool) array_filter($live_locales)) { $live_locales = array_map('trim', $live_locales); $live_locales = array_map('strtolower', $live_locales); $live_locales = str_replace('_', '-', $live_locales); $this->live_locales = $live_locales; } else { throw new Exception('Localization is enabled, but no locales are set in `live_locales`'); } if ($this->_request->has('locale') && $this->_request->locale != '') { $locale_code = $this->_request->get('locale'); if ($locale_code !== $default_locale_code) { if (ereg("^..-.{2,5}", $locale_code) !== false) { // Get the locales out of the database if (!in_array($locale_code, $db_locales) || !in_array($locale_code, $allowed_locales)) { $locale_is_valid = false; } if ($this->view->isAdmin !== true) { if (!in_array($locale_code, $this->live_locales)) { $locale_is_valid = false; } } } else { $locale_is_valid = false; } } if ($locale_is_valid) { $store_locales = explode(',', Bolts_Registry::get('store_enabled_locales')); if (!empty($store_locales) && (bool) array_filter($store_locales)) { $store_locales = array_map('trim', $store_locales); $store_locales = array_map('strtolower', $store_locales); $store_locales = str_replace('_', '-', $store_locales); if (!in_array($locale_code, $store_locales)) { $this->view->store_enabled = false; } else { $this->view->store_enabled = true; } } else { $this->view->store_enabled = false; } } $locale_params = array('request' => $this->_request, 'locale_code' => $locale_code, 'locale_is_valid' => $locale_is_valid); $locale_params = $this->_Bolts_plugin->doFilter('validate_locale', $locale_params); // FILTER HOOK $locale_code = $locale_params['locale_code']; $locale_is_valid = $locale_params['locale_is_valid']; if ($locale_is_valid == true) { // The locale is good. $this->locale_code = $locale_code; $this->default_locale_code = $default_locale_code; $this->view->locale_code = $locale_code; $this->view->default_locale_code = $default_locale_code; $this->view->request_locale = $locale_code; $this->view->default_locale_code = $default_locale_code; } else { if (strtolower($locale_code) !== $locale_code) { // The locale is probably just upper case. Try lower case. $this->locale_code = strtolower($locale_code); $url = str_replace("/{$locale_code}/", '/', $_SERVER['REDIRECT_URL']); // See Apache Quirks: http://framework.zend.com/manual/en/zend.controller.request.html $this->_redirect($url, array('code' => 301)); } else { // This locale is just bad. $this->locale_code = $default_locale_code; $this->view->locale_code = $default_locale_code; // Checking hasIdentity() here would be incorrect, as guests do not have identities, but may have access to this action if (@Bolts_ResourceCheck::isAllowed("choose", "default", $this->_identity->username, 'Locale')) { $this->_redirect("/bolts/locale/choose/"); } else { if (empty($this->_request->locale)) { $this->_redirect("/", array('code' => 301)); } else { $this->_redirect("/bolts/auth/missing/"); } } } } } elseif ($this->_mca == "default_index_index" && isset($_COOKIE['locale_code'])) { $this->_redirect("/" . $_COOKIE['locale_code'] . "/", array(), false); } else { // Checking hasIdentity() here would be incorrect, as guests do not have identities, but may have access to this action if (@Bolts_ResourceCheck::isAllowed("choose", "default", $this->_identity->username, 'Locale')) { $this->_redirect($default_locale_code . "/bolts/locale/choose/"); } else { $this->_redirect($default_locale_code . "/bolts/auth/missing/"); } } } $this->view->custom_metadata = Bolts_Registry::get('custom_metadata'); $language = substr($this->locale_code, 0, strpos($this->locale_code, '-')); // TODO - these should not be hardcoded here switch ($language) { case 'de': $this->view->format_date = "%e. %b. %Y, %l:%M Uhr"; $this->view->format_datetime = "%A, %e. %B %Y um %l:%M:%S%p Uhr"; $this->view->format_datetime_small = "%e %b %Y, %l:%M%p"; break; case 'fr': $this->view->format_date = "%e %b %Y, %l:%M:%S"; $this->view->format_datetime = "%A %e %B %Y à %l:%M:%S%p"; $this->view->format_datetime_small = "%e %b %Y, %l:%M%p"; break; default: $this->view->format_date = Bolts_Registry::get('format_date'); $this->view->format_datetime = Bolts_Registry::get('format_datetime'); $this->view->format_datetime_small = Bolts_Registry::get('format_datetime_small'); break; } $this->view->current_year = date("Y"); // SAVED FOR FUTURE USE - changing the language pack based on locale // $locale_table = new Locales(); // $locale_data = $locale_table->fetchByLocaleCode($this->view->locale_code); // if (count($locale_data) > 0) { // $this->locale_data = $locale_data['0']; // $this->view->locale_data = $this->locale_data; // $lan_pk = $this->locale_data['language_code'].'_'.$this->locale_data['country_code'].'.UTF-8'; // setlocale(LC_ALL, $lan_pk); // setlocale(LC_NUMERIC, 'en_US.UTF-8'); // setlocale(LC_COLLATE, 'en_US.UTF-8'); // } // this is a way to force the browser to reload some scripts if (Bolts_Registry::get('uncache_css_js_version')) { $this->view->uncache_version = "?v=" . Bolts_Registry::get('uncache_css_js_version'); } if (Bolts_Registry::get('uncache_flash_version')) { $this->view->uncache_flash = "?v=" . Bolts_Registry::get('uncache_flash_version'); } // Set the content type to UTF-8 header('Content-type: text/html; charset=UTF-8'); // get navigation items from database or cache // check for role of identity, if we don't have one, use guest. // TODO - move this to the place where role is determined, there should only be one place if ($this->_auth->hasIdentity()) { $tmp_ids = $loggedInRoleIds; $this->my_roles = $roles_table->fetchRolesByUsername($this->_identity->username)->toArray(); $username = $this->_identity->username; $this->view->username = $username; } else { $tmp_ids = array($roles_table->getIdByShortname("guest")); $this->my_roles = array(0 => array("id" => "1", "shortname" => "guest", "description" => "Guest", "is_admin" => "0", "isguest" => "1", "isdefault" => "0")); } $this->view->my_roles = $this->my_roles; // find the parent roles, add the parent role IDs to the nav_role_ids for inheritance. $nav_parent_role_ids = array(); foreach ($tmp_ids as $nav_role) { $nav_parent_role_ids = array_merge($nav_parent_role_ids, $roles_table->getAllAncestors($nav_role)); } $nav_role_ids = array(); $nav_role_ids = array_merge($nav_parent_role_ids, $tmp_ids); $unique_ids = array_unique($nav_role_ids); sort($unique_ids); $nav_table = new Navigation($unique_ids, $this->locale_code); $cache_name = 'navigation_' . $this->locale_code . '-' . md5(implode($unique_ids, "-")); // MD5 The Unique IDs to shorten the cache name $cache_tags = array('navigation', $this->locale_code); $nav_items_temp = false; if (Bolts_Registry::get('enable_navigation_cache') == '1') { $nav_items_temp = Bolts_Cache::load($cache_name); } if ($nav_items_temp === false || !isset($nav_items_temp)) { $nav_items_temp = array(); foreach ($unique_ids as $nav_role_id) { $nav_items_temp = array_merge($nav_items_temp, $nav_table->getNavTree($nav_role_id)); } if (Bolts_Registry::get('enable_navigation_cache') == '1') { Bolts_Cache::save($nav_items_temp, $cache_name, $cache_tags); } } $navparams = array('nav_items' => $nav_items_temp, 'request' => $this->_request, 'locale_code' => $this->locale_code); $navparams = $this->_Bolts_plugin->doFilter('controller_nav', $navparams); // FILTER HOOK $this->view->nav_items = $navparams['nav_items']; // TODO - Rich fix this // // VIEW STATES // if (!$this->session->view_states) { // $this->session->view_states = array(); // } // // TODO - allow use of regular expressions such as /auth/* // $last_visited_pages_filter = explode('|', Bolts_Registry::get('last_visited_pages_filter')); // if (!in_array($this->_uri, $last_visited_pages_filter)) { // $this->session->view_states['last_visited'] = $this->_uri; // } // $this->view->view_states = $this->session->view_states; // CONTROLLER INIT HOOK $params['request'] = $this->_request; $params['locale_code'] = $this->locale_code; $params['session'] = $this->session; $additional = $this->_Bolts_plugin->doFilter('controller_init', $params); // FILTER HOOK unset($additional['request']); // we don't want to send the request to the view if (isset($additional['filter_redirect'])) { $this->_redirect($additional['filter_redirect']); } foreach ($additional as $key => $value) { $this->view->{$key} = $value; } }