Beispiel #1
0
/**
 * Returns an overview of certain documents
 *
 * @param Array $documents Ids of the documents in question
 * @param mixed $open      Array containing open states of documents
 * @return string Overview of documents as html, ready to be displayed
 */
function show_documents($documents, $open = null)
{
    if (!is_array($documents)) {
        return;
    }
    if (!is_null($open) && !is_array($open)) {
        $open = null;
    }
    if (is_array($open)) {
        reset($open);
        $ank = key($open);
    }
    if (!empty($documents)) {
        $query = "SELECT {$GLOBALS['_fullname_sql']['full']} AS fullname, username, user_id,\n                         dokument_id, filename, filesize, downloads, protected, url, description,\n                         IF(IFNULL(name, '') = '', filename, name) AS t_name,\n                         GREATEST(a.chdate, a.mkdate) AS chdate\n                  FROM dokumente AS a\n                  LEFT JOIN auth_user_md5 USING (user_id)\n                  LEFT JOIN user_info USING (user_id)\n                  WHERE dokument_id IN (?)\n                  ORDER BY a.chdate DESC";
        $statement = DBManager::get()->prepare($query);
        $statement->execute(array($documents));
        $documents = $statement->fetchAll(PDO::FETCH_ASSOC);
    }
    foreach ($documents as $index => $document) {
        $type = empty($document['url']) ? 0 : 6;
        $is_open = is_null($open) || $open[$document['dokument_id']] ? 'open' : 'close';
        $extension = getFileExtension($document['filename']);
        // Create icon
        $icon = sprintf('<a href="%s">%s</a>', GetDownloadLink($document['dokument_id'], $document['filename'], $type), GetFileIcon($extension, true)->asImg());
        // Create open/close link
        $link = $is_open === 'open' ? URLHelper::getLink('#dok_anker', array('close' => $document['dokument_id'])) : URLHelper::getLink('#dok_anker', array('open' => $document['dokument_id']));
        // Create title including filesize and number of downloads
        $size = $document['filesize'] > 1024 * 1024 ? sprintf('%u MB', round($document['filesize'] / 1024 / 1024)) : sprintf('%u kB', round($document['filesize'] / 1024));
        $downloads = $document['downloads'] == 1 ? '1 ' . _('Download') : $document['downloads'] . ' ' . _('Downloads');
        $title = sprintf('<a href="%s"%s class="tree">%s</a> (%s / %s)', $link, $ank == $document['dokument_id'] ? ' name="dok_anker"' : '', htmlReady(mila($document['t_name'])), $size, $downloads);
        // Create additional information
        $addon = sprintf('<a href="%s">%s</a> %s', URLHelper::getLink('dispatch.php/profile', array('username' => $document['username'])), $document['fullname'], date('d.m.Y H:i', $document['chdate']));
        if ($document['protected']) {
            $addon = tooltipicon(_('Diese Datei ist urheberrechtlich geschützt!')) . ' ' . $addon;
        }
        if (!empty($document['url'])) {
            $addon .= ' ' . Icon::create('link-extern', 'clickable', ['title' => _('Diese Datei wird von einem externen Server geladen!')])->asImg(16);
        }
        // Attach created variables to document
        $documents[$index]['addon'] = $addon;
        $documents[$index]['extension'] = $extension;
        $documents[$index]['icon'] = $icon;
        $documents[$index]['is_open'] = $is_open;
        $documents[$index]['link'] = $link;
        $documents[$index]['title'] = $title;
        $documents[$index]['type'] = $type;
    }
    $template = $GLOBALS['template_factory']->open('user_activities/files-details');
    $template->documents = $documents;
    return $template->render();
}
 static function loadFiles($id, $type = 'file')
 {
     if ($type === 'folder') {
         $query = "SELECT dokument_id AS document_id, user_id, name, description, mkdate, chdate,\n                             filename, filesize, downloads, protected\n                      FROM dokumente\n                      WHERE range_id = ?";
     } else {
         $query = "SELECT dokument_id AS document_id, user_id, name, description, mkdate, chdate,\n                             filename, filesize, downloads, protected\n                      FROM dokumente\n                      WHERE dokument_id IN (?)";
     }
     $statement = DBManager::get()->prepare($query);
     $statement->execute(array($id));
     $files = $statement->fetchAll(PDO::FETCH_ASSOC);
     foreach ($files as &$file) {
         $file['protected'] = !empty($file['protected']);
         $file['mime_type'] = get_mime_type($file['filename']);
         $file['icon'] = Assets::image_path(GetFileIcon(getFileExtension($file['filename'])));
     }
     return $type !== 'folder' && !is_array($id) ? reset($files) : $files;
 }
Beispiel #3
0
</div>
<? if (count($message->attachments)) : ?>
<h3><?php 
echo Icon::create('staple', 'inactive')->asImg(20, ["class" => "text-bottom"]);
echo _("Anhang");
?>
</h3>
<ul class="message_attachments">
    <? foreach ($message->attachments as $attachment) : ?>
    <li>
        <? $mime_type = get_mime_type($attachment['filename']) ?>
        <h4><a href="<?php 
echo GetDownloadLink($attachment->getId(), $attachment['filename'], 7, 'force');
?>
"><?php 
echo GetFileIcon(substr($attachment['filename'], strrpos($attachment["filename"], ".") + 1))->asImg();
echo htmlReady($attachment['name']);
?>
</a></h4>
        <? if (substr($mime_type, 0, 5) === "image") : ?>
        <div><img src="<?php 
echo GetDownloadLink($attachment->getId(), $attachment['filename'], 7, 'normal');
?>
" style="max-width: 400px;"></div>
        <? endif ?>
    </li>
    <? endforeach ?>
</ul>
<? endif ?>

<div align="center" data-dialog-button>
Beispiel #4
0
/**
 * Displays one file/document with all of its information and options.
 *
 */
function display_file_line ($datei, $folder_id, $open, $change, $move, $upload, $all, $refresh=FALSE, $filelink="", $anchor_id, $position = "middle") {
    global $_fullname_sql,$SessionSeminar,$SessSemName, $rechte, $anfang,
        $user, $SemSecLevelWrite, $SemUserStatus, $check_all, $countfiles;
    //Einbinden einer Klasse, die Informationen über den ganzen Baum enthält
    $folder_tree = TreeAbstract::GetInstance('StudipDocumentTree', array('range_id' => $SessionSeminar));
    $javascriptok = true;
    print "\n\t<div class=\"".($rechte ? "draggable" : "")."\" id=\"file_".$folder_id."_$countfiles\">";
    print "<div style=\"display:none\" id=\"getmd5_fi".$folder_id."_$countfiles\">".$datei['dokument_id']."</div>";
    print "<table cellpadding=0 border=0 cellspacing=0 width=\"100%\"><tr class=\"handle\">";
    if (!$all) {
        print "<td class=\"tree-elbow-end\">" . Assets::img("datatree_2.gif") . "</td>";
    }

    //Farbe des Pfeils bestimmen:
    $chdate = (($datei["chdate"]) ? $datei["chdate"] : $datei["mkdate"]);
    if (object_get_visit($SessSemName[1], "documents") < $chdate)
        $timecolor = "#FF0000";
    else {
        $timediff = (int) log((time() - doc_newest($folder_id)) / 86400 + 1) * 15;
        if ($timediff >= 68)
            $timediff = 68;
        $red = dechex(255 - $timediff);
        $other = dechex(119 + $timediff);
        $timecolor= "#" . $red . $other . $other;
    }

    if ($open[$datei["dokument_id"]]) {
        print "<td id=\"file_".$datei["dokument_id"]."_arrow_td\" nowrap valign=\"top\"" .
            "align=\"left\" width=1% bgcolor=\"$timecolor\" class=\"printhead3\" valign=\"bottom\"><a href=\"";
        print URLHelper::getLink("?close=".$datei["dokument_id"]."#anker");
        print "\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefilebody('".
            $datei["dokument_id"]."', '".$SessionSeminar."')\">".
            Assets::img('forumgraurunt2.png', tooltip2(_('Objekt zuklappen')) + array('id' => 'file_'. $datei["dokument_id"] . '_arrow_img')).
            "</a></td>";
    } else {
        print "<td id=\"file_".$datei["dokument_id"]."_arrow_td\" nowrap valign=\"top\" align=\"left\" width=1% bgcolor=\"$timecolor\" class=\"printhead2\" valign=\"bottom\"><a href=\"";
        print URLHelper::getLink("?open=".$datei["dokument_id"]."#anker");
        print "\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefilebody('".
            $datei["dokument_id"]."', '".$SessionSeminar."')\">".
            Assets::img('forumgrau2.png', tooltip2(_('Objekt aufklappen')) + array('id' => 'file_'. $datei["dokument_id"] . '_arrow_img')).
            "</a></td>";
    }

    // -> Pfeile zum Verschieben (bzw. die Ziehfläche)
    if ((!$all) && ($rechte)) {
        $countfiles++;
        $bewegeflaeche = "<span class=\"updown_marker\" id=\"pfeile_".$datei["dokument_id"]."\">";
        if (($position == "middle") || ($position == "bottom")) {
            $bewegeflaeche .= "<a href=\"".URLHelper::getLink('?open='.$datei['dokument_id'])."_mfu_\" title=\""._("Datei nach oben schieben").
                "\">" . Icon::create('arr_2up', 'sort')->asImg(['class' => 'text-top']) . "</a>";
        }
        if (($position == "middle") || ($position == "top")) {
            $bewegeflaeche .= "<a href=\"".URLHelper::getLink('?open='.
                    $datei['dokument_id'])."_mfd_\" title=\""._("Datei nach unten schieben").
                    "\">". Icon::create('arr_2down', 'sort')->asImg(['class' => 'text-top']) . "</a>";
        }
        $bewegeflaeche .= "</span>";
    }

    print "<td class=\"printhead\" valign=\"bottom\">";
    if ($change == $datei["dokument_id"]) {
        print "<span id=\"file_".$datei["dokument_id"]."_header\" style=\"font-weight: bold\"><a href=\"".URLHelper::getLink("?close=".$datei["dokument_id"]."#anker")."\" class=\"tree\"";
        print ' name="anker"></a>';
        print GetFileIcon(getFileExtension($datei['filename']))->asImg();
        print "<input style=\"font-size: 8pt; width: 50%;\" type=\"text\" size=\"20\" maxlength=\"255\" name=\"change_name\" aria-label=\"Ordnername eingeben\" value=\"".htmlReady($datei["name"])."\"></b>";
    } else {
        if (($move == $datei["dokument_id"]) ||  ($upload == $datei["dokument_id"]) || ($anchor_id == $datei["dokument_id"])) {
            print "<a name=\"anker\"></a>";
        }
        $type = ($datei['url'] != '')? 6 : 0;
        // LUH Spezerei:
        if (check_protected_download($datei["dokument_id"])) {
            print "<a href=\"".GetDownloadLink( $datei["dokument_id"], $datei["filename"], $type, "normal")."\" class=\"extern\">".GetFileIcon(getFileExtension($datei['filename']))->asImg()."</a>";
        } else {
            print Icon::create('info-circle', 'inactive')->asImg();
        }
        //Jetzt folgt der Link zum Aufklappen
        if ($open[$datei["dokument_id"]]) {
      print "<a href=\"".URLHelper::getLink("?close=".$datei["dokument_id"]."#anker")."\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefilebody('".$datei["dokument_id"]."')\">";
            print "&nbsp;<span id=\"file_".$datei["dokument_id"]."_header\" style=\"font-weight: bold\">";
        } else {
            print "<a href=\"".URLHelper::getLink("?open=".$datei["dokument_id"]."#anker")."\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefilebody('".$datei["dokument_id"]."')\">";
            print "&nbsp;<span id=\"file_".$datei["dokument_id"]."_header\" style=\"font-weight: normal\">";
        }
        print htmlReady($datei['t_name']);

        print "</span>";
    }

    //add the size
    print '&nbsp;&nbsp;(' . relsize($datei['filesize'], $datei['filesize'] < 1024);

    //add number of downloads
    print " / ".(($datei["downloads"] == 1) ? $datei["downloads"]." "._("Download") : $datei["downloads"]." "._("Downloads")).")";


    //So und jetzt die rechtsbündigen Sachen:
    print "</a></td><td align=\"right\" class=\"printhead\" valign=\"bottom\">";
    if ($datei['username']) {
        print "<a href=\"".URLHelper::getLink('dispatch.php/profile?username='******'username'])."\">".htmlReady($datei['fullname'])."</a> ";
    } else {
        print htmlReady($datei['author_name']);
    }
    print $bewegeflaeche." ";

    //Workaround for older data from previous versions (chdate is 0)
    print " ".date("d.m.Y - H:i", (($datei["chdate"]) ? $datei["chdate"] : $datei["mkdate"]));

    if ($all) {
      if ((!$upload) && ($datei["url"]=="") && check_protected_download($datei["dokument_id"])) {
        $checked = ($check_all || in_array($datei["dokument_id"], Request::getArray('download_ids'))) ? 'checked' : '';
        $box = sprintf ("<input type=\"CHECKBOX\" %s name=\"download_ids[]\" value=\"%s\">",$checked , $datei["dokument_id"]);
        print $box;
      } else {
        echo Icon::create('decline', 'inactive', ['title' => _("Diese Datei kann nicht als ZIP-Archiv heruntergeladen werden."), 'style' => 'padding-left:5px;'])->asImg();
    }
    }
    print "</td></tr>";

    //Ab jetzt kommt der Bereich zum Runterladen und Bearbeiten:
    if (isset($open[$datei["dokument_id"]])) {
        //Dokument-Content ausgeben
        print "<tr id=\"file_".$datei["dokument_id"]."_body_row\">".(($all) ? "" : "<td></td>")."<td colspan=3><div id=\"file_".$datei["dokument_id"]."_body\">";
        //Der eigentliche Teil ist outsourced in die folgende Funktion,
        //damit der Körper auch über Ajax abgerufen werden kann.
        display_file_body($datei, $folder_id, $open, $change, $move, $upload, $all, $refresh, $filelink);
    } else {
        print "<tr id=\"file_".$datei["dokument_id"]."_body_row\">".(($all) ? "" : "<td></td>")."<td colspan=3><div id=\"file_".$datei["dokument_id"]."_body\" style=\"display:none\">";
    }
    print "</div></td></tr></table>\n\t</div>";
}
 function callSafeguard($evalAction, $evalID = "", $showrangeID = NULL, $search = NULL, $referer = NULL)
 {
     global $perm, $auth, $user;
     if (!($evalAction || $evalAction == "search")) {
         return " ";
     }
     if (!$perm->have_studip_perm("tutor", $showrangeID) && $user->id != $showrangeID && !(isDeputyEditAboutActivated() && isDeputy($user->id, $showrangeID, true))) {
         return $this->createSafeguard("ausruf", sprintf(_("Sie haben keinen Zugriff auf diesen Bereich.")));
     }
     $evalDB = new EvaluationDB();
     $evalChanged = NULL;
     $safeguard = " ";
     /* Actions without any permissions ---------------------------------- */
     switch ($evalAction) {
         case "search_template":
             $search = trim($search);
             $templates = $evalDB->getPublicTemplateIDs($search);
             if (strlen($search) < EVAL_MIN_SEARCHLEN) {
                 $report = EvalCommon::createReportMessage(sprintf(_("Bitte einen Suchbegriff mit mindestens %d Buchstaben eingeben."), EVAL_MIN_SEARCHLEN), EVAL_PIC_ERROR, EVAL_CSS_ERROR);
             } elseif (count($templates) == 0) {
                 $report = EvalCommon::createReportMessage(_("Es wurden keine passenden öffentlichen Evaluationsvorlagen gefunden."), EVAL_PIC_ERROR, EVAL_CSS_ERROR);
             } else {
                 $report = EvalCommon::createReportMessage(sprintf(_("Es wurde(n) %d passende öffentliche Evaluationsvorlagen gefunden."), count($templates)), EVAL_PIC_SUCCESS, EVAL_CSS_SUCCESS);
             }
             $safeguard .= $report->createContent();
             return $safeguard;
         case "export_request":
             /* Check permissions ------------------------------------------- */
             $haveNoPerm = YES;
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_NO_CHILDREN);
             $haveNoPerm = EvaluationObjectDB::getEvalUserRangesWithNoPermission($eval);
             if ($haveNoPerm == YES) {
                 $report = EvalCommon::createReportMessage(_("Sie haben nicht die Berechtigung diese Evaluation zu exportieren."), EVAL_PIC_ERROR, EVAL_CSS_ERROR);
                 return $report->createContent();
             }
             /* -------------------------------------- end: check permissions */
             /* Export evaluation ------------------------------------------- */
             $exportManager = new EvaluationExportManagerCSV($evalID);
             $exportManager->export();
             /* -------------------------------------- end: export evaluation */
             /* Create link ------------------------------------------------- */
             $link = new HTML("a");
             $link->addAttr('href', GetDownloadLink($exportManager->getTempFilename(), $exportManager->getFilename(), 2));
             $link->addHTMLContent(GetFileIcon('csv')->asImg());
             $link->addContent(_("auf diese Verknüpfung"));
             /* -------------------------------------------- end: create link */
             /* Create report ----------------------------------------------- */
             if ($exportManager->isError()) {
                 $report = EvalCommon::createErrorReport($exportManager, _("Fehler beim Exportieren"));
             } else {
                 $report = EvalCommon::createReportMessage(_("Die Daten wurden erfolgreich exportiert. Sie können die Ausgabedatei jetzt herunterladen."), EVAL_PIC_SUCCESS, EVAL_CSS_SUCCESS);
                 $report = $report->createContent();
                 $report .= sprintf(_("Bitte klicken Sie %s um die Datei herunter zu laden.") . "<br><br>", $link->createContent());
             }
             $safeguard .= $report;
             /* ------------------------------------------ end: create report */
             return $safeguard;
     }
     /* ----------------------------------- end: actions without permissions */
     $eval = new Evaluation($evalID, NULL, EVAL_LOAD_NO_CHILDREN);
     $evalName = htmlready($eval->getTitle());
     /* Check for errors while loading ------------------------------------- */
     if ($eval->isError()) {
         EvalCommon::createErrorReport($eval);
         return $this->createSafeguard("", EvalCommon::createErrorReport($eval));
     }
     /* -------------------------------------- end: errorcheck while loading */
     /* Check for permissions in all ranges of the evaluation -------------- */
     if (!$eval->isTemplate() && $user->id != $eval->getAuthorID()) {
         $no_permisson = EvaluationObjectDB::getEvalUserRangesWithNoPermission($eval);
         if ($no_permisson > 0) {
             if ($no_permisson == 1) {
                 $no_permission_msg .= sprintf(_("Die Evaluation <b>%s</b> ist einem Bereich zugeordnet, für den Sie keine Veränderungsrechte besitzen."), $evalName);
             } else {
                 $no_permission_msg .= sprintf(_("Die Evaluation <b>%s</b> ist %s Bereichen zugeordnet, für die Sie keine Veränderungsrechte besitzen."), $evalName, $no_permisson);
             }
             if ($evalAction != "save") {
                 $no_permission_msg .= " " . _("Der Besitzer wurde durch eine systeminterne Nachricht informiert.");
                 $sms = new messaging();
                 $sms->insert_message(sprintf(_("Benutzer **%s** hat versucht eine unzulässige Änderung an Ihrer Evaluation **%s** vorzunehmen."), get_username($auth->auth["uid"]), $eval->getTitle()), get_username($eval->getAuthorID()), "____%system%____", FALSE, FALSE, "1", FALSE, _("Versuchte Änderung an Ihrer Evaluation"));
             }
         }
     } else {
         if ($eval->isTemplate() && $user->id != $eval->getAuthorID() && $evalAction != "copy_public_template" && $evalAction != "search_showrange") {
             $sms = new messaging();
             $sms->insert_message(sprintf(_("Benutzer **%s** hat versucht eine unzulässige Änderung an Ihrem Template **%s** vorzunehmen."), get_username($auth->auth["uid"]), $eval->getTitle()), get_username($eval->getAuthorID()), "____%system%____", FALSE, FALSE, "1", FALSE, _("Versuchte Änderung an Ihrem Template"));
             return $this->createSafeguard("ausruf", sprintf(_("Sie besitzen keine Rechte für das Tempate <b>%s</b>. Der Besitzer wurde durch eine systeminterne Nachricht informiert."), $evalName));
         }
     }
     /* ----------------------------------------- end: check for permissions */
     switch ($evalAction) {
         case "share_template":
             if ($eval->isShared()) {
                 $eval->setShared(NO);
                 $eval->save();
                 if ($eval->isError()) {
                     $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                     return $safeguard;
                 }
                 $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluationsvorlage <b>%s</b> kann jetzt nicht mehr von anderen Benutzern gefunden werden."), $evalName));
             } else {
                 $eval->setShared(YES);
                 $eval->save();
                 if ($eval->isError()) {
                     $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                     return $safeguard;
                 }
                 $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluationsvorlage <b>%s</b> kann jetzt von anderen Benutzern gefunden werden."), $evalName));
             }
             break;
         case "copy_public_template":
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_ALL_CHILDREN);
             $newEval = $eval->duplicate();
             $newEval->setAuthorID($auth->auth["uid"]);
             $newEval->setShared(NO);
             $newEval->setStartdate(NULL);
             $newEval->setStopdate(NULL);
             $newEval->setTimespan(NULL);
             $newEval->removeRangeIDs();
             $newEval->save();
             if ($newEval->isError()) {
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($newEval));
                 return $safeguard;
             }
             $safeguard .= $this->createSafeguard("ok", sprintf(_("Die öffentliche Evaluationsvorlage <b>%s</b> wurde zu den eigenen Evaluationsvorlagen kopiert."), $evalName));
             break;
         case "start":
             if ($no_permission_msg) {
                 return $this->createSafeguard("ausruf", $no_permission_msg . "<br>" . _("Die Evaluation wurde nicht gestartet."));
             }
             $eval->setStartdate(time() - 500);
             $eval->save();
             if ($eval->isError()) {
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                 return $safeguard;
             }
             $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluation <b>%s</b> wurde gestartet."), $evalName));
             $evalChanged = YES;
             break;
         case "stop":
             if ($no_permission_msg) {
                 return $this->createSafeguard("ausruf", $no_permission_msg . "<br>" . _("Die Evaluation wurde nicht beendet."));
             }
             $eval->setStopdate(time());
             $eval->save();
             if ($eval->isError()) {
                 EvalCommon::createErrorReport($eval);
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                 return $safeguard;
             }
             $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluation <b>%s</b> wurde beendet."), $evalName));
             $evalChanged = YES;
             break;
         case "continue":
             if ($no_permission_msg) {
                 return $this->createSafeguard("ausruf", $no_permission_msg . "<br>" . _("Die Evaluation wurde nicht fortgesetzt."));
             }
             $eval->setStopdate(NULL);
             $eval->setStartdate(time() - 500);
             $eval->save();
             if ($eval->isError()) {
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                 return $safeguard;
             }
             $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluation <b>%s</b> wurde fortgesetzt."), $evalName));
             $evalChanged = YES;
             break;
         case "restart_request":
             if ($no_permission_msg) {
                 return $this->createSafeguard("ausruf", $no_permission_msg . "<br>" . _("Die Evaluation wurde nicht zurücksetzen."));
             }
             $safeguard .= $this->createSafeguard("ausruf", sprintf(_("Die Evaluation <b>%s</b> wirklich zurücksetzen? Dabei werden alle bisher abgegebenen Antworten gelöscht!"), $evalName), "restart_request", $evalID, $showrangeID, $referer);
             break;
         case "restart_confirmed":
             if ($no_permission_msg) {
                 return $this->createSafeguard("ausruf", $no_permission_msg . "<br>" . _("Die Evaluation wurde nicht zurücksetzen."));
             }
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_ALL_CHILDREN);
             $eval->resetAnswers();
             $evalDB->removeUser($eval->getObjectID());
             $eval->setStartdate(NULL);
             $eval->setStopdate(NULL);
             $eval->save();
             if ($eval->isError()) {
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                 return $safeguard;
             }
             $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluation <b>%s</b> wurde zurückgesetzt."), $evalName));
             $evalChanged = YES;
             break;
         case "restart_aborted":
             $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluation <b>%s</b> wurde nicht zurückgesetzt."), $evalName), "", "", "", $referer);
             break;
         case "copy_own_template":
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_ALL_CHILDREN);
             $newEval = $eval->duplicate();
             $newEval->setShared(NO);
             $newEval->save();
             if ($newEval->isError()) {
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($newEval));
                 return $safeguard;
             }
             $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluationsvorlage <b>%s</b> wurde kopiert."), $evalName));
             break;
         case "delete_request":
             if ($no_permission_msg) {
                 return $this->createSafeguard("ausruf", $no_permission_msg . "<br>" . _("Die Evaluation wurde nicht gelöscht."));
             }
             $text = $eval->isTemplate() ? sprintf(_("Die Evaluationsvorlage <b>%s </b>wirklich löschen?"), $evalName) : sprintf(_("Die Evaluation <b>%s </b>wirklich löschen?"), $evalName);
             $safeguard .= $this->createSafeguard("ausruf", $text, "delete_request", $evalID, $showrangeID, $referer);
             break;
         case "delete_confirmed":
             if ($no_permission_msg) {
                 return $this->createSafeguard("ausruf", $no_permission_msg . "<br>" . _("Die Evaluation wurde nicht gelöscht."));
             }
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_ALL_CHILDREN);
             $eval->delete();
             if ($eval->isError()) {
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                 return $safeguard;
             }
             $text = $eval->isTemplate() ? _("Die Evaluationsvorlage <b>%s</b> wurde gelöscht.") : _("Die Evaluation <b>%s</b> wurde gelöscht.");
             $safeguard .= $this->createSafeguard("ok", sprintf($text, $evalName), "", "", "", $referer);
             $evalChanged = YES;
             break;
         case "delete_aborted":
             $text = $eval->isTemplate() ? _("Die Evaluationsvorlage <b>%s</b> wurde nicht gelöscht.") : _("Die Evaluation <b>%s</b> wurde nicht gelöscht.");
             $safeguard .= $this->createSafeguard("ok", sprintf($text, $evalName), "", "", "", $referer);
             break;
         case "unlink_delete_aborted":
             $text = _("Die Evaluation <b>%s</b> wurde nicht verändert.");
             $safeguard .= $this->createSafeguard("ok", sprintf($text, $evalName), "", "", "", $referer);
             break;
         case "unlink_and_move":
             if ($no_permission_msg) {
                 return $this->createSafeguard("ausruf", $no_permission_msg . "<br>" . _("Die Evaluation wurde nicht ausgehängt und zu den eigenen Evaluationsvorlagen verschoben."));
             }
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_ALL_CHILDREN);
             $eval->removeRangeIDs();
             $eval->setAuthorID($auth->auth["uid"]);
             $eval->resetAnswers();
             $evalDB->removeUser($eval->getObjectID());
             $eval->setStartdate(NULL);
             $eval->setStopdate(NULL);
             $eval->save();
             if ($eval->isError()) {
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                 return $safeguard;
             }
             $text = _("Die Evaluation <b>%s</b> wurde aus allen Bereichen ausgehängt und zu den eigenen Evaluationsvorlagen verschoben.");
             $safeguard .= $this->createSafeguard("ok", sprintf($text, $evalName), "", "", "", $referer);
             break;
         case "created":
             $safeguard .= $this->createSafeguard("ok", sprintf(_("Die Evaluation <b>%s</b> wurde angelegt."), $evalName));
             break;
         case "save2":
         case "save":
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_ALL_CHILDREN);
             $update_message = sprintf(_("Die Evaluation <b>%s</b> wurde mit den Veränderungen gespeichert."), $evalName);
             /* Timesettings ---------------------------------------------------- */
             if (Request::option("startMode")) {
                 switch (Request::option("startMode")) {
                     case "manual":
                         $startDate = NULL;
                         break;
                     case "timeBased":
                         $startDate = EvalCommon::date2timestamp(Request::int("startDay"), Request::int("startMonth"), Request::int("startYear"), Request::int("startHour"), Request::int("startMinute"));
                         break;
                     case "immediate":
                         $startDate = time() - 1;
                         break;
                 }
                 if ($no_permission_msg && $eval->getStartdate != $startDate) {
                     $time_msg = $no_permission_msg . "<br>" . _("Die Einstellungen zur Startzeit wurden nicht verändert.");
                 }
             }
             if (Request::option("stopMode")) {
                 switch (Request::option("stopMode")) {
                     case "manual":
                         $stopDate = NULL;
                         $timeSpan = NULL;
                         break;
                     case "timeBased":
                         $stopDate = EvalCommon::date2timestamp(Request::int("stopDay"), Request::int("stopMonth"), Request::int("stopYear"), Request::int("stopHour"), Request::int("stopMinute"));
                         $timeSpan = NULL;
                         break;
                     case "timeSpanBased":
                         $stopDate = NULL;
                         $timeSpan = Request::get("timeSpan");
                         break;
                 }
                 if ($no_permission_msg && ($eval->getStopdate != $stopDate && $eval->getTimespan != $timeSpan)) {
                     $time_msg = $time_msg ? $time_msg . "<br>" : $no_permission_msg;
                     $time_msg .= _("Die Einstellungen zur Endzeit wurden nicht verändert.");
                 }
             }
             /* ----------------------------------------------- end: timesettings */
             /* link eval to ranges --------------------------------------------- */
             $link_range_Array = Request::optionArray("link_range");
             if ($link_range_Array) {
                 $isTemplate = $eval->isTemplate();
                 if ($isTemplate) {
                     $newEval = $eval->duplicate();
                     if ($newEval->isError()) {
                         $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($newEval));
                         return $safeguard;
                     }
                     $update_message = sprintf(_("Die Evaluationsvorlage <b>%s</b> wurde als Evaluation angelegt."), $evalName);
                     $newEval->setStartdate($startDate);
                     $newEval->setStopdate($stopDate);
                     $newEval->setTimespan($timeSpan);
                     $newEval->setShared(NO);
                 } else {
                     $newEval =& $eval;
                 }
                 $counter_linked = 0;
                 foreach ($link_range_Array as $link_rangeID => $v) {
                     if ($userid = get_userid($link_rangeID)) {
                         $link_rangeID = $userid;
                     }
                     $newEval->addRangeID($link_rangeID);
                     $counter_linked++;
                 }
                 if ($isTemplate) {
                     $newEval->save();
                 }
                 if ($newEval->isError()) {
                     $safeguard .= $this->createSafeguard("ausruf", _("Fehler beim Einhängen von Bereichen.") . EvalCommon::createErrorReport($newEval));
                     return $safeguard;
                 }
                 $message .= $message ? "<br>" : " ";
                 $message .= $counter_linked > 1 ? sprintf(_("Die Evaluation wurde in %s Bereiche eingehängt."), $counter_linked) : sprintf(_("Die Evaluation wurde in einen Bereich eingehängt."), $counter_linked);
             }
             /* ---------------------------------------- end: link eval to ranges */
             /* copy eval to ranges --------------------------------------------- */
             $copy_range_Array = Request::optionArray("copy_range");
             if (!empty($copy_range_Array)) {
                 $counter_copy = 0;
                 foreach ($copy_range_Array as $copy_rangeID => $v) {
                     if ($userid = get_userid($copy_rangeID)) {
                         $copy_rangeID = $userid;
                     }
                     $newEval = $eval->duplicate();
                     if (Request::option("startMode")) {
                         $newEval->setStartdate($startDate);
                     }
                     if (Request::get("stopMode")) {
                         $newEval->setStopdate($stopDate);
                         $newEval->setTimespan($timeSpan);
                     }
                     $newEval->setShared(NO);
                     $newEval->removeRangeIDs();
                     $evalDB->removeUser($newEval->getObjectID());
                     $newEval->addRangeID($copy_rangeID);
                     $newEval->save();
                     $counter_copy++;
                     if ($newEval->isError()) {
                         $safeguard .= $this->createSafeguard("ausruf", _("Fehler beim Kopieren von Evaluationen in Bereiche.") . EvalCommon::createErrorReport($newEval));
                         return $safeguard;
                     }
                 }
                 $message .= $message ? "<br>" : " ";
                 $message .= $counter_copy > 1 ? sprintf(_("Die Evaluation wurde in %s Bereiche kopiert."), $counter_copy) : sprintf(_("Die Evaluation wurde in einen Bereich kopiert."), $counter_copy);
             }
             /* ------------------------------------------- end: copy eval to ranges */
             /* unlink ranges ------------------------------------------------------- */
             $remove_range_Array = Request::optionArray("remove_range");
             if (!empty($remove_range_Array)) {
                 /* if all rangeIDs will be removed, so ask if it should be deleted -- */
                 if (sizeof($remove_range_Array) == $eval->getNumberRanges()) {
                     $text = _("Sie wollen die Evaluation <b>%s</b> aus allen ihr zugeordneten Bereichen aushängen.<br>Soll die Evaluation gelöscht oder zu Ihren eigenen Evaluationsvorlagen verschoben werden?");
                     $safeguard .= $this->createSafeguard("ausruf", sprintf($text, $evalName), "unlink_delete_request", $evalID, $showrangeID, $referer);
                     $update_message = NULL;
                     return $safeguard;
                 }
                 /* -------------------------------- end: ask if it should be deleted */
                 $no_permission_ranges = EvaluationObjectDB::getEvalUserRangesWithNoPermission($eval, YES);
                 $counter_no_permisson = 0;
                 if (is_array($no_permission_ranges)) {
                     foreach ($remove_range_Array as $remove_rangeID => $v) {
                         if ($userid = get_userid($remove_rangeID)) {
                             $remove_rangeID = $userid;
                         }
                         // no permisson to unlink this range
                         if (in_array($remove_rangeID, $no_permission_ranges)) {
                             $counter_no_permisson++;
                         }
                     }
                 }
                 // if there are no_permisson_ranges to unlink, return
                 if ($counter_no_permisson > 0) {
                     if ($counter_no_permisson == 1) {
                         $safeguard .= $this->createSafeguard("ausruf", _("Sie wollen die Evaluation aus einem Bereich aushängen, für den Sie keine Berechtigung besitzten.<br> Die Aktion wurde nicht ausgeführt."));
                     } else {
                         $safeguard .= $this->createSafeguard("ausruf", sprintf(_("Sie wollen die Evaluation aus %d Bereichen aushängen, für die Sie keine Berechtigung besitzten.<br> Die Aktion wurde nicht ausgeführt."), $counter_no_permisson));
                     }
                     return $safeguard;
                 }
                 reset($remove_range_Array);
                 $counter_copy = 0;
                 foreach ($remove_range_Array as $remove_rangeID => $v) {
                     if ($userid = get_userid($remove_rangeID)) {
                         $remove_rangeID = $userid;
                     }
                     // the current range will be removed
                     if ($showrangeID == $remove_rangeID) {
                         $current_range_removed = 1;
                     }
                     $eval->removeRangeID($remove_rangeID);
                     $counter_copy++;
                 }
                 if ($eval->isError()) {
                     $safeguard .= $this->createSafeguard("ausruf", _("Fehler beim Aushängen von Bereichen.") . EvalCommon::createErrorReport($eval));
                     return $safeguard;
                 }
                 $message .= $message ? "<br>" : " ";
                 $message .= $counter_copy > 1 ? sprintf(_("Die Evaluation wurde aus %s Bereichen ausgehängt."), $counter_copy) : sprintf(_("Die Evaluation wurde aus einem Bereich ausgehängt."), $counter_copy);
                 if ($eval->getNumberRanges() == 0) {
                     $message .= $message ? "<br>" : "";
                     $message .= _("Sie ist nun keinem Bereich mehr zugeordnet und wurde zu den eigenen Evaluationsvorlagen verschoben.");
                     $eval->setStartdate(NULL);
                     $eval->setStopdate(NULL);
                     $evalDB->removeUser($eval->getObjectID());
                     if ($eval->isError()) {
                         $safeguard .= $this->createSafeguard("ausruf", _("Fehler beim Kopieren von Evaluationen in Bereiche.") . EvalCommon::createErrorReport($newEval));
                         return $safeguard;
                     }
                 } else {
                     $no_permission_ranges = EvaluationObjectDB::getEvalUserRangesWithNoPermission($eval);
                     $number_of_ranges = $eval->getNumberRanges();
                     if ($number_of_ranges == $no_permission_ranges) {
                         $return["msg"] = $this->createSafeguard("ausruf", $message . "<br>" . sprintf(_("Sie haben die Evaluation <b>%s</b> aus allen ihren Bereichen ausgehängt."), $evalName));
                         $return["option"] = DISCARD_OPENID;
                         $eval->save();
                         if ($eval->isError()) {
                             $safeguard = $this->createSafeguard("ausruf", _("Fehler beim Aushängen einer Evaluationen aus allen Bereichen auf die Sie Zugriff haben.") . EvalCommon::createErrorReport($newEval));
                             return $safeguard;
                         }
                         return $return;
                     }
                 }
             }
             if ($eval->isTemplate()) {
                 if (empty($link_range) && empty($copy_range) && empty($remove_range)) {
                     $update_message = sprintf(_("Es wurden keine Veränderungen an der Evaluationsvorlage <b>%s</b> gespeichert."), $evalName);
                 }
             } else {
                 // nothing changed
                 if (!Request::option('startMode') && !Request::option('stopMode') && empty($link_range) && empty($copy_range) && empty($remove_range)) {
                     $update_message = _("Es wurden keine Veränderungen gespeichert.");
                 }
                 // set new start date
                 if (Request::option("startMode") && !$time_msg) {
                     $eval->setStartDate($startDate);
                     if ($startDate != NULL && $startDate <= time() - 1) {
                         $message .= $message ? "<br>" : " ";
                         $message .= _("Die Evaluation wurde gestartet.");
                     }
                 }
                 // set new stop date
                 if (Request::get("stopMode") && !$time_msg) {
                     $eval->setStopDate($stopDate);
                     $eval->setTimeSpan($timeSpan);
                     if ($stopDate != NULL && $stopDate <= time() - 1 || $timeSpan != NULL && $eval->getStartdate() != NULL && $eval->getStartdate() + $timeSpan <= time() - 1) {
                         $message .= $message ? "<br>" : " ";
                         $message .= _("Die Evaluation wurde beendet.");
                     }
                 }
                 if ($eval->isError()) {
                     $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                     return $safeguard;
                 }
                 $eval->save();
             }
             $evalChanged = YES;
             // start/endtime aren't saved, because of ranges with no permisson
             if ($time_msg) {
                 $safeguard .= $this->createSafeguard("ausruf", $time_msg);
             }
             // everything is just fine so print the all messages
             if ($update_message && !$time_msg) {
                 $safeguard .= $this->createSafeguard("ok", $update_message . "<br>" . $message);
             } elseif ($time_msg && $message) {
                 $safeguard .= $this->createSafeguard("ok", $message);
             }
             break;
         case "search_showrange":
         case "search_range":
             $search = Request::get("search");
             if (EvaluationObjectDB::getGlobalPerm(YES) < 31) {
                 $safeguard = $this->createSafeguard("ausruf", _("Sie besitzen keine Berechtigung eine Suche durchzuführen."));
                 return $safeguard;
             }
             $results = $evalDB->search_range($search);
             if (empty($search)) {
                 $safeguard .= $this->createSafeguard("ausruf", _("Bitte einen Suchbegriff eingeben."), $search);
             } elseif (sizeof($results) == 0) {
                 $safeguard .= $this->createSafeguard("ausruf", sprintf(_("Es wurde kein Bereich gefunden, der den Suchbegriff <b>%s</b> enthält."), htmlReady($search)), $search);
             } else {
                 $safeguard .= $this->createSafeguard("ok", sprintf(_("Es wurden %s Bereiche gefunden, die den Suchbegriff <b>%s</b> enthalten."), sizeof($results), htmlReady($search)), $search);
             }
             break;
         case "check_abort_creation":
             # check if the evaluation is new and not yet edited
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_NO_CHILDREN);
             $abort_creation = false;
             if ($eval->getTitle() == _("Neue Evaluation") && $eval->getText() == "") {
                 # the evaluationen may be not edited yet ... so continue checking
                 $eval = new Evaluation($evalID, NULL, EVAL_LOAD_ALL_CHILDREN);
                 $number_of_childs = $eval->getNumberChildren();
                 $child = $eval->getNextChild();
                 if ($number_of_childs == 1 && $child && $child->getTitle() == _("Erster Gruppierungsblock") && $child->getChildren() == NULL && $child->getText() == "") {
                     $abort_creation = true;
                 }
             }
             if ($abort_creation != true) {
                 break;
             }
             # continue abort_creation
         # continue abort_creation
         case "abort_creation":
             $eval = new Evaluation($evalID, NULL, EVAL_LOAD_ALL_CHILDREN);
             $eval->delete();
             // error_ausgabe
             if ($eval->isError()) {
                 $safeguard .= $this->createSafeguard("", EvalCommon::createErrorReport($eval));
                 return $safeguard;
             }
             $safeguard .= $this->createSafeguard("ok", _("Die Erstellung einer Evaluation wurde abgebrochen."), "", "", "", $referer);
             break;
         case "nothing":
             break;
         default:
             $safeguard .= $this->createSafeguard("ausruf", _("Fehler! Es wurde versucht, eine nicht vorhandene Aktion auszuführen."));
             break;
     }
     /* Send SMS when eval has been modified by admin/root ----------------- */
     if ($evalChanged && $eval->getAuthorID() != $auth->auth["uid"]) {
         $sms = new messaging();
         $sms->insert_message(sprintf(_("An Ihrer Evaluation \"%s\" wurden von %s Änderungen vorgenommen."), $eval->getTitle(), get_username($auth->auth["uid"])), get_username($eval->getAuthorID()), "____%system%____", FALSE, FALSE, "1");
     }
     /* ------------------------------------------------------ end: send SMS */
     // the current range has been removed from the eval
     if ($current_range_removed) {
         $return["msg"] = $safeguard;
         $return["option"] = DISCARD_OPENID;
         return $return;
     } else {
         return $safeguard;
     }
 }
Beispiel #6
0
 public function upload_attachment_action()
 {
     if ($GLOBALS['user']->id === "nobody") {
         throw new AccessDeniedException();
     }
     if (!$GLOBALS['ENABLE_EMAIL_ATTACHMENTS']) {
         throw new AccessDeniedException(_('Mailanhänge sind nicht erlaubt.'));
     }
     $file = studip_utf8decode($_FILES['file']);
     $output = array('name' => $file['name'], 'size' => $file['size']);
     $output['message_id'] = Request::option("message_id");
     if (!validate_upload($file)) {
         list($type, $error) = explode("§", $GLOBALS['msg']);
         throw new Exception($error);
     }
     $document = new StudipDocument();
     $document->setValue('range_id', 'provisional');
     $document->setValue('seminar_id', $GLOBALS['user']->id);
     $document->setValue('name', $output['name']);
     $document->setValue('filename', $document->getValue('name'));
     $document->setValue('filesize', (int) $output['size']);
     $document->setValue('autor_host', $_SERVER['REMOTE_ADDR']);
     $document->setValue('user_id', $GLOBALS['user']->id);
     $document->setValue('description', Request::option('message_id'));
     $success = $document->store();
     if (!$success) {
         throw new Exception("Unable to handle uploaded file.");
     }
     $file_moved = move_uploaded_file($file['tmp_name'], get_upload_file_path($document->getId()));
     if (!$file_moved) {
         throw new Exception("No permission to move file to destination.");
     }
     $output['document_id'] = $document->getId();
     $output['icon'] = GetFileIcon(getFileExtension($output['name']))->asImg(['class' => "text-bottom"]);
     $this->render_json($output);
 }