public static function resolveRowHtmlOptionsExpression($grid, $row, $data)
 {
     $mashableUtilRules = MashableUtil::createMashableInboxRulesByModel(get_class($data));
     $hasReadLatest = $mashableUtilRules->hasCurrentUserReadLatest($data->id);
     $unread = null;
     if (!$hasReadLatest) {
         $unread = 'unread';
     }
     $params = array("class" => $unread);
     return $params;
 }
 protected function getMenuItems()
 {
     if ($this->getModelClassName() === null) {
         return null;
     }
     $mashableUtilRules = MashableUtil::createMashableInboxRulesByModel($this->getModelClassName());
     if ($mashableUtilRules->shouldRenderCreateAction) {
         $label = Zurmo::t('Core', 'Create');
         $modelClassName = $this->getModelClassName();
         $moduleClassName = $modelClassName::getModuleClassName();
         $label .= ' ' . $moduleClassName::getModuleLabelByTypeAndLanguage('Singular');
         return array(array('label' => $label, 'url' => $this->getRouteForItem($this->getModelClassName())));
     }
 }
 public function render()
 {
     $mashableInboxModels = MashableUtil::getModelDataForCurrentUserByInterfaceName('MashableInboxInterface');
     $items = array();
     foreach ($mashableInboxModels as $modelClassName => $modelLabel) {
         $mashableUtilRules = MashableUtil::createMashableInboxRulesByModel($modelClassName);
         if ($mashableUtilRules->shouldRenderCreateAction) {
             $items[] = array('label' => $modelClassName, 'url' => $this->getRouteForItem($modelClassName));
         }
     }
     $menuItems = array('label' => $this->getDefaultLabel(), 'url' => null, 'items' => $items);
     if (!empty($items)) {
         $cClipWidget = new CClipWidget();
         $cClipWidget->beginClip("ActionMenu");
         $cClipWidget->widget('application.core.widgets.MbMenu', array('htmlOptions' => array('id' => 'MashableInboxCreateDropdown'), 'items' => array($menuItems)));
         $cClipWidget->endClip();
         return $cClipWidget->getController()->clips['ActionMenu'];
     }
     return null;
 }
 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;
 }
예제 #5
0
 protected static function resolveContentTemplate($template, $data)
 {
     return MashableUtil::resolveContentTemplate($template, $data);
 }
예제 #6
0
 public function testResolveKeyByModuleAndModel()
 {
     $key = MashableUtil::resolveKeyByModuleAndModel('testModule', 'testClassName');
     $this->assertEquals('testModule_testClassName', $key);
 }
예제 #7
0
 /**
  * Based on the current user, return model class names and thier display labels.  Only include models
  * that the user has a right to access its corresponding module, as well as only models that implement the
  * MashableActivityInterface.
  * @param $includeHavingRelatedItems - if the returning data should include models that are
  * mashable but are connected via activityItems.  An example is accounts, a mission is not conneted to an account
  * so if this setting is false, accounts would not be returned. Home/User are always returned.
  * @return array of model class names and display labels.
  */
 public static function getMashableModelDataForCurrentUser($includeHavingRelatedItems = true)
 {
     return MashableUtil::getModelDataForCurrentUserByInterfaceName('MashableActivityInterface', $includeHavingRelatedItems);
 }
 public function testModuleSecurityAccess()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $nobody = UserTestHelper::createBasicUser('nobody');
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('nobody');
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default');
     foreach ($this->modelsWithMashableInboxInterface as $modelClassName) {
         $this->setGetArray(array('modelClassName' => $modelClassName));
         $moduleClassName = $modelClassName::getModuleClassName();
         if (is_subclass_of($moduleClassName, 'SecurableModule')) {
             $this->runControllerShouldResultInAccessFailureAndGetContent('mashableInbox/default/list');
         } else {
             $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
         }
         $mashableRules = MashableUtil::createMashableInboxRulesByModel($modelClassName);
     }
 }
 private function renderMashableInboxModelsToolbar()
 {
     $activeClass = null;
     if ($this->modelClassName == null) {
         $activeClass = "active";
     }
     $unreadCount = MashableUtil::getUnreadCountMashableInboxForCurrentUser();
     $url = Yii::app()->createUrl($this->moduleId . '/' . $this->controllerId . '/list');
     $label = Zurmo::t('MashableInboxModule', 'Combined');
     $span = ZurmoHtml::tag('span', array("class" => "unread-count"), $unreadCount);
     $zLabel = ZurmoHtml::tag('span', array("class" => "z-label"), $label . $span);
     $content = ZurmoHtml::link($zLabel, $url, array('class' => 'icon-combined ' . $activeClass));
     $combinedInboxesModels = MashableUtil::getModelDataForCurrentUserByInterfaceName('MashableInboxInterface');
     foreach ($combinedInboxesModels as $modelClassName => $modelLabel) {
         $activeClass = null;
         if ($this->modelClassName == $modelClassName) {
             $activeClass = "active";
         }
         $unreadCount = MashableUtil::getUnreadCountForCurrentUserByModelClassName($modelClassName);
         $url = Yii::app()->createUrl($this->moduleId . '/' . $this->controllerId . '/list', array('modelClassName' => $modelClassName));
         $span = ZurmoHtml::tag('span', array("class" => "unread-count"), $unreadCount);
         $zLabel = ZurmoHtml::tag('span', array("class" => "z-label"), $modelLabel . $span);
         $content .= ZurmoHtml::link($zLabel, $url, array('class' => 'icon-' . strtolower($modelClassName) . ' ' . $activeClass));
     }
     return $content;
 }
예제 #10
0
 /**
  * @param Mission $mission
  * @param User $user
  * @return bool
  */
 public static function hasUserReadMissionLatest(Mission $mission, User $user)
 {
     $mashableUtilRules = MashableUtil::createMashableInboxRulesByModel('Mission');
     $hasReadLatest = $mashableUtilRules->hasUserReadLatest($mission, $user);
     return $hasReadLatest;
 }
 protected function makeANewUnreadMissionOwnedByCurrentUser()
 {
     $mission = new Mission();
     $mission->owner = $this->user;
     $mission->dueDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $mission->description = 'My test description';
     $mission->reward = 'My test reward';
     $mission->status = Mission::STATUS_AVAILABLE;
     $this->assertTrue($mission->save());
     $rules = MashableUtil::createMashableInboxRulesByModel('Mission');
     $rules->markUserAsHavingUnreadLatestModel($mission, $this->user);
     return $mission;
 }
 public function actionGetUpdatesForRefresh($unreadMashableInbox)
 {
     $newUnreadMashableInbox = MashableUtil::getUnreadCountMashableInboxForCurrentUser();
     if ($newUnreadMashableInbox > $unreadMashableInbox) {
         $data['unreadMashableInbox'] = $newUnreadMashableInbox;
         $data['imgUrl'] = Yii::app()->request->hostinfo . Yii::app()->theme->baseUrl . '/images/GICRMLOGO_60x60.png';
         $data['title'] = Zurmo::t('ZurmoModule', 'ZurmoCRM - Item update');
         $data['message'] = Zurmo::t('ZurmoModule', 'There is an item with unread changes.');
         echo CJSON::encode($data);
     } else {
         echo CJSON::encode(null);
     }
 }
예제 #13
0
 public function getListView($option, $filteredBy = MashableInboxForm::FILTERED_BY_ALL, $searchTerm = null, $starred = false)
 {
     $modelClassName = $this->getModelClassName();
     $orderBy = $this->getMachableInboxOrderByAttributeName();
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('listPageSize', get_class(Yii::app()->controller->module));
     $metadataByOptionAndFilter = MashableUtil::mergeMetadata($this->getMetadataFilteredByOption($option), $this->getMetadataFilteredByFilteredBy($filteredBy));
     $metadata = MashableUtil::mergeMetadata($metadataByOptionAndFilter, $this->getSearchAttributeData($searchTerm));
     $dataProviderClassName = 'RedBeanModelDataProvider';
     if ($starred) {
         $dataProviderClassName = 'StarredModelDataProvider';
     }
     $dataProvider = RedBeanModelDataProviderUtil::makeDataProvider($metadata, $modelClassName, $dataProviderClassName, $orderBy, true, $pageSize);
     $listViewClassName = $this->getListViewClassName();
     $listView = new $listViewClassName(Yii::app()->controller->id, Yii::app()->controller->module->id, $modelClassName, $dataProvider, array());
     return $listView;
 }
예제 #14
0
 /**
  * Gets the listView that should be rendered based on the mashableInboxForm params
  * @param MashableInboxForm $mashableInboxForm
  * @return \MashableInboxListView
  */
 private function getMashableInboxListView($mashableInboxForm)
 {
     $modelClassNames = array_keys(MashableUtil::getModelDataForCurrentUserByInterfaceName('MashableInboxInterface'));
     $modelClassNamesAndSearchAttributeMetadataForMashableInbox = MashableUtil::getSearchAttributeMetadataForMashableInboxByModelClassName($modelClassNames, $mashableInboxForm->filteredBy, $mashableInboxForm->searchTerm);
     $modelClassNamesAndSortAttributes = MashableUtil::getSortAttributesByMashableInboxModelClassNames($modelClassNames);
     $dataProvider = new RedBeanModelsDataProvider('MashableInbox', $modelClassNamesAndSortAttributes, true, $modelClassNamesAndSearchAttributeMetadataForMashableInbox, array('pagination' => array('pageSize' => $this->pageSize)));
     $listView = new MashableInboxListView($this->getId(), $this->getModule()->getId(), 'MashableInbox', $dataProvider, array(), null, array('paginationParams' => GetUtil::getData()));
     return $listView;
 }
 private function renderMashableInboxModelsToolbar()
 {
     $activeClass = null;
     if ($this->modelClassName == null) {
         $activeClass = "active";
     }
     $unreadCount = MashableUtil::getUnreadCountMashableInboxForCurrentUser();
     $label = Zurmo::t('MashableInboxModule', 'Combined');
     $params = array('label' => $label, 'modelClassName' => null, 'unread' => $unreadCount, 'htmlOptions' => array('class' => $activeClass), 'iconClass' => 'icon-combined');
     $element = new MashableInboxModelMenuActionElement($this->controllerId, $this->moduleId, null, $params);
     $content = $element->render();
     $combinedInboxesModels = MashableUtil::getModelDataForCurrentUserByInterfaceName('MashableInboxInterface');
     foreach ($combinedInboxesModels as $modelClassName => $modelLabel) {
         $activeClass = null;
         if ($this->modelClassName == $modelClassName) {
             $activeClass = "active";
         }
         $unreadCount = MashableUtil::getUnreadCountForCurrentUserByModelClassName($modelClassName);
         $params = array('label' => $modelLabel, 'modelClassName' => $modelClassName, 'htmlOptions' => array('class' => $activeClass), 'unread' => $unreadCount, 'iconClass' => 'icon-' . strtolower($modelClassName));
         $element = new MashableInboxModelMenuActionElement($this->controllerId, $this->moduleId, null, $params);
         $content .= $element->render();
     }
     return $content;
 }
 private function addModelMassOptions()
 {
     $mashableUtilRules = MashableUtil::createMashableInboxRulesByModel($this->getModelClassName());
     $this->massOptions = array_merge($this->massOptions, $mashableUtilRules->getMassOptions());
 }