grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026. -------------------------------------------------------------------------- */ /** @file * @brief */ if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } /** * @since version 0.85 * * Change_Project Class * * Relation between Changes and Projects **/ class Change_Project extends CommonDBRelation{ // From CommonDBRelation static public $itemtype_1 = 'Change'; static public $items_id_1 = 'changes_id'; static public $itemtype_2 = 'Project'; static public $items_id_2 = 'projects_id'; function getForbiddenStandardMassiveAction() { $forbidden = parent::getForbiddenStandardMassiveAction(); $forbidden[] = 'update'; return $forbidden; } static function getTypeName($nb=0) { return _n('Link Project/Change','Links Project/Change',$nb); } /** * Get search function for the class * * @return array of search option **/ function getSearchOptions() { return parent::getSearchOptions(); } /** * @see CommonGLPI::getTabNameForItem() **/ function getTabNameForItem(CommonGLPI $item, $withtemplate=0) { if (static::canView()) { $nb = 0; switch ($item->getType()) { case 'Change' : if ($_SESSION['glpishow_count_on_tabs']) { $nb = countElementsInTable('glpi_changes_projects', "`changes_id` = '".$item->getID()."'"); } return self::createTabEntry(Project::getTypeName(Session::getPluralNumber()), $nb); case 'Project' : if ($_SESSION['glpishow_count_on_tabs']) { $nb = countElementsInTable('glpi_changes_projects', "`projects_id` = '".$item->getID()."'"); } return self::createTabEntry(Change::getTypeName(Session::getPluralNumber()), $nb); } } return ''; } static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) { switch ($item->getType()) { case 'Change' : self::showForChange($item); break; case 'Project' : self::showForProject($item); break; } return true; } /** * Show tickets for a project * * @param $project Project object **/ static function showForProject(Project $project) { global $DB, $CFG_GLPI; $ID = $project->getField('id'); if (!$project->can($ID, READ)) { return false; } $canedit = $project->canEdit($ID); $rand = mt_rand(); $showentities = Session::isMultiEntitiesMode(); $query = "SELECT DISTINCT `glpi_changes_projects`.`id` AS linkID, `glpi_changes`.* FROM `glpi_changes_projects` LEFT JOIN `glpi_changes` ON (`glpi_changes_projects`.`changes_id` = `glpi_changes`.`id`) WHERE `glpi_changes_projects`.`projects_id` = '$ID' ORDER BY `glpi_changes`.`name`"; $result = $DB->query($query); $changes = array(); $used = array(); if ($numrows = $DB->numrows($result)) { while ($data = $DB->fetch_assoc($result)) { $changes[$data['id']] = $data; $used[$data['id']] = $data['id']; } } if ($canedit) { echo "
"; echo "
"; echo ""; echo ""; echo "
".__('Add a change')."
"; echo ""; Change::dropdown(array('used' => $used, 'entity' => $project->getEntityID(), 'entity_sons' => $project->isRecursive())); echo ""; echo ""; echo "
"; Html::closeForm(); echo "
"; } echo "
"; if ($canedit && $numrows) { Html::openMassiveActionsForm('mass'.__CLASS__.$rand); $massiveactionparams = array('num_displayed' => min($_SESSION['glpilist_limit'], $numrows), 'container' => 'mass'.__CLASS__.$rand); Html::showMassiveActions($massiveactionparams); } echo ""; echo ""; if ($numrows) { Change::commonListHeader(Search::HTML_OUTPUT, 'mass'.__CLASS__.$rand); Session::initNavigateListItems('Change', //TRANS : %1$s is the itemtype name, // %2$s is the name of the item (used for headings of a list) sprintf(__('%1$s = %2$s'), Project::getTypeName(1), $project->fields["name"])); $i = 0; foreach ($changes as $data) { Session::addToNavigateListItems('Change', $data["id"]); Change::showShort($data['id'], array('row_num' => $i, 'type_for_massiveaction' => __CLASS__, 'id_for_massiveaction' => $data['linkID'])); $i++; } Change::commonListHeader(Search::HTML_OUTPUT, 'mass'.__CLASS__.$rand); } echo "
".Change::getTypeName($numrows)."
"; if ($canedit && $numrows) { $massiveactionparams['ontop'] = false; Html::showMassiveActions($massiveactionparams); Html::closeForm(); } echo "
"; } /** * Show projects for a change * * @param $change Change object **/ static function showForChange(Change $change) { global $DB, $CFG_GLPI; $ID = $change->getField('id'); if (!$change->can($ID, READ)) { return false; } $canedit = $change->canEdit($ID); $rand = mt_rand(); $showentities = Session::isMultiEntitiesMode(); $query = "SELECT DISTINCT `glpi_changes_projects`.`id` AS linkID, `glpi_projects`.* FROM `glpi_changes_projects` LEFT JOIN `glpi_projects` ON (`glpi_changes_projects`.`projects_id` = `glpi_projects`.`id`) WHERE `glpi_changes_projects`.`changes_id` = '$ID' ORDER BY `glpi_projects`.`name`"; $result = $DB->query($query); $projects = array(); $used = array(); if ($numrows = $DB->numrows($result)) { while ($data = $DB->fetch_assoc($result)) { $projects[$data['id']] = $data; $used[$data['id']] = $data['id']; } } if ($canedit) { echo "
"; echo ""; echo ""; echo ""; echo "
".__('Add a project')."
"; echo ""; Project::dropdown(array('used' => $used, 'entity' => $change->getEntityID())); echo ""; echo ""; echo "
"; Html::closeForm(); echo "
"; } echo "
"; if ($canedit && $numrows) { Html::openMassiveActionsForm('mass'.__CLASS__.$rand); $massiveactionparams = array('num_displayed' => min($_SESSION['glpilist_limit'], $numrows), 'container' => 'mass'.__CLASS__.$rand); Html::showMassiveActions($massiveactionparams); } echo ""; echo ""; if ($numrows) { Project::commonListHeader(Search::HTML_OUTPUT, 'mass'.__CLASS__.$rand); Session::initNavigateListItems('Project', //TRANS : %1$s is the itemtype name, // %2$s is the name of the item (used for headings of a list) sprintf(__('%1$s = %2$s'), Change::getTypeName(1), $change->fields["name"])); $i = 0; foreach ($projects as $data) { Session::addToNavigateListItems('Project', $data["id"]); Project::showShort($data['id'], array('row_num' => $i, 'type_for_massiveaction' => __CLASS__, 'id_for_massiveaction' => $data['linkID'])); $i++; } Project::commonListHeader(Search::HTML_OUTPUT, 'mass'.__CLASS__.$rand); } echo "
".Project::getTypeName($numrows)."
"; if ($canedit && $numrows) { $massiveactionparams['ontop'] = false; Html::showMassiveActions($massiveactionparams); Html::closeForm(); } echo "
"; } } ?>