/**
  * 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;
 }