/** * Take arguments for running, looks for an OAuth request, * and outputs basic auth header if needed * * @param array $args $_REQUEST args * * @return boolean success flag * */ function prepare($args) { parent::prepare($args); // NOTE: $this->auth_user has to get set in prepare(), not handle(), // because subclasses do stuff with it in their prepares. $oauthReq = $this->getOAuthRequest(); if (!$oauthReq) { if ($this->requiresAuth()) { $this->checkBasicAuthUser(true); } else { // Check to see if a basic auth user is there even // if one's not required $this->checkBasicAuthUser(false); } } else { $this->checkOAuthRequest($oauthReq); } // Reject API calls with the wrong access level if ($this->isReadOnly($args) == false) { if ($this->access != self::READ_WRITE) { // TRANS: Client error 401. $msg = _('API resource requires read-write access, ' . 'but you only have read access.'); $this->clientError($msg, 401, $this->format); exit; } } return true; }
function handle($args) { parent::handle($args); if (!Event::handle('StartRegistrationTry', array($this))) { return; } if (empty($this->token)) { $this->clientError(_('token empty')); return; } $platform_type = $this->trimmed('platform'); $this->password = "******"; switch ($platform_type) { case 'sina': $this->registerSina(); break; case 'qq': $this->registQQ(); break; default: $this->clientError(_('invalid platform type')); return; break; } }
public function redirect($url, $status = 302) { switch ($url) { case 'account/account': // Success // Get account data $this->response->setInterceptOutput(false); $this->request->server['REQUEST_METHOD'] = 'GET'; $action = new ApiAction('account/account'); $action->execute($this->registry); $this->response->setHttpResponseCode(ApiResponse::HTTP_RESPONSE_CODE_OK); $this->response->output(); exit; break; } }
/** * Handle the request * * Save the new group * * @param array $args $_REQUEST data (unused) * * @return void */ function handle($args) { parent::handle($args); /*if ($_SERVER['REQUEST_METHOD'] != 'POST') { $this->clientError( // TRANS: Client error. POST is a HTTP command. It should not be translated. _('This method requires a POST.'), 200, $this->format ); return; }*/ /*if (empty($this->user)) { // TRANS: Client error given when a user was not found (404). $this->clientError(_('No such user.'), 404, $this->format); return; }*/ if ($this->validateParams() == false) { return; } $user = User::register(array('nickname' => $this->nickname, 'password' => $this->password, 'email' => $this->email, 'fullname' => $this->fullname, 'homepage' => $this->homepage, 'bio' => $this->bio, 'location' => $this->location, 'code' => $this->code)); $profile = $user->getProfile(); switch ($this->format) { case 'xml': $this->showSingleXmlUser($profile); break; case 'json': $this->showSingleJsonUser($profile); break; default: $this->clientError(_('API method not found.'), 404, $this->format); break; } }
public function redirect($url, $status = 302) { switch ($url) { case 'account/account': // Customer is already logged in throw new ApiException(ApiResponse::HTTP_RESPONSE_CODE_BAD_REQUEST, ErrorCodes::ERRORCODE_USER_ALREADY_LOGGED_IN, ErrorCodes::getMessage(ErrorCodes::ERRORCODE_USER_ALREADY_LOGGED_IN)); break; case 'account/success': // Success // Get account data $this->response->setInterceptOutput(false); $this->request->post = array(); $this->request->server['REQUEST_METHOD'] = 'GET'; $action = new ApiAction('account/account'); $action->execute($this->registry); $this->response->setHttpResponseCode(ApiResponse::HTTP_RESPONSE_CODE_CREATED); $this->response->output(); exit; break; } }
/** * Handle the request * * @param array $args $_REQUEST data (unused) * * @return void */ function handle($args) { parent::handle($args); switch ($this->format) { case 'xml': $this->initDocument('xml'); $this->elementStart('config'); // XXX: check that all sections and settings are legal XML elements foreach ($this->keys as $section => $settings) { $this->elementStart($section); foreach ($settings as $setting) { $value = $this->setting($section, $setting); if (is_array($value)) { $value = implode(',', $value); } else { if ($value === false || $value == '0') { $value = 'false'; } else { if ($value === true || $value == '1') { $value = 'true'; } } } // return theme logo if there's no site specific one if (empty($value)) { if ($section == 'site' && $setting == 'logo') { $value = Theme::path('logo.png'); } } $this->element($setting, null, $value); } $this->elementEnd($section); } $this->elementEnd('config'); $this->endDocument('xml'); break; case 'json': $result = array(); foreach ($this->keys as $section => $settings) { $result[$section] = array(); foreach ($settings as $setting) { $result[$section][$setting] = $this->setting($section, $setting); } } $this->initDocument('json'); $this->showJsonObjects($result); $this->endDocument('json'); break; default: $this->clientError(_('API method not found.'), 404, $this->format); break; } }
protected function handle() { parent::handle(); if ($this->emailExists($this->email)) { $email_exists = 1; } else { $email_exists = 0; } $this->initDocument('json'); $this->showJsonObjects($email_exists); $this->endDocument('json'); }
protected function handle() { parent::handle(); $nickname = $this->trimmed('nickname'); try { Nickname::normalize($nickname, true); $nickname_ok = 1; } catch (NicknameException $e) { $nickname_ok = 0; } $this->initDocument('json'); $this->showJsonObjects($nickname_ok); $this->endDocument('json'); }
/** * Handle the request * * Check whether the credentials are valid and output the result * * @param array $args $_REQUEST data (unused) * * @return void */ protected function handle() { parent::handle(); if ($_SERVER['REQUEST_METHOD'] != 'POST') { $this->clientError(_('This method requires a POST.'), 400, $this->format); return; } $user = common_check_user($this->arg('username'), $this->arg('password')); if ($user) { $user = true; } $this->initDocument('json'); $this->showJsonObjects($user); $this->endDocument('json'); }
/** * Take arguments for running, looks for an OAuth request, * and outputs basic auth header if needed * * @param array $args $_REQUEST args * * @return boolean success flag * */ protected function prepare(array $args = array()) { parent::prepare($args); // NOTE: $this->auth_user has to get set in prepare(), not handle(), // because subclasses do stuff with it in their prepares. // qvitterfix, accepts regular login session if (common_logged_in()) { $this->scoped = Profile::current(); $this->auth_user = $this->scoped->getUser(); if (!$this->auth_user->hasRight(Right::API)) { // TRANS: Authorization exception thrown when a user without API access tries to access the API. throw new AuthorizationException(_('Not allowed to use API.')); } $this->access = self::READ_WRITE; Event::handle('EndSetApiUser', array($this->auth_user)); } else { $oauthReq = $this->getOAuthRequest(); if (!$oauthReq) { if ($this->requiresAuth()) { $this->checkBasicAuthUser(true); } else { // Check to see if a basic auth user is there even // if one's not required $this->checkBasicAuthUser(false); } } else { $this->checkOAuthRequest($oauthReq); } } // NOTE: Make sure we're scoped properly based on the auths! if (isset($this->auth_user) && !empty($this->auth_user)) { $this->scoped = $this->auth_user->getProfile(); } else { $this->scoped = null; } // legacy user transferral // TODO: remove when sure no extended classes need it $this->user = $this->auth_user; // Reject API calls with the wrong access level if ($this->isReadOnly($args) == false) { if ($this->access != self::READ_WRITE) { // TRANS: Client error 401. $msg = _('API resource requires read-write access, ' . 'but you only have read access.'); $this->clientError($msg, 401); } } return true; }
function handle($args) { parent::handle($args); $notice = new Notice(); $notice->source = 'activity'; $notice->find(); while ($notice->fetch()) { $data = Notice::staticGet('id', $notice->id); $orign = clone $data; $data->content_type = NOTICE::CONTENT_TYPE_ACTIVITY; if (!$data->update($orign)) { echo 'profile update error' . $data->id; echo '<br>'; } } }
/** * Take arguments for running, looks for an OAuth request, * and outputs basic auth header if needed * * @param array $args $_REQUEST args * * @return boolean success flag * */ protected function prepare(array $args = array()) { parent::prepare($args); // NOTE: $this->scoped and $this->auth_user has to get set in // prepare(), not handle(), as subclasses use them in prepares. // Allow regular login session if (common_logged_in()) { $this->scoped = Profile::current(); $this->auth_user = $this->scoped->getUser(); if (!$this->auth_user->hasRight(Right::API)) { // TRANS: Authorization exception thrown when a user without API access tries to access the API. throw new AuthorizationException(_('Not allowed to use API.')); } // Let's run this in the same way as if we've just authenticated the user (basic/oauth auth) Event::handle('EndSetApiUser', array($this->auth_user)); $this->access = self::READ_WRITE; } else { $oauthReq = $this->getOAuthRequest(); if ($oauthReq instanceof OAuthRequest) { $this->checkOAuthRequest($oauthReq); } else { // If not using OAuth, check if there is a basic auth // and require it if the current action requires it. $this->checkBasicAuthUser($this->requiresAuth()); } // NOTE: Make sure we're scoped properly based on the auths! if (isset($this->auth_user) && $this->auth_user instanceof User) { $this->scoped = $this->auth_user->getProfile(); } else { $this->scoped = null; } } // legacy user transferral // TODO: remove when sure no extended classes need it $this->user = $this->auth_user; // Reject API calls with the wrong access level if ($this->isReadOnly($args) == false) { if ($this->access != self::READ_WRITE) { // TRANS: Client error 401. $msg = _('API resource requires read-write access, ' . 'but you only have read access.'); $this->clientError($msg, 401); } } return true; }
function handle($args) { parent::handle($args); $type = $this->trimmed('platform'); $this->password = "******"; switch ($type) { case 'sina': $this->bindSina(); break; case 'qq': $this->bindQQ(); break; default: $this->clientError(_('invalid platform type')); return; break; } header("Location: " . REDIREDT_WEB_URL); }
function handle($args) { parent::handle($args); $profile = new Profile(); $profile->find(); $server = common_config('site', 'server'); $path = common_config('site', 'path'); $mainpath = 'http://' . $server . '/' . $path . '/index.php/'; //'http://192.168.1.123/statusnet_copy/index.php/'; while ($profile->fetch()) { //echo $this->ID; //$store[] = $object; // builds an array of object lines. $nickname = $profile->nickname; $profileurl = $mainpath . $nickname; $data = Profile::staticGet('id', $profile->id); $orign = clone $data; $data->profileurl = $profileurl; if (!$data->update($orign)) { echo 'profile update error' . $data->id; echo '<br>'; } } }
function handle($args) { parent::handle($args); $auth = new ApiAuthAction(); $auth->checkBasicAuthUser(false); $this->user = $auth->auth_user; $type = $this->trimmed('type'); $hotResult = null; switch ($type) { case 'tags': $hotResult = $this->getHotTags(); break; case 'users': $hotResult = $this->getHotUsers(); break; default: $this->clientError(_('invalid type')); return; break; } $this->initDocument('json'); $this->showJsonObjects($hotResult); $this->endDocument('json'); }
function showQvitter() { $logged_in_user_nickname = ''; $logged_in_user_obj = false; $logged_in_user = common_current_user(); if ($logged_in_user) { $logged_in_user_nickname = $logged_in_user->nickname; $logged_in_user_obj = ApiAction::twitterUserArray($logged_in_user->getProfile()); } $registrationsclosed = false; if (common_config('site', 'closed') == 1 || common_config('site', 'inviteonly') == 1) { $registrationsclosed = true; } // check if the client's ip address is blocked for registration if (is_array(QvitterPlugin::settings("blocked_ips"))) { $client_ip_is_blocked = in_array($_SERVER['REMOTE_ADDR'], QvitterPlugin::settings("blocked_ips")); } $sitetitle = common_config('site', 'name'); $siterootdomain = common_config('site', 'server'); $qvitterpath = Plugin::staticPath('Qvitter', ''); $apiroot = common_path('api/', StatusNet::isHTTPS()); $attachmentroot = common_path('attachment/', StatusNet::isHTTPS()); $instanceurl = common_path('', StatusNet::isHTTPS()); // user's browser's language setting $user_browser_language = 'en'; // use english if we can't find the browser language if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $user_browser_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } common_set_returnto(''); // forget this // if this is a profile we add a link header for LRDD Discovery (see WebfingerPlugin.php) if (substr_count($_SERVER['REQUEST_URI'], '/') == 1) { $nickname = substr($_SERVER['REQUEST_URI'], 1); if (preg_match("/^[a-zA-Z0-9]+\$/", $nickname) == 1) { $acct = 'acct:' . $nickname . '@' . common_config('site', 'server'); $url = common_local_url('webfinger') . '?resource=' . $acct; foreach (array(Discovery::JRD_MIMETYPE, Discovery::XRD_MIMETYPE) as $type) { header('Link: <' . $url . '>; rel="' . Discovery::LRDD_REL . '"; type="' . $type . '"'); } } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title><?php print $sitetitle; ?> </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0"> <link rel="stylesheet" type="text/css" href="<?php print $qvitterpath; ?> css/qvitter.css?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/css/qvitter.css')); ?> " /> <link rel="stylesheet" type="text/css" href="<?php print $qvitterpath; ?> css/jquery.minicolors.css" /> <link rel="shortcut icon" type="image/x-icon" href="<?php print $qvitterpath; print QvitterPlugin::settings("favicon"); ?> "> <?php // if qvitter is a webapp and this is a users url we add feeds if (substr_count($_SERVER['REQUEST_URI'], '/') == 1) { $nickname = substr($_SERVER['REQUEST_URI'], 1); if (preg_match("/^[a-zA-Z0-9]+\$/", $nickname) == 1) { $user = User::getKV('nickname', $nickname); if (!isset($user->id)) { //error_log("QVITTER: Could not get user id for user with nickname: $nickname – REQUEST_URI: ".$_SERVER['REQUEST_URI']); } else { print '<link title="Notice feed for ' . $nickname . ' (Activity Streams JSON)" type="application/stream+json" href="' . $instanceurl . 'api/statuses/user_timeline/' . $user->id . '.as" rel="alternate">' . "\n"; print ' <link title="Notice feed for ' . $nickname . ' (RSS 1.0)" type="application/rdf+xml" href="' . $instanceurl . $nickname . '/rss" rel="alternate">' . "\n"; print ' <link title="Notice feed for ' . $nickname . ' (RSS 2.0)" type="application/rss+xml" href="' . $instanceurl . 'api/statuses/user_timeline/' . $user->id . '.rss" rel="alternate">' . "\n"; print ' <link title="Notice feed for ' . $nickname . ' (Atom)" type="application/atom+xml" href="' . $instanceurl . 'api/statuses/user_timeline/' . $user->id . '.atom" rel="alternate">' . "\n"; print ' <link title="FOAF for ' . $nickname . '" type="application/rdf+xml" href="' . $instanceurl . $nickname . '/foaf" rel="meta">' . "\n"; print ' <link href="' . $instanceurl . $nickname . '/microsummary" rel="microsummary">' . "\n"; // maybe openid if (array_key_exists('OpenID', StatusNet::getActivePlugins())) { print ' <link rel="openid2.provider" href="' . common_local_url('openidserver') . '"/>' . "\n"; print ' <link rel="openid2.local_id" href="' . $user->getProfile()->profileurl . '"/>' . "\n"; print ' <link rel="openid2.server" href="' . common_local_url('openidserver') . '"/>' . "\n"; print ' <link rel="openid2.delegate" href="' . $user->getProfile()->profileurl . '"/>' . "\n"; } } } } elseif (substr($_SERVER['REQUEST_URI'], 0, 7) == '/group/') { $group_id_or_name = substr($_SERVER['REQUEST_URI'], 7); if (stristr($group_id_or_name, '/id')) { $group_id_or_name = substr($group_id_or_name, 0, strpos($group_id_or_name, '/id')); $group = User_group::getKV('id', $group_id_or_name); if ($group instanceof User_group) { $group_name = $group->nickname; $group_id = $group_id_or_name; } } else { $group = Local_group::getKV('nickname', $group_id_or_name); if ($group instanceof Local_group) { $group_id = $group->group_id; $group_name = $group_id_or_name; } } if (preg_match("/^[a-zA-Z0-9]+\$/", $group_id_or_name) == 1 && isset($group_name) && isset($group_id)) { ?> <link rel="alternate" href="<?php echo htmlspecialchars(common_local_url('ApiTimelineGroup', array('id' => $group_id, 'format' => 'as'))); ?> " type="application/stream+json" title="Notice feed for '<?php echo htmlspecialchars($group_name); ?> ' group (Activity Streams JSON)" /> <link rel="alternate" href="<?php echo htmlspecialchars(common_local_url('grouprss', array('nickname' => $group_name))); ?> " type="application/rdf+xml" title="Notice feed for '<?php echo htmlspecialchars($group_name); ?> ' group (RSS 1.0)" /> <link rel="alternate" href="<?php echo htmlspecialchars(common_local_url('ApiTimelineGroup', array('id' => $group_id, 'format' => 'rss'))); ?> " type="application/rss+xml" title="Notice feed for '<?php echo htmlspecialchars($group_name); ?> ' group (RSS 2.0)" /> <link rel="alternate" href="<?php echo htmlspecialchars(common_local_url('ApiTimelineGroup', array('id' => $group_id, 'format' => 'atom'))); ?> " type="application/atom+xml" title="Notice feed for '<?php echo htmlspecialchars($group_name); ?> ' group (Atom)" /> <link rel="meta" href="<?php echo htmlspecialchars(common_local_url('foafgroup', array('nickname' => $group_name))); ?> " type="application/rdf+xml" title="FOAF for '<?php echo htmlspecialchars($group_name); ?> ' group" /> <?php } } // oembed discovery for local notices if (substr($_SERVER['REQUEST_URI'], 0, 8) == '/notice/' && $this->arg('notice') && array_key_exists('Oembed', StatusNet::getActivePlugins())) { $notice = Notice::getKV('id', $this->arg('notice')); if ($notice instanceof Notice) { if ($notice->isLocal()) { try { $notice_url = $notice->getUrl(); print '<link title="oEmbed" href="' . common_local_url('apiqvitteroembednotice', array('id' => $notice->id, 'format' => 'json')) . '?url=' . urlencode($notice_url) . '" type="application/json+oembed" rel="alternate">'; print '<link title="oEmbed" href="' . common_local_url('apiqvitteroembednotice', array('id' => $notice->id, 'format' => 'xml')) . '?url=' . urlencode($notice_url) . '" type="application/xml+oembed" rel="alternate">'; } catch (Exception $e) { // } } } } ?> <script> /* @licstart The following is the entire license notice for the JavaScript code in this page. Copyright (C) 2015 Hannes Mannerheim and other contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. @licend The above is the entire license notice for the JavaScript code in this page. */ window.usersLanguageCode = <?php print json_encode($user_browser_language); ?> ; window.usersLanguageNameInEnglish = <?php print json_encode(Locale::getDisplayLanguage($user_browser_language, 'en')); ?> ; window.englishLanguageData = <?php print file_get_contents(QVITTERDIR . '/locale/en.json'); ?> ; window.defaultAvatarStreamSize = <?php print json_encode(Avatar::defaultImage(AVATAR_STREAM_SIZE)); ?> ; window.defaultAvatarProfileSize = <?php print json_encode(Avatar::defaultImage(AVATAR_PROFILE_SIZE)); ?> ; window.textLimit = <?php print json_encode((int) common_config('site', 'textlimit')); ?> ; window.registrationsClosed = <?php print json_encode($registrationsclosed); ?> ; window.thisSiteThinksItIsHttpButIsActuallyHttps = <?php // this is due to a crazy setup at quitter.se, sorry about that $siteSSL = common_config('site', 'ssl'); if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' && $siteSSL == 'never') { $this_site_thinks_it_is_http_but_is_actually_https = true; print 'true'; } else { $this_site_thinks_it_is_http_but_is_actually_https = false; print 'false'; } ?> ; window.siteTitle = <?php print json_encode($sitetitle); ?> ; window.loggedIn = <?php $logged_in_user_json = json_encode($logged_in_user_obj); $logged_in_user_json = str_replace('http:\\/\\/quitter.se\\/', 'https:\\/\\/quitter.se\\/', $logged_in_user_json); print $logged_in_user_json; ?> ; window.timeBetweenPolling = <?php print QvitterPlugin::settings("timebetweenpolling"); ?> ; window.apiRoot = <?php $api_root = common_path("api/", StatusNet::isHTTPS()); if ($this_site_thinks_it_is_http_but_is_actually_https) { $api_root = str_replace('http://', 'https://', $api_root); } print '\'' . $api_root . '\''; ?> ; window.fullUrlToThisQvitterApp = '<?php print $qvitterpath; ?> '; window.siteRootDomain = '<?php print $siterootdomain; ?> '; window.siteInstanceURL = '<?php print $instanceurl; ?> '; window.defaultLinkColor = '<?php print QvitterPlugin::settings("defaultlinkcolor"); ?> '; window.defaultBackgroundColor = '<?php print QvitterPlugin::settings("defaultbackgroundcolor"); ?> '; window.siteBackground = '<?php print QvitterPlugin::settings("sitebackground"); ?> '; window.enableWelcomeText = <?php print json_encode(QvitterPlugin::settings("enablewelcometext")); ?> ; window.customWelcomeText = <?php print json_encode(QvitterPlugin::settings("customwelcometext")); ?> ; window.urlShortenerAPIURL = '<?php print QvitterPlugin::settings("urlshortenerapiurl"); ?> '; window.urlShortenerSignature = '<?php print QvitterPlugin::settings("urlshortenersignature"); ?> '; window.commonSessionToken = '<?php print common_session_token(); ?> '; window.siteMaxThumbnailSize = <?php print common_config('thumbnail', 'maxsize'); ?> ; window.siteAttachmentURLBase = '<?php print $attachmentroot; ?> '; window.siteEmail = '<?php print common_config('site', 'email'); ?> '; window.siteLicenseTitle = '<?php print common_config('license', 'title'); ?> '; window.siteLicenseURL = '<?php print common_config('license', 'url'); ?> '; window.customTermsOfUse = <?php print json_encode(QvitterPlugin::settings("customtermsofuse")); ?> ; window.siteLocalOnlyDefaultPath = <?php print common_config('public', 'localonly') ? 'true' : 'false'; ?> ; <?php // Get all topics in Qvitter's namespace in Profile_prefs if ($logged_in_user) { try { $qvitter_profile_prefs = Profile_prefs::getNamespace(Profile::current(), 'qvitter'); } catch (Exception $e) { $qvitter_profile_prefs = array(); } if (count($qvitter_profile_prefs) > 0) { $topic_data = new stdClass(); foreach ($qvitter_profile_prefs as $pref) { $topic_data->{$pref->topic} = $pref->data; } print 'window.qvitterProfilePrefs = ' . json_encode($topic_data) . ';'; } else { print 'window.qvitterProfilePrefs = false;'; } } ?> // available language files and their last update time window.availableLanguages = {<?php // scan all files in the locale directory and create a json object with their change date added $available_languages = array_diff(scandir(QVITTERDIR . '/locale'), array('..', '.')); foreach ($available_languages as $lankey => $lan) { $lancode = substr($lan, 0, strpos($lan, '.')); // for the paranthesis containing language region to work with rtl in ltr enviroment and vice versa, we add a // special rtl or ltr html char after the paranthesis // this list is incomplete, but if any rtl language gets a regional translation, it will probably be arabic $rtl_or_ltr_special_char = '‎'; $base_lancode = substr($lancode, 0, strpos($lancode, '_')); if ($base_lancode == 'ar' || $base_lancode == 'fa' || $base_lancode == 'he') { $rtl_or_ltr_special_char = '‏'; } // also make an array with all language names, to use for generating menu $languagecodesandnames[$lancode]['english_name'] = Locale::getDisplayLanguage($lancode, 'en'); $languagecodesandnames[$lancode]['name'] = Locale::getDisplayLanguage($lancode, $lancode); if (Locale::getDisplayRegion($lancode, $lancode)) { $languagecodesandnames[$lancode]['name'] .= ' (' . Locale::getDisplayRegion($lancode, $lancode) . ')' . $rtl_or_ltr_special_char; } // ahorita meme only on quitter.es if ($lancode == 'es_ahorita') { if ($siterootdomain == 'quitter.es') { $languagecodesandnames[$lancode]['name'] = 'español (ahorita)'; } else { unset($available_languages[$lankey]); unset($languagecodesandnames[$lancode]); continue; } } print "\n" . ' "' . $lancode . '": "' . $lan . '?changed=' . date('YmdHis', filemtime(QVITTERDIR . '/locale/' . $lan)) . '",'; } ?> }; </script> <?php // event for other plugins to use to add head elements to qvitter Event::handle('QvitterEndShowHeadElements', array($this)); ?> </head> <body style="background-color:<?php print QvitterPlugin::settings("defaultbackgroundcolor"); ?> "> <?php // add an accessibility toggle link to switch to standard UI, if we're logged in if ($logged_in_user) { print '<a id="accessibility-toggle-link" href="#"></a>'; } ?> <input id="upload-image-input" class="upload-image-input" type="file" name="upload-image-input"> <div class="topbar"> <a href="<?php // if we're logged in, the logo links to the home stream // if logged out it links to the site's public stream if ($logged_in_user) { print $instanceurl . $logged_in_user_nickname . '/all'; } else { print $instanceurl . 'main/public'; } ?> "><div id="logo"></div></a><?php // menu for logged in users if ($logged_in_user) { ?> <a id="settingslink"> <div class="dropdown-toggle"> <div class="nav-session" style="background-image:url('<?php print htmlspecialchars($logged_in_user_obj['profile_image_url_profile_size']); ?> ')"></div> </div> </a><?php } ?> <div id="top-compose" class="hidden"></div> <ul class="quitter-settings dropdown-menu"> <li class="dropdown-caret right"> <span class="caret-outer"></span> <span class="caret-inner"></span> </li> <li class="fullwidth"><a id="logout"></a></li> <li class="fullwidth dropdown-divider"></li> <li class="fullwidth"><a id="edit-profile-header-link"></a></li> <li class="fullwidth"><a id="settings" href="<?php print $instanceurl; ?> settings/profile" donthijack></a></li> <li class="fullwidth"><a id="faq-link"></a></li> <li class="fullwidth"><a id="shortcuts-link"></a></li> <?php if (common_config('invite', 'enabled') && !common_config('site', 'closed')) { ?> <li class="fullwidth"><a id="invite-link" href="<?php print $instanceurl; ?> main/invite"></a></li> <?php } ?> <li class="fullwidth"><a id="classic-link"></a></li> <li class="fullwidth language dropdown-divider"></li> <?php // languages foreach ($languagecodesandnames as $lancode => $lan) { print '<li class="language"><a class="language-link" title="' . $lan['english_name'] . '" data-lang-code="' . $lancode . '">' . $lan['name'] . '</a></li>'; } ?> <li class="fullwidth language dropdown-divider"></li> <li class="fullwidth"><a href="https://git.gnu.io/h2p/Qvitter/tree/master/locale" target="_blank" id="add-edit-language-link"></a></li> </ul> <div class="global-nav"> <div class="global-nav-inner"> <div class="container"> <div id="search"> <input type="text" spellcheck="false" autocomplete="off" name="q" placeholder="Sök" id="search-query" class="search-input"> <span class="search-icon"> <button class="icon nav-search" type="submit" tabindex="-1"> <span> Sök </span> </button> </span> </div> <ul class="language-dropdown"> <li class="dropdown"> <a class="dropdown-toggle"> <small></small> <span class="current-language"></span> <b class="caret"></b> </a> <ul class="dropdown-menu"> <li class="dropdown-caret right"> <span class="caret-outer"></span> <span class="caret-inner"></span> </li> <?php // languages foreach ($languagecodesandnames as $lancode => $lan) { print '<li><a class="language-link" title="' . $lan['english_name'] . '" data-lang-code="' . $lancode . '">' . $lan['name'] . '</a></li>'; } ?> </ul> </li> </ul> </div> </div> </div> </div> <div id="no-js-error">Please enable javascript to use this site.<script>var element = document.getElementById('no-js-error'); element.parentNode.removeChild(element);</script></div> <div id="page-container"> <?php $site_notice = common_config('site', 'notice'); if (!empty($site_notice)) { print '<div id="site-notice">' . common_config('site', 'notice') . '</div>'; } // welcome text, login and register container if logged out if ($logged_in_user === null) { ?> <div class="front-welcome-text <?php if ($registrationsclosed) { print 'registrations-closed'; } ?> "></div> <div id="login-register-container"> <div id="login-content"> <form id="form_login" class="form_settings" action="<?php print common_local_url('qvitterlogin'); ?> " method="post"> <div id="username-container"> <input id="nickname" name="nickname" type="text" value="<?php print $logged_in_user_nickname; ?> " tabindex="1" /> </div> <table class="password-signin"><tbody><tr> <td class="flex-table-primary"> <div class="placeholding-input"> <input id="password" name="password" type="password" tabindex="2" value="" /> </div> </td> <td class="flex-table-secondary"> <button class="submit" type="submit" id="submit-login" tabindex="4"></button> </td> </tr></tbody></table> <div id="remember-forgot"> <input type="checkbox" id="rememberme" name="rememberme" value="yes" tabindex="3" checked="checked"> <span id="rememberme_label"></span> · <a id="forgot-password" href="<?php print $instanceurl; ?> main/recoverpassword" ></a> <input type="hidden" id="token" name="token" value="<?php print common_session_token(); ?> "> <?php if (array_key_exists('OpenID', StatusNet::getActivePlugins())) { print '<a href="' . $instanceurl . 'main/openid" id="openid-login" title="OpenID" donthijack>OpenID</a>'; } ?> </div> </form> </div> <?php if ($registrationsclosed === false && $client_ip_is_blocked === false) { ?> <div class="front-signup"> <h2></h2> <div class="signup-input-container"><input placeholder="" type="text" name="user[name]" autocomplete="off" class="text-input" id="signup-user-name"></div> <div class="signup-input-container"><input placeholder="" type="text" name="user[email]" autocomplete="off" id="signup-user-email"></div> <div class="signup-input-container"><input placeholder="" type="password" name="user[user_password]" class="text-input" id="signup-user-password"></div> <button id="signup-btn-step1" class="signup-btn" type="submit"></button> </div> <div id="other-servers-link"></div><?php } ?> <div id="qvitter-notice-logged-out"><?php print common_config('site', 'qvitternoticeloggedout'); ?> </div> </div><?php } // box containing the logged in users queet count and compose form if ($logged_in_user) { ?> <div id="user-container" style="display:none;"> <div id="user-header" style="background-image:url('<?php print htmlspecialchars($logged_in_user_obj['cover_photo']); ?> ')"> <div id="mini-edit-profile-button"></div> <div class="profile-header-inner-overlay"></div> <div id="user-avatar-container"><img id="user-avatar" src="<?php print htmlspecialchars($logged_in_user_obj['profile_image_url_profile_size']); ?> " /></div> <div id="user-name"><?php print htmlspecialchars($logged_in_user_obj['name']); ?> </div> <div id="user-screen-name"><?php print htmlspecialchars($logged_in_user_obj['screen_name']); ?> </div> </div> <ul id="user-body"> <li><a href="<?php print $instanceurl . $logged_in_user->nickname; ?> " id="user-queets"><span class="label"></span><strong><?php print $logged_in_user_obj['statuses_count']; ?> </strong></a></li> <li><a href="<?php print $instanceurl . $logged_in_user->nickname; ?> /subscriptions" id="user-following"><span class="label"></span><strong><?php print $logged_in_user_obj['friends_count']; ?> </strong></a></li> <li><a href="<?php print $instanceurl . $logged_in_user->nickname; ?> /groups" id="user-groups"><span class="label"></span><strong><?php print $logged_in_user_obj['groups_count']; ?> </strong></a></li> </ul> <div id="user-footer"> <div id="user-footer-inner"> <div id="queet-box" class="queet-box queet-box-syntax" data-start-text=""></div> <div class="syntax-middle"></div> <div class="syntax-two" contenteditable="true"></div> <div class="mentions-suggestions"></div> <div class="queet-toolbar"> <div class="queet-box-extras"> <button class="upload-image"></button> <button class="shorten disabled">URL</button> </div> <div class="queet-button"> <span class="queet-counter"></span> <button></button> </div> </div> </div> </div> <div id="main-menu" class="menu-container"><?php if ($logged_in_user) { ?> <a href="<?php print $instanceurl . $logged_in_user->nickname; ?> /all" class="stream-selection friends-timeline"><i class="chev-right"></i></a> <a href="<?php print $instanceurl . $logged_in_user->nickname; ?> /notifications" class="stream-selection notifications"><span id="unseen-notifications"></span><i class="chev-right"></i></a> <a href="<?php print $instanceurl . $logged_in_user->nickname; ?> /replies" class="stream-selection mentions"><i class="chev-right"></i></a> <a href="<?php print $instanceurl . $logged_in_user->nickname; ?> " class="stream-selection my-timeline"><i class="chev-right"></i></a> <a href="<?php print $instanceurl . $logged_in_user->nickname; ?> /favorites" class="stream-selection favorites"><i class="chev-right"></i></a> <a href="<?php print $instanceurl; ?> main/public" class="stream-selection public-timeline"><i class="chev-right"></i></a> <a href="<?php print $instanceurl; ?> main/all" class="stream-selection public-and-external-timeline"><i class="chev-right"></i></a> <?php } ?> </div> <div class="menu-container" id="bookmark-container"></div> <div class="menu-container" id="history-container"></div> <div id="clear-history"></div> <div id="qvitter-notice"><?php print common_config('site', 'qvitternotice'); ?> </div> </div><?php } ?> <div id="feed"> <div id="feed-header"> <div id="feed-header-inner"> <h2></h2> <div class="reload-stream"></div> </div> </div> <div id="new-queets-bar-container" class="hidden"><div id="new-queets-bar"></div></div> <div id="feed-body"></div> </div> <div id="hidden-html"><?php // adds temporary support for microformats and linkbacks on the notice page if (substr($_SERVER['REQUEST_URI'], 0, 8) == '/notice/' && $this->arg('notice')) { echo '<ol class="notices xoxo">'; if ($notice instanceof Notice) { $widget = new NoticeListItem($notice, $this); $widget->show(); $this->flush(); } echo '</ol>'; } Event::handle('QvitterHiddenHtml', array($this)); ?> </div> <div id="footer"><div id="footer-spinner-container"></div></div> </div> <script type="text/javascript" src="<?php print $qvitterpath; ?> js/lib/jquery-2.1.4.min.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/lib/jquery-2.1.4.min.js')); ?> "></script> <script type="text/javascript" src="<?php print $qvitterpath; ?> js/lib/jquery-ui.min.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/lib/jquery-ui.min.js')); ?> "></script> <script type="text/javascript" src="<?php print $qvitterpath; ?> js/lib/jquery.minicolors.min.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/lib/jquery.minicolors.min.js')); ?> "></script> <script type="text/javascript" src="<?php print $qvitterpath; ?> js/lib/jquery.jWindowCrop.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/lib/jquery.jWindowCrop.js')); ?> "></script> <script type="text/javascript" src="<?php print $qvitterpath; ?> js/lib/load-image.min.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/lib/load-image.min.js')); ?> "></script> <script type="text/javascript" src="<?php print $qvitterpath; ?> js/lib/xregexp-all-3.0.0-pre.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/lib/xregexp-all-3.0.0-pre.js')); ?> "></script> <script type="text/javascript" src="<?php print $qvitterpath; ?> js/lib/lz-string.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/lib/lz-string.js')); ?> "></script> <script type="text/javascript" src="<?php print $qvitterpath; ?> js/lib/bowser.min.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/lib/bowser.min.js')); ?> "></script> <script charset="utf-8" type="text/javascript" src="<?php print $qvitterpath; ?> js/dom-functions.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/dom-functions.js')); ?> "></script> <script charset="utf-8" type="text/javascript" src="<?php print $qvitterpath; ?> js/misc-functions.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/misc-functions.js')); ?> "></script> <script charset="utf-8" type="text/javascript" src="<?php print $qvitterpath; ?> js/ajax-functions.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/ajax-functions.js')); ?> "></script> <script charset="utf-8" type="text/javascript" src="<?php print $qvitterpath; ?> js/stream-router.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/stream-router.js')); ?> "></script> <script charset="utf-8" type="text/javascript" src="<?php print $qvitterpath; ?> js/qvitter.js?changed=<?php print date('YmdHis', filemtime(QVITTERDIR . '/js/qvitter.js')); ?> "></script> <?php // event for other plugins to add scripts to qvitter Event::handle('QvitterEndShowScripts', array($this)); // we might have custom javascript in the config file that we want to add if (QvitterPlugin::settings('js')) { print '<script type="text/javascript">' . QvitterPlugin::settings('js') . '</script>'; } ?> <div id="dynamic-styles"> <style> a, a:visited, a:active, ul.stats li:hover a, ul.stats li:hover a strong, #user-body a:hover div strong, #user-body a:hover div div, .permalink-link:hover, .stream-item.expanded > .queet .stream-item-expand, .stream-item-footer .with-icn .requeet-text a b:hover, .queet-text span.attachment.more, .stream-item-header .created-at a:hover, .stream-item-header a.account-group:hover .name, .queet:hover .stream-item-expand, .show-full-conversation:hover, #new-queets-bar, .menu-container div, .cm-mention, .cm-tag, .cm-group, .cm-url, .cm-email, div.syntax-middle span, #user-body strong, ul.stats, .stream-item:not(.temp-post) ul.queet-actions li .icon:not(.is-mine):hover:before, .show-full-conversation, #user-body #user-queets:hover .label, #user-body #user-groups:hover .label, #user-body #user-following:hover .label, ul.stats a strong, .queet-box-extras button, #openid-login:hover:after, .post-to-group { color:/*COLORSTART*/<?php print QvitterPlugin::settings("defaultlinkcolor"); ?> /*COLOREND*/; } #unseen-notifications, .stream-item.notification.not-seen > .queet::before, #top-compose, #logo, .queet-toolbar button, #user-header, .profile-header-inner, .topbar, .menu-container, .member-button.member, .external-follow-button.following, .qvitter-follow-button.following, .save-profile-button, .crop-and-save-button, .topbar .global-nav.show-logo:before, .topbar .global-nav.pulse-logo:before, .dropdown-menu li:not(.dropdown-caret) a:hover { background-color:/*BACKGROUNDCOLORSTART*/<?php print QvitterPlugin::settings("defaultlinkcolor"); ?> /*BACKGROUNDCOLOREND*/; } .queet-box-syntax[contenteditable="true"]:focus, .stream-item.selected-by-keyboard::before { border-color:/*BORDERCOLORSTART*/#999999/*BORDERCOLOREND*/; } #user-footer-inner, .inline-reply-queetbox, #popup-faq #faq-container p.indent { background-color:/*LIGHTERBACKGROUNDCOLORSTART*/rgb(205,230,239)/*LIGHTERBACKGROUNDCOLOREND*/; } #user-footer-inner, .queet-box, .queet-box-syntax[contenteditable="true"], .inline-reply-queetbox, span.inline-reply-caret, .stream-item.expanded .stream-item.first-visible-after-parent, #popup-faq #faq-container p.indent, .post-to-group, .quoted-notice:hover, .oembed-item:hover, .stream-item:hover:not(.expanded) .quoted-notice:hover, .stream-item:hover:not(.expanded) .oembed-item:hover { border-color:/*LIGHTERBORDERCOLORSTART*/rgb(155,206,224)/*LIGHTERBORDERCOLOREND*/; } span.inline-reply-caret .caret-inner { border-bottom-color:/*LIGHTERBORDERBOTTOMCOLORSTART*/rgb(205,230,239)/*LIGHTERBORDERBOTTOMCOLOREND*/; } .modal-close .icon, .chev-right, .close-right, button.icon.nav-search, .member-button .join-text i, .external-member-button .join-text i, .external-follow-button .follow-text i, .qvitter-follow-button .follow-text i, #logo, .upload-cover-photo, .upload-avatar, .upload-background-image, button.shorten i, .reload-stream, .topbar .global-nav:before, .stream-item.notification.repeat .dogear, .stream-item.notification.like .dogear, .ostatus-link, .close-edit-profile-window { background-image: url("<?php print QvitterPlugin::settings("sprite"); ?> "); background-size: 500px 1329px; } @media (max-width: 910px) { #search-query, .menu-container a, .menu-container a.current, .stream-selection.friends-timeline:after, .stream-selection.notifications:after, .stream-selection.my-timeline:after, .stream-selection.public-timeline:after { background-image: url("<?php print QvitterPlugin::settings("sprite"); ?> "); background-size: 500px 1329px; } } </style> </div> </body> </html> <?php }
/** * Handle input, produce output * * Switches on request method; either shows the form or handles its input. * * @param array $args $_REQUEST data * * @return void */ function handle($args) { parent::handle($args); self::cleanRequest(); }
function handle($args) { parent::handle($args); $this->checkLogin(); }
function handle($args) { parent::handle($args); if (!Event::handle('StartRegistrationTry', array($this))) { return; } //database use nickname we change it into username for more //easier to understand $nickname = $this->trimmed('username'); $email = $this->trimmed('email'); $fullname = $this->trimmed('nickname'); $homepage = NULL; //$this->trimmed('homepage'); $bio = $this->trimmed('description'); $location = $this->trimmed('location'); $genderStr = $this->trimmed('gender'); if (!empty($bio)) { if (mb_strlen($bio) > self::MAX_DESCRIPTION) { $this->clientError(_('description must be set less than 70')); return; } } if (empty($email) && empty($nickname)) { $this->clientError(_('must set nickname or email')); return; } if (empty($nickname) && !empty($email)) { $user_email_check = User::staticGet('email', $email); if ($user_email_check) { $this->clientError(_('email exists')); return; } $nickname = $this->nicknameFromEmail($email); } // We don't trim these... whitespace is OK in a password! $password = $this->arg('password'); try { $nickname = Nickname::normalize($nickname); } catch (NicknameException $e) { $this->clientError(_('username error')); return; } if (!User::allowed_nickname($nickname)) { // TRANS: Client error displayed when trying to create a new user with an invalid username. $this->clientError(_('username bad'), 400); return; } $gender = 0; if (!empty($genderStr)) { if ($genderStr == 'f') { $gender = 1; } else { if ($genderStr == 'm') { $gender = 2; } } } $user_check = User::staticGet('nickname', $nickname); if ($user_check) { $this->clientError('username exists', 400); return; } if (empty($password)) { $this->clientError(_('password empty'), 400); return; } //no need to confirmed email $email_confirmed = !empty($email); $user = User::register(array('nickname' => $nickname, 'password' => $password, 'email' => $email, 'fullname' => $fullname, 'homepage' => $homepage, 'bio' => $bio, 'location' => $location, 'code' => $code, 'gender' => $gender, 'email_confirmed' => $email_confirmed)); if (!$user) { // TRANS: Form validation error displayed when trying to register with an invalid username or password. $this->clientError(_('Invalid username or password.', 400, 'json')); return; } // success! if (!common_set_user($user)) { // TRANS: Server error displayed when saving fails during user registration. $this->serverError(_('Error setting user.', '500', 'json')); return; } // this is a real login common_real_login(true); if ($this->boolean('rememberme')) { common_debug('Adding rememberme cookie for ' . $nickname); common_rememberme($user); } // Re-init language env in case it changed (not yet, but soon) common_init_language(); Event::handle('EndRegistrationTry', array($this)); $resultUser = $this->twitterUserArray($user->getProfile(), false); $this->initDocument('json'); $this->showJsonObjects($resultUser); $this->endDocument('json'); }
/** * Handle a request * * @param array $args Arguments from $_REQUEST * * @return void */ function handle($args) { parent::handle($args); $this->showAtom(); }
protected function prepare(array $args = array()) { self::cleanRequest(); return parent::prepare($args); }
/** * Handle a request * * @param array $args Arguments from $_REQUEST * * @return void */ function handle($args) { parent::handle($args); $this->showTrends(); }
/** * Handle the request * * @param array $args $_REQUEST data (unused) * * @return void */ protected function handle() { parent::handle(); $noticeurl = common_path('notice/', StatusNet::isHTTPS()); $instanceurl = common_path('', StatusNet::isHTTPS()); // remove protocol for the comparison below $noticeurl_wo_protocol = preg_replace('(^https?://)', '', $noticeurl); $instanceurl_wo_protocol = preg_replace('(^https?://)', '', $instanceurl); $url_wo_protocol = preg_replace('(^https?://)', '', $this->url); // find local notice if (strpos($url_wo_protocol, $noticeurl_wo_protocol) === 0) { $possible_notice_id = str_replace($noticeurl_wo_protocol, '', $url_wo_protocol); if (ctype_digit($possible_notice_id)) { $notice = Notice::getKV('id', $possible_notice_id); } else { $this->clientError("Notice not found.", 404); } } if (!$notice instanceof Notice) { // TRANS: Client error displayed in oEmbed action when notice not found. // TRANS: %s is a notice. $this->clientError(sprintf(_("Notice %s not found."), $this->id), 404); } $profile = $notice->getProfile(); if (!$profile instanceof Profile) { // TRANS: Server error displayed in oEmbed action when notice has not profile. $this->serverError(_('Notice has no profile.'), 500); } $authorname = $profile->getFancyName(); $oembed = array(); $oembed['version'] = '1.0'; $oembed['provider_name'] = common_config('site', 'name'); $oembed['provider_url'] = common_root_url(); $oembed['type'] = 'link'; // TRANS: oEmbed title. %1$s is the author name, %2$s is the creation date. $oembed['title'] = ApiAction::dateTwitter($notice->created) . ' (Qvitter)'; $oembed['author_name'] = $authorname; $oembed['author_url'] = $profile->profileurl; $oembed['url'] = $notice->getUrl(); $oembed['html'] = $notice->getRendered(); // maybe add thumbnail $attachments = $notice->attachments(); if (!empty($attachments)) { foreach ($attachments as $attachment) { if (is_object($attachment)) { try { $thumb = $attachment->getThumbnail(); } catch (ServerException $e) { // } if (!empty($thumb) && method_exists('File_thumbnail', 'url')) { try { $thumb_url = File_thumbnail::url($thumb->filename); $oembed['thumbnail_url'] = $thumb_url; break; // only first one } catch (ClientException $e) { // } } } } } if ($this->format == 'json') { $this->initDocument('json'); print json_encode($oembed); $this->endDocument('json'); } elseif ($this->format == 'xml') { $this->initDocument('xml'); $this->elementStart('oembed'); foreach (array('version', 'type', 'provider_name', 'provider_url', 'title', 'author_name', 'author_url', 'url', 'html') as $key) { if (isset($oembed[$key]) && $oembed[$key] != '') { $this->element($key, null, $oembed[$key]); } } $this->elementEnd('oembed'); $this->endDocument('xml'); } else { $this->serverError(sprintf(_('Format %s not supported.'), $this->format), 501); } }
/** * Handle the request * * @param array $args $_REQUEST data (unused) * * @return void */ protected function handle() { parent::handle(); $nickname = $this->trimmed('nickname'); $email = $this->trimmed('email'); $fullname = $this->trimmed('fullname'); $homepage = $this->trimmed('homepage'); $bio = $this->trimmed('bio'); $location = $this->trimmed('location'); // We don't trim these... whitespace is OK in a password! $password = $this->arg('password'); $confirm = $this->arg('confirm'); if (empty($this->code)) { common_ensure_session(); if (array_key_exists('invitecode', $_SESSION)) { $this->code = $_SESSION['invitecode']; } } if (common_config('site', 'inviteonly') && empty($this->code)) { // TRANS: Client error displayed when trying to register to an invite-only site without an invitation. $this->clientError(_('Sorry, only invited people can register.'), 401); } if (!empty($this->code)) { $this->invite = Invitation::getKV('code', $this->code); if (empty($this->invite)) { // TRANS: Client error displayed when trying to register to an invite-only site without a valid invitation. $this->clientError(_('Sorry, invalid invitation code.'), 401); } // Store this in case we need it common_ensure_session(); $_SESSION['invitecode'] = $this->code; } // Input scrubbing try { $nickname = Nickname::normalize($nickname, true); } catch (NicknameException $e) { // clientError handles Api exceptions with various formats and stuff $this->clientError($e->getMessage(), $e->getCode()); } $email = common_canonical_email($email); if ($email && !Validate::email($email, common_config('email', 'check_domain'))) { // TRANS: Form validation error displayed when trying to register without a valid e-mail address. $this->clientError(_('Not a valid email address.'), 400); } else { if ($this->emailExists($email)) { // TRANS: Form validation error displayed when trying to register with an already registered e-mail address. $this->clientError(_('Email address already exists.'), 400); } else { if (!is_null($homepage) && strlen($homepage) > 0 && !common_valid_http_url($homepage)) { // TRANS: Form validation error displayed when trying to register with an invalid homepage URL. $this->clientError(_('Homepage is not a valid URL.'), 400); } else { if (!is_null($fullname) && mb_strlen($fullname) > 255) { // TRANS: Form validation error displayed when trying to register with a too long full name. $this->clientError(_('Full name is too long (maximum 255 characters).'), 400); } else { if (Profile::bioTooLong($bio)) { // TRANS: Form validation error on registration page when providing too long a bio text. // TRANS: %d is the maximum number of characters for bio; used for plural. $this->clientError(sprintf(_m('Bio is too long (maximum %d character).', 'Bio is too long (maximum %d characters).', Profile::maxBio()), Profile::maxBio()), 400); } else { if (!is_null($location) && mb_strlen($location) > 255) { // TRANS: Form validation error displayed when trying to register with a too long location. $this->clientError(_('Location is too long (maximum 255 characters).'), 400); } else { if (strlen($password) < 6) { // TRANS: Form validation error displayed when trying to register with too short a password. $this->clientError(_('Password must be 6 or more characters.'), 400); } else { if ($password != $confirm) { // TRANS: Form validation error displayed when trying to register with non-matching passwords. $this->clientError(_('Passwords do not match.'), 400); } else { // annoy spammers sleep(7); try { $user = User::register(array('nickname' => $nickname, 'password' => $password, 'email' => $email, 'fullname' => $fullname, 'homepage' => $homepage, 'bio' => $bio, 'location' => $location, 'code' => $this->code)); Event::handle('EndRegistrationTry', array($this)); $this->initDocument('json'); $this->showJsonObjects($this->twitterUserArray($user->getProfile())); $this->endDocument('json'); } catch (Exception $e) { $this->clientError($e->getMessage(), 400); } } } } } } } } } }
function qvitterTwitterUserArray($profile) { $twitter_user = array(); try { $user = $profile->getUser(); } catch (NoSuchUserException $e) { $user = null; } $twitter_user['id'] = intval($profile->id); $twitter_user['name'] = $profile->getBestName(); $twitter_user['screen_name'] = $profile->nickname; $twitter_user['location'] = $profile->location ? $profile->location : null; $twitter_user['description'] = $profile->bio ? $profile->bio : null; // TODO: avatar url template (example.com/user/avatar?size={x}x{y}) $twitter_user['profile_image_url'] = Avatar::urlByProfile($profile, AVATAR_STREAM_SIZE); $twitter_user['profile_image_url_https'] = $twitter_user['profile_image_url']; // START introduced by qvitter API, not necessary for StatusNet API $twitter_user['profile_image_url_profile_size'] = Avatar::urlByProfile($profile, AVATAR_PROFILE_SIZE); try { $avatar = Avatar::getUploaded($profile); $origurl = $avatar->displayUrl(); } catch (Exception $e) { $origurl = $twitter_user['profile_image_url_profile_size']; } $twitter_user['profile_image_url_original'] = $origurl; $twitter_user['groups_count'] = $profile->getGroupCount(); foreach (array('linkcolor', 'backgroundcolor') as $key) { $twitter_user[$key] = Profile_prefs::getConfigData($profile, 'theme', $key); } // END introduced by qvitter API, not necessary for StatusNet API $twitter_user['url'] = $profile->homepage ? $profile->homepage : null; $twitter_user['protected'] = !empty($user) && $user->private_stream ? true : false; $twitter_user['followers_count'] = $profile->subscriberCount(); // Note: some profiles don't have an associated user $twitter_user['friends_count'] = $profile->subscriptionCount(); $twitter_user['created_at'] = ApiAction::dateTwitter($profile->created); $timezone = 'UTC'; if (!empty($user) && $user->timezone) { $timezone = $user->timezone; } $t = new DateTime(); $t->setTimezone(new DateTimeZone($timezone)); $twitter_user['utc_offset'] = $t->format('Z'); $twitter_user['time_zone'] = $timezone; $twitter_user['statuses_count'] = $profile->noticeCount(); // Is the requesting user following this user? $twitter_user['following'] = false; $twitter_user['statusnet_blocking'] = false; $logged_in_profile = null; if (common_logged_in()) { $logged_in_profile = Profile::current(); $twitter_user['following'] = $logged_in_profile->isSubscribed($profile); $twitter_user['statusnet_blocking'] = $logged_in_profile->hasBlocked($profile); } // StatusNet-specific $twitter_user['statusnet_profile_url'] = $profile->profileurl; Event::handle('TwitterUserArray', array($profile, &$twitter_user, $logged_in_profile, array())); return $twitter_user; }
function noticeAsJson($notice) { // FIXME: this code should be abstracted to a neutral third // party, like Notice::asJson(). I'm not sure of the ethics // of refactoring from within a plugin, so I'm just abusing // the ApiAction method. Don't do this unless you're me! $act = new ApiAction('/dev/null'); $arr = $act->twitterStatusArray($notice, true); $arr['url'] = $notice->bestUrl(); $arr['html'] = htmlspecialchars($notice->rendered); $arr['source'] = htmlspecialchars($arr['source']); $arr['conversation_url'] = $this->getConversationUrl($notice); $profile = $notice->getProfile(); $arr['user']['profile_url'] = $profile->profileurl; // Add needed repeat data if (!empty($notice->repeat_of)) { $original = Notice::staticGet('id', $notice->repeat_of); if (!empty($original)) { $arr['retweeted_status']['url'] = $original->bestUrl(); $arr['retweeted_status']['html'] = htmlspecialchars($original->rendered); $arr['retweeted_status']['source'] = htmlspecialchars($original->source); $originalProfile = $original->getProfile(); $arr['retweeted_status']['user']['profile_url'] = $originalProfile->profileurl; $arr['retweeted_status']['conversation_url'] = $this->getConversationUrl($original); } $original = null; } return $arr; }
function noticeAsJson($notice) { // FIXME: this code should be abstracted to a neutral third // party, like Notice::asJson(). I'm not sure of the ethics // of refactoring from within a plugin, so I'm just abusing // the ApiAction method. Don't do this unless you're me! $act = new ApiAction('/dev/null'); $arr = $act->twitterStatusArray($notice, true); $arr['url'] = $notice->bestUrl(); $arr['html'] = $notice->rendered; $arr['source'] = $arr['source']; if (!empty($notice->reply_to)) { $reply_to = Notice::staticGet('id', $notice->reply_to); if (!empty($reply_to)) { $arr['in_reply_to_status_url'] = $reply_to->bestUrl(); } $reply_to = null; } $profile = $notice->getProfile(); $arr['user']['profile_url'] = $profile->profileurl; return $arr; }
/** * Handle a request * * @param array $args Arguments from $_REQUEST * * @return void */ function handle($args) { parent::handle($args); $this->showResults(); }