Merge branch '0.7.x' into 0.8.x
This commit is contained in:
commit
55d7bb4701
|
@ -59,7 +59,7 @@ class AccesstokenAction extends Action
|
||||||
try {
|
try {
|
||||||
common_debug('getting request from env variables', __FILE__);
|
common_debug('getting request from env variables', __FILE__);
|
||||||
common_remove_magic_from_request();
|
common_remove_magic_from_request();
|
||||||
$req = OAuthRequest::from_request();
|
$req = OAuthRequest::from_request('POST', common_locale_url('accesstoken'));
|
||||||
common_debug('getting a server', __FILE__);
|
common_debug('getting a server', __FILE__);
|
||||||
$server = omb_oauth_server();
|
$server = omb_oauth_server();
|
||||||
common_debug('fetching the access token', __FILE__);
|
common_debug('fetching the access token', __FILE__);
|
||||||
|
|
|
@ -69,6 +69,17 @@ class AllAction extends ProfileAction
|
||||||
sprintf(_('Feed for friends of %s (Atom)'), $this->user->nickname)));
|
sprintf(_('Feed for friends of %s (Atom)'), $this->user->nickname)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'all', array('nickname' => $this->user->nickname));
|
||||||
|
}
|
||||||
|
|
||||||
function showLocalNav()
|
function showLocalNav()
|
||||||
{
|
{
|
||||||
$nav = new PersonalGroupNav($this);
|
$nav = new PersonalGroupNav($this);
|
||||||
|
|
|
@ -221,4 +221,15 @@ class FavoritedAction extends Action
|
||||||
$this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
|
$this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
|
||||||
$this->page, 'favorited');
|
$this->page, 'favorited');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'favorited');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ class FinishremotesubscribeAction extends Action
|
||||||
common_debug('stored request: '.print_r($omb,true), __FILE__);
|
common_debug('stored request: '.print_r($omb,true), __FILE__);
|
||||||
|
|
||||||
common_remove_magic_from_request();
|
common_remove_magic_from_request();
|
||||||
$req = OAuthRequest::from_request();
|
$req = OAuthRequest::from_request('POST', common_local_url('finishuserauthorization'));
|
||||||
|
|
||||||
$token = $req->get_parameter('oauth_token');
|
$token = $req->get_parameter('oauth_token');
|
||||||
|
|
||||||
|
|
|
@ -137,4 +137,15 @@ class GroupmembersAction extends Action
|
||||||
$this->page, 'groupmembers',
|
$this->page, 'groupmembers',
|
||||||
array('nickname' => $this->group->nickname));
|
array('nickname' => $this->group->nickname));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'groupmembers', array('nickname' => $this->group->nickname));
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -129,4 +129,15 @@ class GroupsAction extends Action
|
||||||
$gbm = new GroupsByMembersSection($this);
|
$gbm = new GroupsByMembersSection($this);
|
||||||
$gbm->show();
|
$gbm->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'groups', array('nickname' => $this->group->nickname));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,17 @@ class InboxAction extends MailboxAction
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'inbox', array('nickname' => $this->user->nickname));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the messages for this user and this page
|
* Retrieve the messages for this user and this page
|
||||||
*
|
*
|
||||||
|
|
|
@ -184,11 +184,13 @@ class SearchNoticeListItem extends NoticeListItem {
|
||||||
function highlight($text, $terms)
|
function highlight($text, $terms)
|
||||||
{
|
{
|
||||||
/* Highligh search terms */
|
/* Highligh search terms */
|
||||||
$pattern = '/('.implode('|', array_map('htmlspecialchars', $terms)).')/i';
|
$options = implode('|', array_map('preg_quote', array_map('htmlspecialchars', $terms),
|
||||||
|
array_fill(0, sizeof($terms), '/')));
|
||||||
|
$pattern = "/($options)/i";
|
||||||
$result = preg_replace($pattern, '<strong>\\1</strong>', $text);
|
$result = preg_replace($pattern, '<strong>\\1</strong>', $text);
|
||||||
|
|
||||||
/* Remove highlighting from inside links, loop incase multiple highlights in links */
|
/* Remove highlighting from inside links, loop incase multiple highlights in links */
|
||||||
$pattern = '/(href="[^"]*)<strong>('.implode('|', array_map('htmlspecialchars', $terms)).')<\/strong>([^"]*")/iU';
|
$pattern = '/(href="[^"]*)<strong>('.$options.')<\/strong>([^"]*")/iU';
|
||||||
do {
|
do {
|
||||||
$result = preg_replace($pattern, '\\1\\2\\3', $result, -1, $count);
|
$result = preg_replace($pattern, '\\1\\2\\3', $result, -1, $count);
|
||||||
} while ($count);
|
} while ($count);
|
||||||
|
|
|
@ -62,6 +62,17 @@ class OutboxAction extends MailboxAction
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'outbox', array('nickname' => $this->user->nickname));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retrieve the messages for this user and this page
|
* retrieve the messages for this user and this page
|
||||||
*
|
*
|
||||||
|
|
|
@ -28,7 +28,7 @@ class PostnoticeAction extends Action
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
try {
|
try {
|
||||||
common_remove_magic_from_request();
|
common_remove_magic_from_request();
|
||||||
$req = OAuthRequest::from_request();
|
$req = OAuthRequest::from_request('POST', common_local_url('postnotice'));
|
||||||
# Note: server-to-server function!
|
# Note: server-to-server function!
|
||||||
$server = omb_oauth_server();
|
$server = omb_oauth_server();
|
||||||
list($consumer, $token) = $server->verify_request($req);
|
list($consumer, $token) = $server->verify_request($req);
|
||||||
|
|
|
@ -135,6 +135,17 @@ class PublicAction extends Action
|
||||||
_('Public Stream Feed (Atom)')));
|
_('Public Stream Feed (Atom)')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'public');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extra head elements
|
* Extra head elements
|
||||||
*
|
*
|
||||||
|
|
|
@ -138,6 +138,17 @@ class RepliesAction extends Action
|
||||||
return array(new Feed(Feed::RSS1, $rssurl, $rsstitle));
|
return array(new Feed(Feed::RSS1, $rssurl, $rsstitle));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'replies', array('nickname' => $this->user->nickname));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* show the personal group nav
|
* show the personal group nav
|
||||||
*
|
*
|
||||||
|
|
|
@ -69,7 +69,7 @@ class RequesttokenAction extends Action
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
try {
|
try {
|
||||||
common_remove_magic_from_request();
|
common_remove_magic_from_request();
|
||||||
$req = OAuthRequest::from_request();
|
$req = OAuthRequest::from_request('POST', common_local_url('requesttoken'));
|
||||||
$server = omb_oauth_server();
|
$server = omb_oauth_server();
|
||||||
$token = $server->fetch_request_token($req);
|
$token = $server->fetch_request_token($req);
|
||||||
print $token;
|
print $token;
|
||||||
|
|
|
@ -150,6 +150,18 @@ class ShowfavoritesAction extends Action
|
||||||
return array(new Feed(Feed::RSS1, $feedurl, $feedtitle));
|
return array(new Feed(Feed::RSS1, $feedurl, $feedtitle));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'showfavorites', array('nickname' => $this->user->nickname));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* show the personal group nav
|
* show the personal group nav
|
||||||
*
|
*
|
||||||
|
|
|
@ -311,6 +311,17 @@ class ShowgroupAction extends Action
|
||||||
$this->group->nickname)));
|
$this->group->nickname)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'showgroup', array('nickname' => $this->group->nickname));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill in the sidebar.
|
* Fill in the sidebar.
|
||||||
*
|
*
|
||||||
|
|
|
@ -135,6 +135,17 @@ class ShowstreamAction extends ProfileAction
|
||||||
sprintf(_('FOAF for %s'), $this->user->nickname)));
|
sprintf(_('FOAF for %s'), $this->user->nickname)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'showstream', array('nickname' => $this->user->nickname));
|
||||||
|
}
|
||||||
|
|
||||||
function extraHead()
|
function extraHead()
|
||||||
{
|
{
|
||||||
// for remote subscriptions etc.
|
// for remote subscriptions etc.
|
||||||
|
|
|
@ -77,6 +77,17 @@ class TagAction extends Action
|
||||||
sprintf(_('Feed for tag %s'), $this->tag)));
|
sprintf(_('Feed for tag %s'), $this->tag)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output document relationship links
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
$this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
|
||||||
|
$this->page, 'tag', array('tag' => $this->tag));
|
||||||
|
}
|
||||||
|
|
||||||
function showPageNotice()
|
function showPageNotice()
|
||||||
{
|
{
|
||||||
return sprintf(_('Messages tagged "%s", most recent first'), $this->tag);
|
return sprintf(_('Messages tagged "%s", most recent first'), $this->tag);
|
||||||
|
|
|
@ -29,7 +29,7 @@ class UpdateprofileAction extends Action
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
try {
|
try {
|
||||||
common_remove_magic_from_request();
|
common_remove_magic_from_request();
|
||||||
$req = OAuthRequest::from_request();
|
$req = OAuthRequest::from_request('POST', common_local_url('updateprofile'));
|
||||||
# Note: server-to-server function!
|
# Note: server-to-server function!
|
||||||
$server = omb_oauth_server();
|
$server = omb_oauth_server();
|
||||||
list($consumer, $token) = $server->verify_request($req);
|
list($consumer, $token) = $server->verify_request($req);
|
||||||
|
|
40
install.php
40
install.php
|
@ -1,4 +1,22 @@
|
||||||
<?
|
<?php
|
||||||
|
/**
|
||||||
|
* Laconica - a distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2009, Controlez-Vous, Inc.
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
define('INSTALLDIR', dirname(__FILE__));
|
define('INSTALLDIR', dirname(__FILE__));
|
||||||
|
|
||||||
function main()
|
function main()
|
||||||
|
@ -19,12 +37,12 @@ function checkPrereqs()
|
||||||
{
|
{
|
||||||
if (file_exists(INSTALLDIR.'/config.php')) {
|
if (file_exists(INSTALLDIR.'/config.php')) {
|
||||||
?><p class="error">Config file "config.php" already exists.</p>
|
?><p class="error">Config file "config.php" already exists.</p>
|
||||||
<?
|
<?php
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version_compare(PHP_VERSION, '5.0.0', '<')) {
|
if (version_compare(PHP_VERSION, '5.0.0', '<')) {
|
||||||
?><p class="error">Require PHP version 5 or greater.</p><?
|
?><p class="error">Require PHP version 5 or greater.</p><?php
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,23 +52,23 @@ function checkPrereqs()
|
||||||
|
|
||||||
foreach ($reqs as $req) {
|
foreach ($reqs as $req) {
|
||||||
if (!checkExtension($req)) {
|
if (!checkExtension($req)) {
|
||||||
?><p class="error">Cannot load required extension "<?= $req ?>".</p><?
|
?><p class="error">Cannot load required extension "<?php echo $req; ?>".</p><?php
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_writable(INSTALLDIR)) {
|
if (!is_writable(INSTALLDIR)) {
|
||||||
?><p class="error">Cannot write config file to "<?= INSTALLDIR ?>".</p>
|
?><p class="error">Cannot write config file to "<?php echo INSTALLDIR; ?>".</p>
|
||||||
<p>On your server, try this command:</p>
|
<p>On your server, try this command:</p>
|
||||||
<blockquote>chmod a+w <?= INSTALLDIR ?></blockquote>
|
<blockquote>chmod a+w <?php echo INSTALLDIR; ?></blockquote>
|
||||||
<?
|
<?php
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_writable(INSTALLDIR.'/avatar/')) {
|
if (!is_writable(INSTALLDIR.'/avatar/')) {
|
||||||
?><p class="error">Cannot write avatar directory "<?= INSTALLDIR ?>/avatar/".</p>
|
?><p class="error">Cannot write avatar directory "<?php echo INSTALLDIR; ?>/avatar/".</p>
|
||||||
<p>On your server, try this command:</p>
|
<p>On your server, try this command:</p>
|
||||||
<blockquote>chmod a+w <?= INSTALLDIR ?>/avatar/</blockquote>
|
<blockquote>chmod a+w <?php echo INSTALLDIR; ?>/avatar/</blockquote>
|
||||||
<?
|
<?
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -211,7 +229,7 @@ function handlePost()
|
||||||
function writeConf($sitename, $sqlUrl)
|
function writeConf($sitename, $sqlUrl)
|
||||||
{
|
{
|
||||||
$res = file_put_contents(INSTALLDIR.'/config.php',
|
$res = file_put_contents(INSTALLDIR.'/config.php',
|
||||||
"<?\n".
|
"<?php\n".
|
||||||
"\$config['site']['name'] = \"$sitename\";\n\n".
|
"\$config['site']['name'] = \"$sitename\";\n\n".
|
||||||
"\$config['db']['database'] = \"$sqlUrl\";\n\n");
|
"\$config['db']['database'] = \"$sqlUrl\";\n\n");
|
||||||
return $res;
|
return $res;
|
||||||
|
@ -247,7 +265,7 @@ function runDbScript($filename, $conn)
|
||||||
<div id="core">
|
<div id="core">
|
||||||
<div id="content">
|
<div id="content">
|
||||||
<h1>Install Laconica</h1>
|
<h1>Install Laconica</h1>
|
||||||
<? main() ?>
|
<?php main(); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -124,6 +124,7 @@ class Action extends HTMLOutputter // lawsuit
|
||||||
$this->showShortcutIcon();
|
$this->showShortcutIcon();
|
||||||
$this->showStylesheets();
|
$this->showStylesheets();
|
||||||
$this->showScripts();
|
$this->showScripts();
|
||||||
|
$this->showRelationshipLinks();
|
||||||
$this->showOpenSearch();
|
$this->showOpenSearch();
|
||||||
$this->showFeeds();
|
$this->showFeeds();
|
||||||
$this->showDescription();
|
$this->showDescription();
|
||||||
|
@ -260,6 +261,19 @@ class Action extends HTMLOutputter // lawsuit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show document relationship links
|
||||||
|
*
|
||||||
|
* SHOULD overload
|
||||||
|
*
|
||||||
|
* @return nothing
|
||||||
|
*/
|
||||||
|
function showRelationshipLinks()
|
||||||
|
{
|
||||||
|
// output <link> elements with appropriate HTML4.01 link types:
|
||||||
|
// http://www.w3.org/TR/html401/types.html#type-links
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show OpenSearch headers
|
* Show OpenSearch headers
|
||||||
*
|
*
|
||||||
|
@ -1040,4 +1054,36 @@ class Action extends HTMLOutputter // lawsuit
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate document metadata for sequential navigation
|
||||||
|
*
|
||||||
|
* @param boolean $have_before is there something before?
|
||||||
|
* @param boolean $have_after is there something after?
|
||||||
|
* @param integer $page current page
|
||||||
|
* @param string $action current action
|
||||||
|
* @param array $args rest of query arguments
|
||||||
|
*
|
||||||
|
* @return nothing
|
||||||
|
*/
|
||||||
|
function sequenceRelationships($have_next, $have_previous, $page, $action, $args=null)
|
||||||
|
{
|
||||||
|
// Outputs machine-readable pagination in <link> elements.
|
||||||
|
// Pattern taken from $this->pagination() method.
|
||||||
|
|
||||||
|
// "next" is equivalent to "after"
|
||||||
|
if ($have_next) {
|
||||||
|
$pargs = array('page' => $page-1);
|
||||||
|
$this->element('link', array('rel' => 'next',
|
||||||
|
'href' => common_local_url($action, $args, $pargs),
|
||||||
|
'title' => _('Next')));
|
||||||
|
}
|
||||||
|
// "previous" is equivalent to "before"
|
||||||
|
if ($have_previous=true) { // FIXME
|
||||||
|
$pargs = array('page' => $page+1);
|
||||||
|
$this->element('link', array('rel' => 'prev',
|
||||||
|
'href' => common_local_url($action, $args, $pargs),
|
||||||
|
'title' => _('Previous')));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -179,6 +179,11 @@ class ProfileAction extends Action
|
||||||
$this->element('h2', null, _('Statistics'));
|
$this->element('h2', null, _('Statistics'));
|
||||||
|
|
||||||
// Other stats...?
|
// Other stats...?
|
||||||
|
$this->elementStart('dl', 'entity_user-id');
|
||||||
|
$this->element('dt', null, _('User ID'));
|
||||||
|
$this->element('dd', null, $this->profile->id);
|
||||||
|
$this->elementEnd('dl');
|
||||||
|
|
||||||
$this->elementStart('dl', 'entity_member-since');
|
$this->elementStart('dl', 'entity_member-since');
|
||||||
$this->element('dt', null, _('Member since'));
|
$this->element('dt', null, _('Member since'));
|
||||||
$this->element('dd', null, date('j M Y',
|
$this->element('dd', null, date('j M Y',
|
||||||
|
|
|
@ -99,7 +99,7 @@ class LinkbackPlugin extends Plugin
|
||||||
|
|
||||||
if (array_key_exists('X-Pingback', $result->headers)) {
|
if (array_key_exists('X-Pingback', $result->headers)) {
|
||||||
$pb = $result->headers['X-Pingback'];
|
$pb = $result->headers['X-Pingback'];
|
||||||
} else if (preg_match('/<link rel="pingback" href="([^"]+)" ?/?>/',
|
} else if (preg_match('/<link rel="pingback" href="([^"]+)" ?\/?>/',
|
||||||
$result->body,
|
$result->body,
|
||||||
$match)) {
|
$match)) {
|
||||||
$pb = $match[1];
|
$pb = $match[1];
|
||||||
|
|
83
scripts/triminboxes.php
Normal file
83
scripts/triminboxes.php
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Laconica - a distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2009, Control Yourself, Inc.
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
# Abort if called from a web server
|
||||||
|
if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
|
||||||
|
print "This script must be run from the command line\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ini_set("max_execution_time", "0");
|
||||||
|
ini_set("max_input_time", "0");
|
||||||
|
set_time_limit(0);
|
||||||
|
mb_internal_encoding('UTF-8');
|
||||||
|
|
||||||
|
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
||||||
|
define('LACONICA', true);
|
||||||
|
|
||||||
|
require_once(INSTALLDIR . '/lib/common.php');
|
||||||
|
|
||||||
|
$user = new User();
|
||||||
|
if ($argc > 1) {
|
||||||
|
$user->whereAdd('id > ' . $argv[1]);
|
||||||
|
}
|
||||||
|
$cnt = $user->find();
|
||||||
|
|
||||||
|
while ($user->fetch()) {
|
||||||
|
|
||||||
|
$inbox_entry = new Notice_inbox();
|
||||||
|
$inbox_entry->user_id = $user->id;
|
||||||
|
$inbox_entry->orderBy('created DESC');
|
||||||
|
$inbox_entry->limit(1000, 1);
|
||||||
|
|
||||||
|
$id = null;
|
||||||
|
|
||||||
|
if ($inbox_entry->find(true)) {
|
||||||
|
$id = $inbox_entry->notice_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$inbox_entry->free();
|
||||||
|
unset($inbox_entry);
|
||||||
|
|
||||||
|
if (is_null($id)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$start = microtime(true);
|
||||||
|
|
||||||
|
$old_inbox = new Notice_inbox();
|
||||||
|
$cnt = $old_inbox->query('DELETE from notice_inbox WHERE user_id = ' . $user->id . ' AND notice_id < ' . $id);
|
||||||
|
$old_inbox->free();
|
||||||
|
unset($old_inbox);
|
||||||
|
|
||||||
|
print "Deleted $cnt notices for $user->nickname ($user->id).\n";
|
||||||
|
|
||||||
|
$finish = microtime(true);
|
||||||
|
|
||||||
|
$delay = 3.0 * ($finish - $start);
|
||||||
|
|
||||||
|
print "Delaying $delay seconds...";
|
||||||
|
|
||||||
|
// Wait to let slaves catch up
|
||||||
|
|
||||||
|
usleep($delay * 1000000);
|
||||||
|
|
||||||
|
print "DONE.\n";
|
||||||
|
}
|
|
@ -72,7 +72,6 @@ border-top-color:#D1D9E4;
|
||||||
border-top-color:#97BFD1;
|
border-top-color:#97BFD1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#content .notice p.entry-content a:visited {
|
#content .notice p.entry-content a:visited {
|
||||||
background-color:#fcfcfc;
|
background-color:#fcfcfc;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +83,6 @@ background-color:#fcfffc;
|
||||||
background-color:#CEE1E9;
|
background-color:#CEE1E9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#notice_text-count {
|
#notice_text-count {
|
||||||
color:#333;
|
color:#333;
|
||||||
}
|
}
|
||||||
|
@ -114,7 +112,6 @@ background-color:rgba(255, 255, 255, 0.2);
|
||||||
background-color:rgba(255, 255, 255, 0.7);
|
background-color:rgba(255, 255, 255, 0.7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.error {
|
.error {
|
||||||
background-color:#F7E8E8;
|
background-color:#F7E8E8;
|
||||||
}
|
}
|
||||||
|
@ -122,7 +119,6 @@ background-color:#F7E8E8;
|
||||||
background-color:#EFF3DC;
|
background-color:#EFF3DC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#anon_notice {
|
#anon_notice {
|
||||||
background-color:#97BFD1;
|
background-color:#97BFD1;
|
||||||
color:#fff;
|
color:#fff;
|
||||||
|
@ -133,7 +129,6 @@ border-color:#fff;
|
||||||
background-color:#A9BF4F;
|
background-color:#A9BF4F;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#export_data li a {
|
#export_data li a {
|
||||||
background-repeat:no-repeat;
|
background-repeat:no-repeat;
|
||||||
background-position:0 45%;
|
background-position:0 45%;
|
||||||
|
@ -186,8 +181,6 @@ background-image:url(../../base/images/icons/twotone/green/mail.gif);
|
||||||
background-image:url(../../base/images/icons/twotone/green/shield.gif);
|
background-image:url(../../base/images/icons/twotone/green/shield.gif);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* NOTICES */
|
/* NOTICES */
|
||||||
.notices li.over {
|
.notices li.over {
|
||||||
background-color:#fcfcfc;
|
background-color:#fcfcfc;
|
||||||
|
@ -230,7 +223,6 @@ background-color:#fcfcfc;
|
||||||
}
|
}
|
||||||
/*END: NOTICES */
|
/*END: NOTICES */
|
||||||
|
|
||||||
|
|
||||||
#new_group a {
|
#new_group a {
|
||||||
background:transparent url(../../base/images/icons/twotone/green/news.gif) no-repeat 0 45%;
|
background:transparent url(../../base/images/icons/twotone/green/news.gif) no-repeat 0 45%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,6 @@ border-top-color:#CEE1E9;
|
||||||
border-top-color:#87B4C8;
|
border-top-color:#87B4C8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#content .notice p.entry-content a:visited {
|
#content .notice p.entry-content a:visited {
|
||||||
background-color:#fcfcfc;
|
background-color:#fcfcfc;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +83,6 @@ background-color:#fcfffc;
|
||||||
background-color:#CEE1E9;
|
background-color:#CEE1E9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#notice_text-count {
|
#notice_text-count {
|
||||||
color:#333;
|
color:#333;
|
||||||
}
|
}
|
||||||
|
@ -114,7 +112,6 @@ background-color:rgba(135, 180, 200, 0.3);
|
||||||
background-color:rgba(255, 255, 255, 0.7);
|
background-color:rgba(255, 255, 255, 0.7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.error {
|
.error {
|
||||||
background-color:#F7E8E8;
|
background-color:#F7E8E8;
|
||||||
}
|
}
|
||||||
|
@ -122,7 +119,6 @@ background-color:#F7E8E8;
|
||||||
background-color:#EFF3DC;
|
background-color:#EFF3DC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#anon_notice {
|
#anon_notice {
|
||||||
background-color:#87B4C8;
|
background-color:#87B4C8;
|
||||||
color:#fff;
|
color:#fff;
|
||||||
|
@ -133,7 +129,6 @@ border-color:#fff;
|
||||||
background-color:#9BB43E;
|
background-color:#9BB43E;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#export_data li a {
|
#export_data li a {
|
||||||
background-repeat:no-repeat;
|
background-repeat:no-repeat;
|
||||||
background-position:0 45%;
|
background-position:0 45%;
|
||||||
|
@ -186,8 +181,6 @@ background-image:url(../../base/images/icons/twotone/green/mail.gif);
|
||||||
background-image:url(../../base/images/icons/twotone/green/shield.gif);
|
background-image:url(../../base/images/icons/twotone/green/shield.gif);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* NOTICES */
|
/* NOTICES */
|
||||||
.notices li.over {
|
.notices li.over {
|
||||||
background-color:#fcfcfc;
|
background-color:#fcfcfc;
|
||||||
|
@ -230,7 +223,6 @@ background-color:#fcfcfc;
|
||||||
}
|
}
|
||||||
/*END: NOTICES */
|
/*END: NOTICES */
|
||||||
|
|
||||||
|
|
||||||
#new_group a {
|
#new_group a {
|
||||||
background:transparent url(../../base/images/icons/twotone/green/news.gif) no-repeat 0 45%;
|
background:transparent url(../../base/images/icons/twotone/green/news.gif) no-repeat 0 45%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */
|
/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */
|
||||||
/* Simplified for mobile by Ken Sheppardson http://identi.ca/kshep */
|
/* Simplified for mobile by Ken Sheppardson http://identi.ca/kshep */
|
||||||
|
|
||||||
|
@import url(../../base/css/display.css);
|
||||||
|
|
||||||
html {}
|
html {}
|
||||||
body {
|
body {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -28,7 +30,6 @@ h1 {
|
||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#wrap {
|
#wrap {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
@ -210,7 +211,6 @@ p#branding a {
|
||||||
background-color: #ce3728;
|
background-color: #ce3728;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ----- Stream -----*/
|
/* ----- Stream -----*/
|
||||||
|
|
||||||
#notices {
|
#notices {
|
||||||
|
@ -402,8 +402,6 @@ ul.subscriptions li, ul.subscribers li {
|
||||||
}
|
}
|
||||||
/* ----- End Subscriptions & Subscribers -----*/
|
/* ----- End Subscriptions & Subscribers -----*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pagination {
|
#pagination {
|
||||||
margin: 18px auto;
|
margin: 18px auto;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user