public function process(Tracker_IDisplayTrackerLayout $layout, Codendi_Request $request, PFUser $current_user) { if (!$this->tracker->userCanSubmitArtifact($current_user)) { $this->logsErrorAndRedirectToTracker('plugin_tracker_admin', 'access_denied'); return; } $from_artifact = $this->artifact_factory->getArtifactByIdUserCanView($current_user, $request->get('from_artifact_id')); if (!$from_artifact || $from_artifact->getTracker() !== $this->tracker) { $this->logsErrorAndRedirectToTracker('plugin_tracker_include_type', 'error_missing_param'); return; } $from_changeset = $from_artifact->getChangeset($request->get('from_changeset_id')); if (!$from_changeset) { $this->logsErrorAndRedirectToTracker('plugin_tracker_include_type', 'error_missing_param'); return; } $submitted_values = $request->get('artifact'); if (!is_array($submitted_values)) { $this->logsErrorAndRedirectToTracker('plugin_tracker_include_type', 'error_missing_param'); return; } try { $this->processCopy($from_changeset, $current_user, $submitted_values); } catch (Tracker_XML_Exporter_TooManyChildrenException $exception) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_artifact', 'copy_too_many_children', array(Tracker_XML_ChildrenCollector::MAX))); $this->redirectToArtifact($from_artifact); } }
public function checkUserCanSubmit(PFUser $user, Tracker $tracker) { if (!$tracker->userCanSubmitArtifact($user)) { throw new \Luracast\Restler\RestException(403, $GLOBALS['Language']->getText('plugin_tracker', 'submit_at_least_one_field')); } }
/** @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, ''); }