public function actionLeaderboard($type = null)
 {
     if ($type == null) {
         $type = GamePointUtil::LEADERBOARD_TYPE_WEEKLY;
     }
     if ($type == GamePointUtil::LEADERBOARD_TYPE_WEEKLY) {
         $activeActionElementType = 'LeaderboardWeeklyMenu';
     } elseif ($type == GamePointUtil::LEADERBOARD_TYPE_MONTHLY) {
         $activeActionElementType = 'LeaderboardMonthlyMenu';
     } elseif ($type == GamePointUtil::LEADERBOARD_TYPE_OVERALL) {
         $activeActionElementType = 'LeaderboardOverallMenu';
     } else {
         throw new NotSupportedException();
     }
     $metadata = array();
     //can put the typing information here easily. from the type.
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('listPageSize', get_class($this->getModule()));
     $gameLevel = new GameLevel(false);
     $dataProvider = RedBeanModelDataProviderUtil::makeDataProvider($metadata, get_class($gameLevel), 'LeaderboardDataProvider', 'notUsed', true, $pageSize);
     $dataProvider->setType($type);
     if (isset($_GET['ajax']) && $_GET['ajax'] == 'list-view') {
         $listView = new LeaderboardListView($this->getId(), $this->getModule()->getId(), get_class($gameLevel), $dataProvider, array());
         $view = new AccountsPageView($listView);
     } else {
         $mixedView = new LeaderboardActionBarAndListView($this->getId(), $this->getModule()->getId(), $gameLevel, 'GamificationModule', $dataProvider, $activeActionElementType);
         $view = new AccountsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $mixedView));
     }
     echo $view->render();
 }
 public function actionEdit($id, $redirectUrl = null)
 {
     $mission = Mission::getById(intval($id));
     MissionAccessUtil::resolveCanCurrentUserWriteOrDeleteMission($mission);
     ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($mission);
     $editView = new MissionEditView($this->getId(), $this->getModule()->getId(), $this->attemptToSaveModelFromPost($mission), strval($mission));
     $missionsMashableInboxUrl = Yii::app()->createUrl('mashableInbox/default/list', array('modelClassName' => 'Mission'));
     $breadCrumbLinks = array(Zurmo::t('MissionsModule', 'Missions') => $missionsMashableInboxUrl, StringUtil::getChoppedStringContent(strval($mission), 25) => array('default/details', 'id' => $id), Zurmo::t('Core', 'Edit'));
     $view = new MissionsPageView(ZurmoDefaultViewUtil::makeViewWithBreadcrumbsForCurrentUser($this, $editView, $breadCrumbLinks, 'MissionBreadCrumbView'));
     echo $view->render();
 }
 public function actionMassDelete()
 {
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('massDeleteProgressPageSize');
     $deptReference = new DepartmentReference(false);
     $activeAttributes = $this->resolveActiveAttributesFromMassDeletePost();
     $dataProvider = $this->getDataProviderByResolvingSelectAllFromGet(new DepartmentReferencesSearchForm($deptReference), $pageSize, Yii::app()->user->userModel->id, null, 'DepartmentReferencesSearchView');
     $selectedRecordCount = $this->getSelectedRecordCountByResolvingSelectAllFromGet($dataProvider);
     $deptReference = $this->processMassDelete($pageSize, $activeAttributes, $selectedRecordCount, 'DepartmentReferencesPageView', $deptReference, DepartmentReferencesModule::getModuleLabelByTypeAndLanguage('Plural'), $dataProvider);
     $massDeleteView = $this->makeMassDeleteView($deptReference, $activeAttributes, $selectedRecordCount, DepartmentReferencesModule::getModuleLabelByTypeAndLanguage('Plural'));
     $view = new DepartmentReferencesPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $massDeleteView));
     echo $view->render();
 }
 protected function preFilter($filterChain)
 {
     if (isset($_POST['ajax'])) {
         return true;
     }
     if (Yii::app()->emailHelper->outboundHost != null) {
         return true;
     }
     $messageView = new NoGlobalEmailConfigurationYetView();
     $pageViewClassName = $this->controller->getModule()->getPluralCamelCasedName() . 'PageView';
     $view = new $pageViewClassName(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this->controller, $messageView));
     echo $view->render();
     return false;
 }
 protected function preFilter($filterChain)
 {
     if (isset($_POST['ajax'])) {
         return true;
     }
     $isLdapExtensionLoaded = InstallUtil::isLdapInstalled();
     if ($isLdapExtensionLoaded) {
         return true;
     }
     $messageView = new NoLdapExtensionLoadedView();
     $pageViewClassName = $this->controller->getModule()->getPluralCamelCasedName() . 'PageView';
     $view = new $pageViewClassName(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this->controller, $messageView));
     echo $view->render();
     return false;
 }
 public function actionLeaderboard($type = null)
 {
     if ($type == null) {
         $type = GamePointUtil::LEADERBOARD_TYPE_WEEKLY;
     }
     if ($type == GamePointUtil::LEADERBOARD_TYPE_WEEKLY) {
         $activeActionElementType = 'LeaderboardWeeklyLink';
     } elseif ($type == GamePointUtil::LEADERBOARD_TYPE_MONTHLY) {
         $activeActionElementType = 'LeaderboardMonthlyLink';
     } elseif ($type == GamePointUtil::LEADERBOARD_TYPE_OVERALL) {
         $activeActionElementType = 'LeaderboardOverallLink';
     } else {
         throw new NotSupportedException();
     }
     $view = new TitleBarAndLeaderboardView($this->getId(), $this->getModule()->getId(), GamePointUtil::getUserLeaderboardData($type), $activeActionElementType);
     $view = new LeaderboardPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $view));
     echo $view->render();
 }
 /**
  * Check if user set their primary email address.
  * @param CFilterChain $filterChain
  * @return bool
  * @throws NotFoundException
  * @throws NotSupportedException
  */
 protected function preFilter($filterChain)
 {
     if ($this->userId != null) {
         $user = User::getById($this->userId);
     } else {
         throw new NotSupportedException();
     }
     if (isset($_POST['ajax'])) {
         return true;
     }
     if ($user->primaryEmail->emailAddress != null) {
         return true;
     }
     $messageView = new NoPrimaryEmailAddressForLoggedUserYetView($this->userId);
     $pageViewClassName = $this->controller->getModule()->getPluralCamelCasedName() . 'PageView';
     $view = new $pageViewClassName(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this->controller, $messageView));
     echo $view->render();
     return false;
 }
 public function actionList()
 {
     $pageSize = new resolveActiveForCurrentUserByType('listPageSize', get_class($this->getModule()));
     $savedReport = new SavedReport(false);
     $searchForm = new ReportsSearchForm($savedReport);
     $listAttributesSelector = new ListAttributesSelector('ReportsListView', get_class($this->getModule()));
     $searchForm->setListAttributesSelector($listAttributesSelector);
     $dataProvider = $this->resolveSearchDataProvider($searchForm, $pageSize, null, 'ReportsSearchView');
     $title = Zurmo::t('ReportsModule', 'Reports');
     $breadCrumbLinks = array($title);
     if (isset($_GET['ajax']) && $_GET['ajax'] == 'list-view') {
         $mixedView = $this->makeListView($searchForm, $dataProvider);
         $view = new ReportsPageView($mixedView);
     } else {
         $mixedView = $this->makeActionBarSearchAndListView($searchForm, $dataProvider, 'SecuredActionBarForReportsSearchAndListView');
         $view = new ReportsPageView(ZurmoDefaultViewUtil::makeViewWithBreadcrumbsForCurrentUser($this, $mixedView, $breadCrumbLinks, 'ReportBreadCrumbView'));
     }
     echo $view->render();
 }
 protected function preFilter($filterChain)
 {
     if (isset($_POST['ajax'])) {
         return true;
     }
     //Added some logic for watching there is last unmatched mail deleted
     $pageSize = null;
     $emailMessage = new EmailMessage(false);
     $searchAttributes = array();
     $metadataAdapter = new ArchivedEmailMatchingSearchDataProviderMetadataAdapter($emailMessage, Yii::app()->user->userModel->id, $searchAttributes);
     $dataProvider = RedBeanModelDataProviderUtil::makeDataProvider($metadataAdapter->getAdaptedMetadata(), 'EmailMessage', 'RedBeanModelDataProvider', 'createdDateTime', true, $pageSize);
     $data = $dataProvider->getData();
     if (count($data) > 0) {
         return true;
     }
     $messageView = new ZeroEmailMessagesRequiringArchivingView();
     $pageViewClassName = $this->controller->getModule()->getPluralCamelCasedName() . 'PageView';
     $view = new $pageViewClassName(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this->controller, $messageView));
     echo $view->render();
     return false;
 }
 protected function preFilter($filterChain)
 {
     $getData = GetUtil::getData();
     $modelClassName = ArrayUtil::getArrayValue($getData, 'modelClassName');
     if ($modelClassName == null) {
         return true;
     }
     if ($modelClassName::getCount() != 0) {
         return true;
     }
     $moduleClassName = $modelClassName::getModuleClassName();
     $mashableRules = MashableUtil::createMashableInboxRulesByModel($modelClassName);
     if ($mashableRules->getZeroModelViewClassName() == null) {
         return true;
     }
     $messageViewClassName = $mashableRules->getZeroModelViewClassName();
     $messageView = new $messageViewClassName($this->controller->getId(), $moduleClassName::getDirectoryName(), $modelClassName);
     $pageViewClassName = $this->controller->getModule()->getPluralCamelCasedName() . 'PageView';
     $view = new $pageViewClassName(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this->controller, $messageView));
     echo $view->render();
     return false;
 }
 /**
  * Action for displaying a mass delete form and also action when that form is first submitted.
  * When the form is submitted, in the event that the quantity of models to delete is greater
  * than the pageSize, then once the pageSize quantity has been reached, the user will be
  * redirected to the makeMassDeleteProgressView.
  * In the mass delete progress view, a javascript refresh will take place that will call a refresh
  * action, usually makeMassDeleteProgressView.
  * If there is no need for a progress view, then a flash message will be added and the user will
  * be redirected to the list view for the model.  A flash message will appear providing information
  * on the delete records.
  * @see Controller->makeMassDeleteProgressView
  * @see Controller->processMassDelete
  * @see
  */
 public function actionMassDelete()
 {
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('massDeleteProgressPageSize');
     $queueItem = new WorkflowMessageInQueue(false);
     $activeAttributes = $this->resolveActiveAttributesFromMassDeletePost();
     $dataProvider = $this->getDataProviderByResolvingSelectAllFromGet(new WorkflowMessageInQueuesSearchForm($queueItem), $pageSize, Yii::app()->user->userModel->id, null, 'WorkflowMessageInQueuesSearchView');
     $selectedRecordCount = static::getSelectedRecordCountByResolvingSelectAllFromGet($dataProvider);
     $queueItem = $this->processMassDelete($pageSize, $activeAttributes, $selectedRecordCount, 'WorkflowsPageView', $queueItem, Zurmo::t('WorkflowsModule', 'Message Queue'), $dataProvider, array($this->getId() . '/list'));
     $massDeleteView = $this->makeMassDeleteView($queueItem, $activeAttributes, $selectedRecordCount, Zurmo::t('WorkflowsModule', 'Message Queue'), 'MassDeleteView', false);
     $view = new WorkflowsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $massDeleteView));
     echo $view->render();
 }
 public function actionEdit($id, $isBeingCopied = false)
 {
     $savedReport = SavedReport::getById((int) $id);
     ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName);
     if (!$isBeingCopied) {
         ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedReport);
     }
     $breadCrumbLinks = array(strval($savedReport));
     $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport);
     $progressBarAndStepsView = ReportWizardViewFactory::makeStepsAndProgressBarViewFromReport($report);
     $reportWizardView = ReportWizardViewFactory::makeViewFromReport($report, (bool) $isBeingCopied);
     $view = new ReportsPageView(ZurmoDefaultViewUtil::makeTwoViewsWithBreadcrumbsForCurrentUser($this, $progressBarAndStepsView, $reportWizardView, $breadCrumbLinks, 'ReportBreadCrumbView'));
     echo $view->render();
 }
 public function actionPushLayout($id)
 {
     $modelClassName = $this->getModelName();
     $model = $modelClassName::getById(intval($id));
     if (isset($_POST[$modelClassName])) {
         $groupsAndUsers = PushDashboardUtil::resolveGroupsAndUsersFromPost($_POST[$modelClassName]);
         PushDashboardUtil::pushLayoutToUsers($model, $groupsAndUsers);
         Yii::app()->user->setFlash('notification', Zurmo::t('ZurmoModule', 'Layout pushed successfully'));
         $this->redirect(array($this->getId() . '/details', 'id' => $id));
     }
     $editView = new PushDashboardEditView($this->getId(), $this->getModule()->getId(), $model, Zurmo::t('ZurmoModule', 'Push Layout'));
     $view = new ZurmoPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $editView));
     echo $view->render();
 }
 /**
  * Example of a sequential process.
  * @see TestCompleteSequentialProcessView
  * @see TestSequentialProcess
  * @param string $step
  */
 function actionSequentialProcess($step)
 {
     if (isset($_GET['nextParams'])) {
         $nextParams = $_GET['nextParams'];
     } else {
         $nextParams = null;
     }
     Yii::import('application.core.tests.unit.models.*');
     Yii::import('application.core.tests.unit.components.*');
     Yii::import('application.core.tests.unit.views.*');
     assert('$step == null || is_string($step)');
     assert('$nextParams == null || is_array($nextParams)');
     //////Do setup logic here if needed
     $a = new A();
     $b = new B();
     $sequentialProcess = new TestSequentialProcess($a, $b);
     $sequentialProcess->run($step, $nextParams);
     $nextStep = $sequentialProcess->getNextStep();
     $route = $this->getModule()->getId() . '/' . $this->getId() . '/sequentialProcess';
     if ($sequentialProcess->isComplete()) {
         //////Do completion logic here if needed
         $sequenceView = new TestCompleteSequentialProcessView($a, $b);
     } else {
         $sequenceView = SequentialProcessViewFactory::makeBySequentialProcess($sequentialProcess, $route);
     }
     if ($step == null) {
         $gridView = new GridView(2, 1);
         $titleBarView = new TitleBarView('Zurmo', 'Test Sequential Process');
         $wrapperView = new SequentialProcessContainerView($sequenceView, $sequentialProcess->getAllStepsMessage());
         $gridView->setView($titleBarView, 0, 0);
         $gridView->setView($wrapperView, 1, 0);
         $view = new ZurmoConfigurationPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $gridView));
     } else {
         $view = new AjaxPageView($sequenceView);
     }
     echo $view->render();
 }
 protected function actionCreateByModel(Conversation $conversation, $redirectUrl)
 {
     $editView = new ConversationEditView($this->getId(), $this->getModule()->getId(), $this->attemptToSaveModelFromPost($conversation, $redirectUrl), Zurmo::t('ConversationsModule', 'Create Conversation'));
     $view = new ConversationsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $editView));
     echo $view->render();
 }
 /**
  * @param Activity $activity
  * @param null $redirectUrl
  */
 protected function processEdit(Activity $activity, $redirectUrl = null)
 {
     $pageViewClassName = $this->getPageViewClassName();
     $view = new $pageViewClassName(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $this->makeEditAndDetailsView($this->attemptToSaveModelFromPost($activity, $redirectUrl), 'Edit')));
     echo $view->render();
 }
 /**
  * Process the editing of product
  * @param Product $product
  * @param string $redirectUrl
  */
 protected function processEdit(Product $product, $redirectUrl = null)
 {
     $view = new ProductsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $this->makeEditAndDetailsView($this->attemptToSaveModelFromPost($product, $redirectUrl), 'Edit')));
     echo $view->render();
 }
 protected function resolveShouldRenderActionBarLinksForKanbanBoard()
 {
     if ($this->shouldRenderActionBarLinksForKanbanBoard()) {
         return ZurmoDefaultViewUtil::renderActionBarLinksForKanbanBoard($this->controllerId, $this->params['relationModuleId'], (int) $this->params['relationModel']->id, true);
     }
 }
 public function actionMatchingList()
 {
     $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', Yii::app()->user->userModel);
     $userCanAccessLeads = RightsUtil::canUserAccessModule('LeadsModule', Yii::app()->user->userModel);
     EmailMessagesControllerSecurityUtil::resolveCanUserProperlyMatchMessage($userCanAccessContacts, $userCanAccessLeads);
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('listPageSize', get_class($this->getModule()));
     $emailMessage = new EmailMessage(false);
     $searchAttributes = array();
     $metadataAdapter = new ArchivedEmailMatchingSearchDataProviderMetadataAdapter($emailMessage, Yii::app()->user->userModel->id, $searchAttributes);
     $dataProvider = RedBeanModelDataProviderUtil::makeDataProvider($metadataAdapter->getAdaptedMetadata(), 'EmailMessage', 'RedBeanModelDataProvider', 'createdDateTime', true, $pageSize);
     $titleBarAndListView = new TitleBarAndListView($this->getId(), $this->getModule()->getId(), $emailMessage, 'EmailMessage', $dataProvider, 'ArchivedEmailMatchingListView', Zurmo::t('EmailMessagesModule', 'Unmatched Archived Emails'), array(), false);
     $view = new EmailMessagesPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $titleBarAndListView));
     echo $view->render();
 }
 protected function processMassAction($pageSize, $selectedRecordCount, $pageViewClassName, $listModel, $title, $actionId, $dataProvider = null)
 {
     // TODO: @Shoaibi/@Jason: Low: Candidate for MassActionController
     assert('$dataProvider == null || $dataProvider instanceof CDataProvider');
     $postSelectedRecordCount = Yii::app()->request->getPost('selectedRecordCount');
     $modelClassName = get_class($listModel);
     $postModelClassName = Yii::app()->request->getPost($modelClassName);
     if (isset($postSelectedRecordCount) || isset($postModelClassName)) {
         $page = static::resolvePageValueForMassAction($modelClassName);
         $insufficientPermissionSkipSavingUtil = static::resolveInsufficientPermissionSkipSavingUtilByMassActionId($actionId);
         $start = $selectedRecordCount > $pageSize ? 1 : $selectedRecordCount;
         $skipCount = $selectedRecordCount > $pageSize ? null : 0;
         $massActionSuccessful = static::processModelsForMassAction($listModel, $modelClassName, $selectedRecordCount, $dataProvider, $page, $pageSize, $insufficientPermissionSkipSavingUtil, $postModelClassName, $actionId);
         if ($massActionSuccessful) {
             $progressView = $this->makeMassActionProgressView($listModel, 1, $selectedRecordCount, $start, $pageSize, $title, $skipCount, $actionId);
             if ($selectedRecordCount > $pageSize) {
                 $view = new $pageViewClassName(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $progressView));
                 echo $view->render();
             } else {
                 $refreshScript = $progressView->renderRefreshScript();
                 Yii::app()->user->setFlash('notification', $refreshScript['message']);
                 $this->redirect($this->resolveReturnUrlForMassAction());
             }
             Yii::app()->end(0, false);
         }
     }
     return $listModel;
 }
 /**
  * Combined details for the calendar.
  */
 public function actionCombinedDetails()
 {
     $dataProvider = CalendarUtil::getCalendarItemsDataProvider(Yii::app()->user->userModel);
     $interactiveCalendarView = new CombinedCalendarView($dataProvider, $this->getId(), $this->getModule()->getId());
     $view = new CalendarsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $interactiveCalendarView));
     echo $view->render();
 }
 /**
  * Resolves portlet configurable parameters
  * @param boolean $portletsAreMovable
  * @param boolean $portletsAreRemovable
  */
 protected function resolvePortletConfigurableParams(&$portletsAreMovable, &$portletsAreRemovable)
 {
     assert('is_bool($portletsAreMovable)');
     assert('is_bool($portletsAreRemovable)');
     $getData = GetUtil::getData();
     if (isset($getData['lockPortlets'])) {
         $lockPortlets = (bool) $getData['lockPortlets'];
         if ($lockPortlets) {
             ZurmoDefaultViewUtil::setLockKeyForDetailsAndRelationsView('lockPortletsForDetailsAndRelationsView', true);
         } else {
             ZurmoDefaultViewUtil::setLockKeyForDetailsAndRelationsView('lockPortletsForDetailsAndRelationsView', false);
         }
     }
     $isViewLocked = ZurmoDefaultViewUtil::getLockKeyForDetailsAndRelationsView('lockPortletsForDetailsAndRelationsView');
     //Default case for the first time
     if ($isViewLocked === null) {
         ZurmoDefaultViewUtil::setLockKeyForDetailsAndRelationsView('lockPortletsForDetailsAndRelationsView', true);
         $isViewLocked = true;
     }
     if ($isViewLocked == true) {
         $portletsAreRemovable = false;
         $portletsAreMovable = false;
     }
 }
 /**
  * Action for displaying a mass delete form and also action when that form is first submitted.
  * When the form is submitted, in the event that the quantity of models to delete is greater
  * than the pageSize, then once the pageSize quantity has been reached, the user will be
  * redirected to the makeMassDeleteProgressView.
  * In the mass delete progress view, a javascript refresh will take place that will call a refresh
  * action, usually makeMassDeleteProgressView.
  * If there is no need for a progress view, then a flash message will be added and the user will
  * be redirected to the list view for the model.  A flash message will appear providing information
  * on the delete records.
  * @see Controler->makeMassDeleteProgressView
  * @see Controller->processMassDelete
  * @see
  */
 public function actionMassDelete()
 {
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('massDeleteProgressPageSize');
     $contact = new Contact(false);
     $activeAttributes = $this->resolveActiveAttributesFromMassDeletePost();
     $dataProvider = $this->getDataProviderByResolvingSelectAllFromGet(new ContactsSearchForm($contact), $pageSize, Yii::app()->user->userModel->id, 'ContactsStateMetadataAdapter', 'ContactsSearchView');
     $selectedRecordCount = static::getSelectedRecordCountByResolvingSelectAllFromGet($dataProvider);
     $contact = $this->processMassDelete($pageSize, $activeAttributes, $selectedRecordCount, 'ContactsPageView', $contact, ContactsModule::getModuleLabelByTypeAndLanguage('Plural'), $dataProvider);
     $massDeleteView = $this->makeMassDeleteView($contact, $activeAttributes, $selectedRecordCount, ContactsModule::getModuleLabelByTypeAndLanguage('Plural'));
     $view = new ContactsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $massDeleteView));
     echo $view->render();
 }
 public function actionAssemblyStep3($id)
 {
     if (empty($_SERVER['HTTP_REFERER'])) {
         $this->redirect(array('/costbook/default/Assembly'));
     }
     $Costbook = static::getModelAndCatchNotFoundAndDisplayError("Costbook", intval($id));
     $editAndDetailsView = new CostbookAssemblyStep3View('Edit', $this->getId(), $this->getModule()->getId(), $this->attemptToSaveModelFromPost($Costbook));
     $view = new CostbookPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $editAndDetailsView));
     echo $view->render();
 }
 protected function processEdit(AccountContactAffiliation $accountContactAffiliation, $redirectUrl = null)
 {
     $view = new AccountContactAffiliationsPageView(ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $this->makeEditAndDetailsView($this->attemptToSaveModelFromPost($accountContactAffiliation, $redirectUrl), 'Edit')));
     echo $view->render();
 }
 public function actionConvertFinal($id)
 {
     assert('!empty($id)');
     $accountPostData = LeadsUtil::getFromSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY);
     if (empty($accountPostData)) {
         $urlParams = array('/leads/' . $this->getId() . '/convert', 'id' => $id);
         $this->redirect($urlParams);
     }
     $contact = Contact::getById(intval($id));
     if (!LeadsUtil::isStateALead($contact->state)) {
         $urlParams = array('/contacts/' . $this->getId() . '/details', 'id' => $contact->id);
         $this->redirect($urlParams);
     }
     $convertToAccountSetting = LeadsModule::getConvertToAccountSetting();
     $convertToOpportunitySetting = LeadsModule::getConvertToOpportunitySetting();
     $opportunity = new Opportunity();
     ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($contact);
     $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', Yii::app()->user->userModel);
     $userCanAccessAccounts = RightsUtil::canUserAccessModule('AccountsModule', Yii::app()->user->userModel);
     $userCanAccessOpportunities = RightsUtil::canUserAccessModule('OpportunitiesModule', Yii::app()->user->userModel);
     $userCanCreateOpportunity = RightsUtil::doesUserHaveAllowByRightName('OpportunitiesModule', OpportunitiesModule::RIGHT_CREATE_OPPORTUNITIES, Yii::app()->user->userModel);
     LeadsControllerSecurityUtil::resolveCanUserProperlyConvertLead($userCanAccessContacts, $userCanAccessAccounts, $convertToAccountSetting);
     LeadsControllerSecurityUtil::resolveCanUserProperlyConvertLeadFinalStep($userCanAccessContacts, $userCanAccessOpportunities, $convertToOpportunitySetting);
     if (isset($_POST['Opportunity'])) {
         $controllerUtil = static::getZurmoControllerUtil();
         $savedSuccessfully = false;
         $modelToStringValue = null;
         $postData = $_POST['Opportunity'];
         $opportunity = $controllerUtil->saveModelFromPost($postData, $opportunity, $savedSuccessfully, $modelToStringValue, false);
         if ($savedSuccessfully) {
             $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($contact);
             ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($opportunity, $explicitReadWriteModelPermissions);
             $account = LeadsUtil::createAccountForLeadConversionFromAccountPostData($accountPostData, $contact, $controllerUtil);
             $opportunity->account = $account;
             if (!$opportunity->save()) {
                 throw new NotSupportedException();
             }
             LeadsUtil::removeFromSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY);
             $this->actionSaveConvertedContact($contact, $account, $opportunity);
         }
     } elseif (isset($_POST['OpportunitySkip']) || $convertToOpportunitySetting == LeadsModule::CONVERT_NO_OPPORTUNITY || $convertToOpportunitySetting == LeadsModule::CONVERT_OPPORTUNITY_NOT_REQUIRED && !$userCanAccessOpportunities) {
         $controllerUtil = static::getZurmoControllerUtil();
         $account = LeadsUtil::createAccountForLeadConversionFromAccountPostData($accountPostData, $contact, $controllerUtil);
         LeadsUtil::removeFromSession(LeadsUtil::LEAD_CONVERSION_ACCOUNT_DATA_SESSION_KEY);
         $this->actionSaveConvertedContact($contact, $account, null);
     }
     $progressBarAndStepsView = new LeadConversionStepsAndProgressBarForWizardView(1);
     $convertView = new LeadConvertOpportunityView($this->getId(), $this->getModule()->getId(), $contact->id, strval($contact), $opportunity, $convertToOpportunitySetting, $userCanCreateOpportunity);
     $view = new LeadsPageView(ZurmoDefaultViewUtil::makeTwoStandardViewsForCurrentUser($this, $progressBarAndStepsView, $convertView));
     echo $view->render();
 }
 /**
  * In a detail view, after you hit select from a sub view a modal listview will appear. If you select a row
  * in that view, then this action is called. This action will relate the selected model to the detail view model.
  * Then it will redirect to a portlet action that refreshes the portlet. Some parameters are passed to that
  * redirect that ensure continuity on futher actions that rely on existing $_GET information.
  * @param string $modelId
  * @param string $portletId
  * @param string $uniqueLayoutId
  * @param string $relationAttributeName
  * @param string $relationModelId
  * @param string $relationModuleId
  * @param null|string $relationModelClassName
  */
 public function actionSelectFromRelatedListSave($modelId, $portletId, $uniqueLayoutId, $relationAttributeName, $relationModelId, $relationModuleId, $relationModelClassName = null)
 {
     if ($relationModelClassName == null) {
         $relationModelClassName = Yii::app()->getModule($relationModuleId)->getPrimaryModelName();
     }
     $relationModel = $relationModelClassName::getById((int) $relationModelId);
     $modelClassName = $this->getModule()->getPrimaryModelName();
     $model = $modelClassName::getById((int) $modelId);
     $redirectUrl = $this->createUrl('/' . $relationModuleId . '/default/details', array('id' => $relationModelId));
     if (!$model->{$relationAttributeName}->contains($relationModel)) {
         $model->{$relationAttributeName}->add($relationModel);
         if (!$model->save()) {
             $this->processSelectFromRelatedListSaveFails($model);
         }
     } else {
         $this->processSelectFromRelatedListSaveAlreadyConnected($model);
     }
     $isViewLocked = ZurmoDefaultViewUtil::getLockKeyForDetailsAndRelationsView('lockPortletsForDetailsAndRelationsView');
     $this->redirect(array('/' . $relationModuleId . '/defaultPortlet/modalRefresh', 'id' => $relationModelId, 'portletId' => $portletId, 'uniqueLayoutId' => $uniqueLayoutId, 'redirectUrl' => $redirectUrl, 'portletParams' => array('relationModuleId' => $relationModuleId, 'relationModelId' => $relationModelId), 'portletsAreRemovable' => !$isViewLocked));
 }
 public static function makeViewWithBreadcrumbsForCurrentUser(CController $controller, View $containedView, $breadcrumbLinks, $breadcrumbViewClassName, $cssClasses = array('AdministrativeArea'))
 {
     return parent::makeViewWithBreadcrumbsForCurrentUser($controller, $containedView, $breadcrumbLinks, $breadcrumbViewClassName, $cssClasses);
 }
 public function __construct(View $view)
 {
     parent::__construct(ZurmoDefaultViewUtil::makeErrorViewForCurrentUser(Yii::app()->controller, $view));
 }
 /**
  * Depending on the user interface, the user views should utilize the admin or regular view.  This especially
  * important for mobile, since for mobile there are no admin views available yet.
  * @param $containedView
  * @param $breadCrumbLinks
  * @param $breadcrumbViewClassName
  * @return GridView
  */
 protected function resolveZurmoDefaultOrAdminView(View $containedView, $breadCrumbLinks, $breadcrumbViewClassName)
 {
     assert('is_array($breadCrumbLinks)');
     assert('is_string($breadcrumbViewClassName)');
     if (Yii::app()->userInterface->isMobile()) {
         return ZurmoDefaultViewUtil::makeStandardViewForCurrentUser($this, $containedView);
     } else {
         return ZurmoDefaultAdminViewUtil::makeViewWithBreadcrumbsForCurrentUser($this, $containedView, $breadCrumbLinks, $breadcrumbViewClassName);
     }
 }