コード例 #1
0
function smarty_function_notifications($params, &$smarty)
{
    $user = array_required_var($params, 'user', true, 'IUser');
    $activity_logs = NotificationsActivityLogs::findRecent($user);
    $interface = array_var($params, 'interface', AngieApplication::getPreferedInterface(), true);
    $id = isset($params['id']) && $params['id'] ? $params['id'] : HTML::uniqueId('activity_log');
    $wrapper = '<div id="' . $id . '" class="quick_view_item">';
    $wrapper .= '</div>';
    list($authors, $subjects, $targets) = ActivityLogs::loadRelatedDataFromActivities($activity_logs, $user);
    // Load related data, so we can pass it to callbacks
    return $wrapper .= '<script type="text/javascript">$("#' . $id . '").activityLog(' . JSON::encode(array('entries' => $activity_logs, 'authors' => $authors, 'subjects' => $subjects, 'targets' => $targets, 'callbacks' => ActivityLogs::getCallbacks(), 'decorator' => ActivityLogs::getDecorator($interface), 'interface' => $interface)) . ');</script>';
}
コード例 #2
0
 /**
  * Clean up system by object ID-s
  * 
  * This function cleans up project objects recursively. It is also infinite 
  * loop safe because it will filter out ID-s that are already removed
  *
  * @param array $ids
  * @return null
  */
 function cleanUpByIds($ids)
 {
     static $cleaned_ids = array();
     // Remove objects that are already cleaned
     if (is_foreachable($ids)) {
         foreach ($ids as $k => $id) {
             if (isset($cleaned_ids[$id]) && $cleaned_ids[$id]) {
                 unset($ids[$k]);
             } else {
                 $cleaned_ids[$id] = false;
             }
             // if
         }
         // foreach
     }
     // if
     if (is_foreachable($ids)) {
         db_begin_work();
         Attachments::deleteByProjectObjectIds($ids);
         Subscriptions::deleteByObjectIds($ids);
         Assignments::deleteByObjectIds($ids);
         ActivityLogs::deleteByObjectIds($ids);
         StarredObjects::deleteByObjectIds($ids);
         Reminders::deleteByObjectIds($ids);
         search_index_remove($ids, 'ProjectObject');
         $rows = db_execute_all('SELECT DISTINCT id FROM ' . TABLE_PREFIX . 'project_objects WHERE parent_id IN (?)', $ids);
         if (is_foreachable($rows)) {
             $subobject_ids = array();
             foreach ($rows as $row) {
                 $subobject_ids[] = (int) $row['id'];
             }
             // foreach
             ProjectObjects::cleanUpByIds($subobject_ids);
         }
         // if
         ProjectObjects::delete(array('id IN (?)', $ids));
         foreach ($ids as $id) {
             $cleaned_ids[$id] = true;
         }
         // if
         db_commit();
     }
     // if
     return true;
 }
コード例 #3
0
 /**
  * Render recent activities feed
  *
  * @param void
  * @return null
  */
 function rss()
 {
     if ($this->active_project->isNew()) {
         $this->httpError(HTTP_ERR_NOT_FOUND);
     }
     // if
     require_once ANGIE_PATH . '/classes/feed/init.php';
     $feed = new Feed(lang(':project project', array('project' => $this->active_project->getName())) . ' - ' . lang('Recent activities'), $this->active_project->getOverviewUrl());
     $feed->setDescription(lang('Recent ":project" activities', array('project' => $this->active_project->getName())));
     $activities = ActivityLogs::findProjectActivitiesByUser($this->active_project, $this->logged_user, 50);
     if (is_foreachable($activities)) {
         foreach ($activities as $activity) {
             $object = $activity->getObject();
             $activity_title = $activity_body = $activity->renderHead(null, true);
             $activity_title = strip_tags($activity_title);
             if ($activity->has_body && ($body = trim($activity->renderBody()))) {
                 $activity_body .= $body;
             }
             // if
             $item = new FeedItem($activity_title, $object->getViewUrl(), $activity_body, $activity->getCreatedOn());
             $item->setId(extend_url($object->getViewUrl(), array('guid' => $activity->getId())));
             $feed->addItem($item);
         }
         // foreach
     }
     // if
     print render_rss_feed($feed);
     die;
 }
コード例 #4
0
 /**
  * Mark this object as completed
  *
  * @param User $by
  * @param boolean $canceled
  * @param boolean $save
  * @return boolean
  */
 function complete($by, $canceled = false, $save = true)
 {
     $status = $canceled ? PROJECT_STATUS_CANCELED : PROJECT_STATUS_COMPLETED;
     $old_status = $this->getStatus();
     if ($status == $old_status) {
         return true;
     }
     // if
     $this->setStatus($status);
     $this->setCompletedOn(new DateTimeValue());
     $this->setCompletedById($by->getId());
     $this->setCompletedByName($by->getDisplayName());
     $this->setCompletedByEmail($by->getEmail());
     if ($save) {
         if ($old_status == PROJECT_STATUS_ACTIVE || $old_status == PROJECT_STATUS_PAUSED) {
             PinnedProjects::deleteByProject($this);
             ActivityLogs::deleteByProject($this);
             event_trigger('on_project_completed', array($this, $by, $status));
         }
         // if
         return $this->save();
     }
     // if
     return true;
 }
コード例 #5
0
 /**
  * Recent activities for selected user
  *
  * @param void
  * @return null
  */
 function recent_activities()
 {
     if ($this->active_user->isNew()) {
         $this->httpError(HTTP_ERR_NOT_FOUND);
     }
     // if
     if (!$this->active_user->canViewActivities($this->logged_user)) {
         $this->httpError(HTTP_ERR_FORBIDDEN);
     }
     // if
     $page = (int) $this->request->get('page');
     if ($page < 1) {
         $page = 1;
     }
     // if
     $per_page = 15;
     list($recent_activities, $pagination) = ActivityLogs::paginateActivitiesByUser($this->active_user, $page, $per_page);
     $this->smarty->assign(array('recent_activities' => group_by_date($recent_activities), 'pagination' => $pagination));
 }
コード例 #6
0
 /**
  * Delete this object
  * 
  * If $drop_subitems is TRUE subitems will be delete from the database. If it 
  * is false relation will be nullified
  *
  * @param boolean $drop_subitems
  * @return boolean
  * @throws DBQueryError
  */
 function delete($drop_subitems = true)
 {
     db_begin_work();
     $delete = parent::delete();
     if (is_error($delete) || !$delete) {
         db_rollback();
         return $delete;
     }
     // if
     $subitems = $this->getSubitems();
     if (is_foreachable($subitems)) {
         foreach ($subitems as $subitem) {
             if ($drop_subitems) {
                 $delete = $subitem->delete();
                 if (is_error($delete)) {
                     db_rollback();
                     return $delete;
                 }
                 // if
             } else {
                 $subitem->setParent(null, false);
                 $save = $subitem->save();
                 if (is_error($save)) {
                     db_rollback();
                     return $save;
                 }
                 // if
             }
             // if
         }
         // foreach
     }
     // if
     StarredObjects::deleteByObject($this);
     // Attachments
     if ($this->can_have_attachments) {
         Attachments::deleteByObject($this);
     }
     // if
     // Subscriptions
     if ($this->can_have_subscribers) {
         Subscriptions::deleteByParent($this);
     }
     // if
     // Asignments
     if ($this->can_have_assignees) {
         Assignments::deleteByObject($this);
     }
     // if
     // Activity log
     if ($this->log_activities) {
         ActivityLogs::deleteByObject($this);
     }
     // if
     // Reminders
     if ($this->can_send_reminders) {
         Reminders::deleteByObject($this);
     }
     // if
     search_index_remove($this->getId(), 'ProjectObject');
     db_commit();
     return true;
 }
 /**
  * Display project info
  *
  */
 function index()
 {
     $this->addBreadcrumb(lang('Overview'));
     $this->smarty->assign(array("page_back_url" => assemble_url('mobile_access_projects'), "project_leader" => $this->active_project->getLeader(), "project_group" => $this->active_project->getGroup(), "project_company" => $this->active_project->getCompany(), "late_and_today" => ProjectObjects::findLateAndToday($this->logged_user, $this->active_project, get_day_project_object_types()), "recent_activities" => ActivityLogs::findProjectActivitiesByUser($this->active_project, $this->logged_user, 15), 'upcoming_objects' => ProjectObjects::findUpcoming($this->logged_user, $this->active_project, get_day_project_object_types())));
 }
コード例 #8
0
 /**
  * Render recent activities feed
  *
  * @param void
  * @return null
  */
 function rss()
 {
     require_once ANGIE_PATH . '/classes/feed/init.php';
     $projects = Projects::findNamesByUser($this->logged_user);
     $feed = new Feed($this->owner_company->getName() . ' - ' . lang('Recent activities'), ROOT_URL);
     $feed->setDescription(lang('Recent activities in active projects'));
     $activities = ActivityLogs::findActiveProjectsActivitiesByUser($this->logged_user, 50);
     if (is_foreachable($activities)) {
         foreach ($activities as $activity) {
             $object = $activity->getObject();
             $activity_title = $activity_body = $activity->renderHead();
             $activity_title = strip_tags($activity_title);
             if ($activity->has_body && ($body = trim($activity->renderBody()))) {
                 $activity_body .= $body;
             }
             // if
             $item = new FeedItem($activity_title, $object->getViewUrl(), $activity_body, $activity->getCreatedOn());
             $item->setId(extend_url($object->getViewUrl(), array('guid' => $activity->getId())));
             $feed->addItem($item);
         }
         // foreach
     }
     // if
     print render_rss_feed($feed);
     die;
 }
コード例 #9
0
 /**
  * Return portal project recent activities
  *
  * @param Portal $portal
  * @param integer $count
  * @return array
  */
 function findPortalProjectRecentActivities($portal, $count = 30)
 {
     $type_filter = Portal::getVisibleTypesFilterByPortalProject($portal);
     if ($type_filter) {
         $objects_table = TABLE_PREFIX . 'project_objects';
         $logs_table = TABLE_PREFIX . 'activity_logs';
         $count = (int) $count;
         if ($count < 1) {
             $count = 30;
         }
         // if
         $recent_activities = ActivityLogs::findBySQL("SELECT {$logs_table}.* FROM {$logs_table}, {$objects_table} WHERE {$logs_table}.object_id = {$objects_table}.id AND {$type_filter} AND {$objects_table}.state >= ? AND {$objects_table}.visibility >= ? ORDER BY {$logs_table}.created_on DESC LIMIT 0, {$count}", array(STATE_DELETED, VISIBILITY_NORMAL));
         return $recent_activities;
     } else {
         return null;
     }
     // if
 }