protected/components/RISBaseController.php
<?php
class RISBaseController extends CController
{
/**
* Alternative: //layouts/width_wide
*/
public $layout = '//layouts/width_std';
/**
* @var string
*/
public $html_description = "";
public $html_itemprop = "";
/**
* @var string
*/
public $inline_css = "";
/**
* @var array context menu items. This property will be assigned to {@link CMenu::items}.
*/
public $menu = [];
/**
* @var array the breadcrumbs of the current page. The value of this property will
* be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
* for more details on how to specify this property.
*/
public $breadcrumbs = [];
public $top_menu = "";
// Options to load js and css libraries. The files are then loaded in views/layouts/main.php
public $load_calendar = false;
public $load_ckeditor = false;
public $load_isotope_js = false;
public $load_leaflet = false;
public $load_list_js = false;
public $load_mediaelement = false;
public $load_pdf_js = false;
public $load_selectize_js = false;
public $suche_pre = "";
public $msg_ok = "";
public $msg_err = "";
protected function performLoginActions($code = "")
{
/** @var CWebUser $user */
$user = Yii::app()->getUser();
$this->msg_err = "";
$this->msg_ok = "";
if ($code != "") {
$x = explode("-", $code);
/** @var BenutzerIn $benutzerIn */
$benutzerIn = BenutzerIn::model()->findByPk($x[0]);
if (!$benutzerIn) $this->msg_err = "Diese Seite existiert nicht. Vielleicht wurde der Bestätigungslink falsch kopiert?";
elseif ($benutzerIn->email_bestaetigt) $this->msg_err = "Dieser Zugang wurde bereits bestätigt.";
elseif (!$benutzerIn->emailBestaetigen($code)) $this->msg_err = "Diese Seite existiert nicht. Vielleicht wurde der Bestätigungslink falsch kopiert? (Beachte, dass der Link in der E-Mail nur 2-3 Tage lang gültig ist.";
else {
$this->msg_ok = "Der Zugang wurde bestätigt. Ab jetzt erhältst du Benachrichtigungen per E-Mail, wenn du das so eingestellt hast.";
$identity = new RISUserIdentity($benutzerIn);
Yii::app()->user->login($identity);
}
}
if (AntiXSS::isTokenSet("abmelden") && !$user->isGuest) {
$user->logout();
}
if (AntiXSS::isTokenSet("login_anlegen") && $user->isGuest && !isset($_REQUEST["register"])) {
/** @var BenutzerIn $benutzerIn */
$benutzerIn = BenutzerIn::model()->findByAttributes(["email" => $_REQUEST["email"]]);
if ($benutzerIn) {
if ($benutzerIn->validate_password($_REQUEST["password"])) {
$identity = new RISUserIdentity($benutzerIn);
Yii::app()->user->login($identity);
} else {
$this->msg_err = "Das angegebene Passwort ist falsch.";
}
} else {
$this->msg_err = "Für die angegebene E-Mail-Adresse existiert noch kein Zugang.";
}
}
if (AntiXSS::isTokenSet("login_anlegen") && $user->isGuest && isset($_REQUEST["register"])) {
/** @var BenutzerIn[] $gefundene_benutzerInnen */
$gefundene_benutzerInnen = BenutzerIn::model()->findAll([
"condition" => "email='" . addslashes($_REQUEST["email"]) . "'"
]);
if (count($gefundene_benutzerInnen) > 0) {
$this->msg_err = "Es existiert bereits ein Zugang für diese E-Mail-Adresse";
} elseif (trim($_REQUEST["password"]) == "") {
$this->msg_err = "Bitte gib ein Passwort an";
} elseif ($_REQUEST["password"] != $_REQUEST["password2"]) {
$this->msg_err = "Die beiden angegebenen Passwörter stimmen nicht überein.";
} else {
$benutzerIn = BenutzerIn::createBenutzerIn(trim($_REQUEST["email"]), $_REQUEST["password"]);
if ($benutzerIn->save()) {
$benutzerIn->sendEmailBestaetigungsMail();
$identity = new RISUserIdentity($benutzerIn);
Yii::app()->user->login($identity);
$this->msg_ok = "Der Zugang wurde angelegt. Es wurde eine Bestätigungs-Mail an die angegebene Adresse geschickt. Bitte klicke auf den Link in dieser Mail an, um E-Mail-Benachrichtigungen zu erhalten.";
} else {
$this->msg_err = "Leider ist ein (ungewöhnlicher) Fehler aufgetreten.";
$errs = $benutzerIn->getErrors();
foreach ($errs as $err) foreach ($err as $e) $this->msg_err .= $e;
}
}
}
}
/**
* @param string $target_url
* @param string $code
* @return array
*/
protected function requireLogin($target_url, $code = "")
{
$this->performLoginActions($code);
if (Yii::app()->getUser()->isGuest) {
$this->render("../index/login", [
"current_url" => $target_url,
]);
Yii::app()->end();
} else {
$benutzerIn = $this->aktuelleBenutzerIn();
if (!$benutzerIn) {
Yii::app()->getUser()->logout();
$this->redirect("/");
}
}
}
/**
* @return BenutzerIn|null
*/
public function aktuelleBenutzerIn()
{
$user = Yii::app()->getUser();
if ($user->isGuest) return null;
/** @var BenutzerIn $ich */
$ich = BenutzerIn::model()->findByAttributes(["email" => Yii::app()->user->id]);
return $ich;
}
public function binContentAdmin(): bool
{
$curr = $this->aktuelleBenutzerIn();
if ($curr === null) return false;
return $curr->hatBerechtigung(BenutzerIn::BERECHTIGUNG_CONTENT);
}
/**
* @param int $error_code
* @param string $error_message
*/
public function errorMessageAndDie($error_code, $error_message)
{
$this->render("../index/error", [
"code" => $error_code,
"message" => $error_message,
]);
Yii::app()->end($error_code);
}
}