private function doCreate() { $projectCreator = new ProjectCreator($this->project_manager, ReferenceManager::instance()); $data = $this->creation_request->getProjectValues(); $creationData = ProjectCreationData::buildFromFormArray($data); return $projectCreator->build($creationData); }
/** * Copyright (c) Xerox Corporation, Codendi Team, 2001-2009. All rights reserved * * * */ function service_create_service($arr, $group_id, $template, $force_enable = false) { // Convert link to real values // NOTE: if you change link variables here, change them also in src/www/project/admin/servicebar.php and src/www/include/Layout.class.php $link = $arr['link']; $pm = ProjectManager::instance(); if ($template['system']) { $link = str_replace('$projectname', $pm->getProject($group_id)->getUnixName(), $link); $link = str_replace('$sys_default_domain', $GLOBALS['sys_default_domain'], $link); $link = str_replace('$group_id', $group_id, $link); if ($GLOBALS['sys_force_ssl']) { $sys_default_protocol = 'https'; } else { $sys_default_protocol = 'http'; } $link = str_replace('$sys_default_protocol', $sys_default_protocol, $link); } else { //for non-system templates $link = service_replace_template_name_in_link($link, $template, $pm->getProject($group_id)); } $is_used = isset($template['is_used']) ? $template['is_used'] : $arr['is_used']; $server_id = isset($template['server_id']) ? $template['server_id'] : $arr['server_id']; $sql = "INSERT INTO service (group_id, label, description, short_name, link, is_active, is_used, scope, rank, location, server_id, is_in_iframe) VALUES (" . db_ei($group_id) . ", '" . db_es($arr['label']) . "', '" . db_es($arr['description']) . "', '" . db_es($arr['short_name']) . "', '" . db_es($link) . "', " . db_ei($arr['is_active']) . ", " . ($force_enable ? 1 : db_ei($is_used)) . ", '" . db_es($arr['scope']) . "', " . db_ei($arr['rank']) . ", '" . db_es($arr['location']) . "', " . db_ei($server_id) . ", " . db_ei($arr['is_in_iframe']) . ")"; $result = db_query($sql); if ($result) { // activate corresponding references $reference_manager =& ReferenceManager::instance(); if ($arr['short_name'] != "") { $reference_manager->addSystemReferencesForService($template['id'], $group_id, $arr['short_name']); } return true; } else { return false; } }
/** * @return ProjectCreator */ private function GivenAProjectCreator() { $projectManager = new MockProjectManager(); $creator = TestHelper::getPartialMock('ProjectCreator', array('createProject')); $creator->__construct($projectManager, ReferenceManager::instance()); return $creator; }
function generate() { global $Language; $request =& HTTPRequest::instance(); if ($data = $request->get('data')) { if (isset($data['users']['generate']) && $data['users']['generate']) { $um = UserManager::instance(); $nb_wanted = isset($data['users']['nb']) ? (int) $data['users']['nb'] : 1; $users = $this->_getUsersData(); reset($users); $nb_done = 0; while ((list(, $user) = each($users)) && $nb_wanted > $nb_done) { if (!$um->getUserByUserName($user['name'])) { require_once 'account.php'; account_create($user['name'], 'codendi', '', $user['realname'], '', '*****@*****.**', 'A', '', 0, 0, 'Europe/Paris', 'en_US', 'A'); $nb_done++; } } } if (isset($data['projects']['generate']) && $data['projects']['generate']) { $nb_wanted = isset($data['projects']['nb']) ? (int) $data['projects']['nb'] : 1; $projects = $this->_getProjectsData(); reset($projects); $nb_done = 0; while ((list(, $project) = each($projects)) && $nb_wanted > $nb_done) { if (!group_get_object_by_name($project['name'])) { $projectCreator = new ProjectCreator(ProjectManager::instance(), ReferenceManager::instance()); $projectCreator->create(array('project' => array('form_unix_name' => $project['name'], 'form_full_name' => $project['name'], 'form_short_description' => $project['description'], 'form_purpose' => $project['description'], 'form_required_sw' => '', 'form_patents' => '', 'form_comments' => '', 'built_from_template' => 100, 'is_test' => false, 'is_public' => true, 'trove' => array()))); $nb_done++; } } } } }
public static function onOutputPageBeforeHTML(OutputPage &$out, &$text) { global $wgTuleapArtLinksGroupId; $reference_manager = ReferenceManager::instance(); $reference_manager->insertReferences($text, $wgTuleapArtLinksGroupId); return true; }
public function itCreatesAProject() { $projectCreator = new ProjectCreator(ProjectManager::instance(), ReferenceManager::instance()); $projectCreator->create('short-name', 'Long name', array('project' => array('form_short_description' => '', 'is_test' => false, 'is_public' => false, 'services' => array(), 'built_from_template' => 100))); ProjectManager::clearInstance(); $project = ProjectManager::instance()->getProjectByUnixName('short-name'); $this->assertEqual($project->getPublicName(), 'Long name'); }
public function __construct(EventManager $event_manager, ProjectManager $project_manager, XML_RNGValidator $xml_validator, UGroupManager $ugroup_manager, User\XML\Import\IFindUserFromXMLReference $user_finder, Logger $logger) { $this->event_manager = $event_manager; $this->project_manager = $project_manager; $this->xml_validator = $xml_validator; $this->ugroup_manager = $ugroup_manager; $this->user_finder = $user_finder; $this->logger = $logger; $this->project_creator = new ProjectCreator($this->project_manager, ReferenceManager::instance(), true); }
/** * @return Tracker_Artifact_XMLImport */ public function build(User\XML\Import\IFindUserFromXMLReference $user_finder) { $artifact_factory = Tracker_ArtifactFactory::instance(); $formelement_factory = Tracker_FormElementFactory::instance(); $fields_validator = new Tracker_Artifact_Changeset_AtGivenDateFieldsValidator($formelement_factory); $changeset_dao = new Tracker_Artifact_ChangesetDao(); $changeset_comment_dao = new Tracker_Artifact_Changeset_CommentDao(); $logger = new Log_ConsoleLogger(); $send_notifications = false; $artifact_creator = new Tracker_ArtifactCreator($artifact_factory, $fields_validator, new Tracker_Artifact_Changeset_InitialChangesetAtGivenDateCreator($fields_validator, $formelement_factory, $changeset_dao, $artifact_factory, EventManager::instance())); $new_changeset_creator = new Tracker_Artifact_Changeset_NewChangesetAtGivenDateCreator($fields_validator, $formelement_factory, $changeset_dao, $changeset_comment_dao, $artifact_factory, EventManager::instance(), ReferenceManager::instance()); return new Tracker_Artifact_XMLImport(new XML_RNGValidator(), $artifact_creator, $new_changeset_creator, Tracker_FormElementFactory::instance(), $user_finder, new Tracker_FormElement_Field_List_Bind_Static_ValueDao(), $logger, $send_notifications); }
function getReferencesTable($groupId) { $html = ''; $html .= '<h3>' . $GLOBALS['Language']->getText('project_showdetails', 'references') . '</h3>'; $title_arr[] = $GLOBALS['Language']->getText('project_reference', 'r_keyword'); $title_arr[] = $GLOBALS['Language']->getText('project_reference', 'r_desc'); $title_arr[] = $GLOBALS['Language']->getText('project_reference', 'r_link'); $html .= html_build_list_table_top($title_arr, false, false, true); $referenceManager =& ReferenceManager::instance(); $references =& $referenceManager->getReferencesByGroupId($groupId); // References are sorted by scope first $row_num = 0; foreach ($references as $ref) { $html .= getReferenceRow($ref, $row_num); $row_num++; } $html .= '</table>'; return $html; }
/** * create - use this to create a new ArtifactType in the database. * * @param group_id: the group id of the new tracker * @param group_id_template: the template group id (used for the copy) * @param atid_template: the template artfact type id * @param name: the name of the new tracker * @param description: the description of the new tracker * @param itemname: the itemname of the new tracker * @return id on success, false on failure. */ function create($group_id, $group_id_template, $atid_template, $name, $description, $itemname, $ugroup_mapping = false, &$report_mapping = array()) { global $Language; if (!$name || !$description || !$itemname || trim($name) == "" || trim($description) == "" || trim($itemname) == "") { $this->setError('ArtifactTypeFactory: ' . $Language->getText('tracker_common_type', 'name_requ')); return false; } // Necessary test to avoid issues when exporting the tracker to a DB (e.g. '-' not supported as table name) if (!eregi("^[a-zA-Z0-9_]+\$", $itemname)) { $this->setError($Language->getText('tracker_common_type', 'invalid_shortname', $itemname)); return false; } $reference_manager = ReferenceManager::instance(); if ($reference_manager->_isKeywordExists($itemname, $group_id)) { $this->setError($Language->getText('tracker_common_type', 'shortname_already_exists', $itemname)); return false; } if ($this->isNameExists($name, $group_id)) { $this->setError($Language->getText('tracker_common_type', 'name_already_exists', $name)); return false; } // get the template Group object $pm = ProjectManager::instance(); $template_group = $pm->getProject($group_id_template); if (!$template_group || !is_object($template_group) || $template_group->isError()) { $this->setError('ArtifactTypeFactory: ' . $Language->getText('tracker_common_type', 'invalid_templ')); } // get the Group object of the new tracker $pm = ProjectManager::instance(); $group = $pm->getProject($group_id); if (!$group || !is_object($group) || $group->isError()) { $this->setError('ArtifactTypeFactory: ' . $Language->getText('tracker_common_type', 'invalid_templ')); } // We retrieve allow_copy from template $at_template = new ArtifactType($template_group, $atid_template); $id_sharing = new TrackerIdSharingDao(); if ($id = $id_sharing->generateTrackerId()) { // First, we create a new ArtifactType into artifact_group_list // By default, set 'instantiate_for_new_projects' to '1', so that a project that is not yet a // template will be able to have its trackers cloned by default when it becomes a template. $sql = "INSERT INTO \n artifact_group_list \n (group_artifact_id, group_id, name, description, item_name, allow_copy,\n submit_instructions,browse_instructions,instantiate_for_new_projects,stop_notification\n ) \n VALUES \n ({$id},\n '" . db_ei($group_id) . "',\n '" . db_es($name) . "',\n '" . db_es($description) . "',\n '" . db_es($itemname) . "',\n '" . db_ei($at_template->allowsCopy()) . "',\n '" . db_es($at_template->getSubmitInstructions()) . "',\n '" . db_es($at_template->getBrowseInstructions()) . "',1,0)"; //echo $sql; $res = db_query($sql); if (!$res || db_affected_rows($res) <= 0) { $this->setError('ArtifactTypeFactory: ' . db_error()); return false; } else { //No need to get the last insert id since we already know the id : $id //$id = db_insertid($res,'artifact_group_list','group_artifact_id'); $at_new = new ArtifactType($group, $id); if (!$at_new->fetchData($id)) { $this->setError('ArtifactTypeFactory: ' . $Language->getText('tracker_common_type', 'load_fail')); return false; } else { //create global notifications $sql = "INSERT INTO artifact_global_notification (tracker_id, addresses, all_updates, check_permissions)\n SELECT " . db_ei($id) . ", addresses, all_updates, check_permissions\n FROM artifact_global_notification\n WHERE tracker_id = " . db_ei($atid_template); $res = db_query($sql); if (!$res || db_affected_rows($res) <= 0) { $this->setError('ArtifactTypeFactory: ' . db_error()); } // Create fieldset factory $art_fieldset_fact = new ArtifactFieldSetFactory($at_template); // Then copy all the field sets. $mapping_field_set_array = $art_fieldset_fact->copyFieldSets($atid_template, $id); if (!$mapping_field_set_array) { $this->setError('ArtifactTypeFactory: ' . $art_fieldset_fact->getErrorMessage()); return false; } // Create field factory $art_field_fact = new ArtifactFieldFactory($at_template); // Then copy all the fields informations if (!$art_field_fact->copyFields($id, $mapping_field_set_array, $ugroup_mapping)) { $this->setError('ArtifactTypeFactory: ' . $art_field_fact->getErrorMessage()); return false; } // Then copy all the reports informations // Create field factory $art_report_fact = new ArtifactReportFactory(); if (!($report_mapping = $art_report_fact->copyReports($atid_template, $id))) { $this->setError('ArtifactTypeFactory: ' . $art_report_fact->getErrorMessage()); return false; } $em =& EventManager::instance(); $pref_params = array('atid_source' => $atid_template, 'atid_dest' => $id); $em->processEvent('artifactType_created', $pref_params); // Copy artifact_notification_event and artifact_notification_role if (!$at_new->copyNotificationEvent($id)) { return false; } if (!$at_new->copyNotificationRole($id)) { return false; } // Create user permissions: None for group members and Admin for group admin if (!$at_new->createUserPerms($id)) { return false; } // Create canned responses $canned_new = new ArtifactCanned($at_new); $canned_template = $at_template->getCannedResponses(); if ($canned_template && db_numrows($canned_template) > 0) { while ($row = db_fetch_array($canned_template)) { $canned_new->create($row['title'], $row['body']); } } //Copy template permission permission_copy_tracker_and_field_permissions($atid_template, $id, $group_id_template, $group_id, $ugroup_mapping); //Copy Rules require_once 'ArtifactRulesManager.class.php'; $arm = new ArtifactRulesManager(); $arm->copyRules($atid_template, $id); } } } return $id; }
function getHTMLDisplayCrossRefs($with_links = true, $condensed = false, $isBrowser = true) { global $Language; /** * Array of cross references grouped by nature (to easy cross reference display) * Array has the form: * ['nature1'] => array ( * ['both'] => array ( * CrossReference1, * CrossReference2, * ...) * ['source'] => array ( * CrossReference3, * CrossReference4, * ...) * ['target'] => array ( * CrossReference3, * CrossReference4, * ...) * ['nature2'] => array ( * ['both'] => array ( * CrossReference5, * CrossReference6, * ...) * ['source'] => array ( * CrossReference7, * CrossReference8, * ...) * ['target'] => array ( * CrossReference9, * CrossReference10, * ...) * ... */ $crossRefArray = $this->getCrossReferences(); $reference_manager = ReferenceManager::instance(); $available_natures = $reference_manager->getAvailableNatures(); $user = UserManager::instance()->getCurrentUser(); $itemIsReferenced = false; if ($isBrowser && ($user->isSuperUser() || $user->isMember($this->entity_gid, 'A'))) { $can_delete = true; } else { $can_delete = false; } $classes = array('both' => 'cross_reference', 'source' => 'referenced_by', 'target' => 'reference_to'); $img = array('both' => array('both_arrows', 'cross_referenced'), 'source' => array('left_arrow', 'referenced_in'), 'target' => array('right_arrow', 'reference_to')); $message = addslashes($GLOBALS['Language']->getText('cross_ref_fact_include', 'confirm_delete')); // HTML part (stored in $display) $display = ''; if (!$condensed) { $display .= '<p id="cross_references_legend">' . $Language->getText('cross_ref_fact_include', 'legend') . '</p>'; } // loop through natures foreach ($crossRefArray as $nature => $refArraySourceTarget) { $display .= '<div class="nature">'; if (!$condensed) { $display .= "<p><b>" . $available_natures[$nature]['label'] . "</b>"; } // loop through each type of target $display .= '<ul class="cross_reference_list">'; foreach (array('both', 'target', 'source') as $key) { if (array_key_exists($key, $refArraySourceTarget)) { // one li for one type of ref (both, target, source) $display .= '<li class="' . $classes[$key] . '">'; $display .= $GLOBALS['HTML']->getImage('ic/' . $img[$key][0] . '.png', array('alt' => $Language->getText('cross_ref_fact_include', $img[$key][1]), 'align' => 'top-left', 'hspace' => '5', 'title' => $Language->getText('cross_ref_fact_include', $img[$key][1]))); // the refs $spans = array(); foreach ($refArraySourceTarget[$key] as $currRef) { $span = ''; if ($key === 'source') { $id = $currRef->getRefSourceKey() . "_" . $currRef->getRefSourceId(); $ref = $currRef->getRefSourceKey() . " #" . $currRef->getRefSourceId(); $url = $currRef->getRefSourceUrl(); } else { $id = $currRef->getRefTargetKey() . "_" . $currRef->getRefTargetId(); $ref = $currRef->getRefTargetKey() . " #" . $currRef->getRefTargetId(); $url = $currRef->getRefTargetUrl(); } $span .= '<span id="' . $id . '" class="link_to_ref">'; if ($with_links) { $span .= '<a class="cross-reference" title="' . $available_natures[$nature]['label'] . '" href="' . $url . '">'; $span .= $ref . '</a>'; } else { $span .= $ref; } if ($with_links && $can_delete && !$condensed) { $params = $this->getParams($currRef); $span .= '<a class="delete_ref" href="/reference/rmreference.php' . $params . '" onClick="return delete_ref(\'' . $id . '\', \'' . $message . '\');">'; $span .= $GLOBALS['HTML']->getImage('ic/cross.png', array('alt' => $Language->getText('cross_ref_fact_include', 'delete'), 'title' => $Language->getText('cross_ref_fact_include', 'delete'))); $span .= '</a>'; } $spans[] = $span; } $display .= implode(', </span>', $spans) . '</span>'; $display .= '</li>'; } } $display .= "</ul>"; $display .= "</p>"; $display .= "</div>"; } return $display; }
function frs_process_release_form($is_update, $request, $group_id, $title, $url) { global $frspf, $frsrf, $frsff; $pm = ProjectManager::instance(); //get and filter all inputs from $request $release = array(); $res = $request->get('release'); $vName = new Valid_String(); $vPackage_id = new Valid_UInt(); $vStatus_id = new Valid_UInt(); if ($vName->validate($res['name']) && $vPackage_id->validate($res['package_id']) && $vStatus_id->validate($res['status_id'])) { $release['status_id'] = $res['status_id']; $release['name'] = $res['name']; $release['package_id'] = $res['package_id']; } else { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_update_failed')); $GLOBALS['Response']->redirect('/file/showfiles.php?group_id=' . $group_id); } $um = UserManager::instance(); $user = $um->getCurrentUser(); $vDate = new Valid_String(); if ($vDate->validate($res['date'])) { $release['date'] = $res['date']; } else { $release['date'] = ""; } $vRelease_notes = new Valid_Text(); if ($vRelease_notes->validate($res['release_notes'])) { $release['release_notes'] = $res['release_notes']; } else { $release['release_notes'] = ""; } $vChange_log = new Valid_Text(); if ($vChange_log->validate($res['change_log'])) { $release['change_log'] = $res['change_log']; } else { $release['change_log'] = ""; } if ($request->valid(new Valid_String('js'))) { $js = $request->get('js'); } else { $js = ""; } if ($request->validArray(new Valid_String('ftp_file'))) { $ftp_file = $request->get('ftp_file'); } else { $ftp_file = array(); } if ($request->validArray(new Valid_UInt('file_processor'))) { $file_processor = $request->get('file_processor'); } else { $file_processor = array(); } if ($request->validArray(new Valid_UInt('file_type'))) { $file_type = $request->get('file_type'); } else { $file_type = array(); } if ($request->validArray(new Valid_String('reference_md5'))) { $reference_md5 = $request->get('reference_md5'); } else { $reference_md5 = array(); } if ($request->validArray(new Valid_String('comment'))) { $comment = $request->get('comment'); } else { $comment = array(); } if ($request->validArray(new Valid_UInt('ftp_file_processor'))) { $ftp_file_processor = $request->get('ftp_file_processor'); } else { $ftp_file_processor = array(); } if ($request->validArray(new Valid_UInt('ftp_file_type'))) { $ftp_file_type = $request->get('ftp_file_type'); } else { $ftp_file_type = array(); } if ($request->validArray(new Valid_String('ftp_reference_md5'))) { $ftp_reference_md5 = $request->get('ftp_reference_md5'); } else { $ftp_reference_md5 = array(); } if ($request->valid(new Valid_String('release_news_subject'))) { $release_news_subject = $request->get('release_news_subject'); } else { $release_news_subject = ""; } if ($request->valid(new Valid_Text('release_news_details'))) { $release_news_details = $request->get('release_news_details'); } else { $release_news_details = ""; } if ($request->valid(new Valid_WhiteList('private_news', array(0, 1)))) { $private_news = $request->get('private_news'); } else { $private_news = 0; } if ($request->validArray(new Valid_UInt('ugroups'))) { $ugroups = $request->get('ugroups'); } else { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_update_failed')); $GLOBALS['Response']->redirect('/file/showfiles.php?group_id=' . $group_id); } if ($request->valid(new Valid_WhiteList('release_submit_news', array(0, 1)))) { $release_submit_news = (int) $request->get('release_submit_news'); } else { $release_submit_news = 0; } if ($request->valid(new Valid_WhiteList('notification', array(0, 1)))) { $notification = $request->get('notification'); } else { $notification = 0; } if ($is_update) { if ($request->validArray(new Valid_UInt('release_files_to_delete'))) { $release_files_to_delete = $request->get('release_files_to_delete'); } else { $release_files_to_delete = array(); } if ($request->validArray(new Valid_UInt('release_files'))) { $release_files = $request->get('release_files'); } else { $release_files = array(); } if ($request->validArray(new Valid_UInt('release_file_processor'))) { $release_file_processor = $request->get('release_file_processor'); } else { $release_file_processor = array(); } if ($request->validArray(new Valid_UInt('release_file_type'))) { $release_file_type = $request->get('release_file_type'); } else { $release_file_type = array(); } if ($request->validArray(new Valid_String('release_reference_md5'))) { $release_reference_md5 = $request->get('release_reference_md5'); } else { $release_reference_md5 = array(); } if ($request->validArray(new Valid_UInt('new_release_id'))) { $new_release_id = $request->get('new_release_id'); } else { $new_release_id = array(); } if ($request->validArray(new Valid_String('release_time'))) { $release_time = $request->get('release_time'); } else { $release_time = array(); } if ($request->validArray(new Valid_String('reference_md5'))) { $reference_md5 = $request->get('reference_md5'); } else { $reference_md5 = array(); } if ($request->validArray(new Valid_Text('release_comment'))) { $release_comment = $request->get('release_comment'); } else { $release_comment = array(); } if ($request->valid(new Valid_UInt('id'))) { $release['release_id'] = $request->get('id'); } else { exit; } } $validator = new frsValidator(); if ($is_update) { $valid = $validator->isValidForUpdate($release, $group_id); } else { $valid = $validator->isValidForCreation($release, $group_id); } if ($valid) { //uplaod release_notes and change_log if needed $data_uploaded = false; if (isset($_FILES['uploaded_change_log']) && !$_FILES['uploaded_change_log']['error']) { $code = addslashes(fread(fopen($_FILES['uploaded_change_log']['tmp_name'], 'r'), file_utils_get_size($_FILES['uploaded_change_log']['tmp_name']))); if (strlen($code) > 0 && strlen($code) < $GLOBALS['sys_max_size_upload']) { //size is fine $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'data_uploaded')); $data_uploaded = true; $release['change_log'] = $code; } else { //too big or small $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('file_admin_editreleases', 'length_err', $GLOBALS['sys_max_size_upload'])); } } if (isset($_FILES['uploaded_release_notes']) && !$_FILES['uploaded_release_notes']['error']) { $code = addslashes(fread(fopen($_FILES['uploaded_release_notes']['tmp_name'], 'r'), file_utils_get_size($_FILES['uploaded_release_notes']['tmp_name']))); if (strlen($code) > 0 && strlen($code) < $GLOBALS['sys_max_size_upload']) { //size is fine if (!$data_uploaded) { $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'data_uploaded')); } $release['release_notes'] = $code; } else { //too big or small $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('file_admin_editreleases', 'length_err', $GLOBALS['sys_max_size_upload'])); } } if ($is_update) { // make sure that we don't change the date by error because of timezone reasons. // eg: release created in India (GMT +5:30) at 2004-06-03. // MLS in Los Angeles (GMT -8) changes the release notes // the release_date that we showed MLS is 2004-06-02. // with mktime(0,0,0,2,6,2004); we will change the unix time in the database // and the people in India will discover that their release has been created on 2004-06-02 $rel =& $frsrf->getFRSReleaseFromDb($release['release_id']); if (format_date('Y-m-d', $rel->getReleaseDate()) == $release['date']) { // the date didn't change => don't update it $unix_release_time = $rel->getReleaseDate(); } else { $date_list = split("-", $release['date'], 3); $unix_release_time = mktime(0, 0, 0, $date_list[1], $date_list[2], $date_list[0]); } } else { //parse the date $date_list = split("-", $release['date'], 3); $unix_release_time = mktime(0, 0, 0, $date_list[1], $date_list[2], $date_list[0]); } //now we create or update the release $array = array('release_date' => $unix_release_time, 'name' => $release['name'], 'status_id' => $release['status_id'], 'package_id' => $release['package_id'], 'notes' => $release['release_notes'], 'changes' => $release['change_log']); if ($is_update) { $array['release_id'] = $release['release_id']; } if ($is_update) { $res = $frsrf->update($array); if (!$res) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_update_failed')); //insert failed - go back to definition screen } else { //release added - now show the detail page for this new release $release_id = $array['release_id']; $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_updated', $release['name'])); } } else { $res = $frsrf->create($array); if (!$res) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language'] > getText('file_admin_editreleases', 'add_rel_fail')); //insert failed - go back to definition screen } else { //release added - now show the detail page for this new release $release_id = $res; $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_added')); } } if ($res) { // extract cross references $reference_manager =& ReferenceManager::instance(); $reference_manager->extractCrossRef($release['release_notes'], $release_id, ReferenceManager::REFERENCE_NATURE_RELEASE, $group_id); $reference_manager->extractCrossRef($release['change_log'], $release_id, ReferenceManager::REFERENCE_NATURE_RELEASE, $group_id); //set the release permissions list($return_code, $feedbacks) = permission_process_selection_form($group_id, 'RELEASE_READ', $release_id, $ugroups); if (!$return_code) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editpackages', 'perm_update_err')); $GLOBALS['Response']->addFeedback('error', $feedbacks); } //submit news if requested if ($release_id && user_ismember($group_id, 'A') && $release_submit_news) { news_submit($group_id, $release_news_subject, $release_news_details, $private_news, 3); } // Send notification if ($notification) { $rel = $frsrf->getFRSReleaseFromDb($release_id); $count = $frsrf->emailNotification($rel); if ($count === false) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'mail_failed', array($GLOBALS['sys_email_admin']))); } else { if ($count > 0) { $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'email_sent', $count)); } } } $group = $pm->getProject($group_id); $group_unix_name = $group->getUnixName(false); $project_files_dir = $GLOBALS['ftp_frs_dir_prefix'] . '/' . $group_unix_name; if ($is_update) { $files =& $rel->getFiles(); //remove files foreach ($release_files_to_delete as $rel_file) { $res =& $frsff->getFRSFileFromDb($rel_file); $fname = $res->getFileName(); $res = $frsff->delete_file($group_id, $rel_file); if ($res == 0) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'f_not_yours', basename($fname))); } else { $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'file_deleted', basename($fname))); } } //update files $index = 0; foreach ($release_files as $rel_file) { if (!$release_files_to_delete || !in_array($rel_file, $release_files_to_delete)) { $package_id = $release['package_id']; $fname = $files[$index]->getFileName(); $list = split('/', $fname); $fname = $list[sizeof($list) - 1]; if ($new_release_id[$index] != $release_id) { //changing to a different release for this file //see if the new release is valid for this project $res2 = $frsrf->getFRSReleaseFromDb($new_release_id[$index], $group_id); if (!$res2 || count($res2) < 1) { //release not found for this project $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_not_yours', $fname)); } else { $package_id = $res2->getPackageID(); } } if ($new_release_id[$index] == $release_id || $res2) { if (!ereg("[0-9]{4}-[0-9]{2}-[0-9]{2}", $release_time[$index])) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('file_admin_editreleases', 'data_not_parsed_file', $fname)); } else { $res2 =& $frsff->getFRSFileFromDb($rel_file); if (format_date('Y-m-d', $res2->getReleaseTime()) == $release_time[$index]) { $unix_release_time = $res2->getReleaseTime(); } else { $date_list = split("-", $release_time[$index], 3); $unix_release_time = mktime(0, 0, 0, $date_list[1], $date_list[2], $date_list[0]); } $array = array('release_id' => $new_release_id[$index], 'release_time' => $unix_release_time, 'type_id' => $release_file_type[$index], 'processor_id' => $release_file_processor[$index], 'file_id' => $rel_file, 'comment' => $release_comment[$index], 'filename' => 'p' . $package_id . '_r' . $new_release_id[$index] . '/' . $fname, 'filepath' => 'p' . $package_id . '_r' . $new_release_id[$index] . '/' . $fname . '_' . $unix_release_time); if ($release_reference_md5[$index] && $release_reference_md5[$index] != '') { $array['reference_md5'] = $release_reference_md5[$index]; } $res = $frsff->update($array); if ($res) { $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'file_updated', $fname)); } } } } $index++; } } //add new files //files processing $http_files_list = array(); $processor_type_list = array(); $file_type_list = array(); $http_files_processor_type_list = array(); $ftp_files_processor_type_list = array(); if (isset($js) && $js == 'no_js') { //if javascript is not allowed, there is maximum one file to upload // TODO : fix warnings due to array instead of string for "file_processor", "file_type" & "reference_md5" if ($ftp_file[0] != -1) { $ftp_files_processor_type_list[] = array('name' => $ftp_file[0], 'processor' => $file_processor, 'type' => $file_type, 'reference_md5' => $reference_md5, 'comment' => $comment); } else { if (trim($_FILES['file']['name'][0]) != '') { $http_files_processor_type_list[] = array('error' => $_FILES['file']['error'][0], 'name' => stripslashes($_FILES['file']['name'][0]), 'tmp_name' => $_FILES['file']['tmp_name'][0], 'processor' => $file_processor, 'type' => $file_type, 'reference_md5' => $reference_md5, 'comment' => $comment); } } } else { //get http files with the associated processor type and file type in allowed javascript case $nb_files = isset($_FILES['file']) ? count($_FILES['file']['name']) : 0; for ($i = 0; $i < $nb_files; $i++) { if (trim($_FILES['file']['name'][$i]) != '') { $http_files_processor_type_list[] = array('error' => $_FILES['file']['error'][$i], 'name' => stripslashes($_FILES['file']['name'][$i]), 'tmp_name' => $_FILES['file']['tmp_name'][$i], 'processor' => $file_processor[$i], 'type' => $file_type[$i], 'reference_md5' => $reference_md5[$i], 'comment' => $comment[$i]); } } //remove hidden ftp_file input (if the user let the select boxe on --choose file) $tmp_file_list = array(); $index = 0; foreach ($ftp_file as $file) { if (trim($file) != '') { $ftp_files_processor_type_list[] = array('name' => $file, 'processor' => $ftp_file_processor[$index], 'type' => $ftp_file_type[$index], 'reference_md5' => $ftp_reference_md5[$index]); $index++; } } } if (count($http_files_processor_type_list) > 0 || count($ftp_files_processor_type_list) > 0) { //see if this release belongs to this project $res1 =& $frsrf->getFRSReleaseFromDb($release_id, $group_id); if (!$res1 || count($res1) < 1) { //release not found for this project $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_not_yours')); } else { $now = time(); $addingFiles = false; //iterate and add the http files to the frs_file table foreach ($http_files_processor_type_list as $file) { $filename = $file['name']; if (isset($file['error'])) { switch ($file['error']) { case UPLOAD_ERR_OK: // all is OK break; case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error_upload_size', $file['error'])); break; case UPLOAD_ERR_PARTIAL: $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error_upload_partial', $file['error'])); break; case UPLOAD_ERR_NO_FILE: $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error_upload_nofile', $file['error'])); break; default: $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error_upload_unknown', $file['error'])); } } if (is_uploaded_file($file['tmp_name'])) { $uploaddir = $frsff->getSrcDir($request->getProject()); $uploadfile = $uploaddir . "/" . basename($filename); if (!file_exists($uploaddir) || !is_writable($uploaddir) || !move_uploaded_file($file['tmp_name'], $uploadfile)) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'not_add_file') . ": " . basename($filename)); } else { $newFile = new FRSFile(); $newFile->setRelease($res1); $newFile->setFileName($filename); $newFile->setProcessorID($file['processor']); $newFile->setTypeID($file['type']); $newFile->setReferenceMd5($file['reference_md5']); $newFile->setUserId($user->getId()); $newFile->setComment($file['comment']); try { $frsff->createFile($newFile); $addingFiles = true; } catch (Exception $e) { $GLOBALS['Response']->addFeedback('error', $e->getMessage()); } } } else { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'not_add_file') . ": " . basename($filename)); } } //iterate and add the ftp files to the frs_file table foreach ($ftp_files_processor_type_list as $file) { $filename = $file['name']; $newFile = new FRSFile(); $newFile->setRelease($res1); $newFile->setFileName($filename); $newFile->setProcessorID($file['processor']); $newFile->setTypeID($file['type']); $newFile->setReferenceMd5($file['reference_md5']); $newFile->setUserId($user->getId()); try { $frsff->createFile($newFile, ~FRSFileFactory::COMPUTE_MD5); $addingFiles = true; $em = EventManager::instance(); $em->processEvent(Event::COMPUTE_MD5SUM, array('fileId' => $newFile->getFileID())); $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'offline_md5', $filename)); } catch (Exception $e) { $GLOBALS['Response']->addFeedback('error', $e->getMessage()); } } } if ($addingFiles) { $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'add_files')); } } //redirect to files $GLOBALS['Response']->redirect('/file/?group_id=' . $group_id); } } else { $GLOBALS['Response']->addFeedback('error', $validator->getErrors()); } frs_display_release_form($is_update, $release, $group_id, $title, $url); }
* along with Tuleap. If not, see <http://www.gnu.org/licenses/>. */ require_once 'pre.php'; $git_dao = new GitDao(); $user_manager = UserManager::instance(); $git_repository_factory = new GitRepositoryFactory($git_dao, ProjectManager::instance()); $system_event_manager = new Git_SystemEventManager(SystemEventManager::instance(), $git_repository_factory); $git_plugin = PluginManager::instance()->getPluginByName('git'); $logger = $git_plugin->getLogger(); if ($argv[1] == "--init") { $repository_path = $argv[2]; $user_name = $argv[3]; $repository = $git_repository_factory->getFromFullPath($repository_path); if ($repository) { $system_event_manager->queueGrokMirrorManifestFollowingAGitPush($repository); } } else { $repository_path = $argv[1]; $user_name = $argv[2]; $old_rev = $argv[3]; $new_rev = $argv[4]; $refname = $argv[5]; try { $git_exec = new Git_Exec($repository_path, $repository_path); $post_receive = new Git_Hook_PostReceive(new Git_Hook_LogAnalyzer($git_exec, $logger), $git_repository_factory, $user_manager, new Git_Ci_Launcher(new Jenkins_Client(new Http_Client()), new Git_Ci_Dao(), $logger), new Git_Hook_ParseLog(new Git_Hook_LogPushes($git_dao), new Git_Hook_ExtractCrossReferences($git_exec, ReferenceManager::instance()), $logger)); $post_receive->execute($repository_path, $user_name, $old_rev, $new_rev, $refname); } catch (Exception $exception) { $logger->error("[git post-receive] {$repository_path} {$user_name} {$refname} {$old_rev} {$new_rev} " . $exception->getMessage()); exit(1); } }
protected function extractCrossRefs($artifact, $content) { return ReferenceManager::instance()->extractCrossRef($content, $artifact->getId(), Tracker_Artifact::REFERENCE_NATURE, $this->getTracker()->getGroupID(), UserManager::instance()->getCurrentUser()->getId(), $this->getTracker()->getItemName()); }
/** * @return ReferenceManager */ protected function getReferenceManager() { return ReferenceManager::instance(); }
/** * @return ReferenceManager */ public function getReferenceManager() { return ReferenceManager::instance(); }
public function __construct() { $this->project_manager = ProjectManager::instance(); $this->user_manager = UserManager::instance(); $this->user_permissions_dao = new UserPermissionsDao(); $this->project_creator = new ProjectCreator($this->project_manager, ReferenceManager::instance()); $GLOBALS['Language'] = new BaseLanguage('en_US', 'en_US'); $GLOBALS['sys_lf'] = '\\n'; }
function update() { $request =& $this->_controler->request; if ($request->exist('item')) { $user =& $this->_controler->getUser(); $data = $request->get('item'); $item_factory =& $this->_getItemFactory($request->get('group_id')); $item =& $item_factory->getItemFromDb($data['id']); // Update Owner $ownerChanged = false; if (isset($data['owner'])) { $_owner_id = $this->_checkOwnerChange($data['owner'], $user); if ($_owner_id != $item->getOwnerId()) { $ownerChanged = true; $um = $this->_getUserManagerInstance(); $_oldowner = $um->getUserById($item->getOwnerId())->getName(); $_newowner = $um->getUserById($_owner_id)->getName(); $data['user_id'] = $_owner_id; } unset($data['owner']); } // Change creation date if (isset($data['create_date']) && $data['create_date'] != '') { $old_create_date = $item->getCreateDate(); if ($old_create_date == $data['create_date']) { $create_date_changed = false; } else { $create_date_changed = true; } } else { $create_date_changed = false; } // Change update date if (isset($data['update_date']) && $data['update_date'] != '') { $old_update_date = $item->getUpdateDate(); if ($old_update_date == $data['update_date']) { $update_date_changed = false; } else { $update_date_changed = true; } } else { $update_date_changed = false; } // Special handling of obsolescence date if (isset($data['obsolescence_date']) && $data['obsolescence_date'] != 0) { if (preg_match('/^([0-9]+)-([0-9]+)-([0-9]+)$/', $data['obsolescence_date'], $d)) { $data['obsolescence_date'] = gmmktime(0, 0, 0, $d[2], $d[3], $d[1]); } else { if (!preg_match('/^[0-9]*$/', $data['obsolescence_date'])) { $data['obsolescence_date'] = 0; } } } // Check is status change $statusChanged = false; if (array_key_exists('status', $data)) { $old_st = $item->getStatus(); if ($old_st != $data['status']) { $statusChanged = true; } } // For empty document, check if type changed $createFile = false; $itemType = $item_factory->getItemTypeForItem($item); if ($itemType == PLUGIN_DOCMAN_ITEM_TYPE_EMPTY && isset($data['item_type']) && $itemType != $data['item_type'] && ($data['item_type'] != PLUGIN_DOCMAN_ITEM_TYPE_EMBEDDEDFILE || $this->_controler->getProperty('embedded_are_allowed'))) { if ($data['item_type'] == PLUGIN_DOCMAN_ITEM_TYPE_EMBEDDEDFILE || $data['item_type'] == PLUGIN_DOCMAN_ITEM_TYPE_FILE) { $createFile = true; } } else { $data['item_type'] = $itemType; } $updated = $item_factory->update($data); if ($updated) { $this->event_manager->processEvent('plugin_docman_event_update', array('group_id' => $request->get('group_id'), 'item' => $item, 'new' => $data, 'user' => $user)); } // Log the 'edit' event if link_url or wiki_page are set if (isset($data['link_url']) || isset($data['wiki_page'])) { $this->event_manager->processEvent('plugin_docman_event_edit', array('group_id' => $request->get('group_id'), 'item' => &$item, 'user' => &$user)); } if ($ownerChanged) { $this->_raiseMetadataChangeEvent($user, $item, $request->get('group_id'), $_oldowner, $_newowner, 'owner'); } if ($statusChanged) { $this->_raiseMetadataChangeEvent($user, $item, $request->get('group_id'), $old_st, $data['status'], 'status'); } if ($create_date_changed) { $this->_raiseMetadataChangeEvent($user, $item, $request->get('group_id'), $old_create_date, $data['create_date'], 'create_date'); } if ($update_date_changed) { $this->_raiseMetadataChangeEvent($user, $item, $request->get('group_id'), $old_update_date, $data['update_date'], 'update_date'); } if ($createFile) { // Re-create from DB (because of type changed) $item = $item_factory->getItemFromDb($data['id']); $this->_storeFile($item); } // Update real metatata if ($request->exist('metadata')) { $groupId = (int) $request->get('group_id'); $metadata_array = $request->get('metadata'); $mdvFactory = new Docman_MetadataValueFactory($groupId); $mdvFactory->updateFromRow($data['id'], $metadata_array); if ($mdvFactory->isError()) { $this->_controler->feedback->log('error', $mdvFactory->getErrorMessage()); } else { // Recursive update of properties if ($request->exist('recurse')) { $recurseArray = $request->get('recurse'); // Check if all are actually inheritable $metadataFactory = new Docman_MetadataFactory($groupId); $inheritableMdLabelArray = $metadataFactory->getInheritableMdLabelArray(); if (count(array_diff($recurseArray, $inheritableMdLabelArray)) == 0) { $dPm =& Docman_PermissionsManager::instance($groupId); if ($dPm->currentUserCanWriteSubItems($data['id'])) { $subItemsWritableVisitor =& $dPm->getSubItemsWritableVisitor(); if ($this->_controler->_actionParams['recurseOnDocs']) { $itemIdArray = $subItemsWritableVisitor->getItemIdList(); } else { $itemIdArray = $subItemsWritableVisitor->getFolderIdList(); } // Remove the first element (parent item) to keep // only the children. array_shift($itemIdArray); if (count($itemIdArray) > 0) { $recurseArray = $request->get('recurse'); $mdvFactory->massUpdateFromRow($data['id'], $recurseArray, $itemIdArray); // extract cross references $reference_manager =& ReferenceManager::instance(); foreach ($metadata_array as $curr_metadata_value) { foreach ($itemIdArray as $curr_item_id) { $reference_manager->extractCrossRef($curr_metadata_value, $curr_item_id, ReferenceManager::REFERENCE_NATURE_DOCUMENT, $groupId); } } } else { $this->_controler->feedback->log('warning', $GLOBALS['Language']->getText('plugin_docman', 'warning_no_item_recurse')); } } } } } } $this->_controler->feedback->log('info', $GLOBALS['Language']->getText('plugin_docman', 'info_item_updated')); } $this->event_manager->processEvent('send_notifications', array()); }
function util_make_reference_links($data, $group_id) { if (empty($data)) { return $data; } $reference_manager =& ReferenceManager::instance(); if ($group_id) { $reference_manager->insertReferences($data, $group_id); } return $data; }
protected function editOptions($request) { $project = ProjectManager::instance()->getProject($this->group_id); $old_item_name = $this->getItemName(); $old_name = $this->getName(); $this->name = trim($request->getValidated('name', 'string', '')); $this->description = trim($request->getValidated('description', 'text', '')); $this->item_name = trim($request->getValidated('item_name', 'string', '')); $this->allow_copy = $request->getValidated('allow_copy') ? 1 : 0; $this->submit_instructions = $request->getValidated('submit_instructions', 'text', ''); $this->browse_instructions = $request->getValidated('browse_instructions', 'text', ''); $this->instantiate_for_new_projects = $request->getValidated('instantiate_for_new_projects') ? 1 : 0; if (!$this->name || !$this->description || !$this->item_name) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_common_type', 'name_requ')); } else { if ($old_name != $this->name) { if (TrackerFactory::instance()->isNameExists($this->name, $this->group_id)) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_common_type', 'name_already_exists', $this->name)); return false; } } if ($old_item_name != $this->item_name) { if (!$this->itemNameIsValid($this->item_name)) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_common_type', 'invalid_shortname', $this->item_name, CODENDI_PURIFIER_CONVERT_HTML)); return false; } if (TrackerFactory::instance()->isShortNameExists($this->item_name, $this->group_id)) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_common_type', 'shortname_already_exists', $this->item_name)); return false; } $reference_manager = ReferenceManager::instance(); if (!$reference_manager->checkKeyword($this->item_name)) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_common_type', 'invalid_shortname', $this->item_name, CODENDI_PURIFIER_CONVERT_HTML)); return false; } if ($reference_manager->_isKeywordExists($this->item_name, $this->group_id)) { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_tracker_common_type', 'shortname_already_exists', $this->item_name, CODENDI_PURIFIER_CONVERT_HTML)); return false; } //Update reference and cross references //WARNING this replace existing reference(s) so that all old_item_name reference won't be extracted anymore $reference_manager->updateProjectReferenceShortName($this->group_id, $old_item_name, $this->item_name); } $dao = new TrackerDao(); if ($dao->save($this)) { $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('plugin_tracker_admin', 'successfully_updated')); } else { $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error')); } } }
function edit() { global $sys_default_domain, $Language; $request =& HTTPRequest::instance(); $group_id = $request->get('group_id'); $purifier = Codendi_HTMLPurifier::instance(); $pm = ProjectManager::instance(); $project = $pm->getProject($group_id); $refid = $request->get('reference_id'); if (!$refid) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('project_reference', 'missing_parameter')); } $referenceManager =& ReferenceManager::instance(); $ref =& $referenceManager->loadReference($refid, $group_id); $su = false; if (user_is_super_user()) { $su = true; } $star = ' <font color="red">*</font>'; // "Read-only" -> can only edit reference availability (system reference) $ro = false; if ($ref->isSystemReference() && $ref->getGroupId() != 100) { $ro = true; $star = ""; } echo ' <h3>' . $Language->getText('project_reference', 'edit_r') . '</h3> <form name="form_create" method="post" action="/project/admin/reference.php?group_id=' . $group_id . '"> <input type="hidden" name="action" VALUE="do_edit"> <input type="hidden" name="view" VALUE="browse"> <input type="hidden" name="group_id" VALUE="' . $group_id . '"> <input type="hidden" name="reference_id" VALUE="' . $refid . '"> <table width="100%" cellspacing=0 cellpadding=3 border=0> <tr><td width="10%"><a href="#" title="' . $Language->getText('project_reference', 'r_keyword_desc') . '">' . $Language->getText('project_reference', 'r_keyword') . ':</a>' . $star . '</td> <td>'; if ($ro) { echo $purifier->purify($ref->getKeyWord()); } else { echo '<input type="text" name="keyword" size="25" maxlength="25" value="' . $purifier->purify($ref->getKeyWord()) . '">'; } echo '</td></tr>'; echo ' <tr><td><a href="#" title="' . $Language->getText('project_reference', 'r_desc_in_tooltip') . '">' . $Language->getText('project_reference', 'r_desc') . '</a>: </td> <td>'; if ($ro) { if ($ref->getDescription() == "reference_" . $ref->getKeyWord() . "_desc_key") { echo $purifier->purify($Language->getText('project_reference', $ref->getDescription())); } else { echo $purifier->purify($ref->getDescription()); } } else { echo '<input type="text" name="description" size="70" maxlength="255" value="' . $purifier->purify($ref->getDescription()) . '">'; } echo '</td></tr>'; echo ' <tr><td><a href="#" title="' . $Language->getText('project_reference', 'r_nature_desc') . '">' . $Language->getText('project_reference', 'r_nature') . '</a>: </td> <td>'; if ($ro) { echo $purifier->purify($ref->getNature()); } else { echo '<select name="nature" >'; foreach ($this->natures as $nature_key => $nature_desc) { if ($ref->getNature() == $nature_key) { $selected = 'selected="selected"'; } else { $selected = ''; } echo '<option value="' . $purifier->purify($nature_key) . '" ' . $selected . '>' . $purifier->purify($nature_desc['label']) . '</option>'; } echo '</select>'; } echo '</td></tr>'; echo ' <tr><td><a href="#" title="' . $Language->getText('project_reference', 'url') . '">' . $Language->getText('project_reference', 'r_link') . '</a>:' . $star . '</td> <td>'; if ($ro) { echo $purifier->purify($ref->getLink()); } else { echo '<input type="text" name="link" size="70" maxlength="255" value="' . $purifier->purify($ref->getLink()) . '"> '; echo help_button('project-admin.html#creating-or-updating-a-reference-pattern'); } echo '</td></tr>'; if ($group_id == 100) { echo ' <tr><td><a href="#" title="' . $Language->getText('project_reference', 'r_service_desc') . '">' . $Language->getText('project_reference', 'r_service') . '</a>:</td> <td>'; // Get list of services $result = db_query("SELECT * FROM service WHERE group_id=100 ORDER BY rank"); $serv_label = array(); $serv_short_name = array(); while ($serv = db_fetch_array($result)) { $label = $serv['label']; if ($label == "service_" . $serv['short_name'] . "_lbl_key") { $label = $Language->getText('project_admin_editservice', $label); } $serv_short_name[] = $serv['short_name']; $serv_label[] = $label; } echo html_build_select_box_from_arrays($serv_short_name, $serv_label, "service_short_name", $ref->getServiceShortName()); echo '</td></tr>'; echo ' <tr><td><a href="#" title="' . $Language->getText('project_reference', 'r_scope') . '">' . $Language->getText('project_reference', 'scope') . ':</a></td> <td><FONT size="-1">' . ($ref->getScope() == 'S' ? $Language->getText('project_reference', 'system') : $Language->getText('project_reference', 'project')) . '</FONT></td></tr>'; } echo ' <tr><td><a href="#" title="' . $Language->getText('project_reference', 'enabled_desc') . '">' . $Language->getText('project_reference', 'enabled') . ':</a> </td> <td><input type="CHECKBOX" NAME="is_used" VALUE="1"' . ($ref->isActive() ? " CHECKED" : '') . '></td></tr>'; if ($su) { echo '<tr><td><a href="#" title="' . $Language->getText('project_reference', 'force_desc') . '">' . $Language->getText('project_reference', 'force') . '</a> </td> <td><input type="CHECKBOX" NAME="force"></td></tr>'; } echo ' </table> <P><INPUT type="submit" name="Create" value="' . $Language->getText('global', 'btn_update') . '"> </form>'; if (!$ro) { echo '<p>' . $star . ': ' . $Language->getText('project_reference', 'fields_required') . '</p>'; } }
function testSingleton() { $this->assertReference(ReferenceManager::instance(), ReferenceManager::instance()); $this->assertIsA(ReferenceManager::instance(), 'ReferenceManager'); }
function savePage() { $request =& $this->request; if ($this->isUnchanged()) { // Allow admin lock/unlock even if // no text changes were made. if ($this->updateLock()) { $dbi = $request->getDbh(); $dbi->touch(); } // Save failed. No changes made. $this->_redirectToBrowsePage(); // user will probably not see the rest of this... include_once 'lib/display.php'; // force browse of current version: $request->setArg('version', false); displayPage($request, 'nochanges'); return true; } if (!$this->user->isAdmin() and $this->isSpam()) { $this->_isSpam = true; return false; /* // Save failed. No changes made. $this->_redirectToBrowsePage(); // user will probably not see the rest of this... include_once('lib/display.php'); // force browse of current version: $request->setArg('version', false); displayPage($request, 'nochanges'); return true; */ } $page =& $this->page; // Include any meta-data from original page version which // has not been explicitly updated. // (Except don't propagate pgsrc_version --- moot for now, // because at present it never gets into the db...) $meta = $this->selected->getMetaData(); unset($meta['pgsrc_version']); $meta = array_merge($meta, $this->meta); // Save new revision $this->_content = $this->getContent(); $newrevision = $page->save($this->_content, $this->version == -1 ? -1 : $this->_currentVersion + 1, $meta); if (!isa($newrevision, 'WikiDB_PageRevision')) { // Save failed. (Concurrent updates). return false; } else { // Save succeded. We store cross references (if there are). $reference_manager =& ReferenceManager::instance(); $reference_manager->extractCrossRef($this->_content, $page->getName(), ReferenceManager::REFERENCE_NATURE_WIKIPAGE, GROUP_ID); // Save succeded. We raise an event. $new = $this->version + 1; $difflink = WikiURL($page->getName(), array('action' => 'diff'), true); $difflink .= "&versions%5b%5d=" . $this->version . "&versions%5b%5d=" . $new; $eM =& EventManager::instance(); $uM =& UserManager::instance(); $user =& $uM->getCurrentUser(); $eM->processEvent("wiki_page_updated", array('group_id' => GROUP_ID, 'wiki_page' => $page->getName(), 'diff_link' => $difflink, 'user' => $user, 'version' => $this->version)); } // New contents successfully saved... $this->updateLock(); // Clean out archived versions of this page. include_once 'lib/ArchiveCleaner.php'; $cleaner = new ArchiveCleaner($GLOBALS['ExpireParams']); $cleaner->cleanPageRevisions($page); /* generate notification emails done in WikiDB::save to catch all direct calls (admin plugins) */ // look at the errorstack $errors = $GLOBALS['ErrorManager']->_postponed_errors; $warnings = $GLOBALS['ErrorManager']->getPostponedErrorsAsHTML(); $GLOBALS['ErrorManager']->_postponed_errors = $errors; $dbi = $request->getDbh(); $dbi->touch(); global $WikiTheme; if (empty($warnings->_content) && !$WikiTheme->getImageURL('signature')) { // Do redirect to browse page if no signature has // been defined. In this case, the user will most // likely not see the rest of the HTML we generate // (below). $this->_redirectToBrowsePage(); } // Force browse of current page version. $request->setArg('version', false); //$request->setArg('action', false); $template = Template('savepage', $this->tokens); $template->replace('CONTENT', $newrevision->getTransformedContent()); if (!empty($warnings->_content)) { $template->replace('WARNINGS', $warnings); } $pagelink = WikiLink($page); GeneratePage($template, fmt("Saved: %s", $pagelink), $newrevision); return true; }
/** for a certain set of users being part of the same ugroups * create the mail body containing only fields that they have the permission to read */ function createMailForUsers($ugroups, $changes, $group_id, $group_artifact_id, &$ok, &$subject) { global $art_field_fact, $art_fieldset_fact, $Language; $fmt_len = 40; $fmt_left = sprintf("%%-%ds ", $fmt_len - 1); $fmt_right = "%s"; $artifact_href = get_server_url() . "/tracker/?func=detail&aid=" . $this->getID() . "&atid={$group_artifact_id}&group_id={$group_id}"; $used_fields = $art_field_fact->getAllUsedFields(); $art_fieldset_fact = new ArtifactFieldsetFactory($this->ArtifactType); $used_fieldsets = $art_fieldset_fact->getAllFieldSetsContainingUsedFields(); $ok = false; $body = ''; //generate the field permissions (TRACKER_FIELD_READ, TRACKER_FIEDL_UPDATE or nothing) //for all fields of this tracker given the $ugroups the user is part of $field_perm = false; if ($ugroups) { $field_perm = $this->ArtifactType->getFieldPermissions($ugroups); } $summ = ""; if ($field_perm === false || isset($field_perm['summary']) && $field_perm['summary'] && permission_can_read_field($field_perm['summary'])) { $summ = util_unconvert_htmlspecialchars($this->getValue('summary')); } $subject = '[' . $this->ArtifactType->getCapsItemName() . ' #' . $this->getID() . '] ' . $summ; //echo "<br>......... field_perm for "; print_r($ugroups); echo " = "; print_r($field_perm); // artifact fields // Generate the message preamble with all required // artifact fields - Changes first if there are some. if ($changes) { $body = $GLOBALS['sys_lf'] . "============= " . strtoupper(SimpleSanitizer::unsanitize($this->ArtifactType->getName())) . " #" . $this->getID() . ": " . $Language->getText('tracker_include_artifact', 'latest_modif') . " =============" . $GLOBALS['sys_lf'] . $artifact_href . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $this->formatChanges($changes, $field_perm, $visible_change) . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . ""; if (!$visible_change) { return; } } $ok = true; $visible_snapshot = false; $full_snapshot = ""; // We write the name of the project $pm = ProjectManager::instance(); $full_snapshot .= sprintf($fmt_left . $GLOBALS['sys_lf'] . "", $Language->getText('tracker_include_artifact', 'project') . ' ' . util_unconvert_htmlspecialchars($pm->getProject($group_id)->getPublicName())); // Write all the fields, grouped by fieldsetset and ordered by rank. $left = 1; $visible_fieldset = false; // fetch list of used fieldsets for this artifact foreach ($used_fieldsets as $fieldset_id => $fieldset) { $fieldset_snapshot = ''; $used_fields = $fieldset->getAllUsedFields(); // fetch list of used fields and the current field values // for this artifact while (list($key, $field) = each($used_fields)) { $field_name = $field->getName(); if ($field_perm === false || isset($field_perm[$field_name]) && $field_perm[$field_name] && permission_can_read_field($field_perm[$field_name])) { $field_html = new ArtifactFieldHtml($field); $visible_fieldset = true; $visible_snapshot = true; // For multi select box, we need to retrieve all the values if ($field->isMultiSelectBox()) { $field_value = $field->getValues($this->getID()); } else { $field_value = $this->getValue($field->getName()); } $display = $field_html->display($group_artifact_id, $field_value, false, true, true, true); $item = sprintf($left ? $fmt_left : $fmt_right, $display); if (strlen($item) > $fmt_len) { if (!$left) { $fieldset_snapshot .= "" . $GLOBALS['sys_lf'] . ""; } $fieldset_snapshot .= sprintf($fmt_right, $display); $fieldset_snapshot .= "" . $GLOBALS['sys_lf'] . ""; $left = 1; } else { $fieldset_snapshot .= $item; $left = !$left; if ($left) { $fieldset_snapshot .= "" . $GLOBALS['sys_lf'] . ""; } } } } // while if ($visible_fieldset) { $full_snapshot .= "" . $GLOBALS['sys_lf'] . ""; $full_snapshot .= $left ? "" : "" . $GLOBALS['sys_lf'] . ""; $full_snapshot .= '--- ' . SimpleSanitizer::unsanitize($fieldset->getLabel()) . ' ---'; $full_snapshot .= "" . $GLOBALS['sys_lf'] . ""; $full_snapshot .= $fieldset_snapshot; } } if ($visible_snapshot) { $full_snapshot .= "" . $GLOBALS['sys_lf'] . ""; } $body .= "============= " . strtoupper(SimpleSanitizer::unsanitize($this->ArtifactType->getName())) . " #" . $this->getID() . ": " . $Language->getText('tracker_include_artifact', 'full_snapshot') . " =============" . $GLOBALS['sys_lf'] . ($changes ? '' : $artifact_href) . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $full_snapshot; if (!$left) { $body .= "" . $GLOBALS['sys_lf'] . ""; } // Now display other special fields // Then output the history of bug comments from newest to oldest $body .= $this->showFollowUpComments($group_id, 0, self::OUTPUT_MAIL_TEXT); // Then output the CC list $body .= "" . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $this->showCCList($group_id, $group_artifact_id, true); // Then output the dependencies $body .= "" . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $this->showDependencies($group_id, $group_artifact_id, true); // Then output the history of attached files from newest to oldest $body .= "" . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $this->showAttachedFiles($group_id, $group_artifact_id, true); // Extract references from the message $referenceManager =& ReferenceManager::instance(); $ref_array = $referenceManager->extractReferencesGrouped($body, $group_id); if (count($ref_array) > 0) { $body .= $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $Language->getText('tracker_include_artifact', 'references') . $GLOBALS['sys_lf']; } foreach ($ref_array as $description => $match_array) { $body .= $GLOBALS['sys_lf'] . $description . ":" . $GLOBALS['sys_lf']; foreach ($match_array as $match => $ref_instance) { $reference =& $ref_instance->getReference(); $body .= ' ' . $ref_instance->getMatch() . ': ' . $ref_instance->getFullGotoLink() . $GLOBALS['sys_lf']; } } // Finally output the message trailer $body .= "" . $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . $Language->getText('tracker_include_artifact', 'follow_link'); $body .= "" . $GLOBALS['sys_lf'] . $artifact_href; if ($ok) { $mail = new Mail(); $mail->setBody($body); return $mail; } else { return null; } }
/** * Update MetadataValue in database. */ function update($mdv) { $dao =& $this->getDao(); switch ($mdv->getType()) { case PLUGIN_DOCMAN_METADATA_TYPE_LIST: // First delete all previous values $dao->delete($mdv->getFieldId(), $mdv->getItemId()); // Now create new one $pret = $this->create($mdv); if ($pret === false) { //$this->setError('Unable to bind this item to the value "'.$val.'" for metadata "'.$mdv->getName().'"'); $ret = false; } else { $ret = true; } break; case PLUGIN_DOCMAN_METADATA_TYPE_TEXT: case PLUGIN_DOCMAN_METADATA_TYPE_STRING: case PLUGIN_DOCMAN_METADATA_TYPE_DATE: $ret = $dao->updateValue($mdv->getItemId(), $mdv->getFieldId(), $mdv->getType(), $mdv->getValue()); // extract cross references $reference_manager =& ReferenceManager::instance(); $reference_manager->extractCrossRef($mdv->getValue(), $mdv->getItemId(), ReferenceManager::REFERENCE_NATURE_DOCUMENT, $this->groupId); break; default: $this->setError($GLOBALS['Language']->getText('plugin_docman', 'mdv_bo_errbadtype')); $ret = false; } return $ret; }
private function getChangesetCreator(Tracker_Artifact_Changeset_AtGivenDateFieldsValidator $fields_validator, Tracker_Artifact_ChangesetDao $changeset_dao) { $changeset_comment_dao = new Tracker_Artifact_Changeset_CommentDao(); return new Tracker_Artifact_Changeset_NewChangesetAtGivenDateCreator($fields_validator, $this->form_element_factory, $changeset_dao, $changeset_comment_dao, $this->artifact_factory, EventManager::instance(), ReferenceManager::instance()); }
// update/create news permissions $qry1 = "SELECT * FROM news_bytes WHERE id=" . db_ei($id); $res1 = db_query($qry1); $forum_id = db_result($res1, 0, 'forum_id'); $res2 = news_read_permissions($forum_id); if (db_numrows($res2) > 0) { //permission on this news is already defined, have to be updated news_update_permissions($forum_id, $is_private, $group_id); } else { //permission of this news not yet defined if ($is_private) { news_insert_permissions($forum_id, $group_id); } } // extract cross references $reference_manager =& ReferenceManager::instance(); $reference_manager->extractCrossRef($request->get('summary'), $forum_id, ReferenceManager::REFERENCE_NATURE_NEWS, $group_id); $reference_manager->extractCrossRef($request->get('details'), $forum_id, ReferenceManager::REFERENCE_NATURE_NEWS, $group_id); } } } news_header(array('title' => $Language->getText('news_admin_index', 'title'), 'help' => 'NewsService.html')); echo '<H3>' . $Language->getText('news_admin_index', 'news_admin') . '</H3>'; if (!$request->get('post_changes') && $request->get('approve')) { /* Show the submit form */ $sql = "SELECT * FROM news_bytes WHERE id=" . db_ei($id) . " AND group_id=" . db_ei($group_id); $result = db_query($sql); if (db_numrows($result) < 1) { exit_error($Language->getText('global', 'error'), $Language->getText('news_admin_index', 'not_found_err'));
protected function getTrackerReferenceManager() { return new Tracker_ReferenceManager(ReferenceManager::instance(), Tracker_ArtifactFactory::instance()); }
/** * @return ReferenceManager */ public static function instance() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c(); } return self::$instance; }
/** * create_project * * Create a new project * * @param data */ function create_project($data, $do_not_exit = false) { srand((double) microtime() * 1000000); $random_num = rand(0, 1000000); // Make sure default project privacy status is defined. If not // then default to "public" if (!isset($GLOBALS['sys_is_project_public'])) { $GLOBALS['sys_is_project_public'] = 1; } if (isset($GLOBALS['sys_disable_subdomains']) && $GLOBALS['sys_disable_subdomains']) { $http_domain = $GLOBALS['sys_default_domain']; } else { $http_domain = $data['project']['form_unix_name'] . '.' . $GLOBALS['sys_default_domain']; } //Verify if the approbation of the new project is automatic or not $auto_approval = ForgeConfig::get('sys_project_approval', 1) ? PROJECT_APPROVAL_BY_ADMIN : PROJECT_APPROVAL_AUTO; if (isset($data['project']['is_public'])) { $access = $data['project']['is_public'] ? Project::ACCESS_PUBLIC : Project::ACCESS_PRIVATE; } else { $access = ForgeConfig::get('sys_is_project_public') ? Project::ACCESS_PUBLIC : Project::ACCESS_PRIVATE; } // make group entry $insert_data = array('group_name' => "'" . htmlspecialchars(mysql_real_escape_string($data['project']['form_full_name'])) . "'", 'access' => "'" . $access . "'", 'unix_group_name' => "'" . db_es($data['project']['form_unix_name']) . "'", 'http_domain' => "'" . db_es($http_domain) . "'", 'status' => "'P'", 'unix_box' => "'shell1'", 'cvs_box' => "'cvs1'", 'license' => "'" . htmlspecialchars(mysql_real_escape_string($data['project']['form_license'])) . "'", 'license_other' => "'" . htmlspecialchars(mysql_real_escape_string($data['project']['form_license_other'])) . "'", 'short_description' => "'" . htmlspecialchars(mysql_real_escape_string($data['project']['form_short_description'])) . "'", 'register_time' => time(), 'rand_hash' => "'" . md5($random_num) . "'", 'built_from_template' => db_ei($data['project']['built_from_template']), 'type' => $data['project']['is_test'] ? 3 : 1); $sql = 'INSERT INTO groups(' . implode(', ', array_keys($insert_data)) . ') VALUES (' . implode(', ', array_values($insert_data)) . ')'; $result = db_query($sql); if (!$result) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'upd_fail', array($GLOBALS['sys_email_admin'], db_error()))); } else { $group_id = db_insertid($result); // insert descriptions $descfieldsinfos = getProjectsDescFieldsInfos(); for ($i = 0; $i < sizeof($descfieldsinfos); $i++) { if (isset($data['project']["form_" . $descfieldsinfos[$i]["group_desc_id"]]) && $data['project']["form_" . $descfieldsinfos[$i]["group_desc_id"]] != '') { $sql = "INSERT INTO group_desc_value (group_id, group_desc_id, value) VALUES ('" . db_ei($group_id) . "','" . db_ei($descfieldsinfos[$i]["group_desc_id"]) . "','" . db_escape_string(trim($data['project']["form_" . $descfieldsinfos[$i]["group_desc_id"]])) . "')"; $result = db_query($sql); if (!$result) { list($host, $port) = explode(':', $GLOBALS['sys_default_domain']); exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'ins_desc_fail', array($host, db_error()))); } } } // insert trove categories if (isset($data['project']['trove'])) { foreach ($data['project']['trove'] as $root => $values) { foreach ($values as $value) { db_query("INSERT INTO trove_group_link (trove_cat_id,trove_cat_version," . "group_id,trove_cat_root) VALUES (" . db_ei($value) . "," . time() . "," . db_ei($group_id) . "," . db_ei($root) . ")"); } } } // define a module $project_manager = ProjectManager::instance(); $result = db_query("INSERT INTO filemodule (group_id,module_name) VALUES ('{$group_id}','" . $project_manager->getProject($group_id)->getUnixName() . "')"); if (!$result) { list($host, $port) = explode(':', $GLOBALS['sys_default_domain']); exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'ins_file_fail', array($host, db_error()))); } // make the current user a project admin as well as admin // on all Codendi services $result = db_query("INSERT INTO user_group (user_id,group_id,admin_flags,bug_flags,forum_flags,project_flags,patch_flags,support_flags,doc_flags,file_flags,wiki_flags,svn_flags,news_flags) VALUES (" . user_getid() . "," . $group_id . "," . "'A'," . "2," . "2," . "2," . "2," . "2," . "2," . "2," . "2," . "2," . "2)"); // news_flags if (!$result) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'set_owner_fail', array($GLOBALS['sys_email_admin'], db_error()))); } // clear the user data to take into account this new group. $user = UserManager::instance()->getCurrentUser(); $user->clearGroupData(); // Instanciate all services from the project template that are 'active' $group = $project_manager->getProject($group_id); if (!$group || !is_object($group)) { exit_no_group(); } //set up the group_id $_REQUEST['group_id'] = $_GET['group_id'] = $group_id; $request =& HTTPRequest::instance(); $request->params['group_id'] = $_REQUEST['group_id']; $template_id = $group->getTemplate(); $template_group = $project_manager->getProject($template_id); if (!$template_group || !is_object($template_group) || $template_group->isError()) { exit_no_group(); } $system_template = $template_group->getStatus() == 's' || $template_group->getStatus() == 'S'; if (!$system_template) { $template_name = $template_group->getUnixName(); } $sql = "SELECT * FROM service WHERE group_id={$template_id} AND is_active=1"; $result = db_query($sql); while ($arr = db_fetch_array($result)) { if (isset($data['project']['services'][$arr['service_id']]['is_used'])) { $is_used = $data['project']['services'][$arr['service_id']]['is_used']; } else { $is_used = '0'; if ($arr['short_name'] == 'admin' || $arr['short_name'] == 'summary') { $is_used = '1'; } } $server_id = isset($data['project']['services'][$arr['service_id']]['server_id']) && $data['project']['services'][$arr['service_id']]['server_id'] ? $data['project']['services'][$arr['service_id']]['server_id'] : 'null'; if (!service_create_service($arr, $group_id, array('system' => $system_template, 'name' => $system_template ? '' : $template_name, 'id' => $template_id, 'is_used' => $is_used, 'server_id' => $server_id))) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'cant_create_service') . '<br>' . db_error()); } } //Add the import of the message to requester from the parent project if defined $dar = $project_manager->getMessageToRequesterForAccessProject($template_id); if ($dar && !$dar->isError() && $dar->rowCount() == 1) { $row = $dar->getRow(); $result = $project_manager->setMessageToRequesterForAccessProject($group_id, $row['msg_to_requester']); } else { $result = $project_manager->setMessageToRequesterForAccessProject($group_id, 'member_request_delegation_msg_to_requester'); } if (!$result) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'cant_copy_msg_to_requester')); } //Copy forums from template project $sql = "SELECT forum_name, is_public, description FROM forum_group_list WHERE group_id={$template_id} "; $result = db_query($sql); while ($arr = db_fetch_array($result)) { $fid = forum_create_forum($group_id, $arr['forum_name'], $arr['is_public'], 1, $arr['description'], $need_feedback = false); if ($fid != -1) { forum_add_monitor($fid, user_getid()); } } //copy cvs infos $sql = "SELECT cvs_tracker, cvs_watch_mode, cvs_preamble, cvs_is_private FROM groups WHERE group_id={$template_id} "; $result = db_query($sql); $arr = db_fetch_array($result); $query = "UPDATE groups \n SET cvs_tracker='" . db_ei($arr['cvs_tracker']) . "',\n cvs_watch_mode='" . db_ei($arr['cvs_watch_mode']) . "' ,\n cvs_preamble='" . db_escape_string($arr['cvs_preamble']) . "',\n cvs_is_private = " . db_escape_int($arr['cvs_is_private']) . "\n WHERE group_id = '{$group_id}'"; $result = db_query($query); if (!$result) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'cant_copy_cvs_infos')); } //copy svn infos $current_timestamp = db_escape_int($_SERVER['REQUEST_TIME']); $sql = "INSERT INTO svn_accessfile_history (version_number, group_id, version_date)\n VALUES (1, {$group_id}, {$current_timestamp})"; $result = db_query($sql); if (!$result) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'cant_copy_svn_infos')); } $sql = "SELECT svn_tracker, svn_preamble, svn_mandatory_ref, svn_commit_to_tag_denied FROM groups WHERE group_id={$template_id} "; $result = db_query($sql); $arr = db_fetch_array($result); $query = "UPDATE groups, svn_accessfile_history\n SET svn_tracker='" . db_ei($arr['svn_tracker']) . "',\n svn_mandatory_ref='" . db_ei($arr['svn_mandatory_ref']) . "',\n svn_preamble='" . db_escape_string($arr['svn_preamble']) . "',\n svn_commit_to_tag_denied='" . db_ei($arr['svn_commit_to_tag_denied']) . "',\n svn_accessfile_version_id = svn_accessfile_history.id\n WHERE groups.group_id = {$group_id}\n AND groups.group_id = svn_accessfile_history.group_id"; $result = db_query($query); if (!$result) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'cant_copy_svn_infos')); } // Activate other system references not associated with any service $reference_manager =& ReferenceManager::instance(); $reference_manager->addSystemReferencesWithoutService($template_id, $group_id); //Copy ugroups $ugroup_mapping = array(); ugroup_copy_ugroups($template_id, $group_id, $ugroup_mapping); $sql_ugroup_mapping = ' ugroup_id '; if (is_array($ugroup_mapping) && count($ugroup_mapping)) { $sql_ugroup_mapping = ' CASE ugroup_id '; foreach ($ugroup_mapping as $key => $val) { $sql_ugroup_mapping .= ' WHEN ' . $key . ' THEN ' . $val; } $sql_ugroup_mapping .= ' ELSE ugroup_id END '; } //Copy packages from template project $sql = "SELECT package_id, name, status_id, rank, approve_license FROM frs_package WHERE group_id = {$template_id}"; if ($result = db_query($sql)) { while ($p_data = db_fetch_array($result)) { $template_package_id = $p_data['package_id']; $sql = sprintf("INSERT INTO frs_package(group_id, name, status_id, rank, approve_license) VALUES (%s, '%s', %s, %s, %s)", $group_id, db_escape_string($p_data['name']), db_ei($p_data['status_id']), db_ei($p_data['rank']), db_ei($p_data['approve_license'])); $rid = db_query($sql); if ($rid) { $package_id = db_insertid($rid); $sql = "INSERT INTO permissions(permission_type, object_id, ugroup_id) \n SELECT permission_type, {$package_id}, {$sql_ugroup_mapping}\n FROM permissions\n WHERE permission_type = 'PACKAGE_READ'\n AND object_id = {$template_package_id}"; db_query($sql); } } } //Set up some mailing lists //will be done at some point. needs to communicate with geocrawler // TBD // Generic Trackers Creation $tracker_mapping = array(); $report_mapping = array(); if (TrackerV3::instance()->available()) { $atf = new ArtifactTypeFactory($template_group); //$tracker_error = ""; // Add all trackers from template project (tracker templates) that need to be instanciated for new trackers. $res = $atf->getTrackerTemplatesForNewProjects(); while ($arr_template = db_fetch_array($res)) { $ath_temp = new ArtifactType($template_group, $arr_template['group_artifact_id']); $report_mapping_for_this_tracker = array(); $new_at_id = $atf->create($group_id, $template_id, $ath_temp->getID(), db_escape_string($ath_temp->getName()), db_escape_string($ath_temp->getDescription()), $ath_temp->getItemName(), $ugroup_mapping, $report_mapping_for_this_tracker); if (!$new_at_id) { $GLOBALS['Response']->addFeedback('error', $atf->getErrorMessage()); } else { $report_mapping = $report_mapping + $report_mapping_for_this_tracker; $tracker_mapping[$ath_temp->getID()] = $new_at_id; // Copy all the artifacts from the template tracker to the new tracker $ath_new = new ArtifactType($group, $new_at_id); // not now. perhaps one day //if (!$ath_new->copyArtifacts($ath_temp->getID()) ) { //$GLOBALS['Response']->addFeedback('info', $ath_new->getErrorMessage()); //} // Create corresponding reference $ref = new Reference(0, strtolower($ath_temp->getItemName()), $GLOBALS['Language']->getText('project_reference', 'reference_art_desc_key'), '/tracker/?func=detail&aid=$1&group_id=$group_id', 'P', 'tracker', ReferenceManager::REFERENCE_NATURE_ARTIFACT, '1', $group_id); $result = $reference_manager->createReference($ref, true); // Force reference creation because default trackers use reserved keywords } } } // Clone wiki from the template $clone = new WikiCloner($template_id, $group_id); // check if the template project has a wiki initialised if ($clone->templateWikiExists() and $clone->newWikiIsUsed()) { //clone wiki. $clone->CloneWiki(); } //Create the summary page $lm = new WidgetLayoutManager(); $lm->createDefaultLayoutForProject($group_id, $template_id); //Create project specific references if template is not default site template if (!$system_template) { $reference_manager =& ReferenceManager::instance(); $reference_manager->addProjectReferences($template_id, $group_id); } // Copy Truncated email option $sql = "UPDATE groups AS g1\n JOIN groups AS g2\n ON g2.group_id = " . db_ei($template_id) . "\n SET g1.truncated_emails = g2.truncated_emails\n WHERE g1.group_id = " . db_ei($group_id); db_query($sql); $result = db_query($query); if (!$result) { exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('register_confirmation', 'cant_copy_truncated_emails')); } // Raise an event for plugin configuration $em =& EventManager::instance(); $em->processEvent('register_project_creation', array('reportMapping' => $report_mapping, 'trackerMapping' => $tracker_mapping, 'ugroupsMapping' => $ugroup_mapping, 'group_id' => $group_id, 'template_id' => $template_id)); if ($auto_approval == PROJECT_APPROVAL_AUTO) { $project_manager->activate($group); } return $group_id; } }