public function afterUpdate(SimpleORMap $object, $line)
 {
     $old_domains = array_map(function ($domain) {
         return $domain->getID();
     }, $this->old_domains);
     $new_domains = UserDomain::getUserDomainsForUser($object->getId());
     foreach ($new_domains as $domain_id) {
         if (!in_array($domain_id, $old_domains)) {
             if ($domain_id === "alumni") {
                 if (count($new_domains) == 1) {
                     $statement = DBManager::get()->prepare("\n                            SELECT seminar_user.Seminar_id \n                            FROM seminar_user\n                                LEFT JOIN seminar_userdomain ON (seminar_user.Seminar_id = seminar_userdomain.Seminar_id)\n                            WHERE seminar_user.user_id = :user_id\n                                AND seminar_user.Seminar_id NOT IN (SELECT seminar_id FROM seminar_userdomain WHERE userdomain_id = 'alumni')\n                        ");
                     $statement->execute(array('user_id' => $object->getId()));
                     foreach ($statement->fetchAll(PDO::FETCH_COLUMN, 0) as $seminar_id) {
                         $seminar = new Seminar($seminar_id);
                         $seminar->deleteMember($object->getId());
                     }
                 }
                 $datafield = Datafield::findOneBySQL("name = 'Ich will weiterhin als Alumni in Stud.IP geführt werden' AND object_type = 'user'");
                 $user_wants_to_stay = DatafieldEntry::findOneBySQL("datafield_id = ? AND range_id = ?", array($datafield->getId(), $object->getId()));
                 if ($user_wants_to_stay['content']) {
                     //In Veranstaltung ALUMNI die Statusgruppe anlegen:
                     $datafield = Datafield::findOneBySQL("name = 'Alumni' AND object_type = 'user'");
                     $entry = DatafieldEntry::findOneBySQL("datafield_id = ? AND range_id = ?", array($datafield->getId(), $object->getId()));
                     $course = Course::findOneByName("ALUMNI");
                     $gruppenname = $entry ? $entry['content'] : null;
                     if ($course && $gruppenname) {
                         $statusgruppe = Statusgruppen::findOneBySQL("name = ? range_id = ?", array($gruppenname, $course->getId()));
                         if (!$statusgruppe) {
                             $statusgruppe = new Statusgruppen();
                             $statusgruppe['name'] = $gruppenname;
                             $statusgruppe['range_id'] = $course->getId();
                             $statusgruppe->store();
                         }
                         if (!$statusgruppe->isMember($object->getId())) {
                             $statusgruppe->addUser($object->getId());
                         }
                     }
                 } else {
                     $object->delete();
                     $deleted = true;
                 }
             }
         }
     }
 }
示例#2
0
 function getInstitutInformations()
 {
     $institutes = UserModel::getUserInstitute($this->current_user->user_id);
     foreach ($institutes as $id => $inst_result) {
         if ($inst_result['visible'] == 1) {
             $entries = DataFieldEntry::getDataFieldEntries(array($this->current_user->user_id, $inst_result['Institut_id']));
             if (!empty($entries)) {
                 foreach ($entries as $entry) {
                     $view = $entry->isVisible(null, false);
                     $show_star = false;
                     if (!$view && $entry->isVisible()) {
                         $view = true;
                         $show_star = true;
                     }
                     if (trim($entry->getValue()) && $view) {
                         $institutes[$id]['datafield'][] = array('name' => $entry->getName(), 'value' => $entry->getDisplayValue(), 'show_star' => $show_star);
                     }
                 }
             }
             $institutes[$id]['role'] = Statusgruppen::getUserRoles($inst_result['Institut_id'], $this->current_user->user_id);
         } else {
             unset($institutes[$id]);
         }
     }
     return $institutes;
 }
示例#3
0
 private function updateRecoursive($obj, $parent)
 {
     $i = 0;
     if ($obj) {
         foreach ($obj as $group) {
             $statusgroup = new Statusgruppen($group->id);
             $statusgroup->range_id = $parent;
             $statusgroup->position = $i;
             $statusgroup->store();
             $this->updateRecoursive($group->children, $group->id);
             $i++;
         }
     }
 }
 function up()
 {
     DBManager::get()->exec("ALTER TABLE statusgruppen\n            ADD (name_w varchar(255),\n            name_m varchar(255));");
     Statusgruppen::expireTableScheme();
 }
示例#5
0
function kontakt ($module, $row, $separate = FALSE) {
    $attr_table = $module->config->getAttributes("Contact", "table");
    $attr_tr = $module->config->getAttributes("Contact", "table");
    $attr_td = $module->config->getAttributes("Contact", "td");
    $attr_fonttitle = $module->config->getAttributes("Contact", "fonttitle");
    $attr_fontcontent = $module->config->getAttributes("Contact", "fontcontent");

    $out = "<table$attr_table>\n";
    if (!$separate) {
        $out .= "<tr$attr_tr>";
        $out .= "<td colspan=\"2\"$attr_td>";
        $out .= "<font$attr_fonttitle>";
        if ($headline = $module->config->getValue("Contact", "headline"))
            $out .= "$headline</font>\n";
        else
            $out .= "</font>\n";

        $out .= "<font$attr_fontcontent>";

        if (!$module->config->getValue("Contact", "hidepersname"))
            $out .= "<br><br>" . htmlReady($row['fullname'], TRUE) . "\n";
        if ($module->config->getValue('Contact', 'showinstgroup')) {
            $allgroups = GetAllStatusgruppen($module->config->range_id, $row['user_id']);
            array_walk($allgroups, function(&$v, $k, $user_id) {
                $s = Statusgruppen::find($k);
                $v['role']->name = htmlReady($s->getGenderedName($user_id));
            }, $row['user_id']);
            if ($gruppen = GetRoleNames($allgroups))
                $out .= "<br>" . htmlReady(join(", ", array_values($gruppen)));
        }
        // display name of institution (as link)
        if ($row['Name']) {
            $br_out = "";
            if ($module->config->getValue("Contact", "hideinstname") != '1') {
                if ($module->config->getValue("Contact", "hideinstname") == 'link' && $row['url']) {
                    $url = htmlReady(trim($row['url']));
                    if (!stristr($url, "http://"))
                        $url = "http://$url";
                    $out .= "<br><br><a href=\"$url\" target=\"_blank\">";
                    $out .= htmlReady($row['Name'], TRUE) . "</a><br>";
                }
                else
                    $out .= "<br><br>" . htmlReady($row['Name'], TRUE) . "<br>";
            }
            if ($module->config->getValue("Contact", "adradd"))
                $out .= "<br>" . $module->config->getValue("Contact", "adradd");
        }

        $out .= "<br>";
        if ($row['Strasse']) {
            $out .= "<br>" . htmlReady($row['Strasse'], TRUE);
            if($row['Plz'])
            $out .= "<br>" . htmlReady($row['Plz'], TRUE);
        }
      $out .= "<br><br></font></td></tr>\n";
    }
    $order = $module->config->getValue("Contact", "order");
    $visible = $module->config->getValue("Contact", "visible");
    $alias_contact = $module->config->getValue("Contact", "aliases");
    foreach ($order as $position) {
        $data_field = $module->data_fields["contact"][$position];
        if (!$visible[$position] || !$row[$data_field])
            continue;
        switch ($data_field) {
            case 'Email' :
                if ($separate || !$module->config->getValue('Contact', 'separatelinks')) {
                    $email_address = get_visible_email($row['user_id']);
                    $out .= "<tr$attr_tr>";
                    $out .= "<td$attr_td>";
                    $out .= "<font$attr_fonttitle>";
                    $out .= $alias_contact[$position] . "</font></td>";
                    $out .= "<td$attr_td>";
                    $out .= "<font$attr_fontcontent>";
                    $mail = trim(htmlReady($email_address));
                    $out .= "<a href=\"mailto:$mail\">$mail</a>";
                }
                break;
            case 'Home' :
                if (($separate || !$module->config->getValue('Contact', 'separatelinks')) &&
                       true�|| Visibility::verify('homepage', $row['user_id'])) {
                    $out .= "<tr$attr_tr>";
                    $out .= "<td$attr_td>";
                    $out .= "<font$attr_fonttitle>";
                    $out .= $alias_contact[$position] . "</font></td>";
                    $out .= "<td$attr_td>";
                    $out .= "<font$attr_fontcontent>";
                    $out .= formatLinks($row['Home']);
                }
                break;
            default:
                if (!$separate) {
                    $out .= "<tr$attr_tr>";
                    $out .= "<td$attr_td>";
                    $out .= "<font$attr_fonttitle>";
                    $out .= $alias_contact[$position] . "</font></td>";
                    $out .= "<td$attr_td>";
                    $out .= "<font$attr_fontcontent>";
                    $out .= htmlReady($row[$data_field], TRUE);
                }
        }
        if ($row[$data_field])
            $out .= "</font></td></tr>\n";
    }
    $out .= "</table>\n";

    return $out;
}
示例#6
0
 /**
  * Saves an edited stack/cycle.
  *
  * @param String $cycle_id Id of the edited cycle to be saved.
  */
 private function saveEditedStack($cycle_id = '')
 {
     $persons = Request::getArray('related_persons');
     $action = Request::get('related_persons_action');
     $groups = Request::getArray('related_groups');
     $group_action = Request::get('related_groups_action');
     $teacher_changed = false;
     $groups_changed = false;
     foreach ($_SESSION['_checked_dates'] as $singledate_id) {
         $singledate = CourseDate::find($singledate_id);
         if (!isset($singledate)) {
             $singledate = CourseExDate::find($singledate_id);
         }
         $singledates[] = $singledate;
     }
     // Update related persons
     if (in_array($action, words('add delete'))) {
         foreach ($singledates as $key => $singledate) {
             $dozenten = User::findDozentenByTermin_id($singledate->termin_id);
             $dozenten_new = $dozenten;
             if ($singledate->range_id === $this->course->id) {
                 foreach ($persons as $user_id) {
                     $is_in_list = false;
                     foreach ($dozenten as $user_key => $user) {
                         if ($user->user_id == $user_id) {
                             $is_in_list = $user_key;
                         }
                     }
                     if ($is_in_list === false && $action === 'add') {
                         $dozenten_new[] = User::find($user_id);
                         $teacher_changed = true;
                     } else {
                         if ($is_in_list !== false && $action === 'delete') {
                             unset($dozenten_new[$is_in_list]);
                             $teacher_changed = true;
                         }
                     }
                 }
             }
             $singledates[$key]->dozenten = $dozenten_new;
         }
     }
     if ($teacher_changed) {
         $this->course->createMessage(_('Zuständige Personen für die Termine wurden geändert.'));
     }
     if (in_array($group_action, words('add delete'))) {
         foreach ($singledates as $key => $singledate) {
             $groups_db = Statusgruppen::findByTermin_id($singledate->termin_id);
             $groups_new = $groups_db;
             if ($singledate->range_id === $this->course->id) {
                 foreach ($groups as $statusgruppe_id) {
                     $is_in_list = false;
                     foreach ($groups_db as $group_key => $group) {
                         if ($statusgruppe_id == $group->statusgruppe_id) {
                             $is_in_list = $group_key;
                         }
                     }
                     if ($is_in_list === false && $group_action === 'add') {
                         $groups_new[] = Statusgruppen::find($statusgruppe_id);
                         $groups_changed = true;
                     } elseif ($is_in_list !== false && $group_action === 'delete') {
                         unset($groups_new[$is_in_list]);
                         $groups_changed = true;
                     }
                 }
             }
             $singledates[$key]->statusgruppen = $groups_new;
         }
     }
     if ($groups_changed) {
         $this->course->createMessage(_('Zugewiesene Gruppen für die Termine wurden geändert.'));
     }
     foreach ($singledates as $key => $singledate) {
         if (Request::option('action') == 'room') {
             $singledate->raum = '';
             ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $singledate->termin_id));
             $resObj = new ResourceObject($room_id);
             $room = new ResourceAssignment();
             $room->assign_user_id = $singledate->termin_id;
             $room->resource_id = Request::get('room');
             $room->begin = $singledate->date;
             $room->end = $singledate->end_time;
             $room->repeat_end = $singledate->end_time;
             $room->store();
         } elseif (Request::option('action') == 'freetext') {
             ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $singledate->termin_id));
             $singledates[$key]->raum = Request::get('freeRoomText');
             $this->course->createMessage(sprintf(_('Der Termin %s wurde geändert, etwaige ' . 'Raumbuchungen wurden entfernt und stattdessen der angegebene Freitext' . ' eingetragen!'), '<b>' . $singledate->getFullname() . '</b>'));
         } elseif (Request::option('action') == 'noroom') {
             ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $singledate->termin_id));
             $singledates[$key]->raum = '';
         }
     }
     foreach ($singledates as $singledate) {
         $singledate->store();
     }
 }
 public function afterUpdate($object, $line)
 {
     if (FleximportConfig::get("SEMIRO_SEND_MESSAGES")) {
         $messaging = new messaging();
         //Email an Dozenten:
         foreach ((array) $this->new_dozenten as $user_id) {
             $message = sprintf(_('Sie wurden von Semiro als DozentIn in die Veranstaltung **%s** eingetragen.'), $object->name);
             $messaging->insert_message($message, get_username($user_id), '____%system%____', FALSE, FALSE, '1', FALSE, sprintf('%s %s', _('Systemnachricht:'), _('Eintragung in Veranstaltung')), TRUE);
         }
     }
     $teilnehmergruppe = $line['teilnehmergruppe'];
     $import_type = "semiro_participant_import_" . $object->getId() . "_" . md5($teilnehmergruppe);
     $imported_items = array();
     if ($teilnehmergruppe && $object->getId()) {
         $seminar = new Seminar($object->getId());
         $datafield = Datafield::findOneByName(FleximportConfig::get("SEMIRO_USER_DATAFIELD_NAME"));
         $dilp_kennung_feld = FleximportConfig::get("SEMIRO_DILP_KENNUNG_FIELD");
         if (!$dilp_kennung_feld) {
             $dilp_kennung_feld = "dilp_teilnehmer";
         }
         if ($datafield) {
             $statement = DBManager::get()->prepare("\n                    SELECT `" . addslashes($dilp_kennung_feld) . "`\n                    FROM fleximport_semiro_participant_import\n                    WHERE teilnehmergruppe = ?\n                ");
             $statement->execute(array($teilnehmergruppe));
             while ($id_teilnehmer = $statement->fetch(PDO::FETCH_COLUMN, 0)) {
                 //$ids = $statement->fetchAll(PDO::FETCH_COLUMN, 0);
                 //foreach ($ids as $id_teilnehmer) {
                 $entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND content = ? ", array($datafield->getId(), $id_teilnehmer));
                 if ($entry) {
                     $was_member = CourseMember::findOneBySQL("seminar_id = ? AND user_id = ?", array($object->getId(), $entry['range_id']));
                     $seminar->addMember($entry['range_id']);
                     if (!$was_member && FleximportConfig::get("SEMIRO_SEND_MESSAGES")) {
                         $message = sprintf(_('Sie wurden von Semiro als TeilnehmerIn in die Veranstaltung **%s** eingetragen.'), $seminar->name);
                         $messaging->insert_message($message, get_username($entry['range_id']), '____%system%____', FALSE, FALSE, '1', FALSE, sprintf('%s %s', _('Systemnachricht:'), _('Eintragung in Veranstaltung')), TRUE);
                     }
                     //Zu Statusgruppe hinzufügen:
                     $gruppe = Statusgruppen::findOneBySQL("range_id = ? AND name = ?", array($object->getId(), $teilnehmergruppe));
                     if (!$gruppe) {
                         $gruppe = new Statusgruppen();
                         $gruppe['range_id'] = $object->getId();
                         $gruppe['name'] = $teilnehmergruppe;
                         $gruppe->store();
                     }
                     if (!$gruppe->isMember($entry['range_id'])) {
                         $gruppe->addUser($entry['range_id']);
                     }
                     //$gruppe->updateFolder(true);
                     if (!$gruppe->hasFolder()) {
                         create_folder(_("Dateiordner der Gruppe:") . ' ' . $teilnehmergruppe, _("Ablage für Ordner und Dokumente dieser Gruppe"), $gruppe->id, 15, $object->getId());
                     }
                     $item_id = $entry['range_id'];
                     if (!in_array($item_id, $imported_items)) {
                         $mapped = FleximportMappedItem::findbyItemId($item_id, $import_type) ?: new FleximportMappedItem();
                         $mapped['import_type'] = $import_type;
                         $mapped['item_id'] = $item_id;
                         $mapped['chdate'] = time();
                         $mapped->store();
                         $imported_items[] = $item_id;
                     }
                 }
             }
         }
         //Dozent zu Statusgruppe hinzufügen:
         $gruppe = Statusgruppen::findOneBySQL("range_id = ? AND name = ?", array($object->getId(), $teilnehmergruppe));
         foreach ($object->members->filter(function ($member, $value) {
             return $member['status'] === "dozent";
         }) as $teacher) {
             if (!$gruppe->isMember($teacher->getId())) {
                 $gruppe->addUser($teacher->getId());
             }
         }
         $items = FleximportMappedItem::findBySQL("import_type = :import_type AND item_id NOT IN (:ids)", array('import_type' => $import_type, 'ids' => $imported_items ?: ""));
         foreach ($items as $item) {
             $user_id = $item['item_id'];
             //check if user is in another group of this course
             $statement = DBManager::get()->prepare("\n                    SELECT 1\n                    FROM fleximport_semiro_participant_import\n                        INNER JOIN fleximport_semiro_course_import ON (fleximport_semiro_course_import.teilnehmergruppe = fleximport_semiro_participant_import.teilnehmergruppe)\n                    WHERE `" . addslashes($dilp_kennung_feld) . "` = :user_dilp\n                        AND fleximport_semiro_course_import.name_veranstaltung = :name\n                ");
             $dilp_entry = DatafieldEntryModel::findOneBySQL("datafield_id = ? AND range_id = ? ", array($datafield->getId(), $user_id));
             $statement->execute(array('user_dilp' => $dilp_entry['content'], 'name' => $object['name']));
             $is_still_in_course = $statement->fetch(PDO::FETCH_COLUMN, 0);
             if (!$is_still_in_course) {
                 $seminar->deleteMember($user_id);
             }
             $item->delete();
         }
     }
 }
示例#8
0
文件: write.php 项目: ratbird/hope
                    <?php 
echo htmlReady($user['fullname']);
?>
                </span>
                <a class="remove_adressee"><?php 
echo Icon::create('trash', 'clickable')->asImg(['class' => "text-bottom"]);
?>
</a>
            </li>
            <? endforeach ?>
        </ul>
        <?php 
echo QuickSearch::get("user_id", new StandardSearch("user_id"))->fireJSFunctionOnSelect("STUDIP.Messages.add_adressee")->withButton()->render();
$search_obj = new SQLSearch("SELECT auth_user_md5.user_id, {$GLOBALS['_fullname_sql']['full_rev']} as fullname, username, perms " . "FROM auth_user_md5 " . "LEFT JOIN user_info ON (auth_user_md5.user_id = user_info.user_id) " . "WHERE " . "username LIKE :input OR Vorname LIKE :input " . "OR CONCAT(Vorname,' ',Nachname) LIKE :input " . "OR CONCAT(Nachname,' ',Vorname) LIKE :input " . "OR CONCAT(Nachname,', ',Vorname) LIKE :input " . "OR Nachname LIKE :input OR " . "OR Vorname LIKE :input" . " ORDER BY fullname ASC", _("Nutzer suchen"), "user_id");
$mps = MultiPersonSearch::get("add_adressees")->setLinkText(_('Mehrere Adressaten hinzufügen'))->setTitle(_('Mehrere Adressaten hinzufügen'))->setExecuteURL(URLHelper::getURL("dispatch.php/messages/write"))->setJSFunctionOnSubmit("STUDIP.Messages.add_adressees")->setSearchObject($search_obj);
foreach (Statusgruppen::findContactGroups() as $group) {
    $mps->addQuickfilter($group['name'], $group->members->pluck('user_id'));
}
echo $mps->render();
?>
        <script>
            STUDIP.MultiPersonSearch.init();
        </script>
    </div>
    <div>
        <label>
            <h4><?php 
echo _("Betreff");
?>
</h4>
            <input type="text" name="message_subject" style="width: 100%" required value="<?php 
示例#9
0
文件: Contacts.php 项目: ratbird/hope
 private function requireContactGroup($group_id)
 {
     $group = \Statusgruppen::find($group_id);
     if (!$group) {
         $this->notFound();
     }
     if ($group->range_id !== $GLOBALS['user']->id) {
         $this->error(401);
     }
     return $group;
 }
示例#10
0
文件: group.php 项目: ratbird/hope
 /**
  * 
  * 
  * @param SingleCalendar The calendar of the group owner.
  * @return Statusgruppen The found group. 
  * @throws AccessDeniedException If the group does not exists or the owner
  * of the calendar is not the owner of the group.
  */
 private function getGroup($calendar)
 {
     $group = Statusgruppen::find($this->range_id);
     if (!$group) {
         throw new AccessDeniedException();
     }
     // is the user the owner of this group
     if ($group->range_id != $calendar->getRangeId()) {
         // not the owner...
         throw new AccessDeniedException();
     }
     return $group;
 }
示例#11
0
文件: single.php 项目: ratbird/hope
 public function manage_access_action($range_id = null)
 {
     $this->range_id = $range_id ?: $this->range_id;
     $this->calendar = new SingleCalendar($this->range_id);
     $all_calendar_users = CalendarUser::getUsers($this->calendar->getRangeId());
     $this->filter_groups = Statusgruppen::findByRange_id($this->calendar->getRangeId());
     $this->users = array();
     $this->group_filter_selected = Request::option('group_filter', 'list');
     if ($this->group_filter_selected != 'list') {
         $contact_group = Statusgruppen::find($this->group_filter_selected);
         $calendar_users = array();
         foreach ($contact_group->members as $member) {
             $calendar_users[] = new CalendarUser(array($this->calendar->getRangeId(), $member->user_id));
         }
         $this->calendar_users = SimpleORMapCollection::createFromArray($calendar_users);
     } else {
         $this->group_filter_selected = 'list';
         $this->calendar_users = $all_calendar_users;
     }
     $this->own_perms = array();
     foreach ($this->calendar_users as $calendar_user) {
         $other_user = CalendarUser::find(array($calendar_user->user_id, $this->calendar->getRangeId()));
         if ($other_user) {
             $this->own_perms[$calendar_user->user_id] = $other_user->permission;
         } else {
             $this->own_perms[$calendar_user->user_id] = Calendar::PERMISSION_FORBIDDEN;
         }
         $this->users[strtoupper(SimpleCollection::translitLatin1($calendar_user->nachname[0]))][] = $calendar_user;
     }
     ksort($this->users);
     $this->users = array_map(function ($g) {
         return SimpleCollection::createFromArray($g)->orderBy('nachname, vorname');
     }, $this->users);
     $this->mps = MultiPersonSearch::get('calendar-manage_access')->setTitle(_('Personhinzufügen'))->setLinkText(_('Person hinzufügen'))->setDefaultSelectedUser($all_calendar_users->pluck('user_id'))->setJSFunctionOnSubmit('STUDIP.CalendarDialog.closeMps')->setExecuteURL($this->url_for('calendar/single/add_users/' . $this->calendar->getRangeId()))->setSearchObject(new StandardSearch('user_id'));
     PageLayout::setTitle($this->getTitle($this->calendar, _('Kalender freigeben')));
     $this->createSidebar('manage_access', $this->calendar);
     $this->createSidebarFilter();
 }
示例#12
0
文件: messages.php 项目: ratbird/hope
 /**
  * Lets the user compose a message and send it.
  */
 public function write_action()
 {
     PageLayout::setTitle(_("Neue Nachricht schreiben"));
     //collect possible default adressees
     $this->to = array();
     $this->default_message = new Message();
     if (Request::username("rec_uname")) {
         $user = new MessageUser();
         $user->setData(array('user_id' => get_userid(Request::username("rec_uname")), 'snd_rec' => "rec"));
         $this->default_message->receivers[] = $user;
     }
     if (Request::getArray("rec_uname")) {
         foreach (Request::usernameArray("rec_uname") as $username) {
             $user = new MessageUser();
             $user->setData(array('user_id' => get_userid($username), 'snd_rec' => "rec"));
             $this->default_message->receivers[] = $user;
         }
     }
     if (Request::option("group_id")) {
         $this->default_message->receivers = array();
         $group = Statusgruppen::find(Request::option("group_id"));
         if ($group['range_id'] === $GLOBALS['user']->id || $GLOBALS['perm']->have_studip_perm("autor", $group['range_id'])) {
             foreach ($group->members as $member) {
                 $user = new MessageUser();
                 $user->setData(array('user_id' => $member['user_id'], 'snd_rec' => "rec"));
                 $this->default_message->receivers[] = $user;
             }
         }
     }
     if (Request::get('inst_id') && $GLOBALS['perm']->have_perm('admin')) {
         $query = "SELECT user_id FROM user_inst WHERE Institut_id = ? AND inst_perms != 'user'";
         $this->default_message->receivers = DBManager::get()->fetchAll($query, array(Request::option('inst_id')), 'MessageUser::build');
     }
     if (Request::get("filter") && Request::option("course_id")) {
         $course = new Course(Request::option('course_id'));
         if ($GLOBALS['perm']->have_studip_perm("tutor", Request::option('course_id')) || $course->getSemClass()['studygroup_mode']) {
             $this->default_message->receivers = array();
             if (Request::get("filter") === 'claiming') {
                 $cs = CourseSet::getSetForCourse(Request::option("course_id"));
                 if (is_object($cs) && !$cs->hasAlgorithmRun()) {
                     foreach (AdmissionPriority::getPrioritiesByCourse($cs->getId(), Request::option("course_id")) as $user_id => $p) {
                         $this->default_message->receivers[] = MessageUser::build(array('user_id' => $user_id, 'snd_rec' => 'rec'));
                     }
                 }
             } else {
                 $params = array(Request::option('course_id'), Request::option('who'));
                 switch (Request::get("filter")) {
                     case 'send_sms_to_all':
                         $query = "SELECT b.user_id,'rec' as snd_rec FROM seminar_user a, auth_user_md5 b WHERE a.Seminar_id = ? AND a.user_id = b.user_id AND a.status = ? ORDER BY Nachname, Vorname";
                         break;
                     case 'all':
                         $query = "SELECT user_id,'rec' as snd_rec FROM seminar_user LEFT JOIN auth_user_md5 USING(user_id) WHERE Seminar_id = ? ORDER BY Nachname, Vorname";
                         break;
                     case 'prelim':
                         $query = "SELECT user_id,'rec' as snd_rec FROM admission_seminar_user LEFT JOIN auth_user_md5 USING(user_id) WHERE seminar_id = ? AND status='accepted' ORDER BY Nachname, Vorname";
                         break;
                     case 'awaiting':
                         $query = "SELECT user_id,'rec' as snd_rec FROM admission_seminar_user LEFT JOIN auth_user_md5 USING(user_id) WHERE seminar_id = ? AND status='awaiting' ORDER BY Nachname, Vorname";
                         break;
                     case 'inst_status':
                         $query = "SELECT b.user_id,'rec' as snd_rec FROM user_inst a, auth_user_md5 b WHERE a.Institut_id = ? AND a.user_id = b.user_id AND a.inst_perms = ? ORDER BY Nachname, Vorname";
                         break;
                 }
                 $this->default_message->receivers = DBManager::get()->fetchAll($query, $params, 'MessageUser::build');
             }
         }
     }
     if (Request::option('prof_id') && Request::option('deg_id') && $GLOBALS['perm']->have_perm('root')) {
         $query = "SELECT DISTINCT user_id,'rec' as snd_rec\n            FROM user_studiengang\n            WHERE studiengang_id = ? AND abschluss_id = ?";
         $this->default_message->receivers = DBManager::get()->fetchAll($query, array(Request::option('prof_id'), Request::option('deg_id')), 'MessageUser::build');
     }
     if (Request::option('sd_id') && $GLOBALS['perm']->have_perm('root')) {
         $query = "SELECT DISTINCT user_id,'rec' as snd_rec\n            FROM user_studiengang\n            WHERE abschluss_id = ?";
         $this->default_message->receivers = DBManager::get()->fetchAll($query, array(Request::option('sd_id')), 'MessageUser::build');
     }
     if (Request::option('sp_id') && $GLOBALS['perm']->have_perm('root')) {
         $query = "SELECT DISTINCT user_id,'rec' as snd_rec\n            FROM user_studiengang\n            WHERE studiengang_id = ?";
         $this->default_message->receivers = DBManager::get()->fetchAll($query, array(Request::option('sp_id')), 'MessageUser::build');
     }
     if (!$this->default_message->receivers->count() && is_array($_SESSION['sms_data']['p_rec'])) {
         $this->default_message->receivers = DBManager::get()->fetchAll("SELECT user_id,'rec' as snd_rec FROM auth_user_md5 WHERE username IN(?) ORDER BY Nachname,Vorname", array($_SESSION['sms_data']['p_rec']), 'MessageUser::build');
         unset($_SESSION['sms_data']);
     }
     if (Request::option("answer_to")) {
         $this->default_message->receivers = array();
         $old_message = new Message(Request::option("answer_to"));
         if (!$old_message->permissionToRead()) {
             throw new AccessDeniedException("Message is not for you.");
         }
         if (!Request::get('forward')) {
             if (Request::option("quote") === $old_message->getId()) {
                 if (Studip\Markup::isHtml($old_message['message'])) {
                     $this->default_message['message'] = "<div>[quote]\n" . $old_message['message'] . "\n[/quote]</div>";
                 } else {
                     $this->default_message['message'] = "[quote]\n" . $old_message['message'] . "\n[/quote]";
                 }
             }
             $this->default_message['subject'] = substr($old_message['subject'], 0, 4) === "RE: " ? $old_message['subject'] : "RE: " . $old_message['subject'];
             $user = new MessageUser();
             $user->setData(array('user_id' => $old_message['autor_id'], 'snd_rec' => "rec"));
             $this->default_message->receivers[] = $user;
             $this->answer_to = $old_message->id;
         } else {
             $messagesubject = 'FWD: ' . $old_message['subject'];
             $message = _("-_-_ Weitergeleitete Nachricht _-_-");
             $message .= "\n" . _("Betreff") . ": " . $old_message['subject'];
             $message .= "\n" . _("Datum") . ": " . strftime('%x %X', $old_message['mkdate']);
             $message .= "\n" . _("Von") . ": " . get_fullname($old_message['autor_id']);
             $num_recipients = $old_message->getNumRecipients();
             if ($GLOBALS['user']->id == $old_message->autor_id) {
                 $message .= "\n" . _("An") . ": " . ($num_recipients == 1 ? _('Eine Person') : sprintf(_('%s Personen'), $num_recipients));
             } else {
                 $message .= "\n" . _("An") . ": " . $GLOBALS['user']->getFullname() . ($num_recipients > 1 ? ' ' . sprintf(_('(und %d weitere)'), $num_recipients) : '');
             }
             $message .= "\n\n";
             if (Studip\Markup::isHtml($old_message['message'])) {
                 $message = '<div>' . htmlReady($message, false, true) . '</div>' . $old_message['message'];
             } else {
                 $message .= $old_message['message'];
             }
             if (count($old_message->attachments)) {
                 Request::set('message_id', $old_message->getNewId());
                 foreach ($old_message->attachments as $attachment) {
                     $attachment->range_id = 'provisional';
                     $attachment->seminar_id = $GLOBALS['user']->id;
                     $attachment->autor_host = $_SERVER['REMOTE_ADDR'];
                     $attachment->user_id = $GLOBALS['user']->id;
                     $attachment->description = Request::option('message_id');
                     $new_attachment = $attachment->toArray(array('range_id', 'user_id', 'seminar_id', 'name', 'description', 'filename', 'filesize'));
                     $new_attachment = StudipDocument::createWithFile(get_upload_file_path($attachment->getId()), $new_attachment);
                     $this->default_attachments[] = array('icon' => GetFileIcon(getFileExtension($new_attachment['filename']))->asImg(['class' => "text-bottom"]), 'name' => $new_attachment['filename'], 'document_id' => $new_attachment->id, 'size' => relsize($new_attachment['filesize'], false));
                 }
             }
             $this->default_message['subject'] = $messagesubject;
             $this->default_message['message'] = $message;
         }
     }
     if (Request::get("default_body")) {
         $this->default_message['message'] = Request::get("default_body");
     }
     if (Request::get("default_subject")) {
         $this->default_message['subject'] = Request::get("default_subject");
     }
     $settings = UserConfig::get($GLOBALS['user']->id)->MESSAGING_SETTINGS;
     $this->mailforwarding = Request::get('emailrequest') ? true : $settings['request_mail_forward'];
     if (trim($settings['sms_sig'])) {
         if (Studip\Markup::isHtml($this->default_message['message']) || Studip\Markup::isHtml($settings['sms_sig'])) {
             if (!Studip\Markup::isHtml($this->default_message['message'])) {
                 $this->default_message['message'] = '<div>' . nl2br($this->default_message['message']) . '</div>';
             }
             $this->default_message['message'] .= '<br><br>--<br>';
             if (Studip\Markup::isHtml($settings['sms_sig'])) {
                 $this->default_message['message'] .= $settings['sms_sig'];
             } else {
                 $this->default_message['message'] .= formatReady($settings['sms_sig']);
             }
         } else {
             $this->default_message['message'] .= "\n\n--\n" . $settings['sms_sig'];
         }
     }
     NotificationCenter::postNotification("DefaultMessageForComposerCreated", $this->default_message);
 }
示例#13
0
 /**
  * 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;
 }
示例#14
0
文件: Calendar.php 项目: ratbird/hope
 /**
  * Retrieves all contact groups (statusgruppen) owned by the given user
  * where at least one member has granted access to his calender for the user.
  *
  * @param string $user_id User id of the owner.
  * @return type
  */
 public static function getGroups($user_id)
 {
     $groups = array();
     $calendar_owners = CalendarUser::getOwners($user_id)->pluck('owner_id');
     $sg_groups = SimpleORMapCollection::createFromArray(Statusgruppen::findByRange_id($user_id))->orderBy('position')->pluck('statusgruppe_id');
     if (sizeof($calendar_owners)) {
         $sg_users = StatusgruppeUser::findBySQL('statusgruppe_id IN(?) AND user_id IN(?)', array($sg_groups, $calendar_owners));
         foreach ($sg_users as $sg_user) {
             $groups[$sg_user->group->id] = $sg_user->group;
         }
     }
     return $groups;
 }
示例#15
0
 /**
  * gets all statusgruppe_ids of related groups of this date
  * @return array of statusgruppe_ids
  */
 public function getRelatedGroups()
 {
     if (count($this->related_groups)) {
         return $this->related_groups;
     } else {
         $groups = Statusgruppen::findBySeminar_id($this->getSeminarID());
         return array_map(function ($g) {
             return $g->getId();
         }, $groups);
     }
 }
示例#16
0
文件: contact.php 项目: ratbird/hope
 function vcard_action($group = null)
 {
     // Set constants for export
     $charset = 'utf-8';
     $filename = _('Kontakte');
     // Set layout
     $this->set_layout(null);
     // If we got an array of user
     if (Request::submitted('user')) {
         $user = User::findManyByUsername(Request::getArray('user'));
     }
     // If we got a group
     if ($group) {
         $user = User::findMany(Statusgruppen::find($group)->members->pluck('user_id'));
     }
     // Fallback to all contacts if we got nothing
     if (!$user) {
         $user = User::findCurrent()->contacts;
     }
     header("Content-type: text/x-vCard;charset=" . $charset);
     //application/octet-stream MIME
     header("Content-disposition: attachment; filename=" . $filename . ".vcf");
     header("Pragma: private");
     $this->vCard = vCard::export($user);
 }
    private function getContent ($args = NULL, $raw = FALSE) {
        $instituts_id = $this->config->range_id;
        $username = $args['username'];
        $sem_id = $args['seminar_id'];

        if (!$nameformat = $this->config->getValue('Main', 'nameformat')) {
            $nameformat = 'full';
        }

        $row = false;
        $global_view = false;
        $dbv = new DbView();
        if (in_array(get_object_type($this->config->range_id), array('fak', 'global'))) {
            $global_view = true;
            $selected_item_ids = $this->config->getValue('SelectInstitutes', 'institutesselected');
            // at least one institute has to be selected in the configuration
            if (!is_array($selected_item_ids)) {
                return array();
            }
            // is user lecturer ?
            if ($this->config->getValue('Main', 'onlylecturers')) {
                $current_semester = get_sem_num(time());
                $stm = DBManager::get()->prepare(sprintf(
                    "SELECT aum.user_id "
                    . "FROM auth_user_md5 aum "
                    . "LEFT JOIN seminar_user su USING(user_id) "
                    . "LEFT JOIN seminare s USING (seminar_id) "
                    . "LEFT JOIN user_inst ui ON aum.user_id = ui.user_id "
                    . "WHERE aum.username = ? "
                    . "AND su.status = 'dozent' "
                    . "AND s.visible = 1 "
                    . "AND ((%s) = %s OR ((%s) <= %s  AND ((%s) >= %s OR (%s) = -1))) "
                    . "AND ui.Institut_id IN ('%s') "
                    . "AND ui.inst_perms = 'dozent' "
                    . "AND ui.externdefault = 1 "
                    . "AND %s",
                    $dbv->sem_number_sql,
                    $current_semester,
                    $dbv->sem_number_sql,
                    $current_semester,
                    $dbv->sem_number_end_sql,
                    $current_semester,
                    $dbv->sem_number_end_sql,
                    implode("','", $selected_item_ids),
                    get_ext_vis_query()));
                $stm->execute(array($username));
                // user is not a lecturer
                if (!$row = $stm->fetch()) {
                    return array();
                }
            } else {
                // have user the status dozent at an institute in the list of accepted institutes
                $stm = DBManager::get()->prepare(sprintf(
                    "SELECT aum.user_id "
                    . "FROM auth_user_md5 aum "
                    . "LEFT JOIN user_inst ui USING(user_id) "
                    . "WHERE aum.username = ? "
                    . "AND ui.Institut_id IN ('%s') "
                    . "AND ui.externdefault = 1 "
                    . "AND %s",
                    implode("','", $selected_item_ids), get_ext_vis_query()));
                $stm->execute(array($username));
                // user is not dozent at an institute that is in the list of accepted institutes
                if (!$row = $stm->fetch()) {
                    return array();
                }
            }
        }

        $row = false;

        // Mitarbeiter/in am Institut
        $stm_inst = DBManager::get()->prepare(
            "SELECT i.Institut_id "
            . "FROM Institute i "
            . "LEFT JOIN user_inst ui USING(Institut_id) "
            . "LEFT JOIN auth_user_md5 aum USING(user_id) "
            . "WHERE i.Institut_id = ? "
            . "AND aum.username = ? AND ui.inst_perms IN ('autor','tutor','dozent') AND " . get_ext_vis_query());
        $stm_inst->execute(array($instituts_id, $username));

        // Mitarbeiter/in am Heimatinstitut des Seminars
        if (!$row = $stm_inst->fetch(PDO::FETCH_ASSOC) && $sem_id) {
            $stm_inst = DBManager::get()->prepare(
                "SELECT s.Institut_id "
                . "FROM seminare s "
                . "LEFT JOIN user_inst ui USING(Institut_id) "
                . "LEFT JOIN auth_user_md5 aum USING(user_id) "
                . "WHERE s.Seminar_id = ? "
                . "AND aum.username = ? AND ui.inst_perms = 'dozent' AND " . get_ext_vis_query());
            $stm_inst->execute(array($sem_id, $username));
            if ($row = $stm_inst->fetch(PDO::FETCH_ASSOC)) {
                $instituts_id = $row['Institut_id'];
            }
        }

        // an beteiligtem Institut Dozent(in)
        if (!$row && $sem_id) {
            $stm_inst = DBManager::get()->prepare(
                "SELECT si.institut_id "
                . "FROM seminare s "
                . "LEFT JOIN seminar_inst si ON(s.Seminar_id = si.seminar_id) "
                . "LEFT JOIN user_inst ui ON(si.institut_id = ui.Institut_id) "
                . "LEFT JOIN auth_user_md5 aum USING(user_id) "
                . "WHERE s.Seminar_id = ? "
                . "AND si.institut_id != ? AND ui.inst_perms = 'dozent' AND aum.username = ? AND " . get_ext_vis_query());
            $stm_inst->execute(array($sem_id, $intituts_id, $username));
            if ($row = $stm_inst->fetch(PDO::FETCH_ASSOC)) {
                $instituts_id = $row['institut_id'];
            }
        }

        // ist zwar global Dozent, aber an keinem Institut eingetragen
        if (!$row && $sem_id) {
            $stm = DBManager::get()->prepare(sprintf(
                "SELECT aum.*, %s AS fullname "
                . "FROM auth_user_md5 aum "
                . "LEFT JOIN user_info USING(user_id) "
                . "LEFT JOIN seminar_user su "
                . "WHERE username = ? "
                . "AND perms = 'dozent' AND su.seminar_id = ? AND su.status = 'dozent' AND %s"
                , $GLOBALS['_fullname_sql'][$nameformat], get_ext_vis_query()));
            $stm->execute(array($username, $sem_id));
            $row = $stm->fetch(PDO::FETCH_ASSOC);
        } elseif ($global_view || $this->config->getValue('Main', 'defaultaddr')) {
            $stm = DBManager::get()->prepare(sprintf(
                "SELECT i.Institut_id, i.Name, i.Strasse, i.Plz, i.url, ui.*, aum.*, "
                . "%s AS fullname, uin.user_id, uin.lebenslauf, uin.publi, uin.schwerp, "
                . "uin.Home, uin.title_front, uin.title_rear "
                . "FROM Institute i "
                . "LEFT JOIN user_inst ui USING(Institut_id) "
                . "LEFT JOIN auth_user_md5 aum USING(user_id) "
                . "LEFT JOIN user_info uin USING (user_id) "
                . "WHERE ui.inst_perms IN ('autor','tutor','dozent') "
                . "AND aum.username = ? AND ui.externdefault = 1 AND %s"
                , $GLOBALS['_fullname_sql'][$nameformat], get_ext_vis_query()));
            $stm->execute(array($username));
            $row = $stm->fetch(PDO::FETCH_ASSOC);
            if (!$row) {
                $stm = DBManager::get()->prepare(sprintf(
                    "SELECT i.Institut_id, i.Name, i.Strasse, i.Plz, i.url, ui.*, aum.*, "
                    . "%s AS fullname, uin.user_id, uin.lebenslauf, uin.publi, uin.schwerp, "
                    . "uin.Home, uin.title_front, uin.title_rear "
                    . "FROM Institute i "
                    . "LEFT JOIN user_inst ui USING(Institut_id) "
                    . "LEFT JOIN auth_user_md5 aum USING(user_id) "
                    . "LEFT JOIN user_info uin USING (user_id) "
                    . "WHERE ui.inst_perms IN ('autor','tutor','dozent') "
                    . "AND aum.username = ? AND i.Institut_id = ? AND %s"
                    , $GLOBALS['_fullname_sql'][$nameformat], get_ext_vis_query()));
                $stm->execute(array($username, $instituts_id));
                $row = $stm->fetch(PDO::FETCH_ASSOC);
            }
        } else {
            $stm = DBManager::get()->prepare(sprintf(
                "SELECT i.Institut_id, i.Name, i.Strasse, i.Plz, i.url, ui.*, aum.*, "
                . "%s AS fullname, uin.user_id, uin.lebenslauf, uin.publi, uin.schwerp, "
                . "uin.Home, uin.title_front, uin.title_rear "
                . "FROM Institute i "
                . "LEFT JOIN user_inst ui USING(Institut_id) "
                . "LEFT JOIN auth_user_md5 aum USING(user_id) "
                . "LEFT JOIN user_info uin USING (user_id) "
                . "WHERE ui.inst_perms IN ('autor','tutor','dozent') "
                . "AND aum.username = ? AND i.Institut_id = ? AND %s"
                , $GLOBALS['_fullname_sql'][$nameformat], get_ext_vis_query()));
            $stm->execute(array($username, $instituts_id));
            $row = $stm->fetch(PDO::FETCH_ASSOC);
        }

        // the user with the given username does not fulfill the conditions above
        if (!$row) {
            return array();
        }

        // Alle Einrichtungen hohlen
        $stm = DBManager::get()->prepare(sprintf(
                "SELECT i.Institut_id, i.Name, i.Strasse, i.Plz, i.url, ui.*, aum.*, "
                . "%s AS fullname, uin.user_id, uin.lebenslauf, uin.publi, uin.schwerp, "
                . "uin.Home, uin.title_front, uin.title_rear "
                . "FROM Institute i "
                . "LEFT JOIN user_inst ui USING(Institut_id) "
                . "LEFT JOIN auth_user_md5 aum USING(user_id) "
                . "LEFT JOIN user_info uin USING (user_id) "
                . "WHERE ui.inst_perms IN ('autor','tutor','dozent') "
                . "AND aum.username = ?"
                , $GLOBALS['_fullname_sql'][$nameformat]));
        $stm->execute(array($username));
        $allRows = $stm->fetchAll();
        
        $this->user_id = $row['user_id'];

        $this->user_perm = $visibilities['perms'];

        $content['__GLOBAL__']['STUDIP-EDIT-HREF'] = "{$GLOBALS['ABSOLUTE_URI_STUDIP']}dispatch.php/settings/account?username=$username&login=yes";

        $content['PERSONDETAILS']['FULLNAME'] = ExternModule::ExtHtmlReady($row['fullname']);
        $content['PERSONDETAILS']['LASTNAME'] = ExternModule::ExtHtmlReady($row['Nachname']);
        $content['PERSONDETAILS']['FIRSTNAME'] = ExternModule::ExtHtmlReady($row['Vorname']);
        $content['PERSONDETAILS']['TITLEFRONT'] = ExternModule::ExtHtmlReady($row['title_front']);
        $content['PERSONDETAILS']['TITLEREAR'] = ExternModule::ExtHtmlReady($row['title_rear']);
        if ($statusgroups = Statusgruppen::getUserRoles($instituts_id, $this->user_id)) {
            $content['PERSONDETAILS']['STATUSGROUPS'] = ExternModule::ExtHtmlReady(join(', ', array_values($statusgroups)));
        }
        $content['PERSONDETAILS']['USERNAME'] = $row['username'];
        
        $content['PERSONDETAILS']['IMAGE-HREF'] = Avatar::getAvatar($this->user_id)->getURL(Avatar::NORMAL);

        $gruppen = GetRoleNames(GetAllStatusgruppen($this->config->range_id, $row['user_id']));
        for ($i = 0; $i < sizeof($gruppen); $i++) {
            $content['PERSONDETAILS']['GROUPS'][$i]['GROUP'] = ExternModule::ExtHtmlReady($gruppen[$i]);
        }

        $content['PERSONDETAILS']['INST-NAME'] = ExternModule::ExtHtmlReady($row['Name']);
        $content['PERSONDETAILS']['INST-HREF'] = ExternModule::ExtHtmlReady(trim($row['url']));
        $content['PERSONDETAILS']['STREET'] = ExternModule::ExtHtmlReady($row['Strasse']);
        $content['PERSONDETAILS']['ZIPCODE'] = ExternModule::ExtHtmlReady($row['Plz']);
        $email = get_visible_email($this->user_id);
        $content['PERSONDETAILS']['EMAIL'] = ExternModule::ExtHtmlReady($email);
        $content['PERSONDETAILS']['EMAIL-LOCAL'] = array_shift(explode('@', $content['PERSONDETAILS']['EMAIL']));
        $content['PERSONDETAILS']['EMAIL-DOMAIN'] = array_pop(explode('@', $content['PERSONDETAILS']['EMAIL']));
        $content['PERSONDETAILS']['ROOM'] = ExternModule::ExtHtmlReady($row['raum']);
        $content['PERSONDETAILS']['PHONE'] = ExternModule::ExtHtmlReady($row['Telefon']);
        $content['PERSONDETAILS']['FAX'] = ExternModule::ExtHtmlReady($row['Fax']);
        if (Visibility::verify('homepage', $this->user_id)) {
            $content['PERSONDETAILS']['HOMEPAGE-HREF'] = ExternModule::ExtHtmlReady(trim($row['Home']));
        }
        $content['PERSONDETAILS']['OFFICE-HOURS'] = ExternModule::ExtHtmlReady($row['sprechzeiten']);

        $j = 0;
        foreach($allRows as $curRow)
        {
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-NAME'] = ExternModule::ExtHtmlReady($curRow['Name']);
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-HREF'] = ExternModule::ExtHtmlReady(trim($curRow['url']));
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-STREET'] = ExternModule::ExtHtmlReady($curRow['Strasse']);
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-ZIPCODE'] = ExternModule::ExtHtmlReady($curRow['Plz']);
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL'] = ExternModule::ExtHtmlReady($curRow['Email']);
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL-LOCAL'] = array_shift(explode('@', $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL']));
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL-DOMAIN'] = array_pop(explode('@', $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL']));
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-ROOM'] = ExternModule::ExtHtmlReady($curRow['raum']);
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-PHONE'] = ExternModule::ExtHtmlReady($curRow['Telefon']);
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-FAX'] = ExternModule::ExtHtmlReady($curRow['Fax']);
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-HOMEPAGE-HREF'] = ExternModule::ExtHtmlReady(trim($curRow['Home']));
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-OFFICE-HOURS'] = ExternModule::ExtHtmlReady($curRow['sprechzeiten']);
            $j++;
        }
        
        // generic data fields
        if ($generic_datafields = $this->config->getValue('Main', 'genericdatafields')) {
            $localEntries = DataFieldEntry::getDataFieldEntries($this->user_id, 'user');
            $k = 1;
            foreach ($generic_datafields as $datafield) {
                if (isset($localEntries[$datafield]) &&
                        is_object($localEntries[$datafield]) &&
                        Visibility::verify($localEntries[$datafield]->getId(), $this->user_id)) {
                    if ($localEntries[$datafield]->getType() == 'link') {
                        $localEntry = ExternModule::extHtmlReady($localEntries[$datafield]->getValue());
                    } else {
                        $localEntry = $localEntries[$datafield]->getDisplayValue();
                    }
                    if ($localEntry) {
                        $content['PERSONDETAILS']["DATAFIELD_$k"] = $localEntry;
                    }
                }
                $k++;
            }
        }

        // homepage plugins
        $plugins = PluginEngine::getPlugins('HomepagePlugin');

        foreach ($plugins as $plugin) {
            $template = $plugin->getHomepageTemplate($this->user_id);

            if ($template) {
                $keyname = 'PLUGIN_' . strtoupper($plugin->getPluginName());
                $content['PERSONDETAILS'][$keyname] = $template->render();
            }
        }

        if (Visibility::verify('lebenslauf', $this->user_id)) {
            $content['PERSONDETAILS']['CV'] = ExternModule::ExtFormatReady($row['lebenslauf']);
        }
        if (Visibility::verify('schwerp', $this->user_id)) {
            $content['PERSONDETAILS']['RESEARCH-INTERESTS'] = ExternModule::ExtFormatReady($row['schwerp']);
        }
        if (Visibility::verify('publi', $this->user_id)) {
            $content['PERSONDETAILS']['PUBLICATIONS'] = ExternModule::ExtFormatReady($row['publi']);
        }

        $content['PERSONDETAILS']['LECTURES'] = $this->elements['TemplateLectures']->toString(array('content' => $this->getContentLectures(), 'subpart' => 'LECTURES'));
        if (Visibility::verify('news', $this->user_id)) {
            $content['PERSONDETAILS']['NEWS'] = $this->elements['TemplateNews']->toString(array('content' => $this->getContentNews(), 'subpart' => 'NEWS'));
        }
        if (Visibility::verify('dates', $this->user_id)) {
            $content['PERSONDETAILS']['APPOINTMENTS'] = $this->elements['TemplateAppointments']->toString(array('content' => $this->getContentAppointments(), 'subpart' => 'APPOINTMENTS'));
        }
        if (Visibility::verify('literature', $this->user_id)) {
            $content['PERSONDETAILS']['LITERATURE'] = $this->elements['TemplateLitList']->toString(array('content' => $this->elements['LitList']->getContent(array('user_id' => $this->user_id)), 'subpart' => 'LITLISTS'));
        }
        $content['PERSONDETAILS']['OWNCATEGORIES'] = $this->elements['TemplateOwnCategories']->toString(array('content' => $this->getContentOwnCategories(), 'subpart' => 'OWNCATEGORIES'));

        return $content;
    }
示例#18
0
 public function getChildren()
 {
     $result = Statusgruppen::findBySQL('range_id = ? ORDER BY position', array($this->id));
     return $result ?: array();
 }
示例#19
0
 static function storeSingleDate($termin)
 {
     $table = 'termine';
     if ($termin->isExTermin()) {
         $table = 'ex_termine';
         $query = "SELECT assign_id FROM resources_assign WHERE assign_user_id = ?";
         $statement = DBManager::get()->prepare($query);
         $statement->execute(array($termin->getTerminID()));
         $assign_id = $statement->fetchColumn();
         if ($assign_id) {
             // delete resource-request, if any
             if ($request_id = self::getRequestID($termin->getTerminID())) {
                 $rr = new RoomRequest($request_id);
                 $rr->delete();
             }
             // delete resource assignment, if any
             AssignObject::Factory($assign_id)->delete();
         }
     }
     $issueIDs = $termin->getIssueIDs();
     if (is_array($issueIDs)) {
         $query = "REPLACE INTO themen_termine (termin_id, issue_id)\n                      VALUES (?, ?)";
         $statement = DBManager::get()->prepare($query);
         foreach ($issueIDs as $val) {
             $statement->execute(array($termin->getTerminID(), $val));
         }
     }
     if ($termin->isUpdate()) {
         $query = "UPDATE :table\n                      SET metadate_id = :metadate_id, date_typ = :date_typ,\n                          date = :date, end_time = :end_time,\n                          range_id = :range_id, autor_id = :autor_id,\n                          raum = :raum, content = :content\n                      WHERE termin_id = :termin_id";
         $statement = DBManager::get()->prepare($query);
         $statement->bindValue(':table', $table, StudipPDO::PARAM_COLUMN);
         $statement->bindValue(':metadate_id', $termin->getMetaDateID() ?: null);
         $statement->bindValue(':date_typ', $termin->getDateType());
         $statement->bindValue(':date', $termin->getStartTime());
         $statement->bindValue(':end_time', $termin->getEndTime());
         $statement->bindValue(':range_id', $termin->getRangeID());
         $statement->bindValue(':autor_id', $termin->getAuthorID());
         $statement->bindValue(':raum', $termin->getFreeRoomText());
         $statement->bindValue(':content', $termin->getComment());
         $statement->bindValue(':termin_id', $termin->getTerminID());
         $statement->execute();
         if ($statement->rowCount() > 0) {
             $query = "UPDATE :table SET chdate = :chdate WHERE termin_id = :termin_id";
             $statement = DBManager::get()->prepare($query);
             $statement->bindValue(':table', $table, StudipPDO::PARAM_COLUMN);
             $statement->bindValue(':chdate', $termin->getChDate());
             $statement->bindValue(':termin_id', $termin->getTerminID());
             $statement->execute();
         }
     } else {
         $query = "REPLACE INTO :table\n                        (metadate_id, date_typ, date, end_time, mkdate, chdate,\n                         termin_id, range_id, autor_id, raum, content)\n                      VALUES\n                        (:metadate_id, :date_typ, :date, :end_time, :mkdate, :chdate,\n                         :termin_id, :range_id, :autor_id, :raum, :content)";
         $statement = DBManager::get()->prepare($query);
         $statement->bindValue(':table', $table, StudipPDO::PARAM_COLUMN);
         $statement->bindValue(':metadate_id', $termin->getMetaDateID());
         $statement->bindValue(':date_typ', $termin->getDateType());
         $statement->bindValue(':date', $termin->getStartTime());
         $statement->bindValue(':end_time', $termin->getEndTime());
         $statement->bindValue(':mkdate', $termin->getMkDate());
         $statement->bindValue(':chdate', $termin->getChDate());
         $statement->bindValue(':termin_id', $termin->getTerminID());
         $statement->bindValue(':range_id', $termin->getRangeID());
         $statement->bindValue(':autor_id', $termin->getAuthorID());
         $statement->bindValue(':raum', $termin->getFreeRoomText());
         $statement->bindValue(':content', $termin->getComment());
         $statement->execute();
     }
     $query = "DELETE FROM termin_related_persons WHERE range_id = ?";
     $statement = DBManager::get()->prepare($query);
     $statement->execute(array($termin->getTerminId()));
     if (count($termin->related_persons) && count($termin->related_persons) < CourseMember::countBySQL("Seminar_id = ? AND status = 'dozent'", array($termin->range_id))) {
         $query = "INSERT IGNORE INTO termin_related_persons (range_id, user_id) VALUES (?, ?)";
         $statement = DBManager::get()->prepare($query);
         foreach ($termin->getRelatedPersons() as $user_id) {
             $statement->execute(array($termin->getTerminId(), $user_id));
         }
     }
     $query = "DELETE FROM termin_related_groups WHERE termin_id = ?";
     $statement = DBManager::get()->prepare($query);
     $statement->execute(array($termin->getTerminId()));
     if (count($termin->related_groups) && count($termin->related_groups) < Statusgruppen::countBySQL("range_id = ?", array($termin->range_id))) {
         $query = "INSERT IGNORE INTO termin_related_groups (termin_id, statusgruppe_id) VALUES (?, ?)";
         $statement = DBManager::get()->prepare($query);
         foreach ($termin->getRelatedGroups() as $statusgruppe_id) {
             $statement->execute(array($termin->getTerminId(), $statusgruppe_id));
         }
     }
     return true;
 }