static function addDefaultJoin($itemtype, $ref_table, array &$already_link_tables)
{
switch ($itemtype) {
// No link
case 'User':
return self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_profiles_users", "profiles_users_id", 0, 0, array('jointype' => 'child'));
case 'Reminder':
return Reminder::addVisibilityJoins();
case 'RSSFeed':
return RSSFeed::addVisibilityJoins();
case 'ProjectTask':
// Same structure in addDefaultWhere
$out = '';
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_projecttaskteams", "projecttaskteams_id", 0, 0, array('jointype' => 'child'));
return $out;
case 'Project':
// Same structure in addDefaultWhere
$out = '';
if (!Session::haveRight("project", Project::READALL)) {
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_projectteams", "projectteams_id", 0, 0, array('jointype' => 'child'));
}
return $out;
case 'Ticket':
// Same structure in addDefaultWhere
$out = '';
if (!Session::haveRight("ticket", Ticket::READALL)) {
$searchopt =& self::getOptions($itemtype);
// show mine : requester
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_tickets_users", "tickets_users_id", 0, 0, $searchopt[4]['joinparams']['beforejoin']['joinparams']);
if (Session::haveRight("ticket", Ticket::READGROUP)) {
if (count($_SESSION['glpigroups'])) {
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_groups_tickets", "groups_tickets_id", 0, 0, $searchopt[71]['joinparams']['beforejoin']['joinparams']);
}
}
// show mine : observer
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_tickets_users", "tickets_users_id", 0, 0, $searchopt[66]['joinparams']['beforejoin']['joinparams']);
if (count($_SESSION['glpigroups'])) {
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_groups_tickets", "groups_tickets_id", 0, 0, $searchopt[65]['joinparams']['beforejoin']['joinparams']);
}
if (Session::haveRight("ticket", Ticket::OWN)) {
// Can own ticket : show assign to me
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_tickets_users", "tickets_users_id", 0, 0, $searchopt[5]['joinparams']['beforejoin']['joinparams']);
}
if (Session::haveRightsOr("ticket", array(Ticket::READMY, Ticket::READASSIGN))) {
// show mine + assign to me
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_tickets_users", "tickets_users_id", 0, 0, $searchopt[5]['joinparams']['beforejoin']['joinparams']);
if (count($_SESSION['glpigroups'])) {
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_groups_tickets", "groups_tickets_id", 0, 0, $searchopt[8]['joinparams']['beforejoin']['joinparams']);
}
}
if (Session::haveRightsOr('ticketvalidation', array(TicketValidation::VALIDATEINCIDENT, TicketValidation::VALIDATEREQUEST))) {
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_ticketvalidations", "ticketvalidations_id", 0, 0, $searchopt[58]['joinparams']['beforejoin']['joinparams']);
}
}
return $out;
case 'Change':
case 'Problem':
if ($itemtype == 'Change') {
$right = 'change';
$table = 'changes';
$groupetable = "glpi_changes_groups";
$linkfield = "changes_groups_id";
} else {
if ($itemtype == 'Problem') {
$right = 'problem';
$table = 'problems';
$groupetable = "glpi_groups_problems";
$linkfield = "groups_problems_id";
}
}
// Same structure in addDefaultWhere
$out = '';
if (!Session::haveRight("{$right}", $itemtype::READALL)) {
$searchopt =& self::getOptions($itemtype);
if (Session::haveRight("{$right}", $itemtype::READMY)) {
// show mine : requester
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_" . $table . "_users", $table . "_users_id", 0, 0, $searchopt[4]['joinparams']['beforejoin']['joinparams']);
if (count($_SESSION['glpigroups'])) {
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, $groupetable, $linkfield, 0, 0, $searchopt[71]['joinparams']['beforejoin']['joinparams']);
}
// show mine : observer
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_" . $table . "_users", $table . "_users_id", 0, 0, $searchopt[66]['joinparams']['beforejoin']['joinparams']);
if (count($_SESSION['glpigroups'])) {
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, $groupetable, $linkfield, 0, 0, $searchopt[65]['joinparams']['beforejoin']['joinparams']);
}
// show mine : assign
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, "glpi_" . $table . "_users", $table . "_users_id", 0, 0, $searchopt[5]['joinparams']['beforejoin']['joinparams']);
if (count($_SESSION['glpigroups'])) {
$out .= self::addLeftJoin($itemtype, $ref_table, $already_link_tables, $groupetable, $linkfield, 0, 0, $searchopt[8]['joinparams']['beforejoin']['joinparams']);
}
}
}
return $out;
default:
// Plugin can override core definition for its type
if ($plug = isPluginItemType($itemtype)) {
$function = 'plugin_' . $plug['plugin'] . '_addDefaultJoin';
if (function_exists($function)) {
$out = $function($itemtype, $ref_table, $already_link_tables);
if (!empty($out)) {
return $out;
}
}
}
return "";
}
}