/**
  * @param User $userToSendTo
  * @param MessageLogger $messageLogger
  */
 public function run(User $userToSendTo, $messageLogger)
 {
     MonitorJob::makeJobStuckNotification(array('Process Outbound Email Job', 'Process Inbound Email Job'));
     $messageLogger->addInfoMessage('Sending a job is stuck message');
     JobsManagerUtil::makeMonitorStuckJobNotification();
     $messageLogger->addInfoMessage('Sending monitor job stuck message');
     //Clear out notifications for super user
     $searchAttributeData = array();
     $searchAttributeData['clauses'] = array(1 => array('attributeName' => 'owner', 'relatedAttributeName' => 'id', 'operatorType' => 'equals', 'value' => Yii::app()->user->userModel->id));
     $searchAttributeData['structure'] = '1';
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Notification');
     $where = RedBeanModelDataProvider::makeWhere('Notification', $searchAttributeData, $joinTablesAdapter);
     $models = Notification::getSubset($joinTablesAdapter, null, null, $where, null);
     foreach ($models as $model) {
         $model->delete();
     }
 }
 function json()
 {
     if (isset($this->return_data)) {
         return json_encode($this->return_data);
     } else {
         echo MessageLogger::asJSON();
     }
 }
 function _log($message, $field, $replaces)
 {
     if (is_array($replaces)) {
         foreach ($replaces as $key => $val) {
             $message = str_replace("%__{$key}__%", $val, $message);
         }
     }
     MessageLogger::log(str_replace("%__FIELD__%", $field, $message), "{$field}_issue");
 }
<a name="signup"></a>
<?php 
Debugger::log(MessageLogger::getMessages());
if (MessageLogger::getMessages()) {
    foreach (MessageLogger::getMessages() as $type => $messages) {
        foreach ($messages as $message) {
            ?>
      <div class="<?php 
            echo $type;
            ?>
"><?php 
            echo $message;
            ?>
</div>
      <?php 
        }
    }
}
 /**
  * Update models in read subscription table based on modelId and userId(userId is used implicitly in getSubsetIds)
  * @param string $modelClassName
  * @param User $user
  * @param bool $onlyOwnedModels
  * @param int $updateStartTimestamp
  * @param MessageLogger $messageLogger
  * @param array $arrayOfModelIdsToUpdate
  * permission subscription table just for account ids that exist in account temp build table
  */
 public static function updateReadSubscriptionTableByModelClassNameAndUser($modelClassName, User $user, $updateStartTimestamp, $onlyOwnedModels = false, MessageLogger $messageLogger, $arrayOfModelIdsToUpdate = array())
 {
     assert('$modelClassName === null || is_string($modelClassName) && $modelClassName != ""');
     assert('is_int($updateStartTimestamp)');
     $metadata = array();
     $startTime = microtime(true);
     $lastReadPermissionUpdateTimestamp = static::getLastReadPermissionUpdateTimestamp();
     $dateTime = DateTimeUtil::convertTimestampToDbFormatDateTime($lastReadPermissionUpdateTimestamp);
     $updateDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime($updateStartTimestamp);
     if ($modelClassName == 'Account' && !empty($arrayOfModelIdsToUpdate)) {
         $metadata['clauses'][1] = array('attributeName' => 'id', 'operatorType' => 'oneOf', 'value' => $arrayOfModelIdsToUpdate);
         $metadata['structure'] = "1";
     } else {
         $metadata['clauses'][1] = array('attributeName' => 'createdDateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => $updateDateTime);
         $metadata['structure'] = "1";
         if ($onlyOwnedModels) {
             $metadata['clauses'][2] = array('attributeName' => 'owner', 'operatorType' => 'equals', 'value' => $user->id);
             $metadata['structure'] .= " AND 2";
         }
     }
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter($modelClassName);
     $where = RedBeanModelDataProvider::makeWhere($modelClassName, $metadata, $joinTablesAdapter);
     $userModelIds = $modelClassName::getSubsetIds($joinTablesAdapter, null, null, $where);
     $endTime = microtime(true);
     $executionTimeMs = $endTime - $startTime;
     $messageLogger->addDebugMessage(Zurmo::t('ZurmoModule', 'SQL time {modelClassName}: {miliSeconds}', array('{modelClassName}' => $modelClassName, '{miliSeconds}' => $executionTimeMs)));
     // Get models from subscription table
     $tableName = static::getSubscriptionTableName($modelClassName);
     $sql = "SELECT modelid FROM {$tableName} WHERE userid = " . $user->id . " AND subscriptiontype = " . static::TYPE_ADD;
     if ($modelClassName == 'Account' && !empty($arrayOfModelIdsToUpdate)) {
         $accountIds = static::getAccountIdsArrayFromBuildTable();
         if (!empty($accountIds)) {
             $list = "'" . implode(", ", $accountIds) . "'";
             $sql .= " AND modelid in ({$list})";
         }
     }
     $permissionTableRows = ZurmoRedBean::getAll($sql);
     $permissionTableIds = array();
     if (is_array($permissionTableRows) && !empty($permissionTableRows)) {
         foreach ($permissionTableRows as $permissionTableRow) {
             $permissionTableIds[] = $permissionTableRow['modelid'];
         }
     }
     $modelIdsToAdd = array_diff($userModelIds, $permissionTableIds);
     $modelIdsToDelete = array_diff($permissionTableIds, $userModelIds);
     if (is_array($modelIdsToAdd) && !empty($modelIdsToAdd)) {
         foreach ($modelIdsToAdd as $modelId) {
             $sql = "DELETE FROM {$tableName} WHERE\n                                                    userid = '" . $user->id . "'\n                                                    AND modelid = '{$modelId}'\n                                                    AND subscriptiontype='" . self::TYPE_DELETE . "'";
             ZurmoRedBean::exec($sql);
             $sql = "SELECT * FROM {$tableName} WHERE\n                            userid = '" . $user->id . "'\n                            AND modelid = '{$modelId}'\n                            AND subscriptiontype='" . self::TYPE_ADD . "'";
             $results = ZurmoRedBean::getAll($sql);
             if (!is_array($results) || empty($results)) {
                 $sql = "INSERT INTO {$tableName} VALUES\n                                (null, '" . $user->id . "', '{$modelId}', '{$updateDateTime}', '" . self::TYPE_ADD . "')";
                 ZurmoRedBean::exec($sql);
             }
         }
     }
     if (is_array($modelIdsToDelete) && !empty($modelIdsToDelete)) {
         foreach ($modelIdsToDelete as $modelId) {
             $sql = "DELETE FROM {$tableName} WHERE\n                                                    userid = '" . $user->id . "'\n                                                    AND modelid = '{$modelId}'\n                                                    AND subscriptiontype='" . self::TYPE_ADD . "'";
             ZurmoRedBean::exec($sql);
             $sql = "SELECT * FROM {$tableName} WHERE\n                    userid = '" . $user->id . "'\n                    AND modelid = '{$modelId}'\n                    AND subscriptiontype='" . self::TYPE_DELETE . "'";
             $results = ZurmoRedBean::getAll($sql);
             if (!is_array($results) || empty($results)) {
                 $sql = "INSERT INTO {$tableName} VALUES\n                                                        (null, '" . $user->id . "', '{$modelId}', '{$updateDateTime}', '" . self::TYPE_DELETE . "')";
                 ZurmoRedBean::exec($sql);
             }
         }
     }
 }
Example #6
0
 public function actionSendDemoEmailNotifications()
 {
     if (!Group::isUserASuperAdministrator(Yii::app()->user->userModel)) {
         throw new NotSupportedException();
     }
     $template = "{message}<br/>";
     $messageStreamer = new MessageStreamer($template);
     $messageStreamer->setExtraRenderBytes(0);
     $messageLogger = new MessageLogger($messageStreamer);
     if (Yii::app()->user->userModel->primaryEmail->emailAddress == null) {
         $messageLogger->addErrorMessage('Cannot send test emails because the current user does not have an email address');
         Yii::app()->end(0, false);
     }
     $messageLogger->addInfoMessage('Using type:' . Yii::app()->emailHelper->outboundType);
     $messageLogger->addInfoMessage('Using host:' . Yii::app()->emailHelper->outboundHost);
     $messageLogger->addInfoMessage('Using port:' . Yii::app()->emailHelper->outboundPort);
     $messageLogger->addInfoMessage('Using username:'******'Using password: Yes');
     } else {
         $messageLogger->addInfoMessage('Using password: No');
     }
     $modules = Module::getModuleObjects();
     foreach ($modules as $module) {
         $notificationClassNames = $module::getAllClassNamesByPathFolder('data');
         foreach ($notificationClassNames as $notificationClassName) {
             if (!strpos($notificationClassName, 'DemoEmailNotifications') === false) {
                 $demoNotification = new $notificationClassName();
                 $demoNotification->run(Yii::app()->user->userModel, $messageLogger);
             }
         }
     }
     Yii::app()->emailHelper->sendQueued();
 }
 /**
  * Given a 'type' of job, run the job.  This is for non-monitor jobs only.
  * @param $type
  * @param MessageLogger $messageLogger
  * @param $isJobInProgress
  * @throws FailedToSaveModelException
  */
 public static function runNonMonitorJob($type, MessageLogger $messageLogger, &$isJobInProgress)
 {
     assert('is_string($type) && $type != "Monitor"');
     assert('is_bool($isJobInProgress)');
     try {
         JobInProcess::getByType($type);
         $messageLogger->addInfoMessage("Existing job detected");
         $isJobInProgress = true;
     } catch (NotFoundException $e) {
         $jobInProcess = new JobInProcess();
         $jobInProcess->type = $type;
         $jobInProcess->save();
         $startDateTime = $jobInProcess->createdDateTime;
         $jobClassName = $type . 'Job';
         $job = new $jobClassName();
         $job->setMessageLogger($messageLogger);
         $ranSuccessfully = $job->run();
         $errorMessage = $job->getErrorMessage();
         $jobInProcess->delete();
         $jobLog = new JobLog();
         $jobLog->type = $type;
         $jobLog->startDateTime = $startDateTime;
         $jobLog->endDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
         if ($ranSuccessfully) {
             $messageLogger->addInfoMessage("Job completed successfully");
             $jobLog->status = JobLog::STATUS_COMPLETE_WITHOUT_ERROR;
         } else {
             $messageLogger->addInfoMessage("Job completed with errors");
             $jobLog->status = JobLog::STATUS_COMPLETE_WITH_ERROR;
             $jobLog->message = $errorMessage;
         }
         $jobLog->isProcessed = false;
         if (!$jobLog->save()) {
             throw new FailedToSaveModelException();
         }
         $stuckJob = StuckJob::getByType($type);
         $stuckJob->quantity = 0;
         if (!$stuckJob->save()) {
             throw new FailedToSaveModelException();
         }
     }
 }
 /**
  * Delete sample model from application state persister and from database
  * @param string $modelClassName
  * @param inf $modelId
  * @param MessageLogger $messageLogger
  * @return boolean
  */
 protected static function deleteSampleModelFromStatePersisterAndDatabase($modelClassName, $modelId, $messageLogger)
 {
     $statePersister = Yii::app()->getStatePersister();
     $state = $statePersister->load();
     $result = true;
     if (isset($state[self::AUTO_BUILD_SAMPLE_MODELS_KEY])) {
         $sampleModels = $state[self::AUTO_BUILD_SAMPLE_MODELS_KEY];
         if (!empty($sampleModels)) {
             foreach ($sampleModels as $key => $sampleModel) {
                 if ($sampleModel['modelClassName'] == $modelClassName && $sampleModel['modelId'] == $modelId) {
                     try {
                         $model = $sampleModel['modelClassName']::getById($modelId);
                         if ($model) {
                             if ($model->delete()) {
                                 unset($state[self::AUTO_BUILD_SAMPLE_MODELS_KEY][$key]);
                                 $messageLogger->addInfoMessage("Sample model {$sampleModel['modelClassName']}-> {$modelId} deleted.");
                             } else {
                                 $messageLogger->addErrorMessage("Couldn't delete sample model {$sampleModel['modelClassName']}-> {$modelId} deleted.");
                                 $result = false;
                             }
                         }
                     } catch (NotFoundException $e) {
                         // Do nothing, model is already deleted
                     }
                 }
             }
         }
     }
     $statePersister->save($state);
     return $result;
 }
 final function logUserMessage($message, $type = "msg")
 {
     MessageLogger::log($message, $type);
 }
 /**
  * @depends testRunInstallation
  */
 public function testRunAutoBuildFromUpdateSchemaCommand()
 {
     $this->runInstallation(true);
     $super = User::getByUsername('super');
     $super->primaryEmail->emailAddress = '*****@*****.**';
     $this->assertTrue($super->save());
     $this->assertEquals(0, EmailMessage::getCount());
     $this->assertEquals(1, Notification::getCount());
     $messageLogger = new MessageLogger();
     $messageLogger->addInfoMessage(Zurmo::t('InstallModule', 'Starting schema update process.'));
     $result = InstallUtil::runAutoBuildFromUpdateSchemaCommand($messageLogger);
     $messageLogger->addInfoMessage(Zurmo::t('InstallModule', 'Schema update complete.'));
     $this->assertTrue($result);
     //No email notification is sent since allowSendingEmail is false
     $this->assertEquals(0, EmailMessage::getCount());
     $this->assertEquals(2, Notification::getCount());
 }
 function getFailureMessages()
 {
     return MessageLogger::getMessages(get_class($this) . "_failure");
 }
 /**
  * @depends testRunInstallation
  */
 public function testRunAutoBuildFromUpdateSchemaCommand()
 {
     $this->runInstallation(true);
     $messageLogger = new MessageLogger();
     $messageLogger->addInfoMessage(Zurmo::t('InstallModule', 'Starting schema update process.'));
     $result = InstallUtil::runAutoBuildFromUpdateSchemaCommand($messageLogger);
     $messageLogger->addInfoMessage(Zurmo::t('InstallModule', 'Schema update complete.'));
     $this->assertTrue($result);
 }
 public static function query($sql, $time, $database = 'Unknown')
 {
     if (isset(self::$profiler)) {
         if (!self::is_ajax()) {
             $time *= 1000;
             self::$queries[] = array('sql' => str_replace(array('/*', '*/'), array('<span style="color:#aaa;font-style:italic;float:right">', '</span>'), $sql), 'time' => $time, 'database' => $database);
         } elseif (class_exists('MessageLogger')) {
             MessageLogger::logInternal(str_replace(array('/*', '*/'), array('<span style="color:#aaa;font-style:italic;float:right">', '</span>'), $sql), 'query');
         }
     }
     //else
     //error_log($sql);
 }