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; }
protected static function resolveContentTemplate($template, $data) { return MashableUtil::resolveContentTemplate($template, $data); }
public function testResolveKeyByModuleAndModel() { $key = MashableUtil::resolveKeyByModuleAndModel('testModule', 'testClassName'); $this->assertEquals('testModule_testClassName', $key); }
/** * 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; }
/** * @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); } }
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; }
/** * 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()); }