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 '&nbsp;(' . $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">&nbsp;File not found&nbsp;</span>';
     }
     unset($template_check);
 }
Exemplo n.º 5
0
 /**
  * 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;
 }
Exemplo n.º 7
0
 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;
 }
Exemplo n.º 8
0
 /**
  * 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'));
 }
Exemplo n.º 9
0
 /**
  * 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']);
     }
 }
Exemplo n.º 10
0
 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 '';
 }
Exemplo n.º 11
0
 /**
  * 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);
     }
 }
Exemplo n.º 14
0
 /**
  * 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;
 }
Exemplo n.º 15
0
 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);
 }
Exemplo n.º 16
0
 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;
 }
Exemplo n.º 17
0
 /**
  * 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;
     }
 }
Exemplo n.º 18
0
 /**
  * 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);
 }
Exemplo n.º 19
0
 /**
  * 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'));
 }
Exemplo n.º 21
0
 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();
         }
     }
 }
Exemplo n.º 23
0
 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'));
 }
Exemplo n.º 24
0
 /**
  * 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";
         }
     }
 }
Exemplo n.º 25
0
 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;
     }
 }
Exemplo n.º 27
0
 function function_dashboard_client_content()
 {
     $dashboard = NController::factory('dashboard');
     $dashboard->dashboardClientContent();
 }