Skip to content
Snippets Groups Projects
Select Git revision
  • d39f8d01d91706c41915a542925cdd77b6cf85da
  • 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

wiki.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.
    terms.php 3.01 KiB
    <?php
    /**
     * show terms on first login and check if user accept them
     *
     * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
     * @license GPL2 or any later version
     * @since   Stud.IP 4.2
     */
    class TermsController extends AuthenticatedController
    {
        public function before_filter(&$action, &$args)
        {
            parent::before_filter($action, $args);
    
            if ($GLOBALS['user']->cfg->TERMS_ACCEPTED) {
                $this->redirectUser();
            }
        }
    
        public function index_action()
        {
            PageLayout::setTitle(_('Nutzungsbedingungen'));
    
            $this->return_to = Request::get('return_to');
            $this->redirect_token = Request::get('redirect_token');
    
            $this->compulsory = Config::get()->TERMS_CONFIG['compulsory'];
            $this->denial_message = '';
    
            $this->terms_of_use = $this->getTermsOfUse();
    
            if (Request::isPost()) {
                CSRFProtection::verifyUnsafeRequest();
                if (Request::submitted('accept')) {
                    $GLOBALS['user']->cfg->store('TERMS_ACCEPTED', 1);
                    $this->redirectUser();
                } else {
                    $_SESSION['logout_ticket'] = get_ticket();
                    $this->redirectUser('dispatch.php/logout');
                }
            } elseif (Request::get('action') === 'denied') {
                if (trim(Config::get()->TERMS_CONFIG['denial_message'])) {
                    $this->denial_message = trim(Config::get()->TERMS_CONFIG['denial_message']);
                } else {
                    $this->denial_message = sprintf(
                        _('Sie haben den Nutzungsbedingungen nicht zugestimmt und können '
                        . 'damit das System nicht nutzen. Bitte kontaktieren Sie Ihren '
                        . 'Support über folgende Adresse, um die nächsten Schritte '
                        . 'abzustimmen: %s'),
                        '<a href="mailto:' . $GLOBALS['UNI_CONTACT'] . '">' . $GLOBALS['UNI_CONTACT'] . '</a>'
                    );
                }
            }
        }
    
        private function redirectUser($target = null)
        {
            if (Token::isValid(Request::option('redirect_token')) && Request::get('return_to')) {
                $target = Request::get('return_to') ;
            } else {
                $target = $target ?: 'dispatch.php/start';
            }
            $this->redirect(URLHelper::getURL($target));
        }
    
    
        /**
         * @return array|null
         */
        private function getTermsOfUse()
        {
            $url = Config::get()->TERMS_OF_USE_URL;
    
            if (is_internal_url($url)) {
                $url_parts = explode('/', $url);
                $detail_id = $url_parts[4];
                $si = new Siteinfo();
                $detail = $si->get_detail($detail_id);
                if (empty($detail) || !empty($detail['draft_status']) || !empty($detail['page_disabled_nobody'])) {
                    return null;
                }
    
                return [
                    'type' => 'internal_url',
                    'content' => $si->get_detail_content_processed($detail_id)
                ];
    
            }
    
            return [
                'type' => 'external_url',
                'url' => $url
            ];
        }
    }