Exemplo n.º 1
0
    write_group_cache();
    jump("修改成功", "index.php?lfj=group&job=edit&gid={$gid}");
} elseif ($action == "delete" && $Apower[group_list]) {
    $db->query(" DELETE FROM `{$pre}group` WHERE gid='{$gid}' ");
    $db->query(" DELETE FROM `{$pre}admin_menu` WHERE groupid='{$gid}' ");
    unlink(ROOT_PATH . "data/group/{$gid}.php");
    write_group_cache();
    jump("删除成功", "index.php?lfj={$lfj}&job=list");
} elseif ($action == "list" && $Apower[group_list]) {
    foreach ($postdb as $key => $rs) {
        $db->query("UPDATE `{$pre}group` SET grouptitle='{$rs['grouptitle']}',levelnum='{$rs['levelnum']}' WHERE gid='{$key}' ");
    }
    write_group_cache();
    jump("修改成功", "index.php?lfj={$lfj}&job=list");
} elseif ($job == "edit" && $Apower[group_list]) {
    $select_group = select_group("gid", $gid, "index.php?lfj=group&job=edit");
    $rsdb = $db->get_one(" SELECT * FROM `{$pre}group` WHERE gid='{$gid}' ");
    $powerdb = @unserialize($rsdb[powerdb]);
    if ($gid == 3 || $gid == 4) {
        $powerdb[comment_yz] = $powerdb[PassContribute] = 1;
        $powerdb[comment_img] = 0;
    }
    $powerdb[PassContribute] = intval($powerdb[PassContribute]);
    $PassContribute[$powerdb[PassContribute]] = " checked ";
    $rsdb_gptype[$rsdb[gptype]] = " checked ";
    $allowseerch[$rsdb[allowsearch]] = ' checked ';
    $allowadmin[$rsdb[allowadmin]] = ' checked ';
    $EditPassPower[intval($powerdb[EditPassPower])] = ' checked ';
    $AllowUploadMax[intval($powerdb[AllowUploadMax])] = ' checked ';
    $comment_yz[intval($powerdb[comment_yz])] = ' checked ';
    $comment_img[intval($powerdb[comment_img])] = ' checked ';
Exemplo n.º 2
0
   <form id="filter" class="center" action="filter.php" method="post">
     <fieldset class="smallround">
       <legend>Filter by</legend>
       <?php 
 echo select_client();
 echo select_domain();
 echo select_cache();
 echo select_tbl(TBL_PREFIX . TBL_OS, "os_id", "OS");
 echo select_tbl(TBL_PREFIX . TBL_BROWSERS, "browser_id", "Browser");
 echo select_fps();
 ?>
     </fieldset>
     <fieldset class="clear smallround">
       <legend>Grouping</legend>
       <?php 
 echo select_group();
 ?>
       <?php 
 echo select_records();
 ?>
       <?php 
 echo checkbox("ftu", "Display only first-time users");
 ?>
     </fieldset>
     <fieldset class="clear smallround">
       <legend>Date range</legend>
       <?php 
 echo select_date("from");
 ?>
       <?php 
 echo select_date("to");
Exemplo n.º 3
0
    if (!$postdb['linkurl']) {
        //showmsg("链接地址不能为空");
    }
    $postdb[name] = filtrate($postdb[name]);
    $postdb[linkurl] = filtrate($postdb[linkurl]);
    $db->query("UPDATE {$pre}admin_menu SET fid='{$fid}',name='{$postdb['name']}',linkurl='{$postdb['linkurl']}',color='{$postdb['color']}',target='{$postdb['target']}',list='{$postdb['list']}',iftier='{$postdb['iftier']}',`groupid`='-{$gid}' WHERE id='{$id}'");
    jump("修改成功", "?lfj={$lfj}&job=list&gid={$gid}", 1);
} elseif ($job == 'add' && $Apower[membermenu_list]) {
    if (!$gid) {
        showmsg("没有指定的用户组!");
    }
    $target[0] = ' checked ';
    $iftier[0] = ' checked ';
    $atc = "add";
    $selected = select_fupmenu('fid', $rsdb[fid]);
    $select_group = select_group("gid", abs($gid), '');
    require dirname(__FILE__) . "/" . "head.php";
    require dirname(__FILE__) . "/" . "template/memberguidemenu/menu.htm";
    require dirname(__FILE__) . "/" . "template/memberguidemenu/edit.htm";
    require dirname(__FILE__) . "/" . "foot.php";
} elseif ($action == 'add' && $Apower[membermenu_list]) {
    if ($gid == 2) {
        showmsg("不能是游客组");
    }
    if (!$postdb[name]) {
        showmsg("名称不能为空");
    }
    if ($fid && !$postdb['linkurl']) {
        showmsg("链接地址不能为空");
    }
    if (!$addsort && !$fid) {
Exemplo n.º 4
0
 $DivTpl != 1 && ($DivTpl = 0);
 $stype || ($stype = 4);
 $div_width && ($div_w = $div_width);
 $div_height && ($div_h = $div_height);
 $yzdb[$yz] = "checked";
 $ascdb[$asc] = "checked";
 $orderdb[$order] = " selected ";
 $levelsdb[$levels] = " selected ";
 $titleflooddb["{$titleflood}"] = "checked";
 $hidedb[$hide] = "checked";
 $divtpldb[$DivTpl] = "checked";
 $stypedb[$stype] = " checked ";
 $fiddb = explode(",", $codedb[fiddb]);
 //$select_news=select_group("fiddb[]",$rsdb[groupid]);
 $select_group = select_group("group_1", $group_1);
 $select_group2 = select_group("group_2", $group_2);
 $tplpart_1 = str_replace("&nbsp;", "&amp;nbsp;", $tplpart_1);
 $tplpart_2 = str_replace("&nbsp;", "&amp;nbsp;", $tplpart_2);
 $getLabelTpl = getLabelTpl($inc, array("common_title", "common_pic"));
 //幻灯片样式
 $rollpicStyle = "<select name='RollStyleType' id='RollStyleType' onChange='rollpictypes(this)'><option value=''>默认</option>";
 $dir = opendir(ROOT_PATH . "template/default/rollpic/");
 while ($file = readdir($dir)) {
     if (eregi("\\.htm\$", $file)) {
         $rollpicStyle .= "<option value='{$file}'>" . str_replace(".htm", "", $file) . "</option>";
     }
 }
 $rollpicStyle .= "</select>";
 require "head.php";
 require "template/label/member.htm";
 require "foot.php";
Exemplo n.º 5
0
 /**
  * Maintenance view for the manual insert parameters
  *
  */
 function manual_action()
 {
     $_request = Request::GetInstance();
     if (Request::submitted('submit')) {
         $filters = array_filter(Request::getArray('filter'));
         if (!Request::get('sem_id') || Request::get('sem_id') == 'false') {
             $this->flash['error'] = _('Ungültiger Aufruf');
         } elseif (!count($filters)) {
             $this->flash['error'] = _('Keine Filterkriterien gewählt');
         } else {
             $seminar = Seminar::GetInstance(Request::option('sem_id'));
             $group = select_group($seminar->getSemesterStartTime());
             $userlookup = new UserLookup();
             foreach ($filters as $type => $values) {
                 $userlookup->setFilter($type, $values);
             }
             $user_ids = $userlookup->execute();
             $real_users = 0;
             foreach ($user_ids as $user_id) {
                 if (!AutoInsert::checkAutoInsertUser(Request::option('sem_id'), $user_id)) {
                     $seminar->addMember($user_id);
                     $real_users += AutoInsert::saveAutoInsertUser(Request::option('sem_id'), $user_id);
                 }
             }
             //messagebox
             $text = sprintf(_('Es wurden %u von %u möglichen Personen in die Veranstaltung %s eingetragen.'), $real_users, count($user_ids), sprintf('<a href="%s">%s</a>', URLHelper::getLink('dispatch.php/course/details/', array('cid' => $seminar->getId())), htmlReady($seminar->getName())));
             if ($real_users > 0) {
                 $this->flash['success'] = $text;
             } else {
                 $this->flash['message'] = $text;
             }
             $this->flash['detail'] = array(_('Etwaige Abweichungen der Personenzahlen enstehen durch bereits vorhandene bzw. wieder ausgetragene Personen.'));
             $this->redirect('admin/autoinsert/manual');
         }
     }
     $this->sem_id = Request::option('sem_id');
     $this->sem_search = Request::get('sem_search');
     $this->sem_select = Request::option('sem_select');
     $this->filtertype = Request::getArray('filtertype');
     $this->filter = Request::getArray('filter');
     if (count(Request::getArray('remove_filter'))) {
         $this->filtertype = array_diff($this->filtertype, array_keys(Request::getArray('remove_filter')));
     } elseif (Request::submitted('add_filter')) {
         array_push($this->filtertype, Request::get('add_filtertype'));
     }
     if (Request::get('sem_search') and Request::get('sem_select')) {
         if (Request::get('sem_search')) {
             $search = new SeminarSearch('number-name');
             $this->seminar_search = $search->getResults(Request::get('sem_search'), array('search_sem_sem' => $this->sem_select));
             if (count($this->seminar_search) == 0) {
                 $this->flash['message'] = _("Es wurden keine Veranstaltungen gefunden.");
             }
         } else {
             $this->flash['error'] = _("Im Suchfeld wurde nichts eingetragen!");
         }
     }
     $this->values = array();
     foreach ($this->filtertype as $type) {
         $this->values[$type] = UserLookup::getValuesForType($type);
     }
     $this->available_filtertypes = array('fach' => _('Studienfach'), 'abschluss' => _('Studienabschluss'), 'fachsemester' => _('Studienfachsemester'), 'institut' => _('Einrichtung'), 'status' => _('Statusgruppe'), 'domain' => _('Domäne'));
 }
Exemplo n.º 6
0
 /**
  * Enregisters a user in a certain seminar by checking his status and the
  * seminar's permissions
  * @param  string $user_status Current user status
  * @param  string $user_id     Id of the user
  * @param  Array  $seminar     Array representation of the seminar
  * @return boole  Indicating whether the user was actually inserted
  */
 private static function _saveUser($user_status, $user_id, $seminar)
 {
     if (!in_array($user_status, $seminar['status']) or $seminar['Schreibzugriff'] >= 2) {
         return false;
     }
     // insert the user in the seminar_user table
     $query = "INSERT IGNORE INTO seminar_user (Seminar_id, user_id, status, gruppe, mkdate)";
     $query .= " VALUES (?, ?, 'autor', ?, UNIX_TIMESTAMP())";
     $statement = DBManager::get()->prepare($query);
     $statement->execute(array($seminar['seminar_id'], $user_id, select_group($seminar['start_time'])));
     return true;
 }
Exemplo n.º 7
0
        showmsg("你不能选择游客组");
    } elseif ($postdb[groupid] == '3' && $userdb[groupid] != 3 && !$founder) {
        showmsg("你无权限选择超级管理员用户组,请更换其他的用户组");
    } elseif ($postdb[groupid] == '4' && $userdb[groupid] != 3 && $userdb[groupid] != 4 && !$founder) {
        showmsg("你无权限选择此用户组,请更换其他的用户组");
    }
    $array = array('password' => $postdb[passwd], 'username' => $postdb[username], 'groupid' => $postdb[groupid], 'email' => $postdb[email]);
    $uid = $userDB->register_user($array);
    if (!is_numeric($uid)) {
        showmsg($uid);
    }
    jump("创建成功", "index.php?lfj=member&job=list", 3);
} elseif ($job == "editmember" && $Apower[member_list]) {
    $rsdb = $userDB->get_allInfo($uid);
    $rsdb[money] = get_money($rsdb[uid]);
    $select_group = select_group("postdb[groupid]", $rsdb[groupid]);
    $select_group2 = group_box("postdb[groups]", explode(",", $rsdb[groups]), 1);
    $sexdb[intval($rsdb[sex])] = ' checked ';
    $yzdb[intval($rsdb[yz])] = ' checked ';
    $ConfigDB = unserialize($rsdb[config]);
    $rsdb[totalspace] = floor($rsdb[totalspace] / (1024 * 1024));
    $ConfigDB[begintime] && ($ConfigDB[begintime] = date("Y-m-d H:i:s", $ConfigDB[begintime]));
    $ConfigDB[endtime] && ($ConfigDB[endtime] = date("Y-m-d H:i:s", $ConfigDB[endtime]));
    $email_yz[$rsdb[email_yz]] = ' checked ';
    $mob_yz[$rsdb[mob_yz]] = ' checked ';
    $idcard_yz[$rsdb[idcard_yz]] = ' checked ';
    require dirname(__FILE__) . "/" . "head.php";
    require dirname(__FILE__) . "/" . "template/member/menu.htm";
    require dirname(__FILE__) . "/" . "template/member/editmember.htm";
    require dirname(__FILE__) . "/" . "foot.php";
} elseif ($action == "editmember" && $Apower[member_list]) {
 function index_action()
 {
     if (!$GLOBALS['perm']->have_perm("admin")) {
         throw new AccessDeniedException(_("Sie sind nicht berechtigt, dieses Plugin zu benutzen."));
     }
     $db = DBManager::get();
     if (Request::submitted('do_search_source')) {
         $result = search_range(Request::quoted('search_source'));
         if (is_array($result)) {
             $result = array_filter($result, function ($r) {
                 return $r["type"] == "sem";
             });
             if (count($result)) {
                 PageLayout::postMessage(MessageBox::success(sprintf(_("Ihre Sucher ergab %s Treffer."), count($result))));
                 $show_source_result = true;
             }
         } else {
             PageLayout::postMessage(MessageBox::info(_("Ihre Suche ergab keine Treffer.")));
         }
     }
     if (Request::submitted('do_choose_source')) {
         $source_id = Request::option('search_source_result');
         $copy_count = 5;
         Request::set('to_copy', null);
     } else {
         if (Request::submitted('source_id')) {
             $source_id = Request::option('source_id');
             $copy_count = Request::int('copy_count');
             if ($copy_count < 1) {
                 $copy_count = 1;
             }
         }
     }
     if ($source_id) {
         $source = Seminar::getInstance($source_id);
         $source_name = $source->getName() . ' (' . $source->getStartSemesterName() . ')';
         $copy_type = Request::int('copy_type', $source->status);
         if (SeminarCategories::getByTypeId($copy_type)->course_creation_forbidden) {
             $copy_type = 0;
         }
         if (SeminarCategories::getByTypeId($source->status)->only_inst_user) {
             $search_template = "user_inst";
         } else {
             $search_template = "user";
         }
         $bet_inst = $db->query("SELECT institut_id FROM seminar_inst WHERE seminar_id=" . $db->quote($source_id))->fetchAll(PDO::FETCH_COLUMN);
         $source_dozenten = array_keys($source->getMembers('dozent'));
         if ($copy_count) {
             $r = Request::getArray('to_copy');
             $delete_lecturer = Request::getArray('delete_lecturer');
             $add_lecturer = count(Request::getArray('add_lecturer')) ? (int) key(Request::getArray('add_lecturer')) : null;
             for ($i = 0; $i < $copy_count; $i++) {
                 $to_copy['nr'][$i] = isset($r['nr'][$i]) ? $r['nr'][$i] : $source->getNumber();
                 $to_copy['name'][$i] = isset($r['name'][$i]) ? $r['name'][$i] : $source->getName();
                 $to_copy['participants'][$i] = isset($r['participants'][$i]) ? 1 : 0;
                 $to_copy['lecturers'][$i] = $r['lecturers'][$i];
                 if (empty($to_copy['lecturers'][$i])) {
                     $to_copy['lecturers'][$i] = $source_dozenten;
                 } else {
                     if (isset($delete_lecturer[$i]) && count($to_copy['lecturers'][$i]) > 1) {
                         $to_delete = array_search(key($delete_lecturer[$i]), $to_copy['lecturers'][$i]);
                         if ($to_delete !== false) {
                             unset($to_copy['lecturers'][$i][$to_delete]);
                         }
                     }
                 }
                 if ($add_lecturer === $i && Request::option('add_doz_' . $add_lecturer)) {
                     $to_copy['lecturers'][$i][] = Request::option('add_doz_' . $add_lecturer);
                 }
                 $to_copy['search_lecturer'][$i] = new PermissionSearch($search_template, sprintf(_("%s auswählen"), get_title_for_status('dozent', 1, $source->status)), "user_id", array('permission' => 'dozent', 'exclude_user' => $to_copy['lecturers'][$i], 'institute' => $bet_inst));
             }
         }
         if (Request::submitted('do_copy') && count($to_copy)) {
             $copied = array();
             $lecturer_insert = $db->prepare("INSERT INTO seminar_user (seminar_id,user_id,status,position,gruppe,comment,visible,mkdate) VALUES (?,?,'dozent',?,?,'','yes',UNIX_TIMESTAMP())");
             $copy_seminar_inst = $db->prepare("INSERT INTO seminar_inst (seminar_id,institut_id) SELECT ?,institut_id FROM seminar_inst WHERE seminar_id=?");
             $copy_seminar_sem_tree = $db->prepare("INSERT INTO seminar_sem_tree (seminar_id,sem_tree_id) SELECT ?,sem_tree_id FROM seminar_sem_tree WHERE seminar_id=?");
             $copy_seminar_user = $db->prepare("INSERT IGNORE INTO seminar_user (seminar_id,user_id,status,gruppe, mkdate,comment,position) SELECT ?,user_id,status,gruppe,UNIX_TIMESTAMP(),'',0 FROM seminar_user WHERE status IN ('user','autor','tutor') AND seminar_id=?");
             $copy_seminar_userdomains = $db->prepare("INSERT INTO seminar_userdomains (seminar_id,userdomain_id) SELECT ?,userdomain_id FROM seminar_userdomains WHERE seminar_id=?");
             $copy_statusgruppen = $db->prepare("INSERT INTO statusgruppen (statusgruppe_id,name,range_id,position,size,selfassign,mkdate) SELECT MD5(CONCAT(statusgruppe_id, ?)),name,?,position,size,selfassign,UNIX_TIMESTAMP() FROM statusgruppen WHERE range_id=?");
             $copy_statusgruppe_user = $db->prepare("INSERT INTO statusgruppe_user (statusgruppe_id,user_id,position) SELECT MD5(CONCAT(statusgruppe_user.statusgruppe_id, ?)),user_id,statusgruppe_user.position FROM statusgruppen INNER JOIN statusgruppe_user USING(statusgruppe_id) WHERE range_id=?");
             for ($i = 0; $i < $copy_count; $i++) {
                 $new_sem = Course::build($source->toArray());
                 $new_sem->setId($new_sem->getNewId());
                 $new_sem_id = $new_sem->id;
                 $new_sem->status = Request::int('copy_type', 1);
                 $new_sem->name = $to_copy['name'][$i];
                 $new_sem->veranstaltungsnummer = $to_copy['nr'][$i];
                 $new_sem->store();
                 if (!$new_sem->isNew()) {
                     log_event("SEM_CREATE", $new_sem_id);
                     $gruppe = (int) select_group($new_sem->start_time);
                     $position = 1;
                     foreach ($to_copy['lecturers'][$i] as $lecturer) {
                         $lecturer_insert->execute(array($new_sem_id, $lecturer, $position, $gruppe));
                     }
                     $copy_seminar_inst->execute(array($new_sem_id, $source_id));
                     $copy_seminar_sem_tree->execute(array($new_sem_id, $source_id));
                     $copy_seminar_userdomains->execute(array($new_sem_id, $source_id));
                     if ($to_copy['participants'][$i]) {
                         $copy_seminar_user->execute(array($new_sem_id, $source_id));
                         $copy_statusgruppen->execute(array($new_sem_id, $new_sem_id, $source_id));
                         $copy_statusgruppe_user->execute(array($new_sem_id, $source_id));
                     }
                     $copied[] = $new_sem;
                 }
             }
             PageLayout::postMessage(MessageBox::success(sprintf(_("Es wurden %s Kopien erstellt."), count($copied))));
             $source_id = null;
         }
     }
     PageLayout::setTitle(_("Veranstaltungs-Vervielfältiger"));
     $template_factory = new Flexi_TemplateFactory(dirname(__FILE__) . "/templates");
     $template = $template_factory->open('index.php');
     $template->set_layout($GLOBALS['template_factory']->open('layouts/base.php'));
     echo $template->render(compact('source_id', 'source_name', 'show_source_result', 'result', 'copy_count', 'copy_type', 'to_copy', 'copied'));
 }
if (isset($_POST["key"])) {
    if ($_POST["key"] == "group") {
        $OUTPUT = get_data($_POST);
    } elseif ($_POST["key"] == "process") {
        $OUTPUT = process_data($_POST);
    } elseif ($_POST["key"] == "modify") {
        if (isset($_POST["done"])) {
            $OUTPUT = get_email($_POST);
        } else {
            $OUTPUT = process_data($_POST);
        }
    } elseif ($_POST["key"] == "send_mail") {
        $OUTPUT = send_emails($_POST);
    }
} else {
    $OUTPUT = select_group();
}
$OUTPUT .= "<p>" . mkQuickLinks(ql("email-queue-manage.php", "Send Emails In Queue"), ql("email-queue-failures.php", "Resend Failed Emails In Queue"), ql("email-groups.php", "Send Email To Group"), ql("email-group-new.php", "Add Email Group"), ql("email-group-view.php", "View Email Groups"));
require "template.php";
function select_group()
{
    db_connect();
    $groups = "";
    #get list of groups
    $get_groups = "SELECT * from egroups ORDER BY groupname";
    $run_egroups = db_exec($get_groups) or errDie("Unable to get group information.");
    if (pg_numrows($run_egroups) > 0) {
        while ($garr = pg_fetch_array($run_egroups)) {
            $groups .= "<option value='{$garr['grouptitle']}'>{$garr['groupname']}</option>";
        }
    }
Exemplo n.º 10
0
    /**
     * adds a user to the seminar with the given status
     * @param user_id string: ID of the user
     * @param status string: status of the user for the seminar "user", "autor", "tutor", "dozent"
     * @param force bool: if false (default) the user will only be upgraded and not degraded in his/her status
     */
    public function addMember($user_id, $status = 'autor', $force = false)
    {

        if (in_array(get_global_perm($user_id), array("admin", "root"))) {
            $this->createError(_("Admin und Root dürfen nicht Mitglied einer Veranstaltung sein."));
            return false;
        }
        $db = DBManager::get();

        $rangordnung = array_flip(array('user', 'autor', 'tutor', 'dozent'));
        if ($rangordnung[$status] > $rangordnung['autor'] && SeminarCategories::getByTypeId($this->status)->only_inst_user) {
            //überprüfe, ob im richtigen Institut:
            $user_institute_stmt = $db->prepare(
                "SELECT Institut_id " .
                "FROM user_inst " .
                "WHERE user_id = :user_id " .
                "");
            $user_institute_stmt->execute(array('user_id' => $user_id));
            $user_institute = $user_institute_stmt->fetchAll(PDO::FETCH_COLUMN, 0);

            if (!in_array($this->institut_id, $user_institute) && !count(array_intersect($user_institute, $this->getInstitutes()))) {
                $this->createError(_("Einzutragender Nutzer stammt nicht einem beteiligten Institut an."));

                return false;
            }
        }

        if (!$force) {
            $query = "SELECT status FROM seminar_user WHERE user_id = ? AND Seminar_id = ?";
            $statement = DBManager::get()->prepare($query);
            $statement->execute(array($user_id, $this->id));
            $old_status = $statement->fetchColumn();
        }

        $query = "SELECT MAX(position) + 1 FROM seminar_user WHERE status = ? AND Seminar_id = ?";
        $statement = DBManager::get()->prepare($query);
        $statement->execute(array($status, $this->id));
        $new_position = $statement->fetchColumn();

        $query = "SELECT COUNT(*) FROM seminar_user WHERE Seminar_id = ? AND status = 'dozent'";
        $statement = DBManager::get()->prepare($query);
        $statement->execute(array($this->id));
        $numberOfTeachers = $statement->fetchColumn();

        if (!$old_status) {
            $query = "INSERT INTO seminar_user (Seminar_id, user_id, status, position, gruppe, visible, mkdate)
                      VALUES (?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP())";
            $statement = DBManager::get()->prepare($query);
            $statement->execute(array(
                $this->id,
                $user_id,
                $status,
                $new_position ?: 0,
                (int)select_group($this->getSemesterStartTime()),
                in_array($status, words('tutor dozent')) ? 'yes' : 'unknown',
            ));
            // delete the entries, user is now in the seminar
            $stmt = DBManager::get()->prepare('DELETE FROM admission_seminar_user
                                            WHERE user_id = ? AND seminar_id = ?');
            $stmt->execute(array($user_id, $this->getId()));
            if ($stmt->rowCount()) {
                //renumber the waiting/accepted/lot list, a user was deleted from it
                renumber_admission($this->getId());
            }
            $cs = $this->getCourseSet();
            if ($cs) {
                $prio_delete = AdmissionPriority::unsetPriority($cs->getId(), $user_id, $this->getId());
            }
            removeScheduleEntriesMarkedAsVirtual($user_id, $this->getId());
            NotificationCenter::postNotification("CourseDidGetMember", $this, $user_id);
            NotificationCenter::postNotification('UserDidEnterCourse', $this->id, $user_id);
            StudipLog::log('SEM_USER_ADD', $this->id, $user_id, $status, 'Wurde in die Veranstaltung eingetragen');
            $this->course->resetRelation('members');
            $this->course->resetRelation('admission_applicants');
            return $this;
        } elseif (($force || $rangordnung[$old_status] < $rangordnung[$status])
            && ($old_status !== "dozent" || $numberOfTeachers > 1)) {
            $query = "UPDATE seminar_user
                      SET status = ?, visible = IFNULL(?, visible), position = ?
                      WHERE Seminar_id = ? AND user_id = ?";
            $statement = DBManager::get()->prepare($query);
            $statement->execute(array(
                $status,
                in_array($status, words('tutor dozent')) ? 'yes' : null,
                $new_position,
                $this->id,
                $user_id,
            ));

            if ($old_status === 'dozent') {
                $query = "SELECT termin_id FROM termine WHERE range_id = ?";
                $statement = DBManager::get()->prepare($query);
                $statement->execute(array($this->id));
                $termine = $statement->fetchAll(PDO::FETCH_COLUMN);

                $query = "DELETE FROM termin_related_persons WHERE range_id = ? AND user_id = ?";
                $statement = DBManager::get()->prepare($query);

                foreach ($termine as $termin_id) {
                    $statement->execute(array($termin_id, $user_id));
                }
            }
            NotificationCenter::postNotification("CourseDidChangeMember", $this, $user_id);
            $this->course->resetRelation('members');
            $this->course->resetRelation('admission_applicants');
            return $this;
        } else {
            if ($old_status === "dozent" && $numberOfTeachers <= 1) {
                $this->createError(sprintf(_("Die Veranstaltung muss wenigstens <b>einen/eine</b> VeranstaltungsleiterIn (%s) eingetragen haben!"),
                        get_title_for_status('dozent', 1, $this->status)) .
                    ' ' . _("Tragen Sie zunächst einen anderen ein, um diesen herabzustufen."));
            }

            return false;
        }
    }
Exemplo n.º 11
0
/**
 * This function updates an admission procedure
 *
 * The function checks, if user could be insert to the seminar.
 * The User gets a message, if he is inserted to the seminar
 *
 * @param        string  seminar_id      the seminar_id of the seminar to calculate
 * @param        boolean send_message        should a system-message be send?
 *
 */
function normal_update_admission($seminar_id, $send_message = TRUE)
{
    $messaging=new messaging;

    //Daten holen / Abfrage ob ueberhaupt begrenzt
    $seminar = Seminar::GetInstance($seminar_id);

    if($seminar->isAdmissionEnabled()){

        $sem_preliminary = ($seminar->admission_prelim == 1);
        $cs = $seminar->getCourseSet();
        //Veranstaltung einfach auffuellen (nach Lostermin und Ende der Kontingentierung)
        if (!$seminar->admission_disable_waitlist_move && $cs->hasAlgorithmRun()) {
            //anzahl der freien Plaetze holen
            $count = (int)$seminar->getFreeAdmissionSeats();

            //Studis auswaehlen, die jetzt aufsteigen koennen
            $query = "SELECT user_id, username
                      FROM admission_seminar_user
                      LEFT JOIN auth_user_md5 USING (user_id)
                      WHERE seminar_id = ? AND status = 'awaiting'
                      ORDER BY position
                      LIMIT " . (int)$count;
            $statement = DBManager::get()->prepare($query);
            $statement->execute(array($seminar->getId()));
            $temp = $statement->fetchAll(PDO::FETCH_ASSOC);

            foreach ($temp as $row) {
                //ok, here ist the "colored-group" meant (for grouping on meine_seminare), not the grouped seminars as above!
                $group = select_group($seminar->getSemesterStartTime());

                if (!$sem_preliminary) {
                    $query = "INSERT INTO seminar_user
                                (user_id, Seminar_id, status, gruppe, mkdate)
                              VALUES (?, ?, 'autor', ?, UNIX_TIMESTAMP())";
                    $statement = DBManager::get()->prepare($query);
                    $statement->execute(array(
                        $row['user_id'],
                        $seminar->getId(),
                        $group
                    ));
                    $affected = $statement->rowCount();

                    NotificationCenter::postNotification('UserDidEnterCourse', $seminar->getId(), $row['user_id']);
                } else {
                    $query = "UPDATE admission_seminar_user
                              SET status = 'accepted'
                              WHERE user_id = ? AND seminar_id = ?";
                    $statement = DBManager::get()->prepare($query);
                    $statement->execute(array(
                        $row['user_id'],
                        $seminar->getId()
                    ));
                    $affected = $statement->rowCount();
                }
                if ($affected > 0) {
                    $log_message = 'Wurde automatisch aus der Warteliste in die Veranstaltung eingetragen.';
                    StudipLog::log('SEM_USER_ADD', $seminar->getId(), $row['user_id'], $sem_preliminary ? 'accepted' : 'autor', $log_message);
                    if (!$sem_preliminary) {
                        $query = "DELETE FROM admission_seminar_user
                                  WHERE user_id = ? AND seminar_id = ?";
                        $statement = DBManager::get()->prepare($query);
                        $statement->execute(array(
                            $row['user_id'],
                            $seminar->getId()
                        ));
                        $affected = $statement->rowCount();
                    } else {
                        $affected = 0;
                    }
                    //User benachrichtigen
                    if (($sem_preliminary || $affected > 0) && $send_message) {
                        setTempLanguage($row['user_id']);
                        if (!$sem_preliminary) {
                            $message = sprintf (_('Sie sind in die Veranstaltung **%s (%s)** eingetragen worden, da für Sie ein Platz frei geworden ist. Ab sofort finden Sie die Veranstaltung in der Übersicht Ihrer Veranstaltungen. Damit sind Sie auch für die Präsenzveranstaltung zugelassen.'), $seminar->getName(), $seminar->getFormattedTurnus(true));
                        } else {
                            $message = sprintf (_('Sie haben den Status vorläufig akzeptiert in der Veranstaltung **%s (%s)** erhalten, da für Sie ein Platz freigeworden ist.'), $seminar->getName(), $seminar->getFormattedTurnus(true));
                        }
                        $subject = sprintf(_("Teilnahme an der Veranstaltung %s"),$seminar->getName());
                        restoreLanguage();

                        $messaging->insert_message($message, $row['username'], '____%system%____', FALSE, FALSE, '1', FALSE, $subject, true);
                    }
                }
            }
            //Warteposition der restlichen User neu eintragen
            renumber_admission($seminar_id, FALSE);
        }
        $seminar->restore();
    }
}