/**
  * Create new log entry and return it
  *
  * Delete actions are automatically marked as silent if $is_silent value is not provided (not NULL)
  *
  * @param ApplicationDataObject $object
  * @param Project $project
  * @param DataManager $manager
  * @param boolean $save Save log object before you save it
  * @return ApplicationLog
  */
 static function createLog($object, $action = null, $is_private = false, $is_silent = null, $save = true, $log_data = '')
 {
     $args = array('action' => &$action, 'is_private' => &$is_private, 'is_silent' => &$is_silent, 'save' => &$save, 'log_data' => &$log_data);
     /**
      * Modify log and notification parameters before creating the application log registry
      */
     Hook::fire('application_logs_create', $object, $args);
     if (is_null($action)) {
         $action = self::ACTION_ADD;
     }
     // if
     if (!self::isValidAction($action)) {
         throw new Error("'{$action}' is not valid log action");
     }
     // if
     if ($object instanceof TemplateTask || $object instanceof TemplateMilestone) {
         $is_silent = true;
     }
     if (is_null($is_silent)) {
         $is_silent = $action == self::ACTION_DELETE;
     } else {
         $is_silent = (bool) $is_silent;
     }
     // if
     if (!$is_silent) {
         try {
             Notifier::notifyAction($object, $action, $log_data);
         } catch (Exception $ex) {
             Logger::log($ex->getMessage());
         }
     }
     $log = new ApplicationLog();
     if (logged_user() instanceof Contact) {
         $log->setTakenById(logged_user()->getId());
     } else {
         $log->setTakenById(0);
     }
     if ($object instanceof ContentDataObject) {
         $log->setRelObjectId($object->getObjectId());
         $log->setObjectName($object->getObjectName());
     }
     if ($object instanceof Member) {
         $log->setMemberId($object->getId());
         $log->setRelObjectId($object->getObjectId());
         $log->setObjectName($object->getName());
     }
     $log->setAction($action);
     $log->setIsPrivate($is_private);
     $log->setIsSilent($is_silent);
     $log->setLogData($log_data);
     if ($save) {
         $log->save();
     }
     // if
     return $log;
 }
/**
 * Render text that says when action was taken and by who
 *
 * @param ApplicationLog $application_log_entry
 * @return string
 */
function render_action_taken_on_by(ApplicationLog $application_log_entry)
{
    if ($application_log_entry->isToday()) {
        $result = lang('today') . ' ' . clean(format_time($application_log_entry->getCreatedOn()));
    } elseif ($application_log_entry->isYesterday()) {
        $result = lang('yesterday') . ' ' . clean(format_time($application_log_entry->getCreatedOn()));
    } else {
        $result = clean(format_date($application_log_entry->getCreatedOn()));
    }
    // if
    $result = "<span class=\"logTakenOn\">{$result}</span></td><td><span class=\"logBy\">";
    $taken_by = $application_log_entry->getTakenBy();
    return $taken_by instanceof User ? $result . '<a href="' . $taken_by->getCardUrl() . '">' . clean($taken_by->getDisplayName()) . '</a></span>' : $result . '</span>';
}
 /**
  * Create new log entry and return it
  *
  * Delete actions are automatically marked as silent if $is_silent value is not provided (not NULL)
  *
  * @param ApplicationDataObject $object
  * @param Project $project
  * @param DataManager $manager
  * @param boolean $save Save log object before you save it
  * @return ApplicationLog
  */
 static function createLog(ApplicationDataObject $object, $workspaces, $action = null, $is_private = false, $is_silent = null, $save = true, $log_data = '')
 {
     if (is_null($action)) {
         $action = self::ACTION_ADD;
     }
     // if
     if (!self::isValidAction($action)) {
         throw new Error("'{$action}' is not valid log action");
     }
     // if
     if (is_null($is_silent)) {
         $is_silent = $action == self::ACTION_DELETE;
     } else {
         $is_silent = (bool) $is_silent;
     }
     // if
     if (!$is_silent) {
         try {
             Notifier::notifyAction($object, $action, $log_data);
         } catch (Exception $ex) {
         }
     }
     if ($object != null) {
         $manager = $object->manager();
     }
     if (!$manager instanceof DataManager) {
         throw new Error('Invalid object manager');
     }
     // if
     $log = new ApplicationLog();
     if (logged_user() instanceof User) {
         $log->setTakenById(logged_user()->getId());
     } else {
         $log->setTakenById(0);
     }
     $log->setRelObjectId($object->getObjectId());
     $log->setObjectName($object->getObjectName());
     $log->setRelObjectManager(get_class($manager));
     $log->setAction($action);
     $log->setIsPrivate($is_private);
     $log->setIsSilent($is_silent);
     $log->setLogData($log_data);
     if ($save) {
         $log->save();
     }
     // if
     // Update is private for this object
     /*if($object instanceof ProjectDataObject) {
     			ApplicationLogs::setIsPrivateForObject($object);
     		} // if*/
     if ($save) {
         if ($workspaces instanceof Project) {
             $wo = new WorkspaceObject();
             $wo->setObject($log);
             $wo->setWorkspace($workspaces);
             $wo->save();
         } else {
             if (is_array($workspaces)) {
                 foreach ($workspaces as $w) {
                     if ($w instanceof Project) {
                         $wo = new WorkspaceObject();
                         $wo->setObject($log);
                         $wo->setWorkspace($w);
                         $wo->save();
                     }
                 }
             }
         }
     }
     return $log;
 }
 /**
  * Create new log entry and return it
  * 
  * Delete actions are automaticly marked as silent if $is_silent value is not provided (not NULL)
  *
  * @param ApplicationDataObject $object
  * @param Project $project
  * @param DataManager $manager
  * @param boolean $save Save log object before you save it
  * @return ApplicationLog
  */
 static function createLog(ApplicationDataObject $object, $project, $action = null, $is_private = false, $is_silent = null, $save = true)
 {
     if (is_null($action)) {
         $action = self::ACTION_ADD;
     }
     // if
     if (!self::isValidAction($action)) {
         throw new Error("'{$action}' is not valid log action");
     }
     // if
     if (is_null($is_silent)) {
         $is_silent = $action == self::ACTION_DELETE;
     } else {
         $is_silent = (bool) $is_silent;
     }
     // if
     $manager = $object->manager();
     if (!$manager instanceof DataManager) {
         throw new Error('Invalid object manager');
     }
     // if
     $log = new ApplicationLog();
     if ($project instanceof Project) {
         $log->setProjectId($project->getId());
     }
     // if
     $log->setTakenById(logged_user()->getId());
     $log->setRelObjectId($object->getObjectId());
     $log->setObjectName($object->getObjectName());
     $log->setRelObjectManager(get_class($manager));
     $log->setAction($action);
     $log->setIsPrivate($is_private);
     $log->setIsSilent($is_silent);
     if ($save) {
         $log->save();
     }
     // if
     // Update is private for this object
     if ($object instanceof ProjectDataObject) {
         ApplicationLogs::setIsPrivateForObject($object);
     }
     // if
     return $log;
 }
	/**
	 * Create new log entry and return it
	 *
	 * Delete actions are automatically marked as silent if $is_silent value is not provided (not NULL)
	 *
	 * @param ApplicationDataObject $object
	 * @param Project $project
	 * @param DataManager $manager
	 * @param boolean $save Save log object before you save it
	 * @return ApplicationLog
	 */
	static function createLog($object, $action = null, $is_private = false, $is_silent = null, $save = true, $log_data = '') {
		if(is_null($action)) {
			$action = self::ACTION_ADD;
		} // if
		if(!self::isValidAction($action)) {
			throw new Error("'$action' is not valid log action");
		} // if

		if(is_null($is_silent)) {
			$is_silent = $action == self::ACTION_DELETE;
		} else {
			$is_silent = (boolean) $is_silent;
		} // if

		if (!$is_silent) {
			try {
				Notifier::notifyAction($object, $action, $log_data);
			} catch (Exception $ex) {
				Logger::log($ex->getMessage());
			}
		}
		
		$log = new ApplicationLog();
		if (logged_user() instanceof Contact) {
			$log->setTakenById(logged_user()->getId());
		} else {
			$log->setTakenById(0);
		}
		if ($object instanceof ContentDataObject) {
			$log->setRelObjectId($object->getObjectId());
			$log->setObjectName($object->getObjectName());
		}
		if ($object instanceof Member) {
			$log->setRelObjectId($object->getId());
			$log->setObjectName($object->getName());
		}
		
		$log->setAction($action);
		$log->setIsPrivate($is_private);
		$log->setIsSilent($is_silent);
		$log->setLogData($log_data);
		
		if($save) {
			$log->save();
		} // if
		
		return $log;
	} // createLog
</th>
<?php 
    if ($application_logs_show_project_column) {
        ?>
    <th class="right"><?php 
        echo lang('application log project column name');
        ?>
</th>
<?php 
    }
    // if
    ?>
  </tr>
<?php 
    $row_count = 0;
    $prev = new ApplicationLog();
    foreach ($application_logs_entries as $application_log_entry) {
        $application_log_entry_url = $application_log_entry->getObjectUrl();
        if (empty($application_log_entry_url) && FALSE === $include_silent) {
            continue;
        }
        // Skip deleted objects
        $row_count++;
        // skip log lines about the same object and same action
        // note: lines are ordered on creation date. any other order messes this up
        $cur = $application_log_entry;
        if ($cur->getTakenById() == $prev->getTakenById()) {
            if ($cur->getProjectId() == $prev->getProjectId()) {
                if ($cur->getRelObjectId() == $prev->getRelObjectId()) {
                    if ($cur->getRelObjectManager() == $prev->getRelObjectManager()) {
                        if ($cur->getAction() == $prev->getAction()) {
Example #7
0
/**
 * Render text that says when action was tacken and by who
 *
 * @param ApplicationLog $application_log_entry
 * @return string
 */
function render_action_taken_on_by(ApplicationLog $application_log_entry)
{
    if ($application_log_entry->isToday()) {
        $result = '<span class="desc">' . lang('today') . ' ' . clean(format_time($application_log_entry->getCreatedOn()));
    } elseif ($application_log_entry->isYesterday()) {
        //return '<span class="desc">' . lang('yesterday') . ' ' . clean(format_time($application_log_entry->getCreatedOn()));
        $result = '<span class="desc">' . lang('yesterday');
    } else {
        $result = '<span class="desc">' . clean(format_date($application_log_entry->getCreatedOn()));
    }
    // if
    $result .= '</span>';
    $taken_by = $application_log_entry->getTakenBy();
    return $taken_by instanceof User ? $result . ', <a href="' . $taken_by->getCardUrl() . '">' . clean($taken_by->getDisplayName()) . '</a>' : $result;
}
Example #8
0
 function purge_trash($days = null, $limit = null, $extra_conditions = "")
 {
     ini_set('memory_limit', '512M');
     Env::useHelper("permissions");
     if (is_null($days)) {
         $days = config_option("days_on_trash");
     }
     if (is_null($limit)) {
         $limit = 1000;
     }
     $count = 0;
     if ($days >= 0) {
         $object_ids = array();
         $date = DateTimeValueLib::now()->add("d", -$days);
         $mail_join = "";
         $mail_cond = "";
         if (Plugins::instance()->isActivePlugin('mail')) {
             $mail_join = "LEFT JOIN " . TABLE_PREFIX . "mail_contents mc ON mc.object_id=o.id";
             $mail_cond = "AND NOT COALESCE(mc.is_deleted, false)";
         }
         $perm_join = "";
         $perm_conditions = "";
         if (logged_user() instanceof Contact) {
             $logged_user_pgids = logged_user()->getPermissionGroupIds();
             $perm_join = "INNER JOIN " . TABLE_PREFIX . "object_members om on om.object_id=o.id \r\n\t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "contact_member_permissions cmp ON cmp.member_id=om.member_id AND cmp.object_type_id=o.object_type_id";
             $perm_conditions = "AND cmp.can_delete=1 AND cmp.permission_group_id IN (" . implode(',', $logged_user_pgids) . ")";
         }
         $sql = "SELECT o.id as id, o.name as name, ot.name as ot_name, ot.table_name as table_name\r\n\t\t\t\t\tFROM " . TABLE_PREFIX . "objects o \r\n\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "object_types ot ON ot.id=o.object_type_id {$mail_join} {$perm_join}\r\n\t\t\t\t\tWHERE trashed_by_id > 0 AND trashed_on < '" . $date->toMySQL() . "' {$mail_cond} {$extra_conditions} {$perm_conditions}\r\n\t\t\t\t\tLIMIT {$limit}";
         $rows = DB::executeAll($sql);
         foreach ($rows as $row) {
             try {
                 DB::beginWork();
                 $id = $row['id'];
                 $ot_name = $row['ot_name'];
                 $name = $row['name'];
                 $table_name = $row['table_name'];
                 $object_ids[] = $id;
                 // delete object information
                 $tables_to_delete = self::get_tables_to_clean($ot_name);
                 if ($ot_name != 'mail' && $ot_name != 'invoice') {
                     $tables_to_delete[] = array('table' => TABLE_PREFIX . $table_name, 'column' => 'object_id');
                 }
                 foreach ($tables_to_delete as $table_info) {
                     $table = $table_info['table'];
                     $column = $table_info['column'];
                     $sql = "DELETE FROM `{$table}` WHERE `{$column}` = '{$id}'";
                     DB::execute($sql);
                 }
                 // save log
                 $log = new ApplicationLog();
                 if (logged_user() instanceof Contact) {
                     $log->setTakenById(logged_user()->getId());
                 }
                 $log->setRelObjectId($id);
                 $log->setObjectName($name);
                 $log->setAction(ApplicationLogs::ACTION_DELETE);
                 $log->setIsSilent(true);
                 $log->save();
                 DB::commit();
                 $count++;
             } catch (DBQueryError $e) {
                 DB::rollback();
                 Logger::log("Error delting object in purge_trash: " . $e->getMessage() . "\n" . $e->getSQL() . "\n", Logger::ERROR);
             }
         }
         $ignored = null;
         Hook::fire('after_object_delete_permanently', $object_ids, $ignored);
     }
     return $count;
 }