/** * Displays the folder and all of its documents and recursively subfolders. * This function is not dependent on the recursive-level so it looks as if it all starts from here. * */ function display_folder ($folder_id, $open, $change, $move, $upload, $refresh=FALSE, $filelink="", $anchor_id, $position="middle", $isissuefolder = false) { global $_fullname_sql,$SessionSeminar,$SessSemName, $rechte, $anfang, $user, $SemSecLevelWrite, $SemUserStatus, $check_all, $countfolder, $droppable_folder; $option = true; $countfolder++; $more = true; $db = DBManager::get(); $droppable_folder++; $javascriptok = true; //Einbinden einer Klasse, die Informationen über den ganzen Baum enthält $folder_tree = TreeAbstract::GetInstance('StudipDocumentTree', array('range_id' => $SessionSeminar)); //Hole alle Informationen, die es über $folder_id gibt $query = "SELECT ". $_fullname_sql['full'] ." AS fullname , username, folder_id, a.range_id, a.user_id, name, a.description, a.mkdate, a.chdate FROM folder a LEFT JOIN auth_user_md5 USING (user_id) LEFT JOIN user_info USING (user_id) WHERE a.folder_id = '$folder_id' ORDER BY a.name, a.chdate"; $result = $db->query($query)->fetch(); $depth = count($folder_tree->getParents($folder_id)); print "<div id=\"folder_".($depth > 2 ? $result['range_id'] : "root")."_".$countfolder."\"".($rechte ? " class=\"draggable_folder\"" : "").">"; print "<div style=\"display:none\" id=\"getmd5_fo".$result['range_id']."_".$countfolder."\">".$folder_id."</div>"; print "<table cellpadding=0 border=0 cellspacing=0 width=\"100%\"><tr>"; //Abzweigung, wenn Ordner ein Unterordner ist if ($depth > 2) // root > folder > subfolder print "<td class=\"tree-elbow-end\">" . Assets::img("datatree_2.gif") . "</td>"; else print "<td></td>"; print "<td valign=\"bottom\">"; //Farbe des Pfeils bestimmen: $chdate = (($result["chdate"]) ? $result["chdate"] : $result["mkdate"]); if (object_get_visit($SessSemName[1], "documents") < $chdate) $neuer_ordner = TRUE; else $neuer_ordner = FALSE; if ($neuer_ordner == TRUE) $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; } //Jetzt fängt eine zweite Tabelle an mit den Zeilen: Titel, Beschreibung und Knöpfe, Unterdateien und Unterordner if ($rechte) { print "<div class=\"droppable handle\" id=\"dropfolder_$folder_id\">"; } print "<table cellpadding=0 border=0 cellspacing=0 width=\"100%\" id=\"droppable_folder_$droppable_folder\"><tr>"; // -> Pfeile zum Verschieben (bzw. die Ziehfläche) if (($rechte) && ($depth > 2)) { $bewegeflaeche = "<span class=\"updown_marker\" id=\"pfeile_".$folder_id."\">"; if (($position == "middle") || ($position == "bottom")) { $bewegeflaeche .= "<a href=\"".URLHelper::getLink('?open='.$folder_id)."_mfou_\" title=\""._("Nach oben verschieben"). "\">" . Icon::create('arr_2up', 'sort')->asImg(['class' => 'text-top']) . "</a>"; } if (($position == "middle") || ($position == "top")) { $bewegeflaeche .= "<a href=\"".URLHelper::getLink('?open='. $folder_id)."_mfod_\" title=\""._("Nach unten verschieben"). "\">" . Icon::create('arr_2down', 'sort')->asImg(['class' => 'text-top']) . "</a>"; } $bewegeflaeche .= "</span>"; } //Jetzt folgt der Link zum Aufklappen if ($open[$folder_id]) { //print "<td width=1px class=\"printhead\"> </td>"; print "<td id=\"folder_".$folder_id."_arrow_td\" nowrap valign=\"top\" align=\"left\" width=1% bgcolor=\"$timecolor\" class=\"printhead3\" valign=\"bottom\">"; print "<a href=\"".URLHelper::getLink("?close=".$folder_id."#anker"); print "\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefolderbody('".$folder_id."')\">"; print Assets::img('forumgraurunt2.png', tooltip2(_('Objekt zuklappen')) + array('id' => 'folder_' . $folder_id . '_arrow_img')); print "</a>"; print "</td>"; //print ($javascriptok ? "<td class=\"printhead\"><a href=\"Javascript: changefolderbody('".$folder_id."')\" class=\"tree\"><span id=\"folder_".$folder_id."_header\" style=\"font-weight: bold\">" : print "<td class=\"printhead\" valign=\"bottom\">"; if ($move && ($move != $folder_id) && $folder_tree->isWritable($folder_id, $user->id) && (!$folder_tree->isFolder($move) || ($folder_tree->checkCreateFolder($folder_id, $user->id) && !$folder_tree->isExerciseFolder($folder_id, $user->id)))){ print "<a href=\"".URLHelper::getLink("?open=".$folder_id."_md_")."\">"; print Icon::create('arr_2right', 'sort')->asImg(); print "</a> "; } if (($anchor_id == $folder_id) || (($move == $folder_id))) { print "<a name=\"anker\"></a>"; } print "<a href=\"".URLHelper::getLink("?close=".$folder_id."#anker")."\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefolderbody('".$folder_id."')\"><span id=\"folder_".$folder_id."_header\" style=\"font-weight: bold\">"; } else { //print "<td width=1px class=\"printhead\"> </td>"; print "<td id=\"folder_".$folder_id."_arrow_td\" nowrap valign=\"top\" align=\"left\" width=1% bgcolor=\"$timecolor\" class=\"printhead2\" valign=\"bottom\">"; print "<a href=\""; print URLHelper::getLink("?open=".$folder_id."#anker"); print "\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefolderbody('".$folder_id."')\">"; print Assets::img('forumgrau2.png', tooltip2(_('Objekt aufklappen')) + array('id' => 'folder_' . $folder_id . '_arrow_img')); print "</a></td>"; print "<td class=\"printhead\" valign=\"bottom\">"; if ($move && ($move != $folder_id) && $folder_tree->isWritable($folder_id, $user->id) && (!$folder_tree->isFolder($move) || ($folder_tree->checkCreateFolder($folder_id, $user->id) && !$folder_tree->isExerciseFolder($folder_id, $user->id)))){ print " <a href=\"".URLHelper::getLink("?open=".$folder_id."_md_")."\">"; print Icon::create('arr_2right', 'sort')->asImg(); print "</a> "; } print "<a href=\"".URLHelper::getLink("?open=".$folder_id."#anker")."\" class=\"tree\" " . "onClick=\"return STUDIP.Filesystem.changefolderbody('".$folder_id."')\"><span id=\"folder_".$folder_id."_header\" " . "style=\"font-weight: normal\">"; } $document_count = doc_count($folder_id); if ($document_count > 0) { print Icon::create('folder-full', 'clickable')->asImg() . ' '; } else { print Icon::create('folder-empty', 'clickable')->asImg() . ' '; } //Pfeile, wenn Datei bewegt werden soll if ($move && ($folder_id != $move) && $folder_tree->isWritable($folder_id, $user->id) && (!$folder_tree->isFolder($move) || ($folder_tree->checkCreateFolder($folder_id, $user->id) && !$folder_tree->isExerciseFolder($folder_id, $user->id)))){ print "</a><span class=\"move_arrows\"><a href=\"".URLHelper::getLink("?open=".$folder_id."_md_")."\">"; print Icon::create('arr_2right', 'sort')->asImg(); print "</a></span>"; if ($open[$folder_id]) print "<a href=\"".URLHelper::getLink("?close=".$folder_id."#anker")."\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefolderbody('".$folder_id."')\">"; else print "<a href=\"".URLHelper::getLink("?open=".$folder_id."#anker")."\" class=\"tree\" onClick=\"return STUDIP.Filesystem.changefolderbody('".$folder_id."')\">"; } //Dateiname, Rechte und Dokumente anzeigen $tmp_titel = htmlReady(mila($result['name'])); if ($isissuefolder) { $issue_id = $db->query("SELECT range_id FROM folder WHERE folder_id = ".$db->quote($folder_id))->fetch(); $dates_for_issue = IssueDB::getDatesforIssue($issue_id['range_id']); $dates_title = array(); foreach ($dates_for_issue as $date) { $dates_title[] .= date('d.m.y, H:i', $date['date']).' - '.date('H:i', $date['end_time']); } if (!empty($dates_title)) { $tmp_titel = sprintf(_("Sitzung am: %s"), implode(', ', $dates_title)) . ", " . ($tmp_titel ? $tmp_titel : _("Ohne Titel")); } else { $tmp_titel = $tmp_titel ? $tmp_titel : _("Ohne Titel"); } } if (($change == $folder_id) && (!$isissuefolder) && ((count($folder_tree->getParents($folder_id)) > 1) || $result['range_id'] == md5($SessSemName[1] . 'top_folder') || $folder_tree->isGroupFolder($result['folder_id']) ) ) { //Aenderungsmodus, Anker + Formular machen, Font tag direkt ausgeben (muss ausserhalb einer td stehen! $titel= "</a><input style=\"font-size:8 pt; width: 400px;\" type=\"text\" size=\"20\" maxlength=\"255\" aria-label=\"Ordnername eingeben\" name=\"change_name\" value=\"".htmlReady($result['name'])."\" >"; if ($rechte && $folder_tree->permissions_activated) $titel .= ' ['.$folder_tree->getPermissionString($result["folder_id"]).']'; } else { //create a link onto the titel, too if ($rechte && $folder_tree->permissions_activated ) { $tmp_titel .= ' '; $tmp_titel .= '['.$folder_tree->getPermissionString($result["folder_id"]).']'; } if ($document_count > 1) $titel= $tmp_titel."</span> " . sprintf(_("(%s Dokumente)"), $document_count); elseif ($document_count) $titel= $tmp_titel."</span> " . _("(1 Dokument)"); else $titel= $tmp_titel; } print $titel; if ($isissuefolder) { $dates_title = array(); foreach ($dates_for_issue as $date) { $dates_title[] .= date('d.m.y, H:i', $date['date']).' - '.date('H:i', $date['end_time']); } if (sizeof($dates_title) > 0) { $title_name = sprintf(_("Sitzung am: %s"), implode(', ', $dates_title)); if (!$result['name']) { $title_name .= ', '._("Ohne Titel"); } else { $title_name .= ', '.htmlReady($result['name']); } } } print "</a> "; // Schloss, wenn Folder gelockt if ($folder_tree->isLockedFolder($folder_id)) { print Icon::create('lock-locked', 'inactive', ['title' => _('Dieser Ordner ist gesperrt.')])->asImg(['class' => 'text-bottom']); } //Wenn verdeckt durch gesperrten übergeordneten Ordner else if ( ($super_folder = $folder_tree->getNextSuperFolder($folder_id)) ) { print Icon::create('lock-locked', 'inactive', ['title' => _('Dieser Ordner ist nicht zugänglich, da ein übergeordneter Ordner gesperrt ist.')])->asImg(['class' => 'text-bottom']); } // Wenn es ein Hausaufgabenordner ist if ($folder_tree->isExerciseFolder($folder_id)) { print Icon::create('edit', 'inactive', ['title' => _('Dieser Ordner ist ein Hausaufgabenordner. Es können nur Dateien eingestellt werden.')])->asImg(['class' => 'text-bottom']); } print "</td>"; //So und jetzt die rechtsbündigen Sachen: print "</td><td align=right class=\"printhead\" valign=\"bottom\">"; print "<a href=\"".URLHelper::getLink('dispatch.php/profile?username='******'username'])."\">".htmlReady($result['fullname'])."</a> "; print $bewegeflaeche." "; //Workaround for older data from previous versions (chdate is 0) print date("d.m.Y - H:i", (($result["chdate"]) ? $result["chdate"] : $result["mkdate"])); print "</td></tr></table>"; //Ende des Titels, Beschreibung und Knöpfen if ($rechte) print "</div>"; //End des Droppable-Divs if ($open[$folder_id]) { print "<div id=\"folder_".$folder_id."_body\">"; //Der ganze Teil des Unterbaus wurde in die folgende Funktion outsourced: display_folder_body($folder_id, $open, $change, $move, $upload, $refresh, $filelink, $anchor_id, $depth - 3); } else { print "<div id=\"folder_".$folder_id."_body\" style=\"display: none\">"; } print "</div></td></tr></table>"; print "</div>"; }
$statement->execute(array($open_id)); if ($result = $statement->fetch()) { $titel = $result["title"]; $description= _("Themenbezogener Dateiordner"); } } $open_id = create_folder($titel, $description, $open_id, $permission); PageLayout::postMessage(MessageBox::success(_('Der Ordner wurde erstellt.'))); $folder_system_data['open'][$open_id] = true; $folder_system_data['open']['anker'] = $open_id; } //wurde Code fuer Loeschen von Ordnern ubermittelt (=id+"_d_"), wird entsprechende Funktion aufgerufen if ($open_cmd == 'd') { if ( ($count = doc_count($open_id)) ){ $question = createQuestion(sprintf(_('Der ausgewählte Ordner enthält %s Datei(en). Wollen Sie den Ordner wirklich löschen?'), $count), array('open' => $open_id.'_rd_')); } else { delete_folder($open_id, true); $open_id = $folder_tree->getParents($open_id); $open_id = $open_id[0]; $folder_tree->init(); } } //Loeschen von Ordnern im wirklich-ernst Mode if ($open_cmd == 'rd') { delete_folder($open_id, true); $open_id = $folder_tree->getParents($open_id); $open_id = $open_id[0]; $folder_tree->init();
function delete_date($termin_id, $topic_delete = TRUE, $folder_move = TRUE, $sem_id = 0) { global $RELATIVE_PATH_RESOURCES; if (Config::get()->RESOURCES_ENABLE) { include_once $RELATIVE_PATH_RESOURCES . "/lib/VeranstaltungResourcesAssign.class.php"; } if (!$folder_move) { ## Dateiordner muessen weg! recursiv_folder_delete($termin_id); } else { ## Dateiordner werden verschoben, wenn Ordner nicht leer, ansonsten auch weg if (!doc_count($termin_id)) { recursiv_folder_delete($termin_id); } else { $query = "SELECT folder_id FROM folder WHERE range_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($termin_id)); $folder_id = $statement->fetchColumn(); move_item($folder_id, $sem_id, $sem_id); $query = "UPDATE folder SET name = ?, description = ? WHERE folder_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array(_('Dateiordner zu gelöschtem Termin'), _('Dieser Ordner enthält Dokumente und Termine eines gelöschten Termins'), $folder_id)); } } ## Und den Termin selbst loeschen $query = "DELETE FROM termine WHERE termin_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($termin_id)); if ($statement->rowCount() && Config::get()->RESOURCES_ENABLE) { $insertAssign = new VeranstaltungResourcesAssign($sem_id); $insertAssign->killDateAssign($termin_id); } }
/** * Delete an existing user from the database and tidy up * * @access public * @param bool delete all documents belonging to the user * @return bool Removal successful? */ function deleteUser($delete_documents = true) { global $perm; // Do we have permission to do so? if (!$perm->have_perm("admin")) { $this->msg .= "error§" . _("Sie haben keine Berechtigung Accounts zu löschen.") . "§"; return FALSE; } if (!$perm->have_perm("root")) { if ($this->user_data['auth_user_md5.perms'] == "root") { $this->msg .= "error§" . _("Sie haben keine Berechtigung <em>Root-Accounts</em> zu löschen.") . "§"; return FALSE; } if ($this->user_data['auth_user_md5.perms'] == "admin" && !$this->adminOK()) { $this->msg .= "error§" . _("Sie haben keine Berechtigung diesen Admin-Account zu löschen.") . "§"; return FALSE; } } $status = studygroup_sem_types(); // active dozent? if (empty($status)) { $active_count = 0; } else { $query = "SELECT SUM(c) AS count FROM (\n SELECT COUNT(*) AS c\n FROM seminar_user AS su1\n INNER JOIN seminar_user AS su2 ON (su1.seminar_id = su2.seminar_id AND su2.status = 'dozent')\n INNER JOIN seminare ON (su1.seminar_id = seminare.seminar_id AND seminare.status NOT IN (?))\n WHERE su1.user_id = ? AND su1.status = 'dozent'\n GROUP BY su1.seminar_id\n HAVING c = 1\n ORDER BY NULL\n ) AS sub"; $statement = DBManager::get()->prepare($query); $statement->execute(array(studygroup_sem_types(), $this->user_data['auth_user_md5.user_id'])); $active_count = $statement->fetchColumn(); } if ($active_count) { $this->msg .= sprintf("error§" . _("<em>%s</em> ist Lehrkraft in %s aktiven Veranstaltungen und kann daher nicht gelöscht werden.") . "§", $this->user_data['auth_user_md5.username'], $active_count); return FALSE; //founder of studygroup? } elseif (get_config('STUDYGROUPS_ENABLE')) { $status = studygroup_sem_types(); if (empty($status)) { $group_ids = array(); } else { $query = "SELECT Seminar_id\n FROM seminare AS s\n LEFT JOIN seminar_user AS su USING (Seminar_id)\n WHERE su.status = 'dozent' AND su.user_id = ? AND s.status IN (?)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'], studygroup_sem_types())); $group_ids = $statement->fetchAll(PDO::FETCH_COLUMN); } foreach ($group_ids as $group_id) { $sem = Seminar::GetInstance($group_id); if (StudygroupModel::countMembers($group_id) > 1) { // check whether there are tutors or even autors that can be promoted $tutors = $sem->getMembers('tutor'); $autors = $sem->getMembers('autor'); if (count($tutors) > 0) { $new_founder = current($tutors); StudygroupModel::promote_user($new_founder['username'], $sem->getId(), 'dozent'); continue; } elseif (count($autors) > 0) { $new_founder = current($autors); StudygroupModel::promote_user($new_founder['username'], $sem->getId(), 'dozent'); continue; } // since no suitable successor was found, we are allowed to remove the studygroup } else { $sem->delete(); } unset($sem); } } // store user preferred language for sending mail $user_language = getUserLanguagePath($this->user_data['auth_user_md5.user_id']); // delete documents of this user if ($delete_documents) { // Remove private file space of this user if (Config::get()->PERSONALDOCUMENT_ENABLE) { $root_dir = new RootDirectory($this->user_data['auth_user_md5.user_id']); $root_dir->delete(); } // Remove other files $temp_count = 0; $query = "SELECT dokument_id FROM dokumente WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); while ($document_id = $statement->fetchColumn()) { if (delete_document($document_id)) { $temp_count++; } } if ($temp_count) { $this->msg .= "info§" . sprintf(_("%s Dokumente gelöscht."), $temp_count) . "§"; } // delete empty folders of this user $temp_count = 0; $query = "SELECT COUNT(*) FROM folder WHERE range_id = ?"; $count_content = DBManager::get()->prepare($query); $query = "DELETE FROM folder WHERE folder_id = ?"; $delete_folder = DBManager::get()->prepare($query); $query = "SELECT folder_id FROM folder WHERE user_id = ? ORDER BY mkdate DESC"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); while ($folder_id = $statement->fetchColumn()) { $count_content->execute(array($folder_id)); $count = $count_content->fetchColumn(); $count_content->closeCursor(); if (!$count && !doc_count($folder_id)) { $delete_folder->execute(array($folder_id)); $temp_count += $delete_folder->rowCount(); } } if ($temp_count) { $this->msg .= "info§" . sprintf(_("%s leere Ordner gelöscht."), $temp_count) . "§"; } // folder left? $query = "SELECT COUNT(*) FROM folder WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $count = $statement->fetchColumn(); if ($count) { $this->msg .= sprintf("info§" . _("%s Ordner konnten nicht gelöscht werden, da sie noch Dokumente anderer BenutzerInnen enthalten.") . "§", $count); } } // kill all the ressources that are assigned to the user (and all the linked or subordinated stuff!) if (Config::get()->RESOURCES_ENABLE) { $killAssign = new DeleteResourcesUser($this->user_data['auth_user_md5.user_id']); $killAssign->delete(); } $this->re_sort_position_in_seminar_user(); // delete user from seminars (postings will be preserved) $query = "DELETE FROM seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Veranstaltungen gelöscht."), $db_ar) . "§"; } // delete user from waiting lists $query = "SELECT seminar_id FROM admission_seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $seminar_ids = $statement->fetchAll(PDO::FETCH_COLUMN); $query = "DELETE FROM admission_seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Wartelisten gelöscht."), $db_ar) . "§"; array_map('update_admission', $seminar_ids); } // delete user from instituts $this->logInstUserDel($this->user_data['auth_user_md5.user_id']); $query = "DELETE FROM user_inst WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus MitarbeiterInnenlisten gelöscht."), $db_ar) . "§"; } // delete user from Statusgruppen if ($db_ar = RemovePersonFromAllStatusgruppen(get_username($this->user_data['auth_user_md5.user_id'])) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Funktionen / Gruppen gelöscht."), $db_ar) . "§"; } // delete user from archiv $query = "DELETE FROM archiv_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Zugriffsberechtigungen für das Archiv gelöscht."), $db_ar) . "§"; } // delete all personal news from this user if ($db_ar = StudipNews::DeleteNewsByAuthor($this->user_data['auth_user_md5.user_id'])) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Ankündigungen gelöscht."), $db_ar) . "§"; } if ($db_ar = StudipNews::DeleteNewsRanges($this->user_data['auth_user_md5.user_id'])) { $this->msg .= "info§" . sprintf(_("%s Verweise auf Ankündigungen gelöscht."), $db_ar) . "§"; } //delete entry in news_rss_range StudipNews::UnsetRssId($this->user_data['auth_user_md5.user_id']); // delete 'Studiengaenge' $query = "DELETE FROM user_studiengang WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Zuordnungen zu Studiengängen gelöscht."), $db_ar) . "§"; } // delete all private appointments of this user if (get_config('CALENDAR_ENABLE')) { $appkills = CalendarEvent::deleteBySQL('range_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($appkills) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Terminen gelöscht."), $appkills) . "§"; } // delete membership in group calendars if (get_config('CALENDAR_GROUP_ENABLE')) { $membershipkills = CalendarUser::deleteBySQL('owner_id = :user_id OR user_id = :user_id', array(':user_id' => $this->user_data['auth_user_md5.user_id'])); if ($membershipkills) { $this->msg .= 'info§' . sprintf(_('%s Verknüpfungen mit Gruppenterminkalendern gelöscht.')); } } } // delete all messages send or received by this user $messaging = new messaging(); $messaging->delete_all_messages($this->user_data['auth_user_md5.user_id']); // delete user from all foreign adressbooks and empty own adressbook $buddykills = Contact::deleteBySQL('user_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($buddykills > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Adressbüchern gelöscht."), $buddykills) . "§"; } $contactkills = Contact::deleteBySQL('owner_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($contactkills) { $this->msg .= sprintf(_('Adressbuch mit %d Einträgen gelöscht.'), $contactkills); } // delete users groups Statusgruppen::deleteBySQL('range_id = ?', array($this->user_data['auth_user_md5.user_id'])); // remove user from any groups StatusgruppeUser::deleteBySQL('user_id = ?', array($this->user_data['auth_user_md5.user_id'])); // delete all blubber entrys $query = "DELETE FROM blubber WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Blubber gelöscht."), $db_ar) . "§"; } // delete the datafields $localEntries = DataFieldEntry::removeAll($this->user_data['auth_user_md5.user_id']); UserConfigEntry::deleteByUser($this->user_data['auth_user_md5.user_id']); // delete all remaining user data $queries = array("DELETE FROM kategorien WHERE range_id = ?", "DELETE FROM user_info WHERE user_id = ?", "DELETE FROM user_visibility WHERE user_id = ?", "DELETE FROM user_online WHERE user_id = ?", "DELETE FROM auto_insert_user WHERE user_id = ?", "DELETE FROM roles_user WHERE userid = ?", "DELETE FROM schedule WHERE user_id = ?", "DELETE FROM schedule_seminare WHERE user_id = ?", "DELETE FROM termin_related_persons WHERE user_id = ?", "DELETE FROM user_userdomains WHERE user_id = ?"); foreach ($queries as $query) { DBManager::get()->prepare($query)->execute(array($this->user_data['auth_user_md5.user_id'])); } object_kill_visits($this->user_data['auth_user_md5.user_id']); object_kill_views($this->user_data['auth_user_md5.user_id']); // delete picture $avatar = Avatar::getAvatar($this->user_data["auth_user_md5.user_id"]); if ($avatar->is_customized()) { $avatar->reset(); $this->msg .= "info§" . _("Bild gelöscht.") . "§"; } // delete visibility settings Visibility::removeUserPrivacySettings($this->user_data['auth_user_md5.user_id']); //delete connected users if (get_config('ELEARNING_INTERFACE_ENABLE')) { if (ELearningUtils::initElearningInterfaces()) { foreach ($GLOBALS['connected_cms'] as $cms) { if ($cms->auth_necessary && $cms->user instanceof ConnectedUser) { $user_auto_create = $cms->USER_AUTO_CREATE; $cms->USER_AUTO_CREATE = false; $userclass = strtolower(get_class($cms->user)); $connected_user = new $userclass($cms->cms_type, $this->user_data['auth_user_md5.user_id']); if ($ok = $connected_user->deleteUser()) { if ($connected_user->is_connected) { $this->msg .= "info§" . sprintf(_("Der verknüpfte Nutzer %s wurde im System %s gelöscht."), $connected_user->login, $connected_user->cms_type) . "§"; } } $cms->USER_AUTO_CREATE = $user_auto_create; } } } } // delete deputy entries if necessary $query = "DELETE FROM deputies WHERE ? IN (user_id, range_id)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $deputyEntries = $statement->rowCount(); if ($deputyEntries) { $this->msg .= "info§" . sprintf(_("%s Einträge in den Vertretungseinstellungen gelöscht."), $deputyEntries) . "§"; } // delete Stud.IP account $query = "DELETE FROM auth_user_md5 WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (!$statement->rowCount()) { $this->msg .= "error§<em>" . _("Fehler:") . "</em> " . $query . "§"; return FALSE; } else { $this->msg .= "msg§" . sprintf(_("Benutzer \"%s\" gelöscht."), $this->user_data['auth_user_md5.username']) . "§"; } log_event("USER_DEL", $this->user_data['auth_user_md5.user_id'], NULL, sprintf("%s %s (%s)", $this->user_data['auth_user_md5.Vorname'], $this->user_data['auth_user_md5.Nachname'], $this->user_data['auth_user_md5.username'])); //log with Vorname Nachname (username) as info string // Can we reach the email? if ($this->checkMail($this->user_data['auth_user_md5.Email'])) { // include language-specific subject and mailbody $Zeit = date("H:i:s, d.m.Y", time()); include "locale/{$user_language}/LC_MAILS/delete_mail.inc.php"; // send mail StudipMail::sendMessage($this->user_data['auth_user_md5.Email'], $subject, $mailbody); } unset($this->user_data); return TRUE; }