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