diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Shorturl_api.php | 2 | ||||
-rw-r--r-- | lib/action.php | 17 | ||||
-rw-r--r-- | lib/common.php | 3 | ||||
-rw-r--r-- | lib/daemon.php | 21 | ||||
-rw-r--r-- | lib/designsettings.php | 111 | ||||
-rw-r--r-- | lib/facebookaction.php | 14 | ||||
-rw-r--r-- | lib/groupeditform.php | 28 | ||||
-rw-r--r-- | lib/jsonsearchresultslist.php | 1 | ||||
-rw-r--r-- | lib/language.php | 2 | ||||
-rw-r--r-- | lib/profileaction.php | 8 | ||||
-rw-r--r-- | lib/profileminilist.php | 18 | ||||
-rw-r--r-- | lib/queuehandler.php | 4 | ||||
-rw-r--r-- | lib/subgroupnav.php | 2 | ||||
-rw-r--r-- | lib/util.php | 63 |
14 files changed, 227 insertions, 67 deletions
diff --git a/lib/Shorturl_api.php b/lib/Shorturl_api.php index 29f4eb3a6..22d5b4cb5 100644 --- a/lib/Shorturl_api.php +++ b/lib/Shorturl_api.php @@ -40,7 +40,7 @@ class ShortUrlApi } private function is_long($url) { - return strlen($url) >= $this->long_limit; + return strlen($url) >= common_config('site', 'shorturllength'); } protected function http_post($data) { diff --git a/lib/action.php b/lib/action.php index 89a8c8f4d..3bfa6ba15 100644 --- a/lib/action.php +++ b/lib/action.php @@ -247,7 +247,6 @@ class Action extends HTMLOutputter // lawsuit 'src' => common_path('js/jquery.joverlay.min.js')), ' '); - Event::handle('EndShowJQueryScripts', array($this)); } if (Event::handle('StartShowLaconicaScripts', array($this))) { @@ -422,11 +421,13 @@ class Action extends HTMLOutputter // lawsuit $this->menuItem(common_local_url('smssettings'), _('Connect'), _('Connect to SMS, Twitter'), false, 'nav_connect'); } - $this->menuItem(common_local_url('invite'), - _('Invite'), - sprintf(_('Invite friends and colleagues to join you on %s'), - common_config('site', 'name')), - false, 'nav_invitecontact'); + if (common_config('invite', 'enabled')) { + $this->menuItem(common_local_url('invite'), + _('Invite'), + sprintf(_('Invite friends and colleagues to join you on %s'), + common_config('site', 'name')), + false, 'nav_invitecontact'); + } $this->menuItem(common_local_url('logout'), _('Logout'), _('Logout from the site'), false, 'nav_logout'); } @@ -964,12 +965,16 @@ class Action extends HTMLOutputter // lawsuit $action = $this->trimmed('action'); $args = $this->args; unset($args['action']); + if (common_config('site', 'fancy')) { + unset($args['p']); + } if (array_key_exists('submit', $args)) { unset($args['submit']); } foreach (array_keys($_COOKIE) as $cookie) { unset($args[$cookie]); } + return common_local_url($action, $args); } diff --git a/lib/common.php b/lib/common.php index e2936f075..5d451463b 100644 --- a/lib/common.php +++ b/lib/common.php @@ -120,6 +120,7 @@ $config = 'private' => false, 'ssl' => 'never', 'sslserver' => null, + 'shorturllength' => 30, 'dupelimit' => 60), # default for same person saying the same thing 'syslog' => array('appname' => 'laconica', # for syslog @@ -175,6 +176,8 @@ $config = 'host' => null, # only set if != server 'debug' => false, # print extra debug info 'public' => array()), # JIDs of users who want to receive the public stream + 'invite' => + array('enabled' => true), 'sphinx' => array('enabled' => false, 'server' => 'localhost', diff --git a/lib/daemon.php b/lib/daemon.php index a0df00bdc..9d89c63e7 100644 --- a/lib/daemon.php +++ b/lib/daemon.php @@ -23,6 +23,13 @@ if (!defined('LACONICA')) { class Daemon { + var $daemonize = true; + + function __construct($daemonize = true) + { + $this->daemonize = $daemonize; + } + function name() { return null; @@ -129,12 +136,16 @@ class Daemon common_log(LOG_INFO, $this->name() . ' already running. Exiting.'); exit(0); } - if ($this->background()) { - $this->writePidFile(); - $this->changeUser(); - $this->run(); - $this->clearPidFile(); + + if ($this->daemonize) { + common_log(LOG_INFO, 'Backgrounding daemon "'.$this->name().'"'); + $this->background(); } + + $this->writePidFile(); + $this->changeUser(); + $this->run(); + $this->clearPidFile(); } function run() diff --git a/lib/designsettings.php b/lib/designsettings.php index 9650679ac..fbffdb208 100644 --- a/lib/designsettings.php +++ b/lib/designsettings.php @@ -35,6 +35,20 @@ if (!defined('LACONICA')) { require_once INSTALLDIR . '/lib/accountsettingsaction.php'; require_once INSTALLDIR . '/lib/webcolor.php'; +/** + * Base class for setting a user or group design + * + * Shows the design setting form and also handles some things like saving + * background images, and fetching a default design + * + * @category Settings + * @package Laconica + * @author Zach Copley <zach@controlyourself.ca> + * @author Sarven Capadisli <csarven@controlyourself.ca> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + class DesignSettingsAction extends AccountSettingsAction { @@ -63,6 +77,14 @@ class DesignSettingsAction extends AccountSettingsAction 'with a background image and a colour palette of your choice.'); } + /** + * Shows the design settings form + * + * @param Design $design a working design to show + * + * @return nothing + */ + function showDesignForm($design) { @@ -94,7 +116,8 @@ class DesignSettingsAction extends AccountSettingsAction if (!empty($design->backgroundimage)) { - $this->elementStart('li', array('id' => 'design_background-image_onoff')); + $this->elementStart('li', array('id' => + 'design_background-image_onoff')); $this->element('img', array('src' => Design::url($design->backgroundimage))); @@ -136,7 +159,7 @@ class DesignSettingsAction extends AccountSettingsAction $this->elementStart('li'); $this->checkbox('design_background-image_repeat', _('Tile background image'), - ($design->disposition & BACKGROUND_TILE) ? true : false ); + ($design->disposition & BACKGROUND_TILE) ? true : false); $this->elementEnd('li'); } @@ -212,18 +235,19 @@ class DesignSettingsAction extends AccountSettingsAction 'maxlength' => '7', 'size' => '7', 'value' => '#' . $lcolor->hexValue())); + $this->elementEnd('li'); - $this->elementEnd('li'); + } catch (WebColorException $e) { + common_log(LOG_ERR, 'Bad color values in design ID: ' .$design->id); + } - } catch (WebColorException $e) { - common_log(LOG_ERR, 'Bad color values in design ID: ' . - $design->id); - } + $this->elementEnd('ul'); + $this->elementEnd('fieldset'); - $this->elementEnd('ul'); - $this->elementEnd('fieldset'); + $this->submit('defaults', _('Use defaults'), 'submit form_action-default', + 'defaults', _('Restore default designs')); - $this->element('input', array('id' => 'settings_design_reset', + $this->element('input', array('id' => 'settings_design_reset', 'type' => 'reset', 'value' => 'Reset', 'class' => 'submit form_action-primary', @@ -271,8 +295,8 @@ class DesignSettingsAction extends AccountSettingsAction if ($this->arg('save')) { $this->saveDesign(); - } else if ($this->arg('reset')) { - $this->resetDesign(); + } else if ($this->arg('defaults')) { + $this->restoreDefaults(); } else { $this->showForm(_('Unexpected form submission.')); } @@ -316,7 +340,7 @@ class DesignSettingsAction extends AccountSettingsAction } /** - * Get a default user design + * Get a default design * * @return Design design */ @@ -358,7 +382,16 @@ class DesignSettingsAction extends AccountSettingsAction return $design; } - function saveBackgroundImage($design) { + /** + * Save the background image, if any, and set its disposition + * + * @param Design $design a working design to attach the img to + * + * @return nothing + */ + + function saveBackgroundImage($design) + { // Now that we have a Design ID we can add a file to the design. // XXX: This is an additional DB hit, but figured having the image @@ -371,12 +404,12 @@ class DesignSettingsAction extends AccountSettingsAction $filepath = null; try { - $imagefile = - ImageFile::fromUpload('design_background-image_file'); - } catch (Exception $e) { - $this->showForm($e->getMessage()); - return; - } + $imagefile = + ImageFile::fromUpload('design_background-image_file'); + } catch (Exception $e) { + $this->showForm($e->getMessage()); + return; + } $filename = Design::filename($design->id, image_type_to_extension($imagefile->type), @@ -386,7 +419,14 @@ class DesignSettingsAction extends AccountSettingsAction move_uploaded_file($imagefile->filepath, $filepath); + // delete any old backround img laying around + + if (isset($design->backgroundimage)) { + @unlink(Design::path($design->backgroundimage)); + } + $original = clone($design); + $design->backgroundimage = $filename; // default to on, no tile @@ -403,4 +443,35 @@ class DesignSettingsAction extends AccountSettingsAction } } + /** + * Restore the user or group design to system defaults + * + * @return nothing + */ + + function restoreDefaults() + { + $design = $this->getWorkingDesign(); + $default = $this->defaultDesign(); + $original = clone($design); + + $design->backgroundcolor = $default->backgroundcolor; + $design->contentcolor = $default->contentcolor; + $design->sidebarcolor = $default->sidebarcolor; + $design->textcolor = $default->textcolor; + $design->linkcolor = $default->linkcolor; + + $design->setDisposition(false, true, false); + + $result = $design->update($original); + + if ($result === false) { + common_log_db_error($design, 'UPDATE', __FILE__); + $this->showForm(_('Couldn\'t update your design.')); + return; + } + + $this->showForm(_('Design defaults restored.'), true); + } + } diff --git a/lib/facebookaction.php b/lib/facebookaction.php index a445750f7..1ae90d53b 100644 --- a/lib/facebookaction.php +++ b/lib/facebookaction.php @@ -213,12 +213,14 @@ class FacebookAction extends Action array('href' => 'index.php', 'title' => _('Home')), _('Home')); $this->elementEnd('li'); - $this->elementStart('li', - array('class' => - ($this->action == 'facebookinvite') ? 'current' : 'facebook_invite')); - $this->element('a', - array('href' => 'invite.php', 'title' => _('Invite')), _('Invite')); - $this->elementEnd('li'); + if (common_config('invite', 'enabled')) { + $this->elementStart('li', + array('class' => + ($this->action == 'facebookinvite') ? 'current' : 'facebook_invite')); + $this->element('a', + array('href' => 'invite.php', 'title' => _('Invite')), _('Invite')); + $this->elementEnd('li'); + } $this->elementStart('li', array('class' => diff --git a/lib/groupeditform.php b/lib/groupeditform.php index 7e8d6eea3..fbb39129b 100644 --- a/lib/groupeditform.php +++ b/lib/groupeditform.php @@ -130,30 +130,46 @@ class GroupEditForm extends Form function formData() { + if ($this->group) { + $id = $this->group->id; + $nickname = $this->group->nickname; + $fullname = $this->group->fullname; + $homepage = $this->group->homepage; + $description = $this->group->description; + $location = $this->group->location; + } else { + $id = ''; + $nickname = ''; + $fullname = ''; + $homepage = ''; + $description = ''; + $location = ''; + } + $this->out->elementStart('ul', 'form_data'); $this->out->elementStart('li'); - $this->out->hidden('groupid', $this->group->id); + $this->out->hidden('groupid', $id); $this->out->input('nickname', _('Nickname'), - ($this->out->arg('nickname')) ? $this->out->arg('nickname') : $this->group->nickname, + ($this->out->arg('nickname')) ? $this->out->arg('nickname') : $nickname, _('1-64 lowercase letters or numbers, no punctuation or spaces')); $this->out->elementEnd('li'); $this->out->elementStart('li'); $this->out->input('fullname', _('Full name'), - ($this->out->arg('fullname')) ? $this->out->arg('fullname') : $this->group->fullname); + ($this->out->arg('fullname')) ? $this->out->arg('fullname') : $fullname); $this->out->elementEnd('li'); $this->out->elementStart('li'); $this->out->input('homepage', _('Homepage'), - ($this->out->arg('homepage')) ? $this->out->arg('homepage') : $this->group->homepage, + ($this->out->arg('homepage')) ? $this->out->arg('homepage') : $homepage, _('URL of the homepage or blog of the group or topic')); $this->out->elementEnd('li'); $this->out->elementStart('li'); $this->out->textarea('description', _('Description'), - ($this->out->arg('description')) ? $this->out->arg('description') : $this->group->description, + ($this->out->arg('description')) ? $this->out->arg('description') : $description, _('Describe the group or topic in 140 chars')); $this->out->elementEnd('li'); $this->out->elementStart('li'); $this->out->input('location', _('Location'), - ($this->out->arg('location')) ? $this->out->arg('location') : $this->group->location, + ($this->out->arg('location')) ? $this->out->arg('location') : $location, _('Location for the group, if any, like "City, State (or Region), Country"')); $this->out->elementEnd('li'); if (common_config('group', 'maxaliases') > 0) { diff --git a/lib/jsonsearchresultslist.php b/lib/jsonsearchresultslist.php index f786c20a8..7beea9328 100644 --- a/lib/jsonsearchresultslist.php +++ b/lib/jsonsearchresultslist.php @@ -89,6 +89,7 @@ class JSONSearchResultsList function show() { $cnt = 0; + $this->max_id = 0; $time_start = microtime(true); diff --git a/lib/language.php b/lib/language.php index cd6498d30..3ea3dd2aa 100644 --- a/lib/language.php +++ b/lib/language.php @@ -108,7 +108,7 @@ function get_all_languages() { 'el' => array('q' => 0.1, 'lang' => 'el', 'name' => 'Greek', 'direction' => 'ltr'), 'en-us' => array('q' => 1, 'lang' => 'en_US', 'name' => 'English (US)', 'direction' => 'ltr'), 'en-gb' => array('q' => 1, 'lang' => 'en_GB', 'name' => 'English (British)', 'direction' => 'ltr'), - 'en' => array('q' => 1, 'lang' => 'en', 'name' => 'English', 'direction' => 'ltr'), + 'en' => array('q' => 1, 'lang' => 'en_US', 'name' => 'English (US)', 'direction' => 'ltr'), 'es' => array('q' => 1, 'lang' => 'es', 'name' => 'Spanish', 'direction' => 'ltr'), 'fi' => array('q' => 1, 'lang' => 'fi', 'name' => 'Finnish', 'direction' => 'ltr'), 'fr-fr' => array('q' => 1, 'lang' => 'fr_FR', 'name' => 'French', 'direction' => 'ltr'), diff --git a/lib/profileaction.php b/lib/profileaction.php index 2519922b2..eeb5dbe48 100644 --- a/lib/profileaction.php +++ b/lib/profileaction.php @@ -108,7 +108,9 @@ class ProfileAction extends OwnerDesignAction $this->element('h2', null, _('Subscriptions')); - if ($profile) { + $cnt = 0; + + if (!empty($profile)) { $pml = new ProfileMiniList($profile, $this); $cnt = $pml->show(); if ($cnt == 0) { @@ -137,7 +139,9 @@ class ProfileAction extends OwnerDesignAction $this->element('h2', null, _('Subscribers')); - if ($profile) { + $cnt = 0; + + if (!empty($profile)) { $pml = new ProfileMiniList($profile, $this); $cnt = $pml->show(); if ($cnt == 0) { diff --git a/lib/profileminilist.php b/lib/profileminilist.php index 09bef6f7c..357b4a2db 100644 --- a/lib/profileminilist.php +++ b/lib/profileminilist.php @@ -47,6 +47,7 @@ define('PROFILES_PER_MINILIST', 27); class ProfileMiniList extends ProfileList { + function startList() { $this->out->elementStart('ul', 'entities users xoxo'); @@ -56,6 +57,23 @@ class ProfileMiniList extends ProfileList { return new ProfileMiniListItem($profile, $this->action); } + + function showProfiles() + { + $cnt = 0; + + while ($this->profile->fetch()) { + $cnt++; + if ($cnt > PROFILES_PER_MINILIST) { + break; + } + $pli = $this->newListItem($this->profile); + $pli->show(); + } + + return $cnt; + } + } class ProfileMiniListItem extends ProfileListItem diff --git a/lib/queuehandler.php b/lib/queuehandler.php index 045432ae5..ddb47a28e 100644 --- a/lib/queuehandler.php +++ b/lib/queuehandler.php @@ -31,8 +31,10 @@ class QueueHandler extends Daemon { var $_id = 'generic'; - function QueueHandler($id=null) + function __construct($id=null, $daemonize=true) { + parent::__construct($daemonize); + if ($id) { $this->set_id($id); } diff --git a/lib/subgroupnav.php b/lib/subgroupnav.php index 4a9b36ae8..520991923 100644 --- a/lib/subgroupnav.php +++ b/lib/subgroupnav.php @@ -100,7 +100,7 @@ class SubGroupNav extends Widget $this->user->nickname), $action == 'usergroups', 'nav_usergroups'); - if (!is_null($cur) && $this->user->id === $cur->id) { + if (common_config('invite', 'enabled') && !is_null($cur) && $this->user->id === $cur->id) { $this->out->menuItem(common_local_url('invite'), _('Invite'), sprintf(_('Invite friends and colleagues to join you on %s'), diff --git a/lib/util.php b/lib/util.php index 656374516..86a0316ea 100644 --- a/lib/util.php +++ b/lib/util.php @@ -114,7 +114,7 @@ function common_check_user($nickname, $password) return false; } $user = User::staticGet('nickname', $nickname); - if (is_null($user)) { + if (is_null($user) || $user === false) { return false; } else { if (0 == strcmp(common_munge_password($password, $user->id), @@ -145,7 +145,6 @@ function common_ensure_session() } if (!common_have_session()) { if (common_config('sessions', 'handle')) { - common_log(LOG_INFO, "Using our own session handler"); Session::setSaveHandler(); } @session_start(); @@ -500,17 +499,19 @@ function common_linkify($url) { // It comes in special'd, so we unspecial it before passing to the stringifying // functions $url = htmlspecialchars_decode($url); - $display = File_redirection::_canonUrl($url); + + $canon = File_redirection::_canonUrl($url); + $longurl_data = File_redirection::where($url); if (is_array($longurl_data)) { $longurl = $longurl_data['url']; } elseif (is_string($longurl_data)) { $longurl = $longurl_data; } else { - die('impossible to linkify'); + throw new ServerException("Can't linkify url '$url'"); } - $attrs = array('href' => $longurl, 'rel' => 'external'); + $attrs = array('href' => $canon, 'rel' => 'external'); $is_attachment = false; $attachment_id = null; @@ -528,13 +529,13 @@ function common_linkify($url) { } } -// if this URL is an attachment, then we set class='attachment' and id='attahcment-ID' -// where ID is the id of the attachment for the given URL. -// -// we need a better test telling what can be shown as an attachment -// we're currently picking up oembeds only. -// I think the best option is another file_view table in the db -// and associated dbobject. + // if this URL is an attachment, then we set class='attachment' and id='attahcment-ID' + // where ID is the id of the attachment for the given URL. + // + // we need a better test telling what can be shown as an attachment + // we're currently picking up oembeds only. + // I think the best option is another file_view table in the db + // and associated dbobject. $query = "select file_oembed.file_id as file_id from file join file_oembed on file.id = file_oembed.file_id where file.url='$longurl'"; $file = new File; @@ -564,7 +565,7 @@ function common_linkify($url) { $attrs['id'] = "attachment-{$attachment_id}"; } - return XMLStringer::estring('a', $attrs, $display); + return XMLStringer::estring('a', $attrs, $url); } function common_shorten_links($text) @@ -982,15 +983,20 @@ function common_ensure_syslog() } } +function common_log_line($priority, $msg) +{ + static $syslog_priorities = array('LOG_EMERG', 'LOG_ALERT', 'LOG_CRIT', 'LOG_ERR', + 'LOG_WARNING', 'LOG_NOTICE', 'LOG_INFO', 'LOG_DEBUG'); + return date('Y-m-d H:i:s') . ' ' . $syslog_priorities[$priority] . ': ' . $msg . "\n"; +} + function common_log($priority, $msg, $filename=null) { $logfile = common_config('site', 'logfile'); if ($logfile) { $log = fopen($logfile, "a"); if ($log) { - static $syslog_priorities = array('LOG_EMERG', 'LOG_ALERT', 'LOG_CRIT', 'LOG_ERR', - 'LOG_WARNING', 'LOG_NOTICE', 'LOG_INFO', 'LOG_DEBUG'); - $output = date('Y-m-d H:i:s') . ' ' . $syslog_priorities[$priority] . ': ' . $msg . "\n"; + $output = common_log_line($priority, $msg); fwrite($log, $output); fclose($log); } @@ -1221,18 +1227,39 @@ function common_canonical_sms($sms) function common_error_handler($errno, $errstr, $errfile, $errline, $errcontext) { switch ($errno) { + + case E_ERROR: + case E_COMPILE_ERROR: + case E_CORE_ERROR: case E_USER_ERROR: - common_log(LOG_ERR, "[$errno] $errstr ($errfile:$errline)"); - exit(1); + case E_PARSE: + case E_RECOVERABLE_ERROR: + common_log(LOG_ERR, "[$errno] $errstr ($errfile:$errline) [ABORT]"); + die(); break; + case E_WARNING: + case E_COMPILE_WARNING: + case E_CORE_WARNING: case E_USER_WARNING: common_log(LOG_WARNING, "[$errno] $errstr ($errfile:$errline)"); break; + case E_NOTICE: case E_USER_NOTICE: common_log(LOG_NOTICE, "[$errno] $errstr ($errfile:$errline)"); break; + + case E_STRICT: + case E_DEPRECATED: + case E_USER_DEPRECATED: + // XXX: config variable to log this stuff, too + break; + + default: + common_log(LOG_ERR, "[$errno] $errstr ($errfile:$errline) [UNKNOWN LEVEL, die()'ing]"); + die(); + break; } // FIXME: show error page if we're on the Web |