Select Git revision
ExternModuleTemplateNews.class.php
Forked from
Stud.IP / Stud.IP
Source project has a limited visibility.
-
Jan-Hendrik Willms authoredJan-Hendrik Willms authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
WikiVersion.php 3.30 KiB
<?php
/**
* Wikiversion.php
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* @author Rasmus Fuhse <fuhse@data-quest.de>
* @copyright 2023 Stud.IP Core-Group
* @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
* @category Stud.IP
*
* @property int $id alias column for user_id
* @property int $version_id database column
* @property int $page_id database column
* @property string $name database column
* @property string $content database column
* @property string $user_id database column
* @property int $mkdate database column
*
* @property WikiPage $page
* @property User $user
* @property WikiPage|null $predecessor
* @property WikiPage|null $successor
* @property int|null $versionnumber
*/
class WikiVersion extends SimpleORMap
{
protected static function configure($config = [])
{
$config['db_table'] = 'wiki_versions';
$config['belongs_to']['page'] = [
'class_name' => WikiPage::class,
'foreign_key' => 'page_id'
];
$config['belongs_to']['user'] = [
'class_name' => User::class,
'foreign_key' => 'user_id'
];
$config['additional_fields']['predecessor'] = [
'get' => function ($version) {
return static::findOneBySQL('`page_id` = :page_id AND `mkdate` < :version_time ORDER BY `mkdate` DESC LIMIT 1', [
'page_id' => $version['page_id'],
'version_time' => $version['mkdate']
]);
}
];
$config['additional_fields']['successor'] = [
'get' => function ($version) {
$newer_version = static::findOneBySQL('`page_id` = :page_id AND `mkdate` > :version_time ORDER BY `mkdate` ASC LIMIT 1', [
'page_id' => $version['page_id'],
'version_time' => $version['mkdate']
]);
return $newer_version ?? $version->page;
}
];
$config['additional_fields']['versionnumber'] = [
'get' => function ($version) {
$i = 1;
foreach (array_reverse($version->page->versions->getArrayCopy()) as $v) {
if ($v->id === $version->id) {
return $i;
}
$i++;
}
return null;
}
];
parent::configure($config);
}
public function isDeletable(?string $user_id = null): bool
{
if ($user_id === null && User::findCurrent()) {
$user_id = User::findCurrent()->id;
}
if (!$user_id) {
return false;
}
if ($this->user_id === $user_id) {
return true;
}
$permission = $this->page->write_permission;
if ($permission === 'all') {
$permission = 'tutor';
}
return in_array($permission, ['tutor', 'dozent'])
&& $GLOBALS['perm']->have_studip_perm(
$this->page->write_permission,
$this->page->range_id,
$user_id
);
}
}