Skip to content
Snippets Groups Projects
Select Git revision
  • 93fb3b44a2f1f4af9e568041a579fda27fa86e6e
  • main default protected
  • studip-rector
  • ci-opt
  • course-members-export-as-word
  • data-vue-app
  • pipeline-improvements
  • webpack-optimizations
  • rector
  • icon-renewal
  • http-client-and-factories
  • jsonapi-atomic-operations
  • vueify-messages
  • tic-2341
  • 135-translatable-study-areas
  • extensible-sorm-action-parameters
  • sorm-configuration-trait
  • jsonapi-mvv-routes
  • docblocks-for-magic-methods
19 results

HelpTour.class.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    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
                );
    
    
        }
    }