Merge branch '0.8.x' of git@gitorious.org:laconica/mainline into 0.8.x

This commit is contained in:
Evan Prodromou 2009-08-27 14:18:51 -07:00
commit bbb830e14c
7 changed files with 283 additions and 22 deletions

6
README
View File

@ -622,10 +622,10 @@ key and secret, e.g.:
In Facebook's application editor, specify the following URLs for your app: In Facebook's application editor, specify the following URLs for your app:
- Callback URL: http://example.net/mublog/facebook/ - Canvas Callback URL: http://example.net/mublog/facebook/
- Post-Remove URL: http://example.net/mublog/facebook/remove - Post-Remove Callback URL: http://example.net/mublog/facebook/remove
- Post-Add Redirect URL: http://apps.facebook.com/yourapp/ - Post-Add Redirect URL: http://apps.facebook.com/yourapp/
- Canvas URL: http://apps.facebook.com/yourapp/ - Canvas Page URL: http://apps.facebook.com/yourapp/
(Replace 'example.net' with your host's URL, 'mublog' with the path (Replace 'example.net' with your host's URL, 'mublog' with the path
to your StatusNet installation, and 'yourapp' with the name of the to your StatusNet installation, and 'yourapp' with the name of the

View File

@ -19,6 +19,169 @@
define('INSTALLDIR', dirname(__FILE__)); define('INSTALLDIR', dirname(__FILE__));
$external_libraries=array(
array(
'name'=>'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'=>'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_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'
)
);
function main() function main()
{ {
if (!checkPrereqs()) if (!checkPrereqs())
@ -26,13 +189,31 @@ function main()
return; return;
} }
if ($_SERVER['REQUEST_METHOD'] == 'POST') { if( $_GET['checklibs'] ){
handlePost(); showLibs();
} else { }else{
showForm(); if ($_SERVER['REQUEST_METHOD'] == 'POST') {
handlePost();
} else {
showForm();
}
} }
} }
function haveExternalLibrary($external_library)
{
if(isset($external_library['include']) && ! include_once($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;
}
function checkPrereqs() function checkPrereqs()
{ {
$pass = true; $pass = true;
@ -94,6 +275,69 @@ function checkExtension($name)
return true; return true;
} }
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<<<E_O_T
<div class="instructions">
<p>Laconica 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.</p>
<p>On Debian based distributions, such as Ubuntu, use a package manager (such as &quot;aptitude&quot;, &quot;apt-get&quot;, and &quot;synaptic&quot;) to install the package listed.</p>
<p>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 &quot;yum&quot;, &quot;apt-rpm&quot;, and &quot;up2date&quot;) to install the package listed.</p>
<p>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 &quot;pear install &lt;name&gt;&quot;.</p>
</div>
<h2>Absent Libraries</h2>
<ul id="absent_libraries">
E_O_T;
foreach($absent_libraries as $library)
{
echo '<li>';
if($library['url']){
echo '<a href=">'.$library['url'].'">'.htmlentities($library['name']).'</a>';
}else{
echo htmlentities($library['name']);
}
echo '<ul>';
if($library['deb']){
echo '<li class="deb package">deb: <a href="apt:' . urlencode($library['deb']) . '">' . htmlentities($library['deb']) . '</a></li>';
}
if($library['rpm']){
echo '<li class="rpm package">rpm: ' . htmlentities($library['rpm']) . '</li>';
}
if($library['pear']){
echo '<li class="pear package">pear: ' . htmlentities($library['pear']) . '</li>';
}
echo '</ul>';
}
echo<<<E_O_T
</ul>
<h2>Installed Libraries</h2>
<ul id="present_libraries">
E_O_T;
foreach($present_libraries as $library)
{
echo '<li>';
if($library['url']){
echo '<a href=">'.$library['url'].'">'.htmlentities($library['name']).'</a>';
}else{
echo htmlentities($library['name']);
}
echo '</li>';
}
echo<<<E_O_T
</ul>
E_O_T;
}
function showForm() function showForm()
{ {
echo<<<E_O_T echo<<<E_O_T
@ -105,6 +349,7 @@ function showForm()
<dd> <dd>
<div class="instructions"> <div class="instructions">
<p>Enter your database connection information below to initialize the database.</p> <p>Enter your database connection information below to initialize the database.</p>
<p>Laconica bundles a number of libraries for ease of installation. <a href="?checklibs=true">You can see what bundled libraries you are using, versus what libraries are installed on your server.</a>
</div> </div>
</dd> </dd>
</dl> </dl>

View File

@ -27,11 +27,12 @@ $(document).ready(function() {
} }
} }
/* rgb2hex written by R0bb13 <robertorebollo@gmail.com> */
function rgb2hex(rgb) { function rgb2hex(rgb) {
if (rgb.slice(0,1) == '#') { return rgb; }
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
return '#' + dec2hex(rgb[1]) + dec2hex(rgb[2]) + dec2hex(rgb[3]); return '#' + dec2hex(rgb[1]) + dec2hex(rgb[2]) + dec2hex(rgb[3]);
} }
/* dec2hex written by R0bb13 <robertorebollo@gmail.com> */
function dec2hex(x) { function dec2hex(x) {
hexDigits = new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); hexDigits = new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
return isNaN(x) ? '00' : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16]; return isNaN(x) ? '00' : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];

View File

@ -96,6 +96,7 @@ class FacebookAction extends Action
function showStylesheets() function showStylesheets()
{ {
$this->cssLink('css/display.css', 'base'); $this->cssLink('css/display.css', 'base');
$this->cssLink('css/display.css',null,'screen, projection, tv');
$this->cssLink('css/facebookapp.css', 'base'); $this->cssLink('css/facebookapp.css', 'base');
} }

View File

@ -178,20 +178,38 @@ function format_attachments($attachments)
$fbattachment = array(); $fbattachment = array();
$fbattachment['media'] = array(); $fbattachment['media'] = array();
// Facebook only supports one attachment per item foreach($attachments as $attachment)
{
$fbmedia = get_fbmedia_for_attachment($attachment);
if($fbmedia){
$fbattachment['media'][]=$fbmedia;
}else{
$fbattachment['name'] = ($attachment->title ?
$attachment->title : $attachment->url);
$fbattachment['href'] = $attachment->url;
}
}
if(count($fbattachment['media'])>0){
unset($fbattachment['name']);
unset($fbattachment['href']);
}
return $fbattachment;
}
$attachment = $attachments[0]; /**
* given an File objects, returns an associative array suitable for Facebook media
*/
function get_fbmedia_for_attachment($attachment)
{
$fbmedia = array(); $fbmedia = array();
if (strncmp($attachment->mimetype, 'image/', strlen('image/')) == 0) { if (strncmp($attachment->mimetype, 'image/', strlen('image/')) == 0) {
$fbmedia['type'] = 'image'; $fbmedia['type'] = 'image';
$fbmedia['src'] = $attachment->url; $fbmedia['src'] = $attachment->url;
$fbmedia['href'] = $attachment->url; $fbmedia['href'] = $attachment->url;
$fbattachment['media'][] = $fbmedia;
} else if ($attachment->mimetype == 'audio/mpeg') { } else if ($attachment->mimetype == 'audio/mpeg') {
$fbmedia['type'] = 'mp3'; $fbmedia['type'] = 'mp3';
$fbmedia['src'] = $attachment->url; $fbmedia['src'] = $attachment->url;
$fbattachment['media'][] = $fbmedia;
}else if ($attachment->mimetype == 'application/x-shockwave-flash') { }else if ($attachment->mimetype == 'application/x-shockwave-flash') {
$fbmedia['type'] = 'flash'; $fbmedia['type'] = 'flash';
@ -200,14 +218,10 @@ function format_attachments($attachments)
// $fbmedia['imgsrc']=''; // $fbmedia['imgsrc']='';
$fbmedia['swfsrc'] = $attachment->url; $fbmedia['swfsrc'] = $attachment->url;
$fbattachment['media'][] = $fbmedia;
}else{ }else{
$fbattachment['name'] = ($attachment->title ? return false;
$attachment->title : $attachment->url);
$fbattachment['href'] = $attachment->url;
} }
return $fbmedia;
return $fbattachment;
} }
function remove_facebook_app($flink) function remove_facebook_app($flink)

View File

@ -413,7 +413,7 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) {
// Start off with a regex // Start off with a regex
$regex = '#'. $regex = '#'.
'(?:^|[\s\(\)\[\]\{\}\\\'\\\";]+)(?![\@\!\#])'. '(?:^|[\s\(\)\[\]\{\}\\\'\\\";]+)(?![\@\!\#])'.
'(?P<url>'. '('.
'(?:'. '(?:'.
'(?:'. //Known protocols '(?:'. //Known protocols
'(?:'. '(?:'.
@ -454,7 +454,7 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) {
} }
function callback_helper($matches, $callback, $notice_id) { function callback_helper($matches, $callback, $notice_id) {
$url=$matches['url']; $url=$matches[1];
$left = strpos($matches[0],$url); $left = strpos($matches[0],$url);
$right = $left+strlen($url); $right = $left+strlen($url);

View File

@ -10,7 +10,7 @@ define('STATUSNET', true);
require_once INSTALLDIR . '/lib/common.php'; require_once INSTALLDIR . '/lib/common.php';
class HashTagDetectionTest extends PHPUnit_Framework_TestCase class HashTagDetectionTests extends PHPUnit_Framework_TestCase
{ {
/** /**
* @dataProvider provider * @dataProvider provider