public function save_usage_action() { // delete old usage MarketPluginUsage::deleteBySQL('user_id = ? AND name = ?', array(User::findCurrent()->id, Request::get('tag'))); // create new usages foreach (Request::getArray('plugins') as $pluginid) { MarketPluginUsage::create(array('plugin_id' => $pluginid, 'user_id' => User::findCurrent()->id, 'name' => Request::get('tag'))); $this->done++; } }
/** * Controller for all buddy related action. * * The following actions are supported: * - "add" to add a user to the current user's buddy list * - "remove" to remove a user from the current user's buddy list * * @param String $action The action to be executed */ public function buddy_action($action = 'add') { $username = Request::username('username'); if ($action === 'add' && $username !== null) { if (Contact::import(array('owner_id' => User::findCurrent()->id, 'user_id' => User::findByUsername($username)->id))->store()) { PageLayout::postMessage(MessageBox::success(_('Der Benutzer wurde zu Ihren Kontakten hinzugefügt.'))); } } elseif ($action === 'remove' && $username !== null) { $contact = Contact::find(array(User::findCurrent()->id, User::findByUsername($username)->id)); if ($contact && $contact->delete()) { PageLayout::postMessage(MessageBox::success(_('Der Benutzer gehört nicht mehr zu Ihren Kontakten.'))); } } $this->redirect('online'); }
public function propose_usage_action($plugin_id) { $this->plugin = new MarketPlugin($plugin_id); // Submit propose usage if (Request::submitted('propose')) { CSRFProtection::verifyUnsafeRequest(); MarketPluginUsage::create(array('plugin_id' => $plugin_id, 'user_id' => User::findCurrent()->id, 'name' => Request::get('used_at'))); $this->redirect('presenting/details/' . $plugin_id); } $this->most_used = DBManager::get()->fetchFirst('SELECT name FROM pluginmarket_plugin_usages WHERE user_id = ? AND name NOT IN (SELECT name FROM pluginmarket_plugin_usages WHERE plugin_id = ?) GROUP BY name ORDER BY count(*)', array(User::findCurrent()->id, $plugin_id)); }
public function isEditable() { return $GLOBALS['perm']->have_perm('root') || $this->user_id == User::findCurrent() || $this->plugin->user_id == User::findCurrent()->id; }
</div> </div> <? endif ?> <? if ($thread['context_type'] === "public") : ?> <? $sharingusers = $thread->getSharingUsers() ?> <? $sharing_user_ids = array_map(function ($v) { return $v['user_id']; }, $sharingusers) ?> <div class="reshares<?php echo count($sharingusers) > 0 ? " reshared" : ""; ?> "> <? if (count($sharingusers)) : ?> <? if ((!User::findCurrent()->isFriendOf($thread) || $thread['external_contact']) && ($GLOBALS['user']->id !== $thread['user_id'])) : ?> <? $sharingcontacts = "" ?> <? $othersharing = 0 ?> <? foreach ($sharingusers as $key => $user) { if (User::findCurrent()->isFriendOf($user)) { $url = $user->getURL(); $name = $user->getName(); if ($url) { $sharingcontacts .= '<a href="'.$url.'" title="'.htmlReady($name).'">'; } $sharingcontacts .= $user->getAvatar()->getImageTag(Avatar::SMALL, array('title' => $name)); if ($url) { $sharingcontacts .= '</a>'; } } else { $othersharing++; } } ?> <? if ($sharingcontacts) : ?> <?php
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); }
/** * Retrieves the score for the current user * * @return integer the score * */ static function GetMyScore($user_or_id = null) { $user = $user_or_id ? User::toObject($user_or_id) : User::findCurrent(); $cache = StudipCacheFactory::getCache(); if ($cache->read("user_score_of_".$user->id)) { return $cache->read("user_score_of_".$user->id); } //Behold! The all new mighty score algorithm! //Step 1: Select all activities as mkdate-timestamps. //Step 2: Group these activities to timeslots of halfhours // with COUNT(*) as a weigh of the timeslot. //Step 3: Calculate the measurement of the timeslot from the weigh of it. // This makes the first activity count fully, the second // almost half and so on. We use log_n to make huge amounts of // activities to not count so much. //Step 4: Calculate a single score for each timeslot depending on the // measurement and the mkdate-timestamp. Use arctan as the function // here so that older activities tend to zero. //Step 5: Sum all scores from all timeslots together. $sql = " SELECT round(SUM((-atan(measurement / " . round(31556926 / self::MEASURING_STEP) . ") / PI() + 0.5) * 200)) as score FROM ( SELECT ((unix_timestamp() / " . self::MEASURING_STEP . ") - timeslot) / (LN(weigh) + 1) AS measurement FROM ( SELECT (round(mkdate / " . self::MEASURING_STEP . ")) as timeslot, COUNT(*) AS weigh FROM ( " . self::createTimestampQuery() . " ) as mkdates GROUP BY timeslot ) as measurements ) as dates "; $stmt = DBManager::get()->prepare($sql); $stmt->execute(array(':user' => $user->id)); $score = $stmt->fetchColumn(); if ($user->score && $user->score != $score) { $user->score = $score; $user->store(); } $cache->write("user_score_of_".$user->id, $score, 60 * 5); return $score; }
/** * displays a paginated member overview of a studygroup * * @param string id of a studypgroup * @param string page number the current page * * @return void * */ function members_action() { $id = $_SESSION['SessionSeminar']; PageLayout::setTitle(getHeaderLine($_SESSION['SessionSeminar']) . ' - ' . _("Teilnehmende")); Navigation::activateItem('/course/members'); PageLayout::setHelpKeyword('Basis.StudiengruppenBenutzer'); Request::set('choose_member_parameter', $this->flash['choose_member_parameter']); object_set_visit_module('participants'); $this->last_visitdate = object_get_visit($id, 'participants'); $sem = Course::find($id); $this->anzahl = StudygroupModel::countMembers($id); $this->groupname = $sem->getFullname(); $this->sem_id = $id; $this->groupdescription = $sem->beschreibung; $this->moderators = $sem->getMembersWithStatus('dozent'); $this->tutors = $sem->getMembersWithStatus('tutor'); $this->autors = $sem->getMembersWithStatus('autor'); $this->accepted = $sem->admission_applicants->findBy('status', 'accepted'); $this->sem_class = Course::findCurrent()->getSemClass(); $inviting_search = 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) " . "LEFT JOIN seminar_user ON (auth_user_md5.user_id = seminar_user.user_id AND seminar_user.Seminar_id = '" . addslashes($id) . "') " . "WHERE perms NOT IN ('root', 'admin') " . "AND " . get_vis_query() . " AND (username LIKE :input OR Vorname LIKE :input " . "OR CONCAT(Vorname,' ',Nachname) LIKE :input " . "OR CONCAT(Nachname,' ',Vorname) LIKE :input " . "OR Nachname LIKE :input OR {$GLOBALS['_fullname_sql']['full_rev']} LIKE :input) " . "ORDER BY fullname ASC", _("Nutzer suchen"), "user_id"); $this->rechte = $GLOBALS['perm']->have_studip_perm("tutor", $id); $actions = new ActionsWidget(); if ($this->rechte) { $mp = MultiPersonSearch::get('studygroup_invite_' . $id)->setLinkText(_('Neue Gruppenmitglieder-/innen einladen'))->setLinkIconPath("")->setTitle(_('Neue Gruppenmitglieder/-innen einladen'))->setExecuteURL($this->url_for('course/studygroup/execute_invite/' . $id, array('view' => Request::get('view'))))->setSearchObject($inviting_search)->addQuickfilter(_('Adressbuch'), User::findCurrent()->contacts->pluck('user_id'))->setNavigationItem('/course/members')->render(); $element = LinkElement::fromHTML($mp, Icon::create('community+add', 'clickable')); $actions->addElement($element); } if ($this->rechte || $sem->getSemClass()['studygroup_mode']) { $actions->addLink(_('Nachricht an alle Gruppenmitglieder verschicken'), $this->url_for('course/studygroup/message/' . $id), Icon::create('mail', 'clickable'), array('data-dialog' => 1)); } if ($actions->hasElements()) { Sidebar::get()->addWidget($actions); } $this->invitedMembers = StudygroupModel::getInvitations($id); }
/** * Removes the user's score from the ranking list. */ public function unpublish_action() { $user = User::findCurrent(); $user->score = 0; $user->store(); PageLayout::postMessage(MessageBox::success(_('Ihr Wert wurde von der Rangliste gelöscht.'))); $this->redirect('score'); }
/** * Current user is going to follow (add as buddy) the given user, who could * also be an external contact. */ public function follow_user_action() { if (!$GLOBALS['perm']->have_perm("autor")) { throw new AccessDeniedException(); } if (Request::get("external_contact")) { $user = BlubberExternalContact::find(Request::option("user_id")); } else { $user = new BlubberUser(Request::option("user_id")); } if (!$user->isNew()) { if (is_a($user, "BlubberExternalContact")) { $statement = DBManager::get()->prepare("INSERT IGNORE INTO blubber_follower " . "SET studip_user_id = :user_id, " . "external_contact_id = :contact_id, " . "left_follows_right = '1' " . ""); $success = $statement->execute(array('user_id' => $GLOBALS['user']->id, 'contact_id' => $user->getId())); if ($success) { NotificationCenter::postNotification('BlubberExternalContactDidAdd', $user); } } else { Contact::import(array('owner_id' => User::findCurrent()->id, 'user_id' => $user->id))->store(); } } $this->render_json(array('success' => 1, 'message' => (string) MessageBox::success(_("Kontakt hinzugefügt")))); }
/** * checks if tour is visible for current user */ function isVisible() { if (!$this->settings->active) { return false; } $language = substr($GLOBALS['user']->preferred_language, 0, 2); if (!$language) { $language = 'de'; } if ($language != $this->language) { return false; } $current_role = User::findCurrent() ? User::findCurrent()->perms : 'nobody'; if (strpos($this->roles, $current_role) === false) { return false; } foreach ($this->audiences as $audience) { switch ($audience->type) { case 'inst': $table_name = 'user_inst'; $field_name = 'Institut_id'; break; case 'sem': $table_name = 'seminar_user'; $field_name = 'Seminar_id'; break; case 'studiengang': $table_name = 'user_studiengang'; $field_name = 'studiengang_id'; break; case 'abschluss': $table_name = 'user_studiengang'; $field_name = 'abschluss_id'; break; case 'userdomain': $table_name = 'user_userdomains'; $field_name = 'userdomain_id'; break; } if ($audience->range_id and $table_name) { $query = 'SELECT * FROM ' . $table_name . ' WHERE user_id = ? AND ' . $field_name . ' = ?'; $items = array($GLOBALS['user']->user_id, $audience->range_id); $statement = DBManager::get()->prepare($query); $statement->execute($items); $ret = $statement->fetchOne(PDO::FETCH_ASSOC); if (!count($ret)) { return false; } } elseif ($table_name) { $query = 'SELECT * FROM ' . $table_name . ' WHERE user_id = ?'; $items = array($GLOBALS['user']->user_id); $statement = DBManager::get()->prepare($query); $statement->execute($items); $ret = $statement->fetchOne(PDO::FETCH_ASSOC); if (count($ret)) { return false; } } } return true; }
</h2> <ul class="plugin-usages"> <?php foreach ($marketplugin['uses'] as $use) { ?> <li> <a href="<?php echo PluginEngine::getLink($plugin, array('search' => htmlReady($use->name)), "presenting/all"); ?> "> <?php echo htmlReady($use->name); ?> </a> <?php if ($use->plugin->isWritable(User::findCurrent()->id)) { ?> (<?php echo ObjectdisplayHelper::link($use->user); ?> ) <?php } ?> <?php if ($use->isEditable()) { ?> <a href="<?php echo PluginEngine::getLink($plugin, array(), "presenting/delete_usage/" . $use->id); ?> ">
public static function getStudygroups() { $courses = array(); $modules = new Modules(); $studygroups = User::findCurrent()->course_memberships->filter(function ($c) { return $c->course->getSemClass()->offsetGet('studygroup_mode'); })->toGroupedArray('seminar_id'); $param_array = 'name seminar_id visible veranstaltungsnummer start_time duration_time status visible '; $param_array .= 'chdate admission_binding modules admission_prelim'; $courses = Course::findAndMapMany(function ($course) use($param_array, $studygroups, $modules) { $ret = $course->toArray($param_array); $ret['sem_class'] = $course->getSemClass(); $ret['start_semester'] = $course->start_semester->name; $ret['end_semester'] = $course->end_semester->name; $ret['obj_type'] = 'sem'; $ret['last_visitdate'] = object_get_visit($course->id, 'sem', 'last'); $ret['visitdate'] = object_get_visit($course->id, 'sem', ''); $ret['user_status'] = $studygroups[$course->id]['status']; $ret['gruppe'] = $studygroups[$course->id]['gruppe']; $ret['modules'] = $modules->getLocalModules($course->id, 'sem', $course->modules, $course->status); MyRealmModel::getObjectValues($ret); return $ret; }, array_keys($studygroups)); return $courses; }
/** * Adds the user identified by the variable username to the current user's * contacts. */ public function add_buddy_action() { $username = Request::username('username'); $user = User::findByUsername($username); $current = User::findCurrent(); $current->contacts[] = $user; $current->store(); PageLayout::postMessage(MessageBox::success(_('Der Nutzer wurde zu Ihren Kontakten hinzugefügt.'))); $this->redirect('profile/index?username=' . $username); }