function navigation($current_section) { if (!isset($this->_auth)) { return; } $current_user_level = $this->_auth->getAuthData('user_level'); // need to loop through other constructors and see // if they belong in the navigation tabs $navigation = array(); $navigation[] = array('title' => 'Dashboard', 'controller' => 'dashboard', 'class' => ''); $navigation[] = array('title' => 'Site Admin', 'controller' => 'site_admin', 'class' => ''); if ($current_user_level >= N_USER_ADMIN) { $navigation[] = array('title' => 'Content', 'controller' => 'content', 'class' => ''); } if (SITE_WORKFLOW) { $navigation[] = array('title' => 'Workflow', 'controller' => 'workflow_group', 'class' => ''); } $navigation[] = array('title' => 'Admin', 'controller' => 'admin', 'class' => 'right'); if ($current_user_level < N_USER_ADMIN) { $navigation[] = array('title' => 'User', 'controller' => 'users', 'class' => 'right'); } foreach ($navigation as $k => $nav) { $ctrl =& NController::factory($nav['controller']); $ctrl->_auth =& $this->_auth; if (!$ctrl || !$ctrl->checkUserLevel()) { unset($navigation[$k]); continue; } if ($this->name == $ctrl->name || is_a($this, get_class($ctrl))) { $navigation[$k]['class'] .= ($navigation[$k]['class'] ? ' ' : '') . 'current'; } } return $navigation; }
function delete($parameter) { if (empty($parameter)) { $this->redirectTo(array('dashboard')); } // load the model layer with info $model =& NModel::factory($this->name); if (!$model) { $this->redirectTo(array('dashboard')); } if ($model->get($parameter)) { // if the content record is flagged with cms_draft=1, then the content has never been published and should be deleted altogether $content_model =& NModel::factory($model->asset); if ($content_model && $content_model->get($model->asset_id) && $content_model->cms_draft == 1) { $content_model->delete(); } unset($content_model); if (defined('SITE_AUDIT_TRAIL') && SITE_AUDIT_TRAIL) { // audit trail before delete so we don't lose the values $audit_trail =& NController::factory('audit_trail'); $audit_trail->insert(array('asset' => $this->name, 'asset_id' => $model->{$model->primaryKey()}, 'action_taken' => AUDIT_ACTION_DRAFT_DELETE)); unset($audit_trail); } $model->delete(); if (isset($this->params['_referer']) && $this->params['_referer']) { header('Location:' . urldecode($this->params['_referer'])); exit; } $this->postProcessForm($model->toArray()); $this->flash->set('notice', 'Draft deleted.'); } $this->redirectTo(array('dashboard')); }
function function_check_asset_template_use($params) { $asset = $params['asset']; $container_id = $params['container_id']; $check =& NController::factory('page_content'); $result = $check->checkAssetContainerUsage($asset, $container_id); if ($result > 0) { print ' (' . $result . ' uses)'; } }
function function_check_template($params) { $filename = $params['filename']; $template_check =& NController::factory('page_template'); $result = $template_check->doesPageTemplateExist($filename); if (!$result) { print '<span class="notfound"> File not found </span>'; } unset($template_check); }
/** * Build the site index and apply it to a navigation template * * All parameters are optional * @param $template template name to render (navigation/{$template}.html) , default 'top' * @param $current_id page to set as 'current' and it's ancestors as 'open' , default 0 * @param $top_id top of the nav tree, defaults to home page , default null * * @author Andy VanEe <*****@*****.**> */ function function_nav($params, &$view) { $nav_controller = NController::factory('navigation'); extract($params); $template = $template ? $template : 'top'; $this->current_id = $current_id ? $current_id : 0; $top_id = $top_id ? $top_id : null; $page = array_shift($this->model->getChildren($top_id)); $this->children($page); $nav_controller->set('top', $page); $nav_controller->render($template); }
function getContent($params, $dynamic) { $content = ''; $controller = $params['controller']; $action = $params['action']; unset($params['controller'], $params['action']); include_once 'controller/inflector.php'; $method = Inflector::camelize($action); if ($ctrl =& NController::factory($controller)) { if ($dynamic) { $content = $this->dynamicPHP($ctrl, $method, NController::getIncludePath($controller), $params); } else { $content = $ctrl->{$method}($params); } unset($ctrl); } return $content; }
function searchFieldListSelect($params) { $asset = $params['asset'] ? $params['asset'] : null; $searched_field = $params['searched_field'] ? $params['searched_field'] : null; if (isset($searched_field)) { $searched_field = str_replace(" ", "_", strtolower($searched_field)); } $model = NModel::factory($asset); $fields = $model->fields(); // Remove a bunch of fields if you're not an admin - makes it a little bit simpler. $auth = new NAuth(); $current_user_level = $auth->getAuthData('user_level'); unset($auth); // Preload for the search_field default. $acon = NController::factory('asset'); $select = 'Search Field: <select name="search_field">'; foreach ($fields as $field) { if ($current_user_level < N_USER_ADMIN) { if (in_array($field, $this->admin_only_fields)) { continue; } } $select .= '<option value="' . $field . '"'; if (isset($searched_field) && $searched_field == $field) { $select .= ' selected="selected"'; } elseif (isset($model->search_field) && $field == $model->search_field && !$searched_field) { $select .= ' selected="selected"'; } elseif (!isset($model->search_field) && $field == $acon->search_field && !$searched_field) { $select .= ' selected="selected"'; } $select .= '>' . ucwords(str_replace('_', ' ', $field)) . '</option>'; } $select .= '</select>'; unset($model); unset($acon); print $select; }
/** * forgot - I forgot my password and need to reset it. Takes an email address and * sends a confirmation email with a random token to that address. * * @return void **/ function forgot() { $form = new NQuickForm('reset_password', 'post'); $form->addElement('text', 'email', 'Email Address', array('maxlength' => 32, 'style' => 'width:300px;')); $form->addElement('submit', 'reset_password', 'Reset Password'); $form->addRule('email', 'You need to enter an email address.', 'required', null, 'client'); $form->addRule('email', 'The email does not appear to be the correct format', 'email', null, 'client'); if ($form->validate()) { $vals = $form->exportValues(); if (isset($vals['email'])) { $cms_auth = NModel::factory('cms_auth'); // Set the token - then send the email. if ($result = $cms_auth->setConfirmationToken($vals['email'])) { // Send the confirmation email. $user = NController::factory('users'); $user->sendConfirmationEmail($vals['email']); } } // TODO: Put this into the template and out of here. if ($result == true) { $content = '<p><b>We have sent you a confirmation - please check your email and follow the instructions.</b></p>'; } else { $content = '<p><b>There was a problem - please <a href="javascript:history.go(-1);">click back and enter your email address again.</a></b></p>'; } $this->set(array('MAIN_CONTENT' => $content, 'forgot' => 'true')); } else { $content = $form->toHTML(); $this->set(array('MAIN_CONTENT' => $content, 'forgot' => 'true')); } $this->auto_render = false; $this->render(array('layout' => 'login')); }
/** * deleteAll - Delete all old versions of a particular asset. * This comprises all files and empty folders as well. * * @param int The id of this particular version. * @return void **/ function deleteAll($parameter) { if (($model =& $this->getDefaultModel()) && $model->get($parameter)) { $info = $model->toArray(); $model->reset(); // Let's get all the versions for that asset and asset_id. $model->asset_id = $info['asset_id']; $model->asset = $info['asset']; $this->debug("Deleting versions for {$model->asset} : {$model->asset_id}"); if ($model->find()) { while ($model->fetch()) { $arr = $model->toArray(); $content = unserialize($arr['version']); $success = $this->fileDelete($content, $info['asset'], $info['asset_id']); $model->delete(); } } $this->deleteEmptyFolders($info['asset'], $info['asset_id']); if (defined('SITE_AUDIT_TRAIL') && SITE_AUDIT_TRAIL) { $audit_trail =& NController::factory('audit_trail'); $audit_trail->insert(array('asset' => $info['asset'], 'asset_id' => $info['asset_id'], 'action_taken' => AUDIT_ACTION_DELETE_ASSET_VERSIONS)); unset($audit_trail); } header('Location:' . $_GET['_referer']); } }
function call($params, &$view) { $controller = isset($params['controller']) ? $params['controller'] : false; $action = isset($params['action']) ? $params['action'] : false; if (!$controller || !$action) { return; } unset($params['controller']); unset($params['action']); include_once 'controller/inflector.php'; $ctrl =& NController::factory($controller); if ($controller) { $method = Inflector::camelize($action); if (is_callable(array($ctrl, $method))) { // pass all currently variables along // $ctrl->set($view->get_template_vars()); return $ctrl->{$method}($params, $view); } } return ''; }
/** * deleteSmartyCache - Delete the entire cache when you make a page change. * If you're including the navigation in the page as ul/li's - this keeps the * navigation always consistent. * * @return void **/ function deleteSmartyCache() { // Only delete the entire cache if the NAV_IN_PAGE is true and we're in production. if (defined('NAV_IN_PAGE') && NAV_IN_PAGE && ENVIRONMENT == 'production' && !isset($this->smarty_cache_cleared)) { NDebug::debug('We are clearing the smarty caches because of a page edit.', N_DEBUGTYPE_INFO); $view =& NView::singleton($this); $view->clear_all_cache(); $site_admin = NController::factory('site_admin'); $site_admin->rmDirFiles(CACHE_DIR . '/smarty_cache'); $site_admin->rmDirFiles(CACHE_DIR . '/templates_c'); $this->smarty_cache_cleared = true; } }
function postGenerateForm(&$form) { $form->removeElement('__header__'); // Set the container in the menu as passed by $parameter $container_group =& $form->getElement('page_template_container_id'); $container_group->setSelected($this->page_template_container_id); // Not sure I should do this - but it seems to help with confusion. $container_group->freeze(); // Grab the asset list and create an array for QuickForm. $assets =& NController::factory('cms_asset_info'); $array_of_assets = $assets->AssetList(true); foreach ($array_of_assets as $asset) { $select_array[$asset['asset']] = $asset['asset_name']; } // Add the element in place of the current asset form item. $form->removeElement('asset'); $new_select =& $form->addElement('select', 'asset', 'Asset:', $select_array); $form->insertElementBefore($form->removeElement('asset', false), 'template_filename'); // Set the asset if passed by edit. if (isset($this->passed_asset)) { $new_select->setSelected($this->passed_asset); } $form->addRule('template_filename', 'We need to have a template filename.', 'required', null, 'client'); $form->addRule('template_filename', 'Letters, numbers, dashes and underscores - without a suffix, spaces or punctuation.', 'regex', '/^[a-zA-Z0-9_-]+$/', 'client'); }
function renderContent($params) { $page_id = $params['page_id'] ? $params['page_id'] : 0; $container_id = $params['container_id'] ? $params['container_id'] : 0; if ($page_id and $container_id) { $page =& NController::factory('page'); echo $page->getContainerContent($page_id, $container_id); } }
/** * Deletes a draft * * Checks for the currently logged in user and deletes a draft that * matches with their id, and the id and type of asset. * * @access public * @return boolean true if a draft exists, false otherwise */ function deleteDraft() { if (!SITE_DRAFTS) { return false; } $model =& $this->getDefaultModel(); if (!$model) { return false; } $pk = $model->primaryKey(); $draft_model =& NModel::factory('cms_drafts'); if ($draft_model) { $draft_model->reset(); $draft_model->asset = $this->name; $draft_model->asset_id = $model->{$pk}; $draft_model->cms_modified_by_user = isset($this->_auth) && is_object($this->_auth) ? $this->_auth->currentUserID() : 0; if ($draft_model->find()) { while ($draft_model->fetch()) { $draft_model->delete(); } unset($draft_model); if (defined('SITE_AUDIT_TRAIL') && SITE_AUDIT_TRAIL) { // audit trail $audit_trail =& NController::factory('audit_trail'); $audit_trail->insert(array('asset' => $this->name, 'asset_id' => $model->{$pk}, 'action_taken' => AUDIT_ACTION_DRAFT_DELETE)); unset($audit_trail); } return true; } unset($draft_model); } return false; }
function delete($parameter) { $model =& $this->getDefaultModel(); if ($model->get($parameter)) { if (($page_content_model =& $model->getLink('page_content_id', 'page_content')) && $page_content_model->cms_workflow == 1) { $page_content_model->delete(); } } $model->reset(); if (defined('SITE_AUDIT_TRAIL') && SITE_AUDIT_TRAIL) { // audit trail $audit_trail =& NController::factory('audit_trail'); $audit_trail->insert(array('asset' => $model->asset, 'asset_id' => $model->asset_id, 'action_taken' => AUDIT_ACTION_WORKFLOW_DELETE, 'workflow_id' => $model->{$model->primaryKey()}, 'workflow_group_id' => $model->workflow_group_id, 'page_id' => $model->page_id, 'page_content_id' => $model->page_content_id)); unset($audit_trail); } parent::delete($parameter); }
function getContainerContent($page_id, $container_id, $page_content_id = null) { $page_model =& $this->getDefaultModel(); $this->auto_render = false; $page_id = (int) $page_id; $container_id = (int) $container_id; if (!$page_id || !$container_id) { return null; } // instantiate the page content controller // TODO: put some methods into the page_content controller to do some of this. $page_content =& NController::factory('page_content'); $page_content_model =& $page_content->getDefaultModel(); $page_content_pk = $page_content_model->primaryKey(); $asset_ctrl =& NController::singleton('cms_asset_template'); if (SITE_WORKFLOW && $this->nterchange) { // get the users rights and bit compare them below $workflow =& NController::factory('workflow'); $user_rights = $workflow->getWorkflowUserRights($page_model); } // load up the content $content = ''; // set the time using a trusted source $now = new Date(gmdate('Y-m-d H:i:s')); $now->setTZbyID('UTC'); if ($page_content_model->getContainerContent($page_id, $container_id, $this->nterchange, $page_content_id)) { $page_content->set('page_id', $page_id); while ($page_content_model->fetch()) { $page_content->set('page_content_id', $page_content_model->{$page_content_pk}); $timed_start_obj = $page_content_model->timed_start && $page_content_model->timed_start != '0000-00-00 00:00:00' ? new Date($page_content_model->timed_start) : false; $timed_end_obj = $page_content_model->timed_end && $page_content_model->timed_end != '0000-00-00 00:00:00' ? new Date($page_content_model->timed_end) : false; if ($timed_start_obj) { $timed_start_obj->setTZbyID('UTC'); } if ($timed_end_obj) { $timed_end_obj->setTZbyID('UTC'); } // set cache lifetimes for the page if ($timed_start_obj) { $time_diff = $timed_start_obj->getDate(DATE_FORMAT_UNIXTIME) - $now->getDate(DATE_FORMAT_UNIXTIME); if ($time_diff > 0) { $this->view_cache_lifetimes[] = $time_diff; } } if ($timed_end_obj) { $time_diff = $timed_end_obj->getDate(DATE_FORMAT_UNIXTIME) - $now->getDate(DATE_FORMAT_UNIXTIME); if ($time_diff > 0) { $this->view_cache_lifetimes[] = $time_diff; } } if ($timed_end_obj && $timed_end_obj->before($now)) { $timed_end_active = true; } // if the timed end is in the past then kill it and continue. if ($timed_end_obj && $now->after($timed_end_obj)) { // remove the content, which also kills the page cache $page_content_controller =& NController::factory('page_content'); $page_content_controller->_auth =& $this->_auth; $page_content_controller->removeContent($page_content_model->{$page_content_pk}, false, true); unset($page_content_controller); continue; } else { if ($this->nterchange || !$timed_start_obj || $timed_start_obj && $timed_start_obj->before($now)) { $content_controller =& NController::factory($page_content_model->content_asset); if ($content_controller && is_object($content_controller)) { $content_model =& $content_controller->getDefaultModel(); $fields = $content_model->fields(); $pk = $content_model->primaryKey(); // if we're on the public site, don't grab workflow or draft inserts $conditions = array(); if ($this->nterchange && in_array('cms_draft', $fields)) { $conditions = '(cms_draft = 0 OR (cms_draft=1 AND cms_modified_by_user='******'))'; } else { $content_model->cms_draft = 0; } $content_model->{$pk} = $page_content_model->content_asset_id; if ($content_model->find(array('conditions' => $conditions), true)) { // last modified if (strtotime($content_model->cms_modified) > $this->page_last_modified) { $this->page_last_modified = strtotime($content_model->cms_modified); } $template = $asset_ctrl->getAssetTemplate($page_content_model->content_asset, $page_content_model->page_template_container_id); if (SITE_DRAFTS && $this->nterchange) { $is_draft = false; $user_owned = false; $user_id = $this->_auth->currentUserId(); $draft_model =& NModel::factory('cms_drafts'); $draft_model->asset = $content_controller->name; $draft_model->asset_id = $content_model->{$pk}; if ($draft_model->find(null, true)) { $is_draft = true; // fill the local model with the draft info $current_user_id = isset($this->_auth) && is_object($this->_auth) ? $this->_auth->currentUserID() : 0; if ($current_user_id == $draft_model->cms_modified_by_user) { $draft_content = unserialize($draft_model->draft); foreach ($draft_content as $field => $val) { $content_model->{$field} = $val; } $user_owned = true; $draft_msg = 'You have saved'; } else { $user_model =& $this->loadModel('cms_auth'); $user_model->get($draft_model->cms_modified_by_user); $draft_msg = $user_model->real_name . ' has saved'; unset($user_model); } } unset($draft_model); } if (SITE_WORKFLOW && $this->nterchange) { if ($workflow_group_model =& $workflow->getWorkflowGroup($page_model)) { if ($current_workflow =& $workflow->getWorkflow($page_content_model->{$page_content_model->primaryKey()}, $workflow_group_model->{$workflow_group_model->primaryKey()}, $content_controller)) { $current_user_id = isset($this->_auth) && is_object($this->_auth) ? $this->_auth->currentUserID() : 0; $content_edit_allowed = $this->content_edit_allowed; $this->content_edit_allowed = !$current_workflow->submitted && $current_user_id == $current_workflow->cms_modified_by_user ? true : false; $workflow_draft = unserialize($current_workflow->draft); foreach ($workflow_draft as $field => $val) { $content_model->{$field} = $val; } } } } $values = $content_model->toArray(); $values['_EDIT_START_'] = ''; $values['_EDIT_END_'] = ''; if ($this->nterchange && $this->edit) { $values['_SURFTOEDIT_'] = true; } if ($this->edit) { if ($this->content_edit_allowed) { // $values['_EDIT_START_'] .= '<div class="pagecontent" id="pagecontent' . $page_content_model->$page_content_pk . '">' . "\n"; $page_content->set(array('asset' => $content_controller->name, 'asset_id' => $content_model->{$pk})); $values['_EDIT_START_'] .= $page_content->render(array('action' => 'asset_edit', 'return' => true)); } $page_content->set(array('asset' => $content_controller->name, 'asset_id' => $content_model->{$pk}, 'page_content_id' => $page_content_model->{$page_content_pk}, 'page_id' => $page_id)); $values['_EDIT_START_'] .= '<div class="editable-region">' . "\n"; if (SITE_WORKFLOW && isset($current_workflow) && $current_workflow) { if ($this->content_edit_allowed) { $values['_EDIT_START_'] .= '<div class="workflow">The following content is waiting to be submitted to workflow in the <a href="' . urlHelper::urlFor($dashboard =& NController::factory('dashboard'), null) . '">dashboard</a>.</div>' . "\n"; } else { $values['_EDIT_START_'] .= '<div class="workflow">The following content is currently in workflow and cannot be edited.</div>' . "\n"; } } $values['_EDIT_END_'] .= "</div>\n"; if ($this->content_edit_allowed) { if (SITE_DRAFTS && $is_draft) { $values['_EDIT_START_'] .= '<div class="draft">' . $draft_msg . ' the following content as a draft.</div>' . "\n"; } $values['_EDIT_END_'] .= "</div>\n"; } } if ($this->nterchange && ($timed_start_obj && $timed_start_obj->after($now) || $timed_end_obj && $timed_end_obj->after($now))) { $format = '%a, %b %e, %Y @ %I:%M:%S %p'; $values['_EDIT_START_'] .= '<div class="timedcontent">'; $values['_EDIT_START_'] .= 'The following content is currently' . ($timed_start_obj && $timed_start_obj->after($now) ? ' NOT' : '') . ' visible (it is now ' . NDate::convertTimeToClient($now, $format) . ')'; if ($timed_start_obj && $timed_start_obj->after($now)) { $values['_EDIT_START_'] .= '<br />It will appear: ' . NDate::convertTimeToClient($timed_start_obj, $format); } if ($timed_end_obj && $timed_end_obj->after($now)) { $values['_EDIT_START_'] .= '<br />It will be removed: ' . NDate::convertTimeToClient($timed_end_obj, $format); } $values['_EDIT_START_'] .= '</div>'; } if (isset($content_edit_allowed)) { $this->content_edit_allowed = $content_edit_allowed; unset($content_edit_allowed); } // Remove extra whitespace/newlines $values['_EDIT_START_'] = trim(preg_replace('/\\s+/', ' ', $values['_EDIT_START_'])); $values['_EDIT_END_'] = trim(preg_replace('/\\s+/', ' ', $values['_EDIT_END_'])); // Render the content $content_controller->set($values); $content .= $content_controller->render(array('action' => $template, 'return' => true)); } unset($content_model); unset($content_controller); } } } } } // free up some memory unset($page_content_model); unset($page_content); // return the content return $content; }
/** * resetPassword - Reset the users' password and email it to them. * * @param string An email address. * @return boolean * @todo Audit trail this method. **/ function resetPassword($email) { // Make sure to clear out the model - after searching a few times already. $this->reset(); $this->email = $email; if ($this->find()) { while ($this->fetch()) { $password = $this->_createPassword(); $this->password = md5($password); $this->save(); $users = NController::factory('users'); $users->passwordEmail($this->toArray(), $password); return true; } } else { return false; } }
/** * Instantiates and invokes the controller if it's available. * * @access private * @param string $controller * @param string $action the action to be performed * @param string $parameter * @return null * */ function _invoke($controller, $action, $parameter = null) { if (!$this->app_dir) { $controller = 'page'; } if (!NController::exists($controller)) { $this->error($controller, $action); } $ctrl =& NController::factory($controller); if (!$action && method_exists($ctrl, 'index')) { $action = 'index'; } if (!$this->app_dir && !in_array($action, $ctrl->public_actions)) { $action = 'index'; } $method = Inflector::camelize($action); $ctrl->action = $action; if ($ctrl->login_required === true || is_array($ctrl->login_required) && (in_array($action, $ctrl->login_required) || in_array($method, $ctrl->login_required))) { include_once 'n_auth.php'; $ctrl->_auth = new NAuth(); } if (!$ctrl->checkUserLevel()) { header('Location:/' . APP_DIR . '/'); exit; } // do the method if (!$this->app_dir && $controller == 'page') { $model =& $ctrl->getDefaultModel(); // /_page8 redirection support (BC fix) if (preg_match('|^/_page(\\d+)|', $this->url, $matches)) { $parameter = $matches[1]; if ($page_info = $model->getInfo($parameter)) { header('Location:' . $ctrl->getHref($page_info) . ($this->params ? '?' . $this->paramsToString() : '')); exit; } } if ($action != 'menus') { $parameter = $ctrl->models['page']->URLToID($this->url); } } if (method_exists($ctrl, $method)) { $ctrl->{$method}($parameter); if ($ctrl->auto_render) { $ctrl->render(); } } else { $this->error($ctrl, $method); } unset($ctrl); }
/** * Singleton pattern to return the same controller from wherever it is called * * @param string $controller - should be an underscored word * @param array $params - paramaters to pass to the controller factory * @see NController::factory * @return object */ static function &singleton($controller, $params = null) { static $controllers; if (!isset($controllers)) { $controllers = array(); } $key = md5($controller); if (!isset($controllers[$key])) { $controllers[$key] =& NController::factory($controller, $params); } return $controllers[$key]; }
function mediaBrowse() { $this->set('ckeditorfuncnum', $_GET['CKEditorFuncNum']); require_once 'n_quickform.php'; $this->auto_render = false; // Media Element Browser $form = new NQuickform(); $model =& NModel::factory('media_element'); $modelIndex = array(); $model->find(); $media_elements = $model->fetchAll(true); foreach ($media_elements as $i) { $modelIndex[$i['media_file']] = $i['cms_headline']; } $form->addElement('select', 'mediaelement', "Media Element", $modelIndex, array("id" => "mediaelement")); $form->addElement('button', 'mediaelementsubmit', "Submit", array("onclick" => "javascript: me_callback()")); $page_controller =& NController::factory('page'); $pageTree = $page_controller->getTreeAsSelect('pages', "Pages"); $form->addElement($pageTree); $form->addElement('button', 'pagessubmit', "Submit", array("onclick" => "javascript: pg_callback()")); $this->set('title', 'Choose file or page to link to:'); $this->set('form', $form->toHtml()); $this->render(array('layout' => 'simple')); }
function export($model_name) { if (isset($model_name)) { $model = NModel::factory($model_name); // Foreign Key Lookup Support if (isset($model->excel_export)) { $model_foreign_keys = $model->excel_export; // Default standard foreign keys get added and merged here. $foreign_keys = array_merge($this->default_foreign_keys, $model_foreign_keys); } else { $foreign_keys = $this->default_foreign_keys; } // Field Inclusion and Exclusion Support if (isset($model->excel_exclude_fields)) { $model_excel_inclusions = $model->excel_exclude_fields; $field_exclusions = array_merge($this->default_field_exclusions, $model_excel_inclusions); } else { $field_exclusions = $this->default_field_exclusions; } // If $_GET['search'] is set, only export those items. $search = isset($_GET['search']) ? $_GET['search'] : null; $search_field = isset($_GET['search_field']) ? $_GET['search_field'] : null; if (isset($search) && $search != null) { if (!$search_field && $search_field != null) { $acon = NController::factory('asset'); $search_field = isset($model->search_field) ? $model->search_field : $acon->search_field; unset($acon); } } $options = $search ? array('conditions' => "{$search_field} LIKE '%{$search}%'") : array(); // Can set options in the model about items exported to the Excel. // Only export items that meet a certain criteria - not everything in the list. // For example: $this->viewlist_options = array('conditions'=>"cms_modified_by_user = '******'"); if (isset($model->viewlist_options)) { foreach ($model->viewlist_options as $key => $val) { if (isset($options[$key])) { $options[$key] .= ' AND ' . $val; } else { $options[$key] = "{$val}"; } } } if ($model->find($options)) { $fields = $model->fields(); // Add additional custom fields here from the model file. if (isset($model->excel_extra_fields)) { foreach ($model->excel_extra_fields as $key => $value) { $fields[] = $key; } } // Creating a workbook $filename = $_SERVER['DOCUMENT_ROOT'] . UPLOAD_DIR . '/' . rand(1, 1000) . '-file.csv'; $fp = fopen($filename, 'w'); // Creating a workbook and sending it directly out to a browser. //$fp = fopen('php://output', 'w'); // Let's add the field names to the title line. // Leave out a few. $x = 0; foreach ($fields as $field) { $exclude_this = array_key_exists($field, $field_exclusions); if ($exclude_this && $field_exclusions[$field] == true) { // do nothing } else { $good_fields[] = $field; } } //$field_string = implode(',', $good_fields); fputcsv($fp, $good_fields); // Now here comes the data. $y = 1; while ($model->fetch()) { $data_fields = array(); $item = $model->toArray(); // For reference while we're working with things. $original_item = array(); $original_item = $item; $x = 0; foreach ($fields as $field) { $exclude_this = array_key_exists($field, $field_exclusions); if ($exclude_this && $field_exclusions[$field] == true) { // do nothing } else { // Look for foreign keys and replace if assigned. foreach ($foreign_keys as $foreign_key => $foreign_key_value) { if ($field == $foreign_key) { $fk_model_name = $foreign_key_value[0]; $fk_model_headline = $foreign_key_value[1]; $fk_model = NModel::factory($fk_model_name); if ($fk_model && $fk_model->get($item[$field])) { $item[$field] = $fk_model->{$fk_model_headline}; } unset($fk_model); } } //Look for bitmask fields and replace with string value instead of numeric total if (is_array($model->bitmask_fields) && count($model->bitmask_fields)) { $bitmask_keys = array_keys($model->bitmask_fields); if (in_array($field, $bitmask_keys)) { $bitmask_total = $item[$field]; $value_str = ''; $i = 0; foreach ($model->bitmask_fields[$field] as $bit => $val) { if ($bit & $bitmask_total) { if ($i > 0) { $value_str .= ', '; } $value_str .= $val; $i++; } } $item[$field] = $value_str; } } // Any extra fields get dealt with here. if (isset($model->excel_extra_fields)) { foreach ($model->excel_extra_fields as $key => $value) { if ($field == $key) { $extra_name = $value[0]; $extra_attribute = $value[1]; $extra_key = $value[2]; $extra_info = NModel::factory($extra_name); if (method_exists($extra_info, $extra_attribute)) { $item[$field] = $extra_info->{$extra_attribute}($original_item["{$extra_key}"]); } else { $extra_info->get($original_item["{$extra_key}"]); $item[$field] = $extra_info->{$extra_attribute}; } unset($extra_info); } } } // If it's an uploaded file, put the address in the conf.php before it so that it // turns into a link in Excel. if (eregi(UPLOAD_DIR, $item[$field])) { $item[$field] = PUBLIC_SITE . ereg_replace("^/", "", $item[$field]); } $fixed_item = $this->convert_characters($item[$field]); $data_fields[] = $fixed_item; } } //$data_string = implode(',', $data_fields); fputcsv($fp, $data_fields); unset($original_item); unset($item); unset($data_fields); } // Close the file. fclose($fp); $download = new NDownload(); $download->serveFile($filename); unlink($filename); } } }
function export($model_name) { if (isset($model_name)) { $model = NModel::factory($model_name); // Foreign Key Lookup Support if (isset($model->excel_export)) { $model_foreign_keys = $model->excel_export; // Default standard foreign keys get added and merged here. $foreign_keys = array_merge($this->default_foreign_keys, $model_foreign_keys); } else { $foreign_keys = $this->default_foreign_keys; } // Field Inclusion and Exclusion Support if (isset($model->excel_exclude_fields)) { $model_excel_inclusions = $model->excel_exclude_fields; $field_exclusions = array_merge($this->default_field_exclusions, $model_excel_inclusions); } else { $field_exclusions = $this->default_field_exclusions; } // If $_GET['search'] is set, only export those items. $search = isset($_GET['search']) ? $_GET['search'] : null; $search_field = isset($_GET['search_field']) ? $_GET['search_field'] : null; if (isset($search) && $search != null) { if (!$search_field && $search_field != null) { $acon = NController::factory('asset'); $search_field = isset($model->search_field) ? $model->search_field : $acon->search_field; unset($acon); } } $options = $search ? array('conditions' => "{$search_field} LIKE '%{$search}%'") : array(); // Can set options in the model about items exported to the Excel. // Only export items that meet a certain criteria - not everything in the list. // For example: $this->viewlist_options = array('conditions'=>"cms_modified_by_user = '******'"); if (isset($model->viewlist_options)) { foreach ($model->viewlist_options as $key => $val) { if (isset($options[$key])) { $options[$key] .= ' AND ' . $val; } else { $options[$key] = "{$val}"; } } } if ($model->find($options)) { $fields = $model->fields(); // Add additional custom fields here from the model file. if (isset($model->excel_extra_fields)) { foreach ($model->excel_extra_fields as $key => $value) { $fields[] = $key; } } require_once 'Spreadsheet/Excel/Writer.php'; // Creating a workbook $workbook = new Spreadsheet_Excel_Writer(); $worksheet =& $workbook->addWorksheet(ucwords(str_replace('_', ' ', $model_name))); $worksheet->setColumn(2, 4, 20); $worksheet->setColumn(7, 7, 15); $worksheet->setColumn(10, 28, 20); // Make the title line look a little different $title =& $workbook->addFormat(); $title->setBold(); $title->setAlign('center'); $title->setBottom(2); // Let's add the field names to the title line. // Leave out a few. $x = 0; $worksheet->setRow(0, 18.75); foreach ($fields as $field) { $exclude_this = array_key_exists($field, $field_exclusions); if ($exclude_this && $field_exclusions[$field] == true) { // do nothing } else { $worksheet->write(0, $x, ucwords(str_replace('_', ' ', $field)), $title); $x++; } } // Now here comes the data. $y = 1; while ($model->fetch()) { $item = $model->toArray(); // For reference while we're working with things. $original_item = array(); $original_item = $item; $x = 0; $worksheet->setRow($y, 18.75); foreach ($fields as $field) { $exclude_this = array_key_exists($field, $field_exclusions); if ($exclude_this && $field_exclusions[$field] == true) { // do nothing } else { // Look for foreign keys and replace if assigned. foreach ($foreign_keys as $foreign_key => $foreign_key_value) { if ($field == $foreign_key) { $fk_model_name = $foreign_key_value[0]; $fk_model_headline = $foreign_key_value[1]; $fk_model = NModel::factory($fk_model_name); if ($fk_model && $fk_model->get($item[$field])) { $item[$field] = $fk_model->{$fk_model_headline}; } unset($fk_model); } } //Look for bitmask fields and replace with string value instead of numeric total if (is_array($model->bitmask_fields) && count($model->bitmask_fields)) { $bitmask_keys = array_keys($model->bitmask_fields); if (in_array($field, $bitmask_keys)) { $bitmask_total = $item[$field]; $value_str = ''; $i = 0; foreach ($model->bitmask_fields[$field] as $bit => $val) { if ($bit & $bitmask_total) { if ($i > 0) { $value_str .= ', '; } $value_str .= $val; $i++; } } $item[$field] = $value_str; } } // Any extra fields get dealt with here. if (isset($model->excel_extra_fields)) { foreach ($model->excel_extra_fields as $key => $value) { if ($field == $key) { $extra_name = $value[0]; $extra_attribute = $value[1]; $extra_key = $value[2]; $extra_info = NModel::factory($extra_name); if (method_exists($extra_info, $extra_attribute)) { $item[$field] = $extra_info->{$extra_attribute}($original_item["{$extra_key}"]); } else { $extra_info->get($original_item["{$extra_key}"]); $item[$field] = $extra_info->{$extra_attribute}; } unset($extra_info); } } } // If it's an uploaded file, put the address in the conf.php before it so that it // turns into a link in Excel. if (eregi(UPLOAD_DIR, $item[$field])) { $item[$field] = PUBLIC_SITE . ereg_replace("^/", "", $item[$field]); } $worksheet->write($y, $x, $this->convert_characters($item[$field])); $x++; } } $y++; unset($original_item); unset($item); } // sending HTTP headers $xls_filename = $model_name . '_entries.xls'; $workbook->send($xls_filename); $workbook->close(); } } }
function index($parameter) { $this->auto_render = false; $sidebar_content = $this->render(array('action' => 'description', 'return' => true)); if (SITE_DRAFTS) { $draft_model =& NModel::factory('cms_drafts'); if ($draft_model) { $draft_model->cms_modified_by_user = $this->_auth->currentUserId(); if ($draft_model->find()) { while ($draft_model->fetch()) { $asset_ctrl =& NController::factory($draft_model->asset); $asset_model =& $draft_model->getLink('asset_id', $draft_model->asset); if ($asset_model) { $this->set(array('draft' => $draft_model->toArray(), 'asset_name' => $asset_ctrl->page_title ? $asset_ctrl->page_title : Inflector::humanize($asset_ctrl->name), 'asset' => $draft_model->asset)); $this->set($asset_model->toArray()); $this->setAppend('drafts', $this->render(array('action' => 'draft_record', 'return' => true))); } unset($asset_ctrl); unset($asset_model); } } else { $this->set('drafts', $this->render(array('action' => 'no_drafts', 'return' => true))); } } } // load all workflow output into this variable to be assigned later $workflow_html = ''; if (SITE_WORKFLOW) { $sidebar_content .= $this->render(array('action' => 'workflow_description', 'return' => true)); $user_id = $this->_auth->currentUserId(); // If user is an admin, and has any unsubmitted workflow in groups they don't belong to, display them first if ($this->_auth->getAuthData('user_level') >= N_USER_ADMIN) { $workflow =& NController::factory('workflow'); $workflow_model =& NModel::factory('workflow'); $workflow_model_pk = $workflow_model->primaryKey(); $workflow_model->cms_modified_by_user = $user_id; $workflow_model->submitted = 0; if ($workflow_model->find(array('order_by' => 'page_id'))) { $admin_workflow_html = ''; $this->set('workflow_section', 'Unsubmitted Admin Workflows'); $workflow_html .= $this->render(array('action' => 'workflow_section', 'return' => true)); $page_id = 0; $page_count = 0; $page_workflows = array(); while ($workflow_model->fetch()) { $workflow_users_model =& NModel::factory('workflow_users'); $workflow_users_model->workflow_group_id = $workflow_model->workflow_group_id; $workflow_users_model->user_id = $workflow_model->cms_modified_by_user; if ($workflow_users_model->find()) { unset($workflow_users_model); continue; } unset($workflow_users_model); $unsubmitted[] = $workflow_model->{$workflow_model_pk}; $page_content_model =& NModel::factory('page_content'); $page_content_model->get($workflow_model->page_content_id); $page_model =& $page_content_model->getLink('page_id', 'page'); $asset_controller =& NController::factory($workflow_model->asset); $asset_model =& $asset_controller->getDefaultModel(); $asset_model->get($workflow_model->asset_id); $this->convertDateTimesToClient($asset_model); $action = $workflow->actionToString($workflow_model->action); $cascade_delete = $page_content_model->cms_workflow ? true : false; // set the page title for the following pages $this->set('page_title', ''); if ($workflow_model->page_id == $page_id) { $page_count++; } else { $this->set('page_title', $page_model->title); $admin_workflow_html .= $this->workflowPageSubmit($page_workflows); $page_id = $workflow_model->page_id; $page_count = 0; $page_workflows = array(); } $page_workflows[] = $workflow_model->{$workflow_model_pk}; $user =& $workflow_model->getLink('cms_modified_by_user', 'cms_auth'); $this->set(array('process' => 'submit', 'cascade_delete' => $cascade_delete, 'approved' => $workflow_model->approved, 'action' => $action, 'workflow' => $workflow_model->toArray(), 'page' => $page_model->toArray(), 'asset' => $asset_controller, 'row' => $asset_model->toArray(), 'user' => $user ? $user->toArray() : false)); $admin_workflow_html .= $this->render(array('action' => 'workflow_record', 'return' => true)); } $admin_workflow_html .= $this->workflowPageSubmit($page_workflows); if ($admin_workflow_html) { $this->set(array('workflow_title' => 'Admin Workflows')); $workflow_html .= $this->render(array('action' => 'workflow', 'return' => true)) . $admin_workflow_html; unset($admin_workflow_html); } } unset($workflow_model); unset($workflow); } $workflow_users =& $this->loadModel('workflow_users'); $workflow_users->user_id = $user_id; if ($workflow_users->find()) { while ($workflow_users->fetch()) { // instantiate workflow group object $workflow_group =& $workflow_users->getLink('workflow_group_id', 'workflow_group'); // render current workflow group $this->set($workflow_group->toArray()); $workflow_html .= $this->render(array('action' => 'workflow', 'return' => true)); // instantiate workflow objects $workflow =& NController::factory('workflow'); $workflow_model =& $workflow->getDefaultModel(); $workflow_model_pk = $workflow_model->primaryKey(); // find unsubmitted workflows that belong to this user $workflow_model->submitted = 0; $workflow_model->completed = 0; $workflow_model->workflow_group_id = $workflow_group->{$workflow_group->primaryKey()}; $workflow_model->cms_modified_by_user = $user_id; $unsubmitted = array(); if ($workflow_model->find(array('order_by' => 'page_id, asset, asset_id, id'))) { $this->set('workflow_section', 'Unsubmitted Workflows'); $workflow_html .= $this->render(array('action' => 'workflow_section', 'return' => true)); $page_id = 0; $page_count = 0; $page_workflows = array(); while ($workflow_model->fetch()) { $unsubmitted[] = $workflow_model->{$workflow_model_pk}; $page_content_model =& $workflow_model->getLink('page_content_id', 'page_content'); if (!$page_content_model) { continue; } $page_model =& $page_content_model->getLink('page_id', 'page'); $asset_controller =& NController::factory($workflow_model->asset); $asset_model =& $asset_controller->getDefaultModel(); $asset_model->get($workflow_model->asset_id); $this->convertDateTimesToClient($asset_model); $action = $workflow->actionToString($workflow_model->action); // set the page title for the following pages $this->set('page_title', ''); if ($workflow_model->page_id == $page_id) { $page_count++; } else { $this->set('page_title', $page_model->title); $workflow_html .= $this->workflowPageSubmit($page_workflows); $page_id = $workflow_model->page_id; $page_count = 0; $page_workflows = array(); } $page_workflows[] = $workflow_model->{$workflow_model_pk}; $user =& $workflow_model->getLink('cms_modified_by_user', 'cms_auth'); $this->convertDateTimesToClient($workflow_model); $this->set(array('process' => 'submit', 'list_only' => false, 'approved' => $workflow_model->approved, 'action' => $action, 'workflow' => $workflow_model->toArray(), 'page' => $page_model->toArray(), 'asset' => $asset_controller, 'row' => $asset_model->toArray(), 'user' => $user ? $user->toArray() : false)); $workflow_html .= $this->render(array('action' => 'workflow_record', 'return' => true)); } $workflow_html .= $this->workflowPageSubmit($page_workflows); } // find in process workflows, resetting the model object first $workflow_model->reset(); $workflow_model->workflow_group_id = $workflow_group->{$workflow_group->primaryKey()}; $workflow_model->completed = 0; $conditions = ''; foreach ($unsubmitted as $id) { $conditions .= ($conditions ? ' AND ' : '') . "{$workflow_model_pk}!={$id}"; } $this->set('workflow_section', 'Workflows in Process'); $workflow_html .= $this->render(array('action' => 'workflow_section', 'return' => true)); $workflow_html_content = ''; if ($workflow_model->find(array('conditions' => $conditions, 'order_by' => 'page_id, asset, asset_id, id'))) { $workflow_models = array(); while ($workflow_model->fetch()) { $workflow_models[] = clone $workflow_model; } $i = 0; $current_asset = ''; foreach ($workflow_models as $w_model) { if ($w_model->submitted == 0) { continue; } if ($current_asset != $w_model->asset . $w_model->asset_id) { $current_asset = $w_model->asset . $w_model->asset_id; if (!($page_content_model =& $w_model->getLink('page_content_id', 'page_content'))) { continue; } if (!($page_model =& $page_content_model->getLink('page_id', 'page'))) { continue; } $user_def = $workflow->getWorkflowUser($w_model->workflow_group_id); if ($user_def) { $user_role = $user_def->role; $user_id = $user_def->user_id; } $user_rights = $workflow->getWorkflowUserRights($page_model); $i = 0; } $asset_controller =& NController::factory($w_model->asset); $asset_model =& $asset_controller->getDefaultModel(); $asset_model->get($w_model->asset_id); $this->convertDateTimesToClient($asset_model); $action = $workflow->actionToString($w_model->action); $all_workflow_users = $workflow->getWorkflowUsers($workflow_model->workflow_group_id); if (count($all_workflow_users) < 2) { $i++; } if ($i == 0) { if ($user_rights == WORKFLOW_RIGHT_EDIT) { $process = 'In Process - ' . ($w_model->approved ? 'Approved' : 'Unapproved'); } else { if ($user_rights & WORKFLOW_RIGHT_EDIT) { // this is someone with editing rights and more. Could be the same user that submitted it. $process = $w_model->approved ? 'In Process - Approved' : 'editapprove'; } else { // This is someone up the line. Let them know something's coming, but they don't need to know what yet. if ($w_model->approved) { $process = 'Approved'; } else { $process = 'A workflow has been started. You will be notified if/when you need to take action.'; } } } } else { if ($i == 1) { if ($user_rights == WORKFLOW_RIGHT_EDIT) { $process = 'In Process - ' . ($w_model->approved ? 'Approved' : 'Unapproved'); } else { if ($user_rights & WORKFLOW_RIGHT_APPROVE && $user_rights & WORKFLOW_RIGHT_PUBLISH) { // this is someone with Approval rights. Could be the same user that submitted it $process = 'approve'; } else { $process = 'In Process - ' . ($w_model->approved ? 'Approved' : 'Unapproved'); } } } } $user =& $w_model->getLink('cms_modified_by_user', 'cms_auth'); $this->convertDateTimesToClient($w_model); $this->set(array('process' => $process, 'list_only' => false, 'approved' => $w_model->approved, 'action' => $action, 'workflow' => $w_model->toArray(), 'page' => $page_model->toArray(), 'asset' => $asset_controller, 'row' => $asset_model->toArray(), 'user' => $user ? $user->toArray() : false)); $workflow_html_content .= $this->render(array('action' => 'workflow_record', 'return' => true)); $i++; } } $workflow_html .= $workflow_html_content ? $workflow_html_content : $this->render(array('action' => 'workflow_norecords', 'return' => true)); // find completed workflows, resetting the model object first $workflow_model->reset(); $workflow_model->workflow_group_id = $workflow_group->{$workflow_group->primaryKey()}; $workflow_model->completed = 1; $workflow_model->parent_workflow = 0; // bad timg - shouldn't do this here $workflow_html .= '<div style="background:#EEE;border:1px solid #AAA;padding:4px;">' . "\n"; $this->set('workflow_section', 'Completed Workflows'); $workflow_html .= $this->render(array('action' => 'workflow_section', 'return' => true)); if ($workflow_model->find(array('conditions' => $conditions, 'order_by' => 'cms_created DESC', 'limit' => 5))) { $workflow_models = array(); while ($workflow_model->fetch()) { $page_model =& NModel::factory('page'); $page_model->{$page_model->primaryKey()} = $workflow_model->page_id; // if the page is not deleted, this works if (!$page_model->find(null, true)) { // otherwise, specify a deleted page and try again $page_model->reset(); $page_model->{$page_model->primaryKey()} = $workflow_model->page_id; $page_model->cms_deleted = 1; $page_model->find(null, true); } $page_values = $page_model ? $page_model->toArray() : false; $asset_controller =& NController::factory($workflow_model->asset); $asset_model =& $asset_controller->getDefaultModel(); if (!$asset_model->get($workflow_model->asset_id)) { $asset_model->reset(); $asset_model->cms_deleted = 1; $asset_model->get($workflow_model->asset_id); } $this->convertDateTimesToClient($asset_model); $action = $workflow->actionToString($workflow_model->action); $user =& $workflow_model->getLink('cms_modified_by_user', 'cms_auth'); $this->convertDateTimesToClient($workflow_model); $values = array('process' => null, 'list_only' => true, 'approved' => $workflow_model->approved, 'action' => $action, 'workflow' => $workflow_model->toArray(), 'asset' => $asset_controller, 'row' => $asset_model->toArray(), 'page' => $page_values, 'user' => $user ? $user->toArray() : false); $this->set($values); $workflow_html .= $this->render(array('action' => 'workflow_record', 'return' => true)); } } $workflow_html .= '</div>' . "\n"; } } else { $workflow_html .= $this->render(array('action' => 'no_workflows', 'return' => true)); } $this->set('workflow', $workflow_html); } $this->set('SIDEBAR_CONTENT', $sidebar_content); $this->setAppend('SIDEBAR_CONTENT', $this->render(array('action' => 'nterchange_training', 'return' => true))); $this->setAppend('SIDEBAR_CONTENT', $this->render(array('action' => 'dashboard_client_sidebar_content', 'return' => true))); $this->render(array('layout' => 'default')); }
/** * auditTrail - Create an RSS feed of audit trail records. * Shows $this->records many records. * * @return void **/ function auditTrail() { if (defined('RSS_AUDIT_TRAIL') && RSS_AUDIT_TRAIL) { $this->auto_render = false; $count = 0; $token = $this->getToken(); // It's got to be 32 characters - this keeps people from trying token= if ($length = strlen($token) < 32) { die; } if ($allowed = $this->checkToken($token)) { // Grab the last 50 results $audit_trail = NModel::factory('cms_audit_trail'); $options['order_by'] = 'cms_created DESC'; if ($audit_trail->find($options)) { while ($audit_trail->fetch()) { $audit_trail_controller = NController::factory('audit_trail'); $record = $audit_trail_controller->humanizeAuditTrailRecord($audit_trail); //varDump($record); $records[] = $record; $count++; if ($count >= $this->records) { break; } } } $this->set('records', $records); $this->render(array('action' => 'audit_trail')); } else { print "Unauthorized access"; } } }
function processForm($values) { $this->controller->preProcessForm($values); $model =& $this->model; $pk = $model->primaryKey(); if (!$pk) { // TODO: raise error - can't store data if there's no primary key return false; } $table = $model->table(); $fields = $model->fields(); $action = 'update'; if (!isset($model->{$pk}) || !strlen($model->{$pk})) { $action = 'insert'; } // setup for file uploads $cms_files = array(); $files = array(); if (isset($_FILES) && is_array($_FILES)) { $form =& $this->form; foreach ($_FILES as $field => $value) { $el =& $form->getElement($field); if ($el->getType() == 'file' || $el->getType() == 'cms_file') { $values[$field] = null; if ($el->getType() == 'cms_file') { $cms_files[$field] =& $el; } if (isset($_FILES[$field]['tmp_name']) && is_uploaded_file($_FILES[$field]['tmp_name'])) { $files[$field] = array('type' => $el->getType(), 'upload_dir' => isset($el->_options['upload_dir']) ? $el->_options['upload_dir'] : UPLOAD_DIR, 'value' => $value); } else { $values[$field] = isset($this->_do->{$field}) ? $this->_do->{$field} : ''; } } } } foreach ($cms_files as $field => $el) { if (isset($values[$field . '__remove']) && $values[$field . '__remove']) { $values[$field] = ''; if (isset($files[$field])) { unset($files[$field]); // so it doesn't get processed and uploaded after the fact } } else { if (isset($values[$field . '__current']) && $values[$field . '__current']) { $values[$field] = $values[$field . '__current']; } } } // pull in any boolean fields that weren't passed and should therefore be 0 foreach ($table as $field => $def) { if ($def & N_DAO_BOOL && !preg_match('/^cms_/', $field)) { // if the field is being ignored, then leave the value as what it is if (in_array($field, $model->form_ignore_fields)) { continue; } $values[$field] = isset($values[$field]) ? 1 : 0; } } // deal with general values foreach ($values as $field => $val) { if (!in_array($field, $fields)) { continue; } $def = $table[$field]; switch (true) { case ($def & N_DAO_DATE || $def & N_DAO_TIME) && is_array($val): $val = NDate::arrayToDate($val); if (!($def & N_DAO_NOTNULL)) { if ($def & N_DAO_DATE || $def & N_DAO_TIME) { if (!NDate::validDateTime($val)) { $val = 'null'; } } } break; } $model->{$field} = $val; } // set the autoheadline if it exists and wasn't set manually if (in_array('cms_headline', $fields) && !$values['cms_headline'] && $model->getHeadline()) { $model->cms_headline = $model->makeHeadline('-'); } if ($action == 'update') { $this->processFiles($values, $files); foreach ($files as $field => $val) { if (!in_array($field, $fields)) { continue; } $model->{$field} = $values[$field]; } $page_content_id = $this->controller->getParam('page_content_id') ? $this->controller->getParam('page_content_id') : false; if ($page_content_id) { $page_content =& NController::singleton('page_content'); $page_content_model =& $page_content->getDefaultModel(); $page_content_model->get($page_content_id); } // set up timed contnt values if they are there if (isset($values['timed_start'])) { $values['timed_start'] = NDate::arrayToDate($values['timed_start']); if (!NDate::validDateTime($values['timed_start'])) { $values['timed_start'] = 'null'; } } if (isset($values['timed_end'])) { $values['timed_end'] = NDate::arrayToDate($values['timed_end']); if (!NDate::validDateTime($values['timed_end'])) { $values['timed_end'] = 'null'; } } // check for workflow if (SITE_WORKFLOW && isset($values['__submit_workflow__'])) { $page_content =& NController::factory('page_content'); if (!$page_content_id) { // then find the page we're attached to $page_content_model =& $page_content->getDefaultModel(); $page_content_model->content_asset = $this->controller->name; $page_content_model->content_asset_id = $model->{$pk}; if ($page_content_model->find(null, true)) { $page_content_id = $page_content_model->{$page_content_model->primaryKey()}; } } if ($page_content_id) { $page_model = $page_content_model->getLink('page_id', 'page'); $page_id = $page_model->{$page_model->primaryKey()}; // remove the draft and update the content // delete the draft record $this->controller->deleteDraft(); // Pull a fresh copy of the asset model and set the draft to 0 // so we don't update with the new content yet $asset_model =& NModel::factory($this->controller->name); $asset_model->get($model->{$pk}); $asset_model->cms_draft = 0; $asset_model->update(); } unset($page_content); // save the workflow $workflow =& NController::factory('workflow'); $workflow_group_model = $workflow->getWorkflowGroup($page_model); // set values for saveWorkflow() $workflow_values = array(); $workflow_values['page_content_id'] = $page_content_model->{$page_content_model->primaryKey()}; $workflow_values['workflow_group_id'] = $workflow_group_model->{$workflow_group_model->primaryKey()}; // add timed content $workflow_values['timed_start'] = $values['timed_start']; $workflow_values['timed_end'] = $values['timed_end']; // unset the timed content values so they don't get pushed into page_content unset($values['timed_start'], $values['timed_end']); $ret = $workflow->saveWorkflow($workflow_values, WORKFLOW_ACTION_EDIT, $this->controller); } else { if ($page_content_id) { $page_content_model->timed_start = $values['timed_start']; $page_content_model->timed_end = $values['timed_end']; $page_content_model->col_xs = $values['col_xs']; $page_content_model->col_sm = $values['col_sm']; $page_content_model->col_md = $values['col_md']; $page_content_model->col_lg = $values['col_lg']; $page_content_model->row_xs = $values['row_xs']; $page_content_model->row_sm = $values['row_sm']; $page_content_model->row_md = $values['row_md']; $page_content_model->row_lg = $values['row_lg']; $page_content_model->offset_col_xs = $values['offset_col_xs']; $page_content_model->offset_col_sm = $values['offset_col_sm']; $page_content_model->offset_col_md = $values['offset_col_md']; $page_content_model->offset_col_lg = $values['offset_col_lg']; $page_content_model->offset_row_xs = $values['offset_row_xs']; $page_content_model->offset_row_sm = $values['offset_row_sm']; $page_content_model->offset_row_md = $values['offset_row_md']; $page_content_model->offset_row_lg = $values['offset_row_lg']; $page_content_model->pull_xs = $values['pull_xs']; $page_content_model->pull_sm = $values['pull_sm']; $page_content_model->pull_md = $values['pull_md']; $page_content_model->pull_lg = $values['pull_lg']; $page_content_model->gutter_xs = $values['gutter_xs']; $page_content_model->gutter_sm = $values['gutter_sm']; $page_content_model->gutter_md = $values['gutter_md']; $page_content_model->gutter_lg = $values['gutter_lg']; $page_content_model->update(); } } // check for drafts if (SITE_DRAFTS) { if (isset($table['cms_draft']) && isset($values['__submit_draft__'])) { $ret = $this->controller->saveDraft(); // update the headline immediately if it exists if (isset($table['cms_headline'])) { $tmp_model =& NModel::factory($this->controller->name); if ($tmp_model && $tmp_model->get($values[$pk])) { $tmp_model->cms_headline = $values['cms_headline']; $tmp_model->update(); } unset($tmp_model); } } } if (isset($values['__submit__'])) { if ($this->controller->versioning == true) { if (!isset($values['__skip_versioning__'])) { $this->controller->debug('Inserting new version for ' . $model->tableName() . ': ' . $model->{$pk}, 'VERSION'); $version_id = $this->controller->insertVersion(); } } // if it's being saved normally (no draft), make sure it's not marked as a draft $model->cms_draft = 0; $ret = $model->update(); if (defined('SITE_AUDIT_TRAIL') && SITE_AUDIT_TRAIL && isset($this->controller->_auth)) { // audit trail $audit_trail =& NController::factory('audit_trail'); $audit_trail_values = array(); $audit_trail_values['asset'] = $this->controller->name; $audit_trail_values['asset_id'] = $model->{$pk}; $audit_trail_values['action_taken'] = AUDIT_ACTION_UPDATE; if (isset($page_content_id)) { $audit_trail_values['page_content_id'] = $page_content_id; } if (isset($page_id)) { $audit_trail_values['page_id'] = $page_id; } $audit_trail->insert($audit_trail_values); unset($audit_trail); } if (SITE_DRAFTS) { // delete any draft records $this->controller->deleteDraft(); } // remove all linked page caches $page =& NController::factory('page'); $page_content_model =& NModel::factory('page_content'); $page_content_model->content_asset = $this->controller->name; $page_content_model->content_asset_id = $values[$pk]; if ($page_content_model->find()) { while ($page_content_model->fetch()) { $page->deletePageCache($page_content_model->page_id); } } unset($page); unset($page_content_model); } } else { $draft = false; if (SITE_DRAFTS && isset($table['cms_draft']) && isset($values['__submit_draft__'])) { $model->cms_draft = 1; } $id = $model->insert(); $this->processFiles($values, $files); foreach ($files as $field => $val) { if (!in_array($field, $fields)) { continue; } $model->{$field} = $values[$field]; } if (SITE_DRAFTS && isset($table['cms_draft']) && isset($values['__submit_draft__'])) { // set draft to true after the draft is saved $draft = $this->controller->saveDraft(); } $model->update(); if (defined('SITE_AUDIT_TRAIL') && SITE_AUDIT_TRAIL && isset($this->controller->_auth)) { // audit trail $audit_trail =& NController::factory('audit_trail'); $audit_trail_values = array(); $audit_trail_values['asset'] = $this->controller->name; $audit_trail_values['asset_id'] = $model->{$pk}; $audit_trail_values['action_taken'] = AUDIT_ACTION_INSERT; if (isset($page_content_id)) { $audit_trail_values['page_content_id'] = $page_content_id; } if (isset($page_id)) { $audit_trail_values['page_id'] = $page_id; } $audit_trail->insert($audit_trail_values); unset($audit_trail); } $ret = $id; } if ($ret) { $this->controller->postProcessForm($values); } if (isset($values['_referer'])) { header('Location:' . urldecode($values['_referer'])); exit; } return $ret; }
function removeContent($parameter, $redirect = true, $timed_remove = false) { $model =& $this->getDefaultModel(); $referer = isset($this->params['_referer']) && $this->params['_referer'] ? $this->params['_referer'] : false; if ($model->get($parameter)) { // check for workflow // if it's a timed remove, the timed portion went through workflow, so it's okay if (SITE_WORKFLOW && $timed_remove == false) { // get the users rights and bit compare them below $workflow =& NController::factory('workflow'); $page_model =& $model->getLink('page_id', 'page'); $user_rights = $workflow->getWorkflowUserRights($page_model); if ($workflow_group_model =& $workflow->getWorkflowGroup($page_model)) { if (!($user_rights & WORKFLOW_RIGHT_EDIT)) { // they don't belong here - go to the dashboard header('Location:/' . APP_DIR . '/dashboard'); exit; } $asset_controller =& NController::factory($model->content_asset); $asset_controller->_auth = new NAuth(); $asset_model =& $asset_controller->getDefaultModel(); $asset_model->get($model->content_asset_id); // workflow values for saveWorkflow $workflow_values = array(); $workflow_values['page_content_id'] = $model->{$model->primaryKey()}; $workflow_values['workflow_group_id'] = $workflow_group_model->{$workflow_group_model->primaryKey()}; // save the workflow $workflow->saveWorkflow($workflow_values, WORKFLOW_ACTION_REMOVE, $asset_controller); if ($redirect) { include_once 'view/helpers/url_helper.php'; $referer = isset($this->params['referer']) ? urldecode($this->params['referer']) : urlHelper::urlFor($this, array('controller' => 'page', 'action' => 'surftoedit', 'id' => $page_model->{$page_model->primaryKey()})); header('Location:' . $referer); exit; } } unset($workflow); } include_once 'view/helpers/url_helper.php'; $page_id = $model->page_id; if (!$referer) { $referer = urlHelper::urlFor($this, array('controller' => 'page', 'action' => 'surftoedit', 'id' => $page_id)); } // delete the page cache $page =& NController::singleton('page'); $page->deletePageCache($model->page_id); unset($page); $audit_trail_array = array('asset' => $model->content_asset, 'asset_id' => $model->content_asset_id, 'action_taken' => AUDIT_ACTION_CONTENT_REMOVE, 'page_content_id' => $model->{$model->primaryKey()}, 'page_id' => $model->page_id); if (defined('SITE_AUDIT_TRAIL') && SITE_AUDIT_TRAIL) { // audit trail just before the delete or we lose the info if ($timed_remove == false) { $audit_trail =& NController::factory('audit_trail'); $audit_trail->insert($audit_trail_array); // Bit of an ugly hack, but I didn't want to mess with the controller. // The model doesn't require authentication, so we can force it through when // we're removing timed_content auto-magically. } elseif ($timed_remove == true) { $audit_trail =& NModel::factory('cms_audit_trail'); $audit_trail->insert_audit_trail($audit_trail_array); } unset($audit_trail); } unset($audit_trail_array); // delete the page_content record $deleted = $model->delete(); // if delete was successful and there is an unsubmitted workflow, then cascade delete the workflow if ($timed_remove == false && $deleted && SITE_WORKFLOW && ($workflow_model =& $this->loadModel('workflow'))) { $workflow_model->page_id = $page_id; $workflow_model->asset = $model->content_asset; $workflow_model->asset_id = $model->content_asset_id; $workflow_model->submitted = 0; $workflow_model->parent_workflow = 0; $workflow_model->cms_modified_by_user = $this->_auth->currentUserID(); if ($workflow_model->find()) { while ($workflow_model->fetch()) { $workflow_model->delete(); } } unset($workflow_model); } unset($model); } if ($redirect) { header('Location:' . $referer); exit; } }
function function_dashboard_client_content() { $dashboard = NController::factory('dashboard'); $dashboard->dashboardClientContent(); }