46 assert(
'is_string($modelClassName) && $modelClassName != ""');
47 $mashableInboxRulesType = $modelClassName::getMashableInboxRulesType();
48 assert(
'$mashableInboxRulesType !== null');
49 $mashableInboxRulesClassName = $mashableInboxRulesType .
'MashableInboxRules';
50 $mashableInboxRules =
new $mashableInboxRulesClassName();
51 return $mashableInboxRules;
63 assert(
'is_string($interfaceClassName)');
64 $interfaceModelClassNames = array();
66 foreach ($modules as $module)
68 $modelClassNames = $module::getModelClassNames();
69 foreach ($modelClassNames as $modelClassName)
71 $classToEvaluate =
new ReflectionClass($modelClassName);
72 if ($classToEvaluate->implementsInterface($interfaceClassName) &&
73 !$classToEvaluate->isAbstract())
77 if (!$includeHavingRelatedItems && !$modelClassName::hasRelatedItems())
81 $interfaceModelClassNames[$modelClassName] =
82 $modelClassName::getModelLabelByTypeAndLanguage(
'Plural');
87 return $interfaceModelClassNames;
96 $mashableInboxRules = static::createMashableInboxRulesByModel($modelClassName);
97 return (
int)$mashableInboxRules->getUnreadCountForCurrentUser();
100 public static function getUnreadCountMashableInboxForCurrentUser()
103 $mashableInboxModels = static::getModelDataForCurrentUserByInterfaceName(
'MashableInboxInterface');
104 foreach ($mashableInboxModels as $modelClassName => $modelLabel)
106 $unreadCount += static::getUnreadCountForCurrentUserByModelClassName($modelClassName);
111 public static function renderUnreadCountForDynamicLabelContent()
113 $unreadCount = self::getUnreadCountMashableInboxForCurrentUser();
125 $modelClassNamesAndSearchAttributeData = array();
126 foreach ($modelClassNames as $modelClassName)
128 $mashableActivityRules
129 = static::createMashableInboxRulesByModel($modelClassName);
130 $metadataForMashableInbox
131 = $mashableActivityRules->getMetadataForMashableInbox();
132 $searchAttributesData
133 = $mashableActivityRules->getSearchAttributeData($searchTerm);
134 $metadataForMashableInboxAndSearch
135 = static::mergeMetadata($metadataForMashableInbox, $searchAttributesData);
137 = $mashableActivityRules->getMetadataFilteredByFilteredBy($filteredBy);
138 $searchAttributesDataAndByFiltered
139 = static::mergeMetadata($metadataForMashableInboxAndSearch, $metadataFilteredBy);
140 $modelClassNamesAndSearchAttributeData[]
141 = array($modelClassName => $searchAttributesDataAndByFiltered);
143 return $modelClassNamesAndSearchAttributeData;
152 assert(
'is_array($modelClassNames)');
153 $modelClassNamesAndSortAttributes = array();
154 foreach ($modelClassNames as $modelClassName)
156 $mashableActivityRules = static::createMashableInboxRulesByModel($modelClassName);
157 $modelClassNamesAndSortAttributes[$modelClassName] =
158 $mashableActivityRules->getMachableInboxOrderByAttributeName();
160 return $modelClassNamesAndSortAttributes;
169 $mashableInboxRules = static::createMashableInboxRulesByModel(get_class($model));
170 $summaryContentTemplate = $mashableInboxRules->getSummaryContentTemplate();
172 $data[
'modelStringContent'] = static::renderModelStringContent($model, $mashableInboxRules);
173 $data[
'modelCreationTimeContent'] = static::renderModelCreationTimeContent($model, $mashableInboxRules);
174 $spanForTag = ZurmoHtml::tag(
177 "class" =>
"model-tag " . strtolower($mashableInboxRules->getModelClassName())
179 ZurmoHtml::tag(
'span', array(), $mashableInboxRules->getModelClassName()));
180 $content = ZurmoHtml::tag(
'div', array(
'class' =>
'inbox-item'), $spanForTag . self::resolveContentTemplate($summaryContentTemplate, $data));
184 protected static function renderModelStringContent(
RedBeanModel $model, $mashableInboxRules)
186 return $mashableInboxRules->getModelStringContent($model);
189 protected static function renderModelCreationTimeContent(
RedBeanModel $model, $mashableInboxRules)
191 return $mashableInboxRules->getModelCreationTimeContent($model);
201 assert(
'is_string($template)');
202 assert(
'is_array($data)');
203 $preparedContent = array();
204 foreach ($data as $templateVar => $content)
206 $preparedContent[
"{" . $templateVar .
"}"] = $content;
208 return strtr($template, $preparedContent);
217 public static function mergeMetadata($firstMetadata, $secondMetadata, $isAnd =
true)
219 if ($firstMetadata == null && $secondMetadata == null)
221 $metadata[
'clauses'] = array();
222 $metadata[
'structure'] = null;
225 if ($firstMetadata == null)
227 return $secondMetadata;
229 if ($secondMetadata == null)
231 return $firstMetadata;
233 $firstMetadataClausesCount = count($firstMetadata[
'clauses']);
234 foreach ($secondMetadata[
'clauses'] as $clauseNumber => $clause)
236 $firstMetadata[
'clauses'][$clauseNumber + $firstMetadataClausesCount] = $clause;
246 $callback =
function($match) use ($firstMetadataClausesCount)
248 return (($match[0] + $firstMetadataClausesCount));
250 $firstMetadata[
'structure'] =
'(' . $firstMetadata[
'structure'] .
')' . $operator .
251 '(' . preg_replace_callback(
"/(\\d+)/", $callback, $secondMetadata[
'structure']) .
')';
252 return $firstMetadata;
261 assert(
'strlen($modelClassName) > 0 || ($modelClassName === null)');
262 $key = self::resolveKeyByModuleAndModel(
'MashableInboxModule', $modelClassName);
263 StickyUtil::setDataByKeyAndData($key, $mashableInboxForm->getAttributes(
264 array(
'optionForModel',
'filteredBy',
'searchTerm')));
273 assert(
'strlen($modelClassName) > 0 || ($modelClassName === null)');
274 $key = self::resolveKeyByModuleAndModel(
'MashableInboxModule', $modelClassName);
275 $data = StickyUtil::getDataByKey($key);
277 $mashableInboxForm->attributes = $data;
278 return $mashableInboxForm;
288 assert(
'strlen($moduleClassName) > 0');
289 if ($modelClassName == null)
291 $modelClassName =
'default';
293 return $moduleClassName .
'_' . $modelClassName;
static getSortAttributesByMashableInboxModelClassNames($modelClassNames)
static wrapLabel($label, $class= 'z-label')
static resolveKeyByModuleAndModel($moduleClassName, $modelClassName)
static getSearchAttributeMetadataForMashableInboxByModelClassName($modelClassNames, $filteredBy, $searchTerm= '')
static resolveContentTemplate($template, $data)
static mergeMetadata($firstMetadata, $secondMetadata, $isAnd=true)
static getModuleObjects()
static renderSummaryContent(RedBeanModel $model)
static getModelDataForCurrentUserByInterfaceName($interfaceClassName, $includeHavingRelatedItems=true)
static canUserAccessModule($moduleClassName, $user)
static createMashableInboxRulesByModel($modelClassName)
static saveSelectedOptionsAsStickyData(MashableInboxForm $mashableInboxForm, $modelClassName)
static getUnreadCountForCurrentUserByModelClassName($modelClassName)
static restoreSelectedOptionsAsStickyData($modelClassName)