diff --git a/actions/foafgroup.php b/actions/foafgroup.php index d685554ac4..4db40c28be 100644 --- a/actions/foafgroup.php +++ b/actions/foafgroup.php @@ -56,7 +56,7 @@ class FoafGroupAction extends Action return false; } - $local = Local_group::staticGet('nickname', $nickname); + $local = Local_group::staticGet('nickname', $this->nickname); if (!$local) { $this->clientError(_('No such group.'), 404); @@ -126,7 +126,8 @@ class FoafGroupAction extends Action while ($members->fetch()) { $member_uri = common_local_url('userbyid', array('id'=>$members->id)); $member_details[$member_uri] = array( - 'nickname' => $members->nickname + 'nickname' => $members->nickname, + 'is_admin' => false, ); $this->element('member', array('rdf:resource' => $member_uri)); } diff --git a/actions/groupblock.php b/actions/groupblock.php index 88d7634a28..fc95c0e669 100644 --- a/actions/groupblock.php +++ b/actions/groupblock.php @@ -41,7 +41,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * @link http://status.net/ */ -class GroupblockAction extends Action +class GroupblockAction extends RedirectingAction { var $profile = null; var $group = null; @@ -117,9 +117,7 @@ class GroupblockAction extends Action parent::handle($args); if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($this->arg('no')) { - common_redirect(common_local_url('groupmembers', - array('nickname' => $this->group->nickname)), - 303); + $this->returnToArgs(); } elseif ($this->arg('yes')) { $this->blockProfile(); } elseif ($this->arg('blockto')) { @@ -196,23 +194,20 @@ class GroupblockAction extends Action $this->serverError(_("Database error blocking user from group.")); return false; } + + $this->returnToArgs(); + } - // Now, gotta figure where we go back to - foreach ($this->args as $k => $v) { - if ($k == 'returnto-action') { - $action = $v; - } elseif (substr($k, 0, 9) == 'returnto-') { - $args[substr($k, 9)] = $v; - } - } - - if ($action) { - common_redirect(common_local_url($action, $args), 303); - } else { - common_redirect(common_local_url('groupmembers', - array('nickname' => $this->group->nickname)), - 303); - } + /** + * If we reached this form without returnto arguments, default to + * the top of the group's member list. + * + * @return string URL + */ + function defaultReturnTo() + { + return common_local_url('groupmembers', + array('nickname' => $this->group->nickname)); } function showScripts() diff --git a/actions/groupmembers.php b/actions/groupmembers.php index fb4e46dbc0..6d0701239f 100644 --- a/actions/groupmembers.php +++ b/actions/groupmembers.php @@ -205,8 +205,7 @@ class GroupMemberListItem extends ProfileListItem !$this->profile->isAdmin($this->group)) { $this->out->elementStart('li', 'entity_make_admin'); $maf = new MakeAdminForm($this->out, $this->profile, $this->group, - array('action' => 'groupmembers', - 'nickname' => $this->group->nickname)); + $this->returnToArgs()); $maf->show(); $this->out->elementEnd('li'); } @@ -220,8 +219,7 @@ class GroupMemberListItem extends ProfileListItem if (!empty($user) && $user->id != $this->profile->id && $user->isAdmin($this->group)) { $this->out->elementStart('li', 'entity_block'); $bf = new GroupBlockForm($this->out, $this->profile, $this->group, - array('action' => 'groupmembers', - 'nickname' => $this->group->nickname)); + $this->returnToArgs()); $bf->show(); $this->out->elementEnd('li'); } @@ -244,6 +242,23 @@ class GroupMemberListItem extends ProfileListItem $aAttrs['rel'] = 'nofollow'; } } + + /** + * Fetch necessary return-to arguments for the profile forms + * to return to this list when they're done. + * + * @return array + */ + protected function returnToArgs() + { + $args = array('action' => 'groupmembers', + 'nickname' => $this->group->nickname); + $page = $this->out->arg('page'); + if ($page) { + $args['param-page'] = $page; + } + return $args; + } } /** diff --git a/actions/makeadmin.php b/actions/makeadmin.php index f19348648d..9ccb442308 100644 --- a/actions/makeadmin.php +++ b/actions/makeadmin.php @@ -41,7 +41,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * @link http://status.net/ */ -class MakeadminAction extends Action +class MakeadminAction extends RedirectingAction { var $profile = null; var $group = null; @@ -148,20 +148,19 @@ class MakeadminAction extends Action $this->group->getBestName()); } - foreach ($this->args as $k => $v) { - if ($k == 'returnto-action') { - $action = $v; - } else if (substr($k, 0, 9) == 'returnto-') { - $args[substr($k, 9)] = $v; - } - } - - if ($action) { - common_redirect(common_local_url($action, $args), 303); - } else { - common_redirect(common_local_url('groupmembers', - array('nickname' => $this->group->nickname)), - 303); - } + $this->returnToArgs(); } + + /** + * If we reached this form without returnto arguments, default to + * the top of the group's member list. + * + * @return string URL + */ + function defaultReturnTo() + { + return common_local_url('groupmembers', + array('nickname' => $this->group->nickname)); + } + } diff --git a/actions/subscribers.php b/actions/subscribers.php index 6dda7312d6..6fdf43e2cc 100644 --- a/actions/subscribers.php +++ b/actions/subscribers.php @@ -157,9 +157,13 @@ class SubscribersListItem extends SubscriptionListItem $user = common_current_user(); if (!empty($user) && $this->owner->id == $user->id) { - $bf = new BlockForm($this->out, $this->profile, - array('action' => 'subscribers', - 'nickname' => $this->owner->nickname)); + $returnto = array('action' => 'subscribers', + 'nickname' => $this->owner->nickname); + $page = $this->out->arg('page'); + if ($page) { + $returnto['param-page'] = $page; + } + $bf = new BlockForm($this->out, $this->profile, $returnto); $bf->show(); } } diff --git a/install.php b/install.php index 8a299f8975..08555d19b9 100644 --- a/install.php +++ b/install.php @@ -1,8 +1,7 @@ - 'gettext', - 'url'=>'http://us.php.net/manual/en/book.gettext.php', - 'check_function'=>'gettext' - ), - array( - 'name'=>'PEAR', - 'url'=>'http://pear.php.net/', - 'deb'=>'php-pear', - 'include'=>'PEAR.php', - 'check_class'=>'PEAR' - ), - array( - 'name'=>'DB', - 'pear'=>'DB', - 'url'=>'http://pear.php.net/package/DB', - 'deb'=>'php-db', - 'include'=>'DB/common.php', - 'check_class'=>'DB_common' - ), - array( - 'name'=>'DB_DataObject', - 'pear'=>'DB_DataObject', - 'url'=>'http://pear.php.net/package/DB_DataObject', - 'include'=>'DB/DataObject.php', - 'check_class'=>'DB_DataObject' - ), - array( - 'name'=>'Console_Getopt', - 'pear'=>'Console_Getopt', - 'url'=>'http://pear.php.net/package/Console_Getopt', - 'include'=>'Console/Getopt.php', - 'check_class'=>'Console_Getopt' - ), - array( - 'name'=>'Facebook API', - 'url'=>'http://developers.facebook.com/', - 'include'=>'facebook/facebook.php', - 'check_class'=>'Facebook' - ), - array( - 'name'=>'htmLawed', - 'url'=>'http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed', - 'include'=>'htmLawed/htmLawed.php', - 'check_function'=>'htmLawed' - ), - array( - 'name'=>'HTTP_Request', - 'pear'=>'HTTP_Request', - 'url'=>'http://pear.php.net/package/HTTP_Request', - 'deb'=>'php-http-request', - 'include'=>'HTTP/Request.php', - 'check_class'=>'HTTP_Request' - ), - array( - 'name'=>'HTTP_Request2', - 'pear'=>'HTTP_Request2', - 'url'=>'http://pear.php.net/package/HTTP_Request2', - 'include'=>'HTTP/Request2.php', - 'check_class'=>'HTTP_Request2' - ), - array( - 'name'=>'Mail', - 'pear'=>'Mail', - 'url'=>'http://pear.php.net/package/Mail', - 'deb'=>'php-mail', - 'include'=>'Mail.php', - 'check_class'=>'Mail' - ), - array( - 'name'=>'Mail_mimeDecode', - 'pear'=>'Mail_mimeDecode', - 'url'=>'http://pear.php.net/package/Mail_mimeDecode', - 'deb'=>'php-mail-mimedecode', - 'include'=>'Mail/mimeDecode.php', - 'check_class'=>'Mail_mimeDecode' - ), - array( - 'name'=>'Mime_Type', - 'pear'=>'Mime_Type', - 'url'=>'http://pear.php.net/package/Mime_Type', - 'include'=>'MIME/Type.php', - 'check_class'=>'Mime_Type' - ), - array( - 'name'=>'Net_URL_Mapper', - 'pear'=>'Net_URL_Mapper', - 'url'=>'http://pear.php.net/package/Net_URL_Mapper', - 'include'=>'Net/URL/Mapper.php', - 'check_class'=>'Net_URL_Mapper' - ), - array( - 'name'=>'Net_LDAP2', - 'pear'=>'Net_LDAP2', - 'url'=>'http://pear.php.net/package/Net_LDAP2', - 'deb'=>'php-net-ldap2', - 'include'=>'Net/LDAP2.php', - 'check_class'=>'Net_LDAP2' - ), - array( - 'name'=>'Net_Socket', - 'pear'=>'Net_Socket', - 'url'=>'http://pear.php.net/package/Net_Socket', - 'deb'=>'php-net-socket', - 'include'=>'Net/Socket.php', - 'check_class'=>'Net_Socket' - ), - array( - 'name'=>'Net_SMTP', - 'pear'=>'Net_SMTP', - 'url'=>'http://pear.php.net/package/Net_SMTP', - 'deb'=>'php-net-smtp', - 'include'=>'Net/SMTP.php', - 'check_class'=>'Net_SMTP' - ), - array( - 'name'=>'Net_URL', - 'pear'=>'Net_URL', - 'url'=>'http://pear.php.net/package/Net_URL', - 'deb'=>'php-net-url', - 'include'=>'Net/URL.php', - 'check_class'=>'Net_URL' - ), - array( - 'name'=>'Net_URL2', - 'pear'=>'Net_URL2', - 'url'=>'http://pear.php.net/package/Net_URL2', - 'include'=>'Net/URL2.php', - 'check_class'=>'Net_URL2' - ), - array( - 'name'=>'Services_oEmbed', - 'pear'=>'Services_oEmbed', - 'url'=>'http://pear.php.net/package/Services_oEmbed', - 'include'=>'Services/oEmbed.php', - 'check_class'=>'Services_oEmbed' - ), - array( - 'name'=>'Stomp', - 'url'=>'http://stomp.codehaus.org/PHP', - 'include'=>'Stomp.php', - 'check_class'=>'Stomp' - ), - array( - 'name'=>'System_Command', - 'pear'=>'System_Command', - 'url'=>'http://pear.php.net/package/System_Command', - 'include'=>'System/Command.php', - 'check_class'=>'System_Command' - ), - array( - 'name'=>'XMPPHP', - 'url'=>'http://code.google.com/p/xmpphp', - 'include'=>'XMPPHP/XMPP.php', - 'check_class'=>'XMPPHP_XMPP' - ), - array( - 'name'=>'PHP Markdown', - 'url'=>'http://www.michelf.com/projects/php-markdown/', - 'include'=>'markdown.php', - 'check_class'=>'Markdown_Parser' - ), - array( - 'name'=>'OAuth', - 'url'=>'http://code.google.com/p/oauth-php', - 'include'=>'OAuth.php', - 'check_class'=>'OAuthRequest' - ), - array( - 'name'=>'Validate', - 'pear'=>'Validate', - 'url'=>'http://pear.php.net/package/Validate', - 'include'=>'Validate.php', - 'check_class'=>'Validate' - ) -); -$dbModules = array( - 'mysql' => array( - 'name' => 'MySQL', - 'check_module' => 'mysql', // mysqli? - 'installer' => 'mysql_db_installer', - ), - 'pgsql' => array( - 'name' => 'PostgreSQL', - 'check_module' => 'pgsql', - 'installer' => 'pgsql_db_installer', - ), -); - -/** - * the actual installation. - * If call libraries are present, then install - * - * @return void - */ -function main() -{ - if (!checkPrereqs()) { - return; - } - - if (!empty($_GET['checklibs'])) { - showLibs(); - } else { - if ($_SERVER['REQUEST_METHOD'] == 'POST') { - handlePost(); - } else { - showForm(); - } - } -} - -/** - * checks if an external libary is present - * - * @param string $external_library Name of library - * - * @return boolean indicates if library present - */ -function haveExternalLibrary($external_library) -{ - if (isset($external_library['include']) && !haveIncludeFile($external_library['include'])) { - return false; - } - if (isset($external_library['check_function']) && ! function_exists($external_library['check_function'])) { - return false; - } - if (isset($external_library['check_class']) && ! class_exists($external_library['check_class'])) { - return false; - } - return true; -} - -// Attempt to include a PHP file and report if it worked, while -// suppressing the annoying warning messages on failure. -function haveIncludeFile($filename) { - $old = error_reporting(error_reporting() & ~E_WARNING); - $ok = include_once($filename); - error_reporting($old); - return $ok; -} - -/** - * Check if all is ready for installation - * - * @return void - */ -function checkPrereqs() -{ - $pass = true; - - if (file_exists(INSTALLDIR.'/config.php')) { - printf('

Config file "config.php" already exists.

'); - $pass = false; - } - - if (version_compare(PHP_VERSION, '5.2.3', '<')) { - printf('

Require PHP version 5.2.3 or greater.

'); - $pass = false; - } - - // Look for known library bugs - $str = "abcdefghijklmnopqrstuvwxyz"; - $replaced = preg_replace('/[\p{Cc}\p{Cs}]/u', '*', $str); - if ($str != $replaced) { - printf('

PHP is linked to a version of the PCRE library ' . - 'that does not support Unicode properties. ' . - 'If you are running Red Hat Enterprise Linux / ' . - 'CentOS 5.4 or earlier, see our documentation page on fixing this.

'); - $pass = false; - } - - $reqs = array('gd', 'curl', - 'xmlwriter', 'mbstring', 'xml', 'dom', 'simplexml'); - - foreach ($reqs as $req) { - if (!checkExtension($req)) { - printf('

Cannot load required extension: %s

', $req); - $pass = false; - } - } - // Make sure we have at least one database module available - global $dbModules; - $missingExtensions = array(); - foreach ($dbModules as $type => $info) { - if (!checkExtension($info['check_module'])) { - $missingExtensions[] = $info['check_module']; - } - } - - if (count($missingExtensions) == count($dbModules)) { - $req = implode(', ', $missingExtensions); - printf('

Cannot find mysql or pgsql extension. You need one or the other.'); - $pass = false; - } - - if (!is_writable(INSTALLDIR)) { - printf('

Cannot write config file to: %s

', INSTALLDIR); - printf('

On your server, try this command: chmod a+w %s', INSTALLDIR); - $pass = false; - } - - // Check the subdirs used for file uploads - $fileSubdirs = array('avatar', 'background', 'file'); - foreach ($fileSubdirs as $fileSubdir) { - $fileFullPath = INSTALLDIR."/$fileSubdir/"; - if (!is_writable($fileFullPath)) { - printf('

Cannot write to %s directory: %s

', $fileSubdir, $fileFullPath); - printf('

On your server, try this command: chmod a+w %s

', $fileFullPath); - $pass = false; - } - } - - return $pass; -} - -/** - * Checks if a php extension is both installed and loaded - * - * @param string $name of extension to check - * - * @return boolean whether extension is installed and loaded - */ -function checkExtension($name) -{ - if (extension_loaded($name)) { - return true; - } elseif (function_exists('dl') && ini_get('enable_dl') && !ini_get('safe_mode')) { - // dl will throw a fatal error if it's disabled or we're in safe mode. - // More fun, it may not even exist under some SAPIs in 5.3.0 or later... - $soname = $name . '.' . PHP_SHLIB_SUFFIX; - if (PHP_SHLIB_SUFFIX == 'dll') { - $soname = "php_" . $soname; - } - return @dl($soname); - } else { - return false; - } -} - -/** - * Show list of libraries - * - * @return void - */ -function showLibs() -{ - global $external_libraries; - $present_libraries=array(); - $absent_libraries=array(); - foreach ($external_libraries as $external_library) { - if (haveExternalLibrary($external_library)) { - $present_libraries[]=$external_library; - } else { - $absent_libraries[]=$external_library; - } - } - echo<< -

StatusNet comes bundled with a number of libraries required for the application to work. However, it is best that you use PEAR or you distribution to manage - libraries instead, as they tend to provide security updates faster, and may offer improved performance.

-

On Debian based distributions, such as Ubuntu, use a package manager (such as "aptitude", "apt-get", and "synaptic") to install the package listed.

-

On RPM based distributions, such as Red Hat, Fedora, CentOS, Scientific Linux, Yellow Dog Linux and Oracle Enterprise Linux, use a package manager (such as "yum", "apt-rpm", and "up2date") to install the package listed.

-

On servers without a package manager (such as Windows), or if the library is not packaged for your distribution, you can use PHP's PEAR to install the library. Simply run "pear install <name>".

- -

Absent Libraries

-