/** * Update read subscription table for all users and models * @param MessageLogger $messageLogger * @param null | array $modelClassNames * @param array $arrayOfModelIdsToUpdate * permission subscription table just for account ids that exist in account temp build table * @return bool */ public static function updateAllReadSubscriptionTables(MessageLogger $messageLogger, $modelClassNames = null, $arrayOfModelIdsToUpdate = array()) { $loggedUser = Yii::app()->user->userModel; $users = User::getAll(); $updateStartTimestamp = time(); static::setReadPermissionUpdateStatus(static::STATUS_STARTED); $messageLogger->addDebugMessage(Zurmo::t('ZurmoModule', 'Starting read permission building for all users.')); foreach ($users as $user) { if ($user->isSystemUser) { $messageLogger->addDebugMessage(Zurmo::t('ZurmoModule', 'Skipping system user with userID: {id}', array('{id}' => $user->id))); continue; } $messageLogger->addDebugMessage(Zurmo::t('ZurmoModule', 'Starting read permission building for userID: {id}', array('{id}' => $user->id))); $startTime = microtime(true); Yii::app()->user->userModel = $user; if (!is_array($modelClassNames) || empty($modelClassNames)) { $modelClassNames = PathUtil::getAllReadSubscriptionModelClassNames(); } if (!empty($modelClassNames) && is_array($modelClassNames)) { foreach ($modelClassNames as $modelClassName) { if ($modelClassName != 'Account') { static::updateReadSubscriptionTableByModelClassNameAndUser($modelClassName, Yii::app()->user->userModel, $updateStartTimestamp, true, $messageLogger); } else { static::updateReadSubscriptionTableByModelClassNameAndUser($modelClassName, Yii::app()->user->userModel, $updateStartTimestamp, false, $messageLogger, $arrayOfModelIdsToUpdate); } } } $endTime = microtime(true); $executionTimeMs = $endTime - $startTime; $messageLogger->addDebugMessage(Zurmo::t('ZurmoModule', 'Ending read permission building for userID: {id}', array('{id}' => $user->id))); $messageLogger->addDebugMessage(Zurmo::t('ZurmoModule', 'Build time for userID: {id} - {miliSeconds}', array('{id}' => $user->id, '{miliSeconds}' => $executionTimeMs))); } Yii::app()->user->userModel = $loggedUser; static::setTimeReadPermissionUpdateTimestamp($updateStartTimestamp); static::setReadPermissionUpdateStatus(static::STATUS_COMPLETED); return true; }