public static function logAuditEvent($moduleName, $eventName, $data = null, RedBeanModel $model = null, User $user = null)
 {
     assert('is_string($moduleName) && $moduleName != ""');
     assert('is_string($eventName)  && $eventName  != ""');
     if ($user === null) {
         $user = Yii::app()->user->userModel;
         if (!$user instanceof User) {
             throw new NoCurrentUserSecurityException();
         }
     }
     if ($eventName == ZurmoModule::AUDIT_EVENT_ITEM_VIEWED) {
         AuditEventsRecentlyViewedUtil::resolveNewRecentlyViewedModel($data[1], $model, AuditEventsRecentlyViewedUtil::RECENTLY_VIEWED_COUNT + 1);
     }
     if ($eventName == ZurmoModule::AUDIT_EVENT_ITEM_DELETED) {
         $modelClassName = get_class($model);
         AuditEventsRecentlyViewedUtil::deleteModelFromRecentlyViewed($modelClassName::getModuleClassName(), $model);
     }
     if ($eventName != ZurmoModule::AUDIT_EVENT_ITEM_VIEWED) {
         if (!AuditEvent::$isTableOptimized && !AUDITING_OPTIMIZED) {
             $auditEvent = new AuditEvent();
             $auditEvent->dateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
             $auditEvent->moduleName = $moduleName;
             $auditEvent->eventName = $eventName;
             $auditEvent->user = $user;
             $auditEvent->modelClassName = $model !== null ? get_class($model) : null;
             $auditEvent->modelId = $model !== null ? $model->id : null;
             $auditEvent->serializedData = serialize($data);
             $saved = $auditEvent->save();
             AuditEvent::$isTableOptimized = true;
         } else {
             $sql = "insert into auditevent (datetime,\n                                                modulename,\n                                                eventname,\n                                                _user_id,\n                                                modelclassname,\n                                                modelid,\n                                                serializeddata)\n                        values ('" . DateTimeUtil::convertTimestampToDbFormatDateTime(time()) . "',\n                                '{$moduleName}',\n                                '{$eventName}',\n                                {$user->id}, " . ($model !== null ? "'" . get_class($model) . "', " : 'null, ') . ($model !== null ? "{$model->id}, " : 'null, ') . ":data)";
             ZurmoRedBean::exec($sql, array('data' => serialize($data))) !== null;
             $saved = true;
         }
         return $saved;
     }
 }
 protected static function makeRecentlyViewedView()
 {
     $items = AuditEventsRecentlyViewedUtil::getRecentlyViewedItemsByUser(Yii::app()->user->userModel, 10);
     return new RecentlyViewedView($items);
 }
 public function testDeleteModelFromRecentlyViewed()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     ZurmoConfigurationUtil::setForCurrentUserByModuleName('ZurmoModule', 'recentlyViewed', null);
     $account1 = new Account();
     $account1->name = 'Dooble1';
     $this->assertTrue($account1->save());
     $account2 = new Account();
     $account2->name = 'Dooble2';
     $this->assertTrue($account2->save());
     $account3 = new Account();
     $account3->name = 'Dooble3';
     $account3->owner = User::getByUsername('jimmy');
     $this->assertTrue($account3->save());
     //Now create some audit entries for the Item Viewed event.
     AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($account1), 'AccountsModule'), $account1);
     AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($account2), 'AccountsModule'), $account2);
     AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($account1), 'AccountsModule'), $account3);
     $content = AuditEventsRecentlyViewedUtil::getRecentlyViewedAjaxContentByUser(Yii::app()->user->userModel, 5);
     $this->assertContains('Dooble1', $content);
     $this->assertContains('Dooble2', $content);
     $this->assertContains('Dooble3', $content);
     AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_DELETED, strval($account1), $account1);
     $content = AuditEventsRecentlyViewedUtil::getRecentlyViewedAjaxContentByUser(Yii::app()->user->userModel, 5);
     $this->assertNotContains('Dooble1', $content);
     $this->assertContains('Dooble2', $content);
     $this->assertContains('Dooble3', $content);
 }