public function fetchCriteria(Tracker_Report_Criteria $criteria)
    {
        $trackerId = $this->tracker->getId();
        $html = '';
        $html .= '<label for="' . $this->id . '_' . $trackerId . '" title="#' . $trackerId . '">' . $this->tracker->getName() . '</label>';
        $html .= <<<MARKUP
        <div class="tracker_report_criteria">
        <input type="hidden" name="artifact_criteria[{$trackerId}]">
        <select id="tracker_report_criteria_adv_{$trackerId}" multiple="multiple" size="7" name="artifact_criteria[{$trackerId}][]">
MARKUP;
        $anySelected = ' selected="selected"';
        $options = '';
        //         <option value="100">None</option>
        foreach ($this->artifacts as $artifact) {
            $artifactId = $artifact->getId();
            if ($artifact->isSelected) {
                $anySelected = '';
                $selected = ' selected="selected"';
            } else {
                $selected = '';
            }
            $options .= '<option' . $selected . ' value="' . $artifactId . '">' . $artifact->getTitle() . '</option>';
        }
        $html .= '<option' . $anySelected . '  value="">Any</option>';
        $html .= $options;
        $html .= <<<MARKUP
        </select>
        </input>
        </div>
MARKUP;
        /*
                <option style="" value="571">New</option>
        */
        return $html;
    }
 public function updateArtifacts(PFUser $user, Codendi_Request $request)
 {
     if ($this->tracker->userIsAdmin($user)) {
         $masschange_aids = $request->get('masschange_aids');
         if (empty($masschange_aids)) {
             $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_masschange_detail', 'no_items_selected'));
             $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?tracker=' . $this->tracker->getId());
         }
         $unsubscribe = $request->get('masschange-unsubscribe-option');
         if ($unsubscribe) {
             $this->unsubscribeUserFromEachArtifactNotification($user, $request, $masschange_aids);
         }
         $send_notifications = $this->getSendNotificationsFromRequest($request);
         $masschange_data = $request->get('artifact');
         if (!$unsubscribe && empty($masschange_data)) {
             $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_masschange_detail', 'no_items_selected'));
             $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?tracker=' . $this->tracker->getId());
         }
         $comment = $request->get('artifact_masschange_followup_comment');
         $masschange_values_extractor = new Tracker_MasschangeDataValueExtractor();
         $new_fields_data = $masschange_values_extractor->getNewValues($masschange_data);
         if (count($new_fields_data) > 0 || $comment !== '') {
             $comment_format = $request->get('comment_formatmass_change');
             $this->tracker->updateArtifactsMasschange($user, $masschange_aids, $new_fields_data, $comment, $send_notifications, $comment_format);
         }
         $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?tracker=' . $this->tracker->getId());
     } else {
         $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_admin', 'access_denied'));
         $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?tracker=' . $this->tracker_report->getId());
     }
 }
 /**
  * @return array
  */
 public function getFieldsData(SimpleXMLElement $xml_field_change)
 {
     $data = array();
     if (!$xml_field_change->field_change) {
         return $data;
     }
     foreach ($xml_field_change->field_change as $field_change) {
         $field = $this->formelement_factory->getUsedFieldByName($this->tracker->getId(), (string) $field_change['field_name']);
         if ($field) {
             $this->appendValidValue($data, $field, $field_change);
         } else {
             $this->logger->debug("Skipped unknown/unused field " . (string) $field_change['field_name']);
         }
     }
     return $data;
 }
 /**
  * Get all mappings defined for the cardwall on top of a tracker
  *
  * @param Tracker $tracker The tracker
  * @param array   $columns array of Cardwall_Column
  *
  * @return array of Cardwall_OnTop_Config_TrackerMapping
  */
 public function getMappings(Tracker $tracker, Cardwall_OnTop_Config_ColumnCollection $columns)
 {
     $mappings = array();
     foreach ($this->dao->searchMappingFields($tracker->getId()) as $row) {
         $this->instantiateMappingFromRow($tracker, $mappings, $row, $columns);
     }
     return $mappings;
 }
 public function __construct(Tracker $tracker, array $stored_ugroups_permissions, PermissionsManager $permissions_manager)
 {
     $this->group_id = $tracker->getGroupId();
     $this->atid = $tracker->getId();
     $this->tracker = $tracker;
     $this->stored_ugroups_permissions = $stored_ugroups_permissions;
     $this->permissions_manager = $permissions_manager;
 }
 private function getFieldByName(Tracker $tracker, $field_name)
 {
     $field = $this->formelement_factory->getUsedFieldByName($tracker->getId(), $field_name);
     if (!$field) {
         throw new Tracker_FormElement_InvalidFieldException("Field {$field_name} does not exist in the tracker");
     }
     return $field;
 }
 /**
  * @return Cardwall_OnTop_Config_ColumnCollection
  */
 private function getColumnsFromDao(Tracker $tracker)
 {
     $columns = new Cardwall_OnTop_Config_ColumnFreestyleCollection();
     foreach ($this->dao->searchColumnsByTrackerId($tracker->getId()) as $row) {
         list($bgcolor, $fgcolor) = $this->getColumnColorsFromRow($row);
         $columns[] = new Cardwall_Column($row['id'], $row['label'], $bgcolor, $fgcolor);
     }
     return $columns;
 }
 /**
  * @return array of Tracker
  */
 public function getChildren(Tracker $tracker)
 {
     $dar = $this->dao->getChildren($tracker->getId());
     $children = array();
     foreach ($dar as $row) {
         $children[] = $this->tracker_factory->getTrackerById($row['child_id']);
     }
     return $children;
 }
 /**
  * @return ProjectUGroup[]
  */
 public function getListOfInvolvedStaticUgroups(Tracker $template_tracker)
 {
     $project = $template_tracker->getProject();
     $ugroups = array();
     foreach ($this->permissions_dao->getAuthorizedStaticUgroupIds($template_tracker->getId()) as $id) {
         $ugroups[] = $this->ugroup_manager->getUGroup($project, $id);
     }
     return $ugroups;
 }
 public function getTrackerMapping(Tracker $tracker)
 {
     $tracker_id = $tracker->getId();
     $mapping_data = array($tracker_id => array('properties' => array('id' => array('type' => 'integer'), 'group_id' => array('type' => 'integer'), 'tracker_id' => array('type' => 'integer'), 'last_changeset_id' => array('type' => 'integer'), ElasticSearch_1_2_ArtifactPropertiesExtractor::LAST_UPDATE_PROPERTY => array('type' => 'date', 'format' => 'date_time_no_millis'), 'followup_comments' => array('properties' => array('user_id' => array('type' => 'integer'), 'date_added' => array('type' => 'date', 'format' => 'date_time_no_millis'), 'comment' => array('type' => 'string'))))));
     $this->addStandardTrackerPermissionsMetadata($mapping_data[$tracker_id]['properties']);
     $this->addStandardArtifactPermissionsMetadata($mapping_data[$tracker_id]['properties']);
     $this->artifact_properties_extractor->extractTrackerFields($tracker, $mapping_data);
     return $mapping_data;
 }
Example #11
0
 private function getMappingFieldValuesIndexedByTracker(Tracker $tracker)
 {
     $mappings = array();
     foreach ($this->dao->searchMappingFieldValues($tracker->getId()) as $row) {
         $field = $this->element_factory->getFieldById($row['field_id']);
         $value = $field->getListValueById($row['value_id']);
         $mappings[$row['tracker_id']][$row['field_id']][$row['value_id']] = new Cardwall_OnTop_Config_ValueMapping($value, $row['column_id']);
     }
     return $mappings;
 }
Example #12
0
 public function export(Tracker $tracker, SimpleXMLElement $xml_content, PFUser $user, ZipArchive $archive)
 {
     $artifacts_node = $xml_content->addChild('artifacts');
     $all_artifacts = $this->artifact_factory->getArtifactsByTrackerId($tracker->getId());
     $this->checkThreshold(count($all_artifacts));
     foreach ($all_artifacts as $artifact) {
         $artifact->exportToXML($artifacts_node, $user, $archive);
     }
     $this->rng_validator->validate($artifacts_node, realpath(dirname(TRACKER_BASE_DIR) . self::ARTIFACTS_RNG_PATH));
 }
 private function getMatchingIdsForTopBacklog(Planning_VirtualTopMilestone $milestone, Tracker $backlog_tracker, PFUser $user)
 {
     $strategy_unassigned = $this->strategy_factory->getSelfBacklogStrategy($milestone);
     $backlog_items = $this->backlog_item_collection_factory->getUnassignedOpenCollection($user, $milestone, $strategy_unassigned, false);
     foreach ($backlog_items as $backlog_item) {
         if ($backlog_item->getArtifact()->getTrackerId() == $backlog_tracker->getId()) {
             $this->backlog_ids[$backlog_item->getArtifact()->getId()] = true;
         }
     }
     return $this->backlog_ids;
 }
 private function checkPermissionValidity(Tracker_Permission_PermissionRequest $request, Tracker $tracker)
 {
     if ($request->containsPermissionType(Tracker_Permission_Command::PERMISSION_ASSIGNEE) != null && $tracker->getContributorField() === null) {
         $GLOBALS['Response']->addFeedback(Feedback::ERROR, $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'no_assignee_semantic', array(TRACKER_BASE_URL . '/?' . http_build_query(array('func' => 'admin-semantic', 'tracker' => $tracker->getId())), $GLOBALS['Language']->getText('plugin_tracker_admin_semantic', 'contributor_label'))), CODENDI_PURIFIER_DISABLED);
         return false;
     }
     if ($request->getPermissionType(ProjectUGroup::PROJECT_ADMIN)) {
         return false;
     }
     return true;
 }
 private function getParentTrackersAndStopAtGivenTracker(Tracker $tracker, Tracker $stop)
 {
     $hierarchy = array();
     while (($parent = $this->hierarchy_factory->getParent($tracker)) && $parent != $stop) {
         $hierarchy[$parent->getId()] = $tracker;
         $tracker = $parent;
     }
     if ($parent == $stop) {
         $hierarchy[$stop->getId()] = $tracker;
         return $hierarchy;
     }
 }
 public function getPossibleArtifactParents(Tracker $parent_tracker, PFUser $user, $limit, $offset)
 {
     $label = '';
     $possible_parents = array();
     $display_selector = true;
     EventManager::instance()->processEvent(TRACKER_EVENT_ARTIFACT_PARENTS_SELECTOR, array('user' => $user, 'parent_tracker' => $parent_tracker, 'possible_parents' => &$possible_parents, 'label' => &$label, 'display_selector' => &$display_selector));
     if (!$possible_parents) {
         $label = $GLOBALS['Language']->getText('plugin_tracker_artifact', 'formelement_artifactlink_open_parent', array($parent_tracker->getName()));
         $possible_parents = $this->artifact_factory->getPaginatedPossibleParentArtifactsUserCanView($user, $parent_tracker->getId(), $limit, $offset);
     }
     return array($label, $possible_parents, $display_selector);
 }
 public function update(Tracker $tracker, SimpleXMLElement $artifact_xml, array $submitted_values, PFUser $user, $submitted_on)
 {
     $artifact_xml->changeset->submitted_on = date('c', $submitted_on);
     $artifact_xml->changeset->submitted_by = $user->getId();
     foreach ($artifact_xml->changeset->field_change as $field_change) {
         $field_name = (string) $field_change['field_name'];
         $field = $this->formelement_factory->getUsedFieldByNameForUser($tracker->getId(), $field_name, $user);
         if ($field && isset($submitted_values[$field->getId()])) {
             $submitted_value = $submitted_values[$field->getId()];
             $this->visitor->update($field_change, $field, $submitted_value);
         }
     }
 }
 private function getUGroupList(Tracker $tracker)
 {
     $ugroup_list = array();
     $ugroups_permissions = plugin_tracker_permission_get_tracker_ugroups_permissions($tracker->getGroupId(), $tracker->getId());
     ksort($ugroups_permissions);
     reset($ugroups_permissions);
     foreach ($ugroups_permissions as $ugroup_permissions) {
         $ugroup = $ugroup_permissions['ugroup'];
         $permissions = $ugroup_permissions['permissions'];
         if ($ugroup['id'] != ProjectUGroup::PROJECT_ADMIN) {
             $ugroup_list[] = new Tracker_Permission_PermissionUgroupPresenter($ugroup['id'], $ugroup['name'], isset($ugroup['link']) ? $ugroup['link'] : '', $this->getPermissionTypeList($ugroup['id'], $permissions));
         }
     }
     return $ugroup_list;
 }
 /**
  * @param Boolean $user_can_read_workdlow_field
  *
  * @return array { 'dates' => [...], 'lists' => [...] }
  */
 public function exportToSOAP($user_can_read_workdlow_field)
 {
     $soap = array('dates' => array(), 'lists' => array());
     if ($user_can_read_workdlow_field) {
         foreach ($this->getAllListRulesByTrackerWithOrder($this->tracker->getId()) as $rule) {
             $soap['lists'][] = $rule->exportToSOAP();
         }
         foreach ($this->getAllDateRulesByTrackerId($this->tracker->getId()) as $rule) {
             $export = $rule->exportToSOAP();
             if ($export) {
                 $soap['dates'][] = $rule->exportToSOAP();
             }
         }
     }
     return $soap;
 }
 /**
  * Load an instance of a Tracker_Semantic_Status
  *
  * @param Tracker $tracker the tracker
  *
  * @return Tracker_Semantic_Status
  */
 public static function load(Tracker $tracker)
 {
     if (!isset(self::$_instances[$tracker->getId()])) {
         $field_id = null;
         $open_values = array();
         $dao = new Tracker_Semantic_StatusDao();
         foreach ($dao->searchByTrackerId($tracker->getId()) as $row) {
             $field_id = $row['field_id'];
             $open_values[] = $row['open_value_id'];
         }
         if (!$open_values) {
             $open_values[] = 100;
         }
         $fef = Tracker_FormElementFactory::instance();
         $field = $fef->getFieldById($field_id);
         self::$_instances[$tracker->getId()] = new Tracker_Semantic_Status($tracker, $field, $open_values);
     }
     return self::$_instances[$tracker->getId()];
 }
 public function setTracker(Tracker $tracker)
 {
     $this->tracker = $tracker;
     $this->tracker_id = $tracker->getId();
 }
 private function mappingExists(Tracker $tracker)
 {
     return count($this->client->getMapping((string) $tracker->getId())) > 0;
 }
 /**
  * Returns all the Planning that use given tracker as backlog tracker
  *
  * Given:
  *   Epic  -> Product
  *   Epic  -> Release
  *   Story -> Sprint
  * When getPlanningsByBacklogTracker(Epic) -> [Product, Release]
  * When getPlanningsByBacklogTracker(Story) -> [Sprint]
  *
  * @param Tracker $backlog_tracker
  *
  * @return Planning
  */
 public function getPlanningsByBacklogTracker(Tracker $backlog_tracker)
 {
     $plannings = array();
     foreach ($this->dao->searchByBacklogTrackerId($backlog_tracker->getId()) as $planning) {
         $p = new Planning($planning['id'], $planning['name'], $planning['group_id'], $planning['backlog_title'], $planning['plan_title'], array($backlog_tracker->getId()), $planning['planning_tracker_id']);
         $p->setBacklogTrackers(array($backlog_tracker));
         $p->setPlanningTracker($this->getPlanningTracker($p));
         $plannings[] = $p;
     }
     return $plannings;
 }
 /**
  * Load an instance of a Tracker_Semantic_Contributor
  *
  * @param Tracker $tracker
  *
  * @return Tracker_Semantic_Contributor
  */
 public static function load(Tracker $tracker)
 {
     $field_id = null;
     $dao = new Tracker_Semantic_ContributorDao();
     if ($row = $dao->searchByTrackerId($tracker->getId())->getRow()) {
         $field_id = $row['field_id'];
     }
     $field = null;
     if ($field_id) {
         $field = Tracker_FormElementFactory::instance()->getFieldById($field_id);
     }
     return new Tracker_Semantic_Contributor($tracker, $field);
 }
 public function queueTrackerReindexation(Tracker $tracker)
 {
     $project_id = $tracker->getGroupId();
     if ($this->plugin->isAllowed($project_id)) {
         $this->system_event_manager->createEvent(SystemEvent_FULLTEXTSEARCH_TRACKER_REINDEX::NAME, $this->implodeParams(array($tracker->getId())), SystemEvent::PRIORITY_LOW, SystemEvent::OWNER_APP);
     }
 }
 /**
  * Get the url to this semantic
  *
  * @return string url (for html)
  */
 public function getUrl()
 {
     $query = http_build_query(array('tracker' => $this->tracker->getId(), 'func' => 'admin-semantic', 'semantic' => $this->getShortName()));
     return TRACKER_BASE_URL . '/?' . $query;
 }
Example #27
0
 /** @return Tracker_Artifact */
 private function createArtifact(PFUser $user, Tracker $tracker, $title, $body)
 {
     $this->logger->debug("Receiving new artifact from " . $user->getUserName());
     if (!$tracker->userCanSubmitArtifact($user)) {
         $this->logger->info("User " . $user->getUnixName() . " has no right to create an artifact in tracker #" . $tracker->getId());
         $this->notifier->sendErrorMailInsufficientPermissionCreation($user->getEmail(), $title);
         return;
     }
     $title_field = $tracker->getTitleField();
     $description_field = $tracker->getDescriptionField();
     if (!$title_field || !$description_field) {
         throw new Tracker_Artifact_MailGateway_TrackerMissingSemanticException();
     }
     $field_data = array($title_field->getId() => $title, $description_field->getId() => $body);
     UserManager::instance()->setCurrentUser($user);
     return $this->artifact_factory->createArtifact($tracker, $field_data, $user, '');
 }
 protected function getTrackerChildrenFromHierarchy(Tracker $tracker)
 {
     return $this->getHierarchyFactory()->getChildren($tracker->getId());
 }
Example #29
0
 public static function showEditForm(Tracker $tracker)
 {
     $tpl = array();
     $tpl['TRACKER_TYPE'] = $tracker->trackerType();
     $form = new PHPWS_Form('tracker');
     $form->addHidden('module', 'analytics');
     $form->addHidden('command', 'save_tracker');
     $form->addSubmit('submit', dgettext('analytics', 'Save Tracker'));
     if (isset($_REQUEST['tracker'])) {
         $form->addHidden('tracker', $_REQUEST['tracker']);
     }
     if ($tracker->getId() > 0) {
         $form->addHidden('tracker_id', $tracker->getId());
     }
     $form->addText('name', $tracker->getName());
     $form->setLabel('name', dgettext('analytics', 'Friendly Name'));
     $form->setRequired('name');
     $form->addCheck('active', 1);
     $form->setMatch('active', $tracker->isActive());
     $form->setLabel('active', dgettext('analytics', 'Currently Active'));
     $form->addCheck('disable_if_logged', 1);
     $form->setMatch('disable_if_logged', $tracker->getDisableIfLogged());
     $form->setLabel('disable_if_logged', dgettext('analytics', 'Disable Analytics if a user is logged in'));
     $tracker->addForm($form);
     $tpl = array_merge($tpl, $form->getTemplate());
     $tpl['TRACKER_FORM'] = PHPWS_Template::process($tpl, 'analytics', $tracker->getFormTemplate());
     return PHPWS_Template::process($tpl, 'analytics', 'edit.tpl');
 }
Example #30
0
 private function getArtifactDataFromSoapRequest(Tracker $tracker, $values, Tracker_Artifact $artifact = null)
 {
     $fields_data = array();
     foreach ($values as $field_value) {
         // field are identified by name, we need to retrieve the field id
         if ($field_value->field_name) {
             $field = $this->formelement_factory->getUsedFieldByName($tracker->getId(), $field_value->field_name);
             if ($field) {
                 $field_data = $field->getFieldDataFromSoapValue($field_value, $artifact);
                 if ($field_data !== null) {
                     // $field_value is an object: SOAP must cast it in ArtifactFieldValue
                     if (isset($fields_data[$field->getId()])) {
                         if (!is_array($fields_data[$field->getId()])) {
                             $fields_data[$field->getId()] = array($fields_data[$field->getId()]);
                         }
                         $fields_data[$field->getId()][] = $field_data;
                     } else {
                         $fields_data[$field->getId()] = $field_data;
                     }
                 } else {
                     throw new SoapFault(update_artifact_fault, 'Unknown value ' . print_r($field_value->field_value, true) . ' for field: ' . $field_value->field_name);
                 }
             } else {
                 throw new SoapFault(update_artifact_fault, 'Unknown field: ' . $field_value->field_name);
             }
         }
     }
     return $fields_data;
 }