<?php
# Lifter010: TODO

/*
 * Copyright (C) 2014 - Arne Schröder <schroeder@data-quest.de>
 *
 * formerly institut_main.php - Die Eingangsseite fuer ein Institut
 *
 * 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.
 */

class Institute_OverviewController extends AuthenticatedController
{
    protected $allow_nobody = true;

    function before_filter(&$action, &$args) {

        //Check if anonymous access is really allowed:
        $config = Config::get();
        if (($config->ENABLE_FREE_ACCESS && ($config->ENABLE_FREE_ACCESS == 'courses_only'))) {
            $this->allow_nobody = false;
        }

        if (Request::option('auswahl')) {
            Request::set('cid', Request::option('auswahl'));
        }

        parent::before_filter($action, $args);

        checkObject();
        $this->institute = Institute::findCurrent();
        if (!$this->institute) {
            throw new CheckObjectException(_('Sie haben kein Objekt gewählt.'));
        }
        $this->institute_id = $this->institute->id;

        //set visitdate for institute, when coming from meine_seminare
        if (Request::option('auswahl')) {
            object_set_visit($this->institute_id, 0);
        }

        PageLayout::setHelpKeyword("Basis.Einrichtungen");
        PageLayout::setTitle($this->institute->getFullName() . " - " ._("Kurzinfo"));
        Navigation::activateItem('/course/main/info');

    }

    /**
     * show institute overview page
     *
     * @return void
     */
    function index_action()
    {
        //gibt es eine Anweisung zur Umleitung?
        $redirect_to = Request::get('redirect_to');
        if ($redirect_to) {
            if (!is_internal_url($redirect_to)) {
                throw new Exception('Invalid redirection');
            }

            $this->redirect(URLHelper::getURL($redirect_to, ['cid' => $this->institute_id]));
            return;
        }

        $this->sidebar = Sidebar::get();

        if (Config::get()->NEWS_RSS_EXPORT_ENABLE && $this->institute_id){
            $rss_id = StudipNews::GetRssIdFromRangeId($this->institute_id);
            if ($rss_id) {
                PageLayout::addHeadElement('link', ['rel'   => 'alternate',
                                                         'type'  => 'application/rss+xml',
                                                         'title' => 'RSS',
                                                         'href'  => 'rss.php?id='.$rss_id]);
            }
        }

        URLHelper::bindLinkParam("inst_data", $this->institut_main_data);

        // (un)subscribe to institute
        if (Config::get()->ALLOW_SELFASSIGN_INSTITUTE && $GLOBALS['user']->id !== 'nobody' && !$GLOBALS['perm']->have_perm('admin')) {
            $widget = new ActionsWidget();
            if (! $GLOBALS['perm']->have_studip_perm('user', $this->institute_id)) {
                $url = URLHelper::getURL('dispatch.php/institute/overview', [
                    'follow_inst' => 'on'
                ]);
                $widget->addLink(_('Einrichtung abonnieren'), $url);
            } elseif (! $GLOBALS['perm']->have_studip_perm('autor', $this->institute_id)) {
                $url = URLHelper::getURL('dispatch.php/institute/overview', [
                    'follow_inst' => 'off'
                ]);
                $widget->addLink(_('Austragen aus der Einrichtung'), $url);
            }
            $this->sidebar->addWidget($widget);

            if (! $GLOBALS['perm']->have_studip_perm('user', $this->institute_id) AND (Request::option('follow_inst') == 'on')) {
                $query = "INSERT IGNORE INTO user_inst
                          (user_id, Institut_id, inst_perms)
                          VALUES (?, ?, 'user')";
                $statement = DBManager::get()->prepare($query);
                $statement->execute([
                    $GLOBALS['user']->user_id,
                    $this->institute_id
                ]);
                if ($statement->rowCount() > 0) {
                    StudipLog::log('INST_USER_ADD', $this->institute_id, $GLOBALS['user']->user_id, 'user');
                    NotificationCenter::postNotification('UserInstitutionDidCreate', $this->institute_id, $GLOBALS['user']->user_id);

                    PageLayout::postMessage(MessageBox::success(_("Sie haben die Einrichtung abonniert.")));
                    header('Location: '.URLHelper::getURL('', ['cid' => $this->institute_id]));
                    die;
                }
            } elseif (! $GLOBALS['perm']->have_studip_perm('autor', $this->institute_id) AND (Request::option('follow_inst') == 'off')) {
                $query = "DELETE FROM user_inst
                          WHERE user_id = ?  AND Institut_id = ?";
                $statement = DBManager::get()->prepare($query);
                $statement->execute([
                    $GLOBALS['user']->user_id,
                    $this->institute_id
                ]);
                if ($statement->rowCount() > 0) {
                    StudipLog::log('INST_USER_DEL', $this->institute_id, $GLOBALS['user']->user_id, 'user');
                    NotificationCenter::postNotification('UserInstitutionDidDelete', $this->institute_id, $GLOBALS['user']->user_id);
                    PageLayout::postMessage(MessageBox::success(_("Sie haben sich aus der Einrichtung ausgetragen.")));
                    header('Location: '.URLHelper::getURL('', ['cid' => $this->institute_id]));
                    die;
                }
            }
        }

        // Fetch news
        $response = $this->relayWithRedirect('news/display/' . $this->institute_id);
        $this->news = $response->body;

        // Fetch  votes
        if (Config::get()->VOTE_ENABLE) {
            $response = $this->relay('evaluation/display/' . $this->institute_id . '/institute');
            $this->evaluations = $response->body;

            $response = $this->relay('questionnaire/widget/' . $this->institute_id . '/institute');
            $this->questionnaires = $response->body;
        }

        // Fetch dates
        $response = $this->relay("calendar/contentbox/display/$this->institute_id/1210000");
        $this->dates = $response->body;
    }

}