. * --------------------------------------------------------------------- */ if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } /// Class KnowbaseItem_Revision /// since version 9.2 class KnowbaseItem_Revision extends CommonDBTM { static function getTypeName($nb = 0) { return _n('Revision', 'Revisions', $nb); } function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) { if (!$item->canUpdateItem()) { return ''; } $nb = 0; if ($_SESSION['glpishow_count_on_tabs']) { $where = []; if ($item->getType() == KnowbaseItem::getType()) { $where = [ 'knowbaseitems_id' => $item->getID(), 'language' => '' ]; } else { $where = [ 'knowbaseitems_id' => $item->fields['knowbaseitems_id'], 'language' => $item->fields['language'] ]; } $nb = countElementsInTable( 'glpi_knowbaseitems_revisions', $where ); } return self::createTabEntry(self::getTypeName($nb), $nb); } static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) { self::showForItem($item, $withtemplate); return true; } /** * Show linked items of a knowbase item * * @param $item CommonDBTM object * @param $withtemplate integer withtemplate param (default 0) **/ static function showForItem(CommonDBTM $item, $withtemplate = 0) { global $DB, $CFG_GLPI; $item_id = $item->getID(); $item_type = $item::getType(); if (isset($_GET["start"])) { $start = intval($_GET["start"]); } else { $start = 0; } // Total Number of revisions if ($item->getType() == KnowbaseItem::getType()) { $where = [ 'knowbaseitems_id' => $item->getID(), 'language' => '' ]; } else { $where = [ 'knowbaseitems_id' => $item->fields['knowbaseitems_id'], 'language' => $item->fields['language'] ]; } $number = countElementsInTable( 'glpi_knowbaseitems_revisions', $where ); // No revisions in database if ($number < 1) { $no_txt = __('No revisions'); echo "
"; echo ""; echo ""; echo "
$no_txt
"; echo "
"; return; } // Display the pager Html::printAjaxPager(self::getTypeName(1), $start, $number); // Output events echo "
"; echo ""; echo ""; $header = ''; $header .= ""; $header .= ""; $header .= ""; $header .= ""; $header .= ""; echo $header; $user = new User(); $user->getFromDB($item->fields['users_id']); //current contents echo ""; echo "" . "" . "". "" . "" . ""; $revisions = $DB->request( 'glpi_knowbaseitems_revisions', $where + ['ORDER' => 'id DESC'] ); $is_checked = true; foreach ($revisions as $revision) { // Before GLPI 9.3.1, author was not stored in revision. // See https://github.com/glpi-project/glpi/issues/4377. $hasRevUser = $user->getFromDB($revision['users_id']); echo ""; echo "" . ""; echo "". ""; $form = null; if ($item->getType() == KnowbaseItem::getType()) { $form = KnowbaseItem::getFormURLWithID($revision['knowbaseitems_id']); } else { $form = KnowbaseItemTranslation::getFormURLWithID($revision['knowbaseitems_id']); } echo ""; echo ""; } echo Html::script("public/lib/jquery-prettytextdiff.js"); echo ""; echo $header; echo "
# " . __('Author') . "".__('Creation date')."
(" . __('cur') . ")" . "" . $user->getLink() . "". $item->fields['date_mod'] . "
" . $revision['revision'] . " " . ($hasRevUser ? $user->getLink() : __('Unknown user')) . "". $revision['date_creation'] . "" . __('show') . " - ". __('restore') . "
"; echo ""; echo "
"; Html::printAjaxPager(self::getTypeName(1), $start, $number); } /** * Populate and create a new revision from KnowbaseItem informations * * @param KnowbaseItem $item Knowledge base item * * @return boolean */ public function createNew(KnowbaseItem $item) { $this->getEmpty(); $this->fields['knowbaseitems_id'] = $item->fields['id']; $this->fields['name'] = Toolbox::addslashes_deep($item->fields['name']); $this->fields['answer'] = Toolbox::clean_cross_side_scripting_deep( Toolbox::addslashes_deep($item->fields['answer']) ); $this->fields['date_creation'] = $item->fields['date_mod']; $this->fields['revision'] = $this->getNewRevision(); $this->fields['users_id'] = $item->fields['users_id']; $this->addToDB(); } /** * Populate and create a new revision from KnowbaseItem informations * * @param KnowbaseItemTranslation $item Knowledge base item translation * * @return boolean */ public function createNewTranslated(KnowbaseItemTranslation $item) { $this->getEmpty(); $this->fields['knowbaseitems_id'] = $item->fields['knowbaseitems_id']; $this->fields['name'] = $item->fields['name']; $this->fields['answer'] = $item->fields['answer']; $this->fields['date_creation'] = $item->fields['date_mod']; $this->fields['language'] = $item->fields['language']; $this->fields['revision'] = $this->getNewRevision(); $this->fields['users_id'] = $item->fields['users_id']; $this->addToDB(); } /** * Get new revision number for item * * @return integer */ private function getNewRevision() { global $DB; $result = $DB->request([ 'SELECT' => ['MAX' => 'revision AS revision'], 'FROM' => 'glpi_knowbaseitems_revisions', 'WHERE' => [ 'knowbaseitems_id' => $this->fields['knowbaseitems_id'], 'language' => $this->fields['language'] ] ])->next(); $rev = $result['revision']; if ($rev === null) { //no revisions yet $rev = 1; } else { ++$rev; } return $rev; } }