.
* ---------------------------------------------------------------------
*/
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 "| $no_txt |
";
echo "
";
echo "
";
return;
}
// Display the pager
Html::printAjaxPager(self::getTypeName(1), $start, $number);
// Output events
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;
}
}