function showResults($q, $page) { $user_group = new User_group(); $user_group->limit(($page - 1) * GROUPS_PER_PAGE, GROUPS_PER_PAGE + 1); $wheres = array('nickname', 'fullname', 'homepage', 'description', 'location'); foreach ($wheres as $where) { $where_q = "{$where} like '%" . trim($user_group->escape($q), '\'') . '%\''; $user_group->whereAdd($where_q, 'OR'); } $cnt = $user_group->find(); if ($cnt > 0) { $terms = preg_split('/[\\s,]+/', $q); $results = new GroupSearchResults($user_group, $terms, $this); $results->show(); $user_group->free(); $this->pagination($page > 1, $cnt > GROUPS_PER_PAGE, $page, 'groupsearch', array('q' => $q)); } else { // TRANS: Text on page where groups can be searched if no results were found for a query. $this->element('p', 'error', _('No results.')); $this->searchSuggestions($q); if (common_logged_in()) { // TRANS: Additional text on page where groups can be searched if no results were found for a query for a logged in user. // TRANS: This message contains Markdown links in the form [link text](link). $message = _('If you cannot find the group you\'re looking for, you can [create it](%%action.newgroup%%) yourself.'); } else { // TRANS: Additional text on page where groups can be searched if no results were found for a query for a not logged in user. // TRANS: This message contains Markdown links in the form [link text](link). $message = _('Why not [register an account](%%action.register%%) and [create the group](%%action.newgroup%%) yourself!'); } $this->elementStart('div', 'guide'); $this->raw(common_markup_to_html($message)); $this->elementEnd('div'); $user_group->free(); } }
function showResults($q, $page) { $user_group = new User_group(); $user_group->limit(($page - 1) * GROUPS_PER_PAGE, GROUPS_PER_PAGE + 1); $wheres = array('nickname', 'fullname', 'homepage', 'description', 'location'); foreach ($wheres as $where) { $where_q = "{$where} like '%" . trim($user_group->escape($q), '\'') . '%\''; $user_group->whereAdd($where_q, 'OR'); } $cnt = $user_group->find(); if ($cnt > 0) { $terms = preg_split('/[\\s,]+/', $q); $results = new GroupSearchResults($user_group, $terms, $this); $results->show(); } else { $this->element('p', 'error', _('No results')); } $user_group->free(); $this->pagination($page > 1, $cnt > GROUPS_PER_PAGE, $page, 'groupsearch', array('q' => $q)); }
if (empty($group)) { throw new Exception("Can't find group with id '{$id}'."); } updateGroupUri($group); } else { if (have_option('n', 'nickname')) { $nickname = get_option_value('n', 'nickname'); $group = User_group::staticGet('nickname', $nickname); if (empty($group)) { throw new Exception("Can't find group with nickname '{$nickname}'"); } updateGroupUri($group); } else { if (have_option('a', 'all')) { $group = new User_group(); $group->whereAdd('uri IS NULL'); if ($group->find()) { while ($group->fetch()) { updateGroupUri($group); } } } else { show_help(); exit(1); } } } } catch (Exception $e) { print $e->getMessage() . "\n"; exit(1); }
protected function prepare(array $args = array()) { // If we die, show short error messages. GNUsocial::setApi(true); parent::prepare($args); $this->groups = array(); $this->profiles = array(); $term = $this->arg('term'); $limit = $this->arg('limit'); if ($limit > 200) { $limit = 200; } //prevent DOS attacks if (substr($term, 0, 1) == '@') { //profile search $term = substr($term, 1); $profile = new Profile(); $profile->limit($limit); $profile->whereAdd('nickname like \'' . trim($profile->escape($term), '\'') . '%\''); $profile->whereAdd(sprintf('id in (SELECT id FROM user) OR ' . 'id in (SELECT subscribed from subscription' . ' where subscriber = %d)', $this->scoped->id)); if ($profile->find()) { while ($profile->fetch()) { $this->profiles[] = clone $profile; } } } if (substr($term, 0, 1) == '!') { //group search $term = substr($term, 1); $group = new User_group(); $group->limit($limit); $group->whereAdd('nickname like \'' . trim($group->escape($term), '\'') . '%\''); //Can't post to groups we're not subscribed to...: $group->whereAdd(sprintf('id in (SELECT group_id FROM group_member' . ' WHERE profile_id = %d)', $this->scoped->id)); if ($group->find()) { while ($group->fetch()) { $this->groups[] = clone $group; } } } return true; }
echo " - skipping\n"; } else { echo " - removing bogus ostatus_profile entry..."; $evil = Ostatus_profile::staticGet('uri', $uri); $evil->delete(); echo " ok\n"; } } echo "\n"; // And there may be user_group entries remaining where we've already killed // the ostatus_profile. These were "harmless" until our lookup started actually // using the uri field, at which point we can clearly see it breaks stuff. echo "Checking for leftover bogus user_group.uri entries obscuring local_group entries...\n"; $group = new User_group(); $group->joinAdd(array('id', 'local_group:group_id'), 'LEFT'); $group->whereAdd('group_id IS NULL'); $marker = mt_rand(31337, 31337000); $groupTemplate = common_local_url('groupbyid', array('id' => $marker)); $encGroup = $group->escape($groupTemplate, true); $encGroup = str_replace($marker, '%', $encGroup); echo " LIKE '{$encGroup}'\n"; $group->whereAdd("uri LIKE '{$encGroup}'"); $group->find(); $count = $group->N; echo "Found {$count}...\n"; while ($group->fetch()) { $uri = $group->uri; if (preg_match('!/group/(\\d+)/id!', $uri, $matches)) { $id = intval($matches[1]); $local = Local_group::staticGet('group_id', $id); if ($local) {
function prepare($args) { parent::prepare($args); $this->groups = array(); $this->users = array(); $q = $this->arg('q'); $limit = $this->arg('limit'); if ($limit > 200) { $limit = 200; } //prevent DOS attacks if (substr($q, 0, 1) == '@') { //user search $q = substr($q, 1); $user = new User(); $user->limit($limit); $user->whereAdd('nickname like \'' . trim($user->escape($q), '\'') . '%\''); if ($user->find()) { while ($user->fetch()) { $this->users[] = clone $user; } } } if (substr($q, 0, 1) == '!') { //group search $q = substr($q, 1); $group = new User_group(); $group->limit($limit); $group->whereAdd('nickname like \'' . trim($group->escape($q), '\'') . '%\''); if ($group->find()) { while ($group->fetch()) { $this->groups[] = clone $group; } } } return true; }
function initLocalGroup() { printfnq("Ensuring all local user groups have a local_group..."); $group = new User_group(); $group->whereAdd('NOT EXISTS (select group_id from local_group where group_id = user_group.id)'); $group->find(); while ($group->fetch()) { try { // Hack to check for local groups if ($group->getUri() == common_local_url('groupbyid', array('id' => $group->id))) { $lg = new Local_group(); $lg->group_id = $group->id; $lg->nickname = $group->nickname; $lg->created = $group->created; // XXX: common_sql_now() ? $lg->modified = $group->modified; $lg->insert(); } } catch (Exception $e) { printfv("Error initializing local group for {$group->nickname}:" . $e->getMessage()); } } printfnq("DONE.\n"); }
function getGroups() { $group = new User_group(); // Disable this to get global group searches $group->joinAdd(array('id', 'local_group:group_id')); $order = false; if (!empty($this->q)) { $wheres = array('nickname', 'fullname', 'homepage', 'description', 'location'); foreach ($wheres as $where) { // Double % because of sprintf $group->whereAdd(sprintf('LOWER(%1$s.%2$s) LIKE LOWER("%%%3$s%%")', $group->escapedTableName(), $where, $group->escape($this->q)), 'OR'); } $order = sprintf('%1$s.%2$s %3$s', $group->escapedTableName(), $this->getSortKey('created'), $this->reverse ? 'DESC' : 'ASC'); } else { // User is browsing via AlphaNav switch ($this->filter) { case 'all': // NOOP break; case '0-9': $group->whereAdd(sprintf('LEFT(%1$s.%2$s, 1) BETWEEN %3$s AND %4$s', $group->escapedTableName(), 'nickname', $group->_quote("0"), $group->_quote("9"))); break; default: $group->whereAdd(sprintf('LEFT(LOWER(%1$s.%2$s), 1) = %3$s', $group->escapedTableName(), 'nickname', $group->_quote($this->filter))); } $order = sprintf('%1$s.%2$s %3$s, %1$s.%4$s ASC', $group->escapedTableName(), $this->getSortKey('nickname'), $this->reverse ? 'DESC' : 'ASC', 'nickname'); } $offset = ($this->page - 1) * PROFILES_PER_PAGE; $limit = PROFILES_PER_PAGE + 1; $group->selectAdd(); $group->selectAdd('profile_id'); $group->orderBy($order); $group->limit($offset, $limit); $group->find(); return Profile::multiGet('id', $group->fetchAll('profile_id')); }
function prepare($args) { // If we die, show short error messages. StatusNet::setApi(true); parent::prepare($args); $cur = common_current_user(); if (!$cur) { throw new ClientException('Access forbidden', true); } $this->groups = array(); $this->users = array(); $q = $this->arg('q'); $limit = $this->arg('limit'); if ($limit > 200) { $limit = 200; } //prevent DOS attacks if (substr($q, 0, 1) == '@') { //user search $q = substr($q, 1); $user = new User(); $user->limit($limit); $user->whereAdd('nickname like \'' . trim($user->escape($q), '\'') . '%\''); if ($user->find()) { while ($user->fetch()) { $this->users[] = clone $user; } } } if (substr($q, 0, 1) == '!') { //group search $q = substr($q, 1); $group = new User_group(); $group->limit($limit); $group->whereAdd('nickname like \'' . trim($group->escape($q), '\'') . '%\''); if ($group->find()) { while ($group->fetch()) { $this->groups[] = clone $group; } } } return true; }