Merge branch 'master' of git://github.com/friendika/friendika

Conflicts:
	addon/twitter/twitter.php
This commit is contained in:
Tobias Diekershoff 2011-03-13 11:37:24 +01:00
commit a2ee5ebe42
41 changed files with 1674 additions and 127 deletions

1
.gitignore vendored
View file

@ -4,5 +4,6 @@ wip/*
include/jquery-1.4.2.min.js include/jquery-1.4.2.min.js
*.log *.log
*.out *.out
*.version*
push* push*
home.html home.html

View file

@ -34,7 +34,7 @@ php.ini file
- Mysql 5.x - Mysql 5.x
- ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks - ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks
(Windows) [Note: other options are presented in Section 7 of this document] (Windows) [Note: other options are presented in Section 8 of this document]
- Installation into a top-level domain or sub-domain (without a - Installation into a top-level domain or sub-domain (without a
directory/path component in the URL) is preferred. Directory paths will directory/path component in the URL) is preferred. Directory paths will
@ -53,10 +53,15 @@ you might have trouble getting everything to work.]
3. Create an empty database and note the access details (hostname, username, 3. Create an empty database and note the access details (hostname, username,
password, database name). password, database name).
4. Visit your website with a web browser and follow the instructions. Please
4. If you know in advance that it will be impossible for the web server to
write or create files in your web directory, create an empty file called
.htconfig.php and make it writable by the web server.
5. Visit your website with a web browser and follow the instructions. Please
note any error messages and correct these before continuing. note any error messages and correct these before continuing.
5. *If* the automated installation fails for any reason, check the following: 6. *If* the automated installation fails for any reason, check the following:
- ".htconfig.php" exists - ".htconfig.php" exists
If not, edit htconfig.php and change system settings. Rename If not, edit htconfig.php and change system settings. Rename
@ -65,7 +70,7 @@ to .htconfig.php
If not, import the contents of "database.sql" with phpmyadmin If not, import the contents of "database.sql" with phpmyadmin
or mysql command line or mysql command line
6. At this point visit your website again, and register your personal account. 7. At this point visit your website again, and register your personal account.
Registration errors should all be recoverable automatically. Registration errors should all be recoverable automatically.
If you get any *critical* failure at this point, it generally indicates the If you get any *critical* failure at this point, it generally indicates the
database was not installed correctly. You might wish to move/rename database was not installed correctly. You might wish to move/rename
@ -78,7 +83,7 @@ tables, so that you can start fresh.
**************************************************************************** ****************************************************************************
**************************************************************************** ****************************************************************************
7. Set up a cron job or scheduled task to run the poller once every 5-10 8. Set up a cron job or scheduled task to run the poller once every 5-10
minutes to pick up the recent "public" postings of your friends. Example: minutes to pick up the recent "public" postings of your friends. Example:
cd /base/directory; /path/to/php include/poller.php cd /base/directory; /path/to/php include/poller.php

View file

@ -6,3 +6,8 @@
#facebook-disable-wrapper { #facebook-disable-wrapper {
margin-top: 20px; margin-top: 20px;
} }
#facebook-post-default-form input {
margin-top: 20px;
margin-right: 20px;
}

View file

@ -95,6 +95,15 @@ function facebook_init(&$a) {
} }
function facebook_post(&$a) {
if(local_user()){
$value = ((x($_POST,'post_by_default')) ? intval($_POST['post_by_default']) : 0);
set_pconfig(local_user(),'facebook','post_by_default', $value);
}
return;
}
function facebook_content(&$a) { function facebook_content(&$a) {
if(! local_user()) { if(! local_user()) {
@ -107,6 +116,8 @@ function facebook_content(&$a) {
notice( t('Facebook disabled') . EOL); notice( t('Facebook disabled') . EOL);
} }
$fb_installed = get_pconfig(local_user(),'facebook','post');
$appid = get_config('facebook','appid'); $appid = get_config('facebook','appid');
if(! $appid) { if(! $appid) {
@ -119,14 +130,26 @@ function facebook_content(&$a) {
$o .= '<h3>' . t('Facebook Connect') . '</h3>'; $o .= '<h3>' . t('Facebook Connect') . '</h3>';
$o .= '<div id="facebook-enable-wrapper">'; if(! $fb_installed) {
$o .= '<div id="facebook-enable-wrapper">';
$o .= '<a href="https://www.facebook.com/dialog/oauth?client_id=' . $appid . '&redirect_uri=' $o .= '<a href="https://www.facebook.com/dialog/oauth?client_id=' . $appid . '&redirect_uri='
. $a->get_baseurl() . '/facebook/' . $a->user['nickname'] . '&scope=publish_stream,read_stream,offline_access">' . t('Install Facebook post connector') . '</a>'; . $a->get_baseurl() . '/facebook/' . $a->user['nickname'] . '&scope=publish_stream,read_stream,offline_access">' . t('Install Facebook post connector') . '</a>';
$o .= '</div><div id="facebook-disable-wrapper">'; $o .= '</div>';
}
$o .= '<a href="' . $a->get_baseurl() . '/facebook/remove' . '">' . t('Remove Facebook post connector') . '</a></div>'; if($fb_installed) {
$o .= '<div id="facebook-disable-wrapper">';
$o .= '<a href="' . $a->get_baseurl() . '/facebook/remove' . '">' . t('Remove Facebook post connector') . '</a></div>';
$o .= '<div id="facebook-post-default-form">';
$o .= '<form action="facebook" method="post" >';
$post_by_default = get_pconfig(local_user(),'facebook','post_by_default');
$checked = (($post_by_default) ? ' checked="checked" ' : '');
$o .= '<input type="checkbox" name="post_by_default" value="1"' . $checked . '/>' . ' ' . t('Post to Facebook by default') . '<br />';
$o .= '<input type="submit" name="submit" value="' . t('Submit') . '" /></form></div>';
}
return $o; return $o;
} }
@ -161,7 +184,7 @@ function facebook_jot_nets(&$a,&$b) {
$fb_post = get_pconfig(local_user(),'facebook','post'); $fb_post = get_pconfig(local_user(),'facebook','post');
if(intval($fb_post) == 1) { if(intval($fb_post) == 1) {
$fb_defpost = get_pconfig(local_user(),'facebook','post_by_default'); $fb_defpost = get_pconfig(local_user(),'facebook','post_by_default');
$selected = ((intval($fb_defpost == 1)) ? ' selected="selected" ' : ''); $selected = ((intval($fb_defpost) == 1) ? ' checked="checked" ' : '');
$b .= '<div class="profile-jot-net"><input type="checkbox" name="facebook_enable"' . $selected . 'value="1" /> ' $b .= '<div class="profile-jot-net"><input type="checkbox" name="facebook_enable"' . $selected . 'value="1" /> '
. t('Post to Facebook') . '</div>'; . t('Post to Facebook') . '</div>';
} }
@ -202,7 +225,7 @@ function facebook_post_hook(&$a,&$b) {
// make links readable before we strip the code // make links readable before we strip the code
$msg = preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/is",'$2 ($1)',$msg); $msg = preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/is",'$2 [$1]',$msg);
$msg = preg_replace("/\[img\](.+?)\[\/img\]/is", t('Image: ') . '$1',$msg); $msg = preg_replace("/\[img\](.+?)\[\/img\]/is", t('Image: ') . '$1',$msg);

View file

@ -73,7 +73,7 @@ function statusnet_jot_nets(&$a,&$b) {
$statusnet_post = get_pconfig(local_user(),'statusnet','post'); $statusnet_post = get_pconfig(local_user(),'statusnet','post');
if(intval($statusnet_post) == 1) { if(intval($statusnet_post) == 1) {
$statusnet_defpost = get_pconfig(local_user(),'statusnet','post_by_default'); $statusnet_defpost = get_pconfig(local_user(),'statusnet','post_by_default');
$selected = ((intval($statusnet_defpost == 1)) ? ' selected="selected" ' : ''); $selected = ((intval($statusnet_defpost) == 1) ? ' checked="checked" ' : '');
$b .= '<div class="profile-jot-net"><input type="checkbox" name="statusnet_enable"' . $selected . 'value="1" /> ' $b .= '<div class="profile-jot-net"><input type="checkbox" name="statusnet_enable"' . $selected . 'value="1" /> '
. t('Post to StatusNet') . '</div>'; . t('Post to StatusNet') . '</div>';
} }

View file

@ -59,7 +59,7 @@ function twitter_jot_nets(&$a,&$b) {
$tw_post = get_pconfig(local_user(),'twitter','post'); $tw_post = get_pconfig(local_user(),'twitter','post');
if(intval($tw_post) == 1) { if(intval($tw_post) == 1) {
$tw_defpost = get_pconfig(local_user(),'twitter','post_by_default'); $tw_defpost = get_pconfig(local_user(),'twitter','post_by_default');
$selected = ((intval($tw_defpost == 1)) ? ' selected="selected" ' : ''); $selected = ((intval($tw_defpost) == 1) ? ' checked="checked" ' : '');
$b .= '<div class="profile-jot-net"><input type="checkbox" name="twitter_enable"' . $selected . 'value="1" /> ' $b .= '<div class="profile-jot-net"><input type="checkbox" name="twitter_enable"' . $selected . 'value="1" /> '
. t('Post to Twitter') . '</div>'; . t('Post to Twitter') . '</div>';
} }
@ -138,7 +138,11 @@ function twitter_settings(&$a,&$s) {
* which the user can request a PIN to connect the account to a * which the user can request a PIN to connect the account to a
* account at Twitter. * account at Twitter.
*/ */
<<<<<<< HEAD
require_once('library/twitteroauth.php'); require_once('library/twitteroauth.php');
=======
require_once('library/twitteroauth.php');
>>>>>>> a912a0d3cae0ae9c873dcb5c45624a725bd2c2d6
$connection = new TwitterOAuth($ckey, $csecret); $connection = new TwitterOAuth($ckey, $csecret);
$request_token = $connection->getRequestToken(); $request_token = $connection->getRequestToken();
$token = $request_token['oauth_token']; $token = $request_token['oauth_token'];

View file

@ -2,9 +2,9 @@
set_time_limit(0); set_time_limit(0);
define ( 'BUILD_ID', 1039 ); define ( 'FRIENDIKA_VERSION', '2.1.915' );
define ( 'FRIENDIKA_VERSION', '2.10.0909' );
define ( 'DFRN_PROTOCOL_VERSION', '2.1' ); define ( 'DFRN_PROTOCOL_VERSION', '2.1' );
define ( 'DB_UPDATE_VERSION', 1040 );
define ( 'EOL', "<br />\r\n" ); define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@ -435,15 +435,15 @@ function check_config(&$a) {
$build = get_config('system','build'); $build = get_config('system','build');
if(! x($build)) if(! x($build))
$build = set_config('system','build',BUILD_ID); $build = set_config('system','build',DB_UPDATE_VERSION);
$url = get_config('system','url'); $url = get_config('system','url');
if(! x($url)) if(! x($url))
$url = set_config('system','url',$a->get_baseurl()); $url = set_config('system','url',$a->get_baseurl());
if($build != BUILD_ID) { if($build != DB_UPDATE_VERSION) {
$stored = intval($build); $stored = intval($build);
$current = intval(BUILD_ID); $current = intval(DB_UPDATE_VERSION);
if(($stored < $current) && file_exists('update.php')) { if(($stored < $current) && file_exists('update.php')) {
// We're reporting a different version than what is currently installed. // We're reporting a different version than what is currently installed.
// Run any existing update scripts to bring the database up to current. // Run any existing update scripts to bring the database up to current.
@ -455,7 +455,7 @@ function check_config(&$a) {
$func($a); $func($a);
} }
} }
set_config('system','build', BUILD_ID); set_config('system','build', DB_UPDATE_VERSION);
} }
} }
@ -512,22 +512,70 @@ function check_config(&$a) {
foreach($plugins_arr as $p) { foreach($plugins_arr as $p) {
if(! in_array($p,$installed_arr)) { if(! in_array($p,$installed_arr)) {
logger("Addons: installing " . $p); logger("Addons: installing " . $p);
$t = filemtime('addon/' . $p . '/' . $p . '.php');
@include_once('addon/' . $p . '/' . $p . '.php'); @include_once('addon/' . $p . '/' . $p . '.php');
if(function_exists($p . '_install')) { if(function_exists($p . '_install')) {
$func = $p . '_install'; $func = $p . '_install';
$func(); $func();
$r = q("INSERT INTO `addon` (`name`, `installed`) VALUES ( '%s', 1 ) ", $r = q("INSERT INTO `addon` (`name`, `installed`, `timestamp`) VALUES ( '%s', 1, %d ) ",
dbesc($p) dbesc($p),
intval($t)
); );
} }
} }
} }
} }
load_hooks(); load_hooks();
return; return;
}} }}
// reload all updated plugins
if(! function_exists('reload_plugins')) {
function reload_plugins() {
$plugins = get_config('system','addon');
if(strlen($plugins)) {
$r = q("SELECT * FROM `addon` WHERE `installed` = 1");
if(count($r))
$installed = $r;
else
$installed = array();
$parr = explode(',',$plugins);
if(count($parr)) {
foreach($parr as $pl) {
$pl = trim($pl);
$t = filemtime('addon/' . $pl . '/' . $pl . '.php');
foreach($installed as $i) {
if(($i['name'] == $pl) && ($i['timestamp'] != $t)) {
logger('Reloading plugin: ' . $i['name']);
@include_once('addon/' . $pl . '/' . $pl . '.php');
if(function_exists($pl . '_uninstall')) {
$func = $pl . '_uninstall';
$func();
}
if(function_exists($pl . '_install')) {
$func = $pl . '_install';
$func();
}
q("UPDATE `addon` SET `timestamp` = %d WHERE `id` = %d LIMIT 1",
intval($t),
intval($i['id'])
);
}
}
}
}
}
}}
// This is our template processor. // This is our template processor.
// $s is the string requiring macro substitution. // $s is the string requiring macro substitution.
@ -1777,7 +1825,7 @@ function allowed_email($email) {
if(count($allowed)) { if(count($allowed)) {
foreach($allowed as $a) { foreach($allowed as $a) {
$pat = strtolower(trim($a)); $pat = strtolower(trim($a));
if(($fnmatch && fnmatch($pat,$host)) || ($pat == $host)) { if(($fnmatch && fnmatch($pat,$domain)) || ($pat == $domain)) {
$found = true; $found = true;
break; break;
} }

View file

@ -451,7 +451,8 @@ CREATE TABLE IF NOT EXISTS `addon` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` CHAR( 255 ) NOT NULL , `name` CHAR( 255 ) NOT NULL ,
`version` CHAR( 255 ) NOT NULL , `version` CHAR( 255 ) NOT NULL ,
`installed` TINYINT( 1 ) NOT NULL DEFAULT '0' `installed` TINYINT( 1 ) NOT NULL DEFAULT '0' ,
`timestamp` BIGINT NOT NULL DEFAULT '0'
) ENGINE = MYISAM DEFAULT CHARSET=utf8; ) ENGINE = MYISAM DEFAULT CHARSET=utf8;

BIN
images/nosign.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

@ -10,7 +10,7 @@ function group_select($selname,$selclass,$preselected = false,$size = 4) {
$o .= "<select name=\"{$selname}[]\" id=\"$selclass\" class=\"$selclass\" multiple=\"multiple\" size=\"$size\" >\r\n"; $o .= "<select name=\"{$selname}[]\" id=\"$selclass\" class=\"$selclass\" multiple=\"multiple\" size=\"$size\" >\r\n";
$r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d ORDER BY `name` ASC", $r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d ORDER BY `name` ASC",
$_SESSION['uid'] intval(local_user())
); );

View file

@ -609,6 +609,7 @@ function item_store($arr,$force_parent = false) {
else { else {
// find the parent and snarf the item id and ACL's // find the parent and snarf the item id and ACL's
// and anything else we need to inherit
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($arr['parent-uri']), dbesc($arr['parent-uri']),
@ -632,6 +633,7 @@ function item_store($arr,$force_parent = false) {
$allow_gid = $r[0]['allow_gid']; $allow_gid = $r[0]['allow_gid'];
$deny_cid = $r[0]['deny_cid']; $deny_cid = $r[0]['deny_cid'];
$deny_gid = $r[0]['deny_gid']; $deny_gid = $r[0]['deny_gid'];
$arr['wall'] = $r[0]['wall'];
} }
else { else {

View file

@ -47,6 +47,11 @@ function poller_run($argv, $argc){
$sql_extra = (($manual_id) ? " AND `id` = $manual_id " : ""); $sql_extra = (($manual_id) ? " AND `id` = $manual_id " : "");
$d = datetime_convert();
call_hooks('cron', $d);
reload_plugins();
$contacts = q("SELECT `id` FROM `contact` $contacts = q("SELECT `id` FROM `contact`
WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != '' WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != ''
$sql_extra $sql_extra

View file

@ -19,11 +19,11 @@ $a = new App;
/** /**
* *
* Load the configuration file which contains our DB credentials. * Load the configuration file which contains our DB credentials.
* Ignore errors. If the file doesn't exist, we are running in installation mode. * Ignore errors. If the file doesn't exist or is empty, we are running in installation mode.
* *
*/ */
$install = ((file_exists('.htconfig.php')) ? false : true); $install = ((file_exists('.htconfig.php') && filesize('.htconfig.php')) ? false : true);
@include(".htconfig.php"); @include(".htconfig.php");
@ -102,8 +102,9 @@ if(! x($_SESSION,'sysmsg'))
$_SESSION['sysmsg'] = ''; $_SESSION['sysmsg'] = '';
/* /*
* check_config() is responible for running update scripts. These automatically * check_config() is responsible for running update scripts. These automatically
* update the DB schema whenever we push a new one out. * update the DB schema whenever we push a new one out. It also checks to see if
* any plugins have been added or removed and reacts accordingly.
*/ */
@ -122,7 +123,7 @@ $a->apps = $arr['app_menu'];
/** /**
* *
* We have already parsed the server path into $->argc and $a->argv * We have already parsed the server path into $a->argc and $a->argv
* *
* $a->argv[0] is our module name. We will load the file mod/{$a->argv[0]}.php * $a->argv[0] is our module name. We will load the file mod/{$a->argv[0]}.php
* and use it for handling our URL request. * and use it for handling our URL request.
@ -130,7 +131,7 @@ $a->apps = $arr['app_menu'];
* and in the following order: * and in the following order:
* *
* "module"_init * "module"_init
* "module"_post (only if there are $_POST variables) * "module"_post (only called if there are $_POST variables)
* "module"_afterpost * "module"_afterpost
* "module"_content - the string return of this function contains our page body * "module"_content - the string return of this function contains our page body
* *
@ -140,15 +141,42 @@ $a->apps = $arr['app_menu'];
*/ */
if(strlen($a->module)) { if(strlen($a->module)) {
/**
*
* We will always have a module name.
* First see if we have a plugin which is masquerading as a module.
*
*/
if(is_array($a->plugins) && in_array($a->module,$a->plugins) && file_exists("addon/{$a->module}/{$a->module}.php")) { if(is_array($a->plugins) && in_array($a->module,$a->plugins) && file_exists("addon/{$a->module}/{$a->module}.php")) {
include_once("addon/{$a->module}/{$a->module}.php"); include_once("addon/{$a->module}/{$a->module}.php");
if(function_exists($a->module . '_module')) if(function_exists($a->module . '_module'))
$a->module_loaded = true; $a->module_loaded = true;
} }
/**
* If not, next look for a 'standard' program module in the 'mod' directory
*/
if((! $a->module_loaded) && (file_exists("mod/{$a->module}.php"))) { if((! $a->module_loaded) && (file_exists("mod/{$a->module}.php"))) {
include("mod/{$a->module}.php"); include_once("mod/{$a->module}.php");
$a->module_loaded = true; $a->module_loaded = true;
} }
/**
*
* The URL provided does not resolve to a valid module.
*
* On Dreamhost sites, quite often things go wrong for no apparent reason and they send us to '/internal_error.html'.
* We don't like doing this, but as it occasionally accounts for 10-20% or more of all site traffic -
* we are going to trap this and redirect back to the requested page. As long as you don't have a critical error on your page
* this will often succeed and eventually do the right thing.
*
* Otherwise we are going to emit a 404 not found.
*
*/
if(! $a->module_loaded) { if(! $a->module_loaded) {
if((x($_SERVER,'QUERY_STRING')) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && isset($dreamhost_error_hack)) { if((x($_SERVER,'QUERY_STRING')) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && isset($dreamhost_error_hack)) {
logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']); logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']);
@ -199,7 +227,7 @@ if($a->module_loaded) {
} }
// let javascript take you home // If you're just visiting, let javascript take you home
if(x($_SESSION,'visitor_home')) if(x($_SESSION,'visitor_home'))
$homebase = $_SESSION['visitor_home']; $homebase = $_SESSION['visitor_home'];

View file

@ -151,7 +151,12 @@ function display_content(&$a) {
if(can_write_wall($a,$a->profile['uid'])) { if(can_write_wall($a,$a->profile['uid'])) {
if($item['id'] == $item['parent']) { if($item['id'] == $item['parent']) {
$likebuttons = replace_macros($like_tpl,array('$id' => $item['id'])); $likebuttons = replace_macros($like_tpl,array(
'$id' => $item['id'],
'$likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"),
'$wait' => t('Please wait')
));
} }
if($item['last-child']) { if($item['last-child']) {
$comment = replace_macros($cmnt_tpl,array( $comment = replace_macros($cmnt_tpl,array(

View file

@ -255,8 +255,8 @@ function network_content(&$a, $update = 0) {
} }
} }
$location = (($item['location']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : ''); $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
$coord = (($item['coord']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : ''); $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
if($coord) { if($coord) {
if($location) if($location)
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>'; $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
@ -360,7 +360,12 @@ function network_content(&$a, $update = 0) {
$likebuttons = ''; $likebuttons = '';
if($item['id'] == $item['parent']) { if($item['id'] == $item['parent']) {
$likebuttons = replace_macros($like_tpl,array('$id' => $item['id'])); $likebuttons = replace_macros($like_tpl,array(
'$id' => $item['id'],
'$likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"),
'$wait' => t('Please wait')
));
} }
if($item['last-child']) { if($item['last-child']) {
@ -407,8 +412,8 @@ function network_content(&$a, $update = 0) {
$like = ((x($alike,$item['id'])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : ''); $like = ((x($alike,$item['id'])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
$dislike = ((x($dlike,$item['id'])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : ''); $dislike = ((x($dlike,$item['id'])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : '');
$location = (($item['location']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : ''); $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
$coord = (($item['coord']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : ''); $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
if($coord) { if($coord) {
if($location) if($location)
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>'; $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';

View file

@ -108,6 +108,24 @@ function photo_init(&$a) {
if(count($r)) { if(count($r)) {
$data = $r[0]['data']; $data = $r[0]['data'];
} }
else {
// Does the picture exist? It may be a remote person with no credentials,
// but who should otherwise be able to view it. Show a default image to let
// them know permissions was denied. It may be possible to view the image
// through an authenticated profile visit.
// There won't be many complete unauthorised people seeing this because
// they won't have the photo link, so there's a reasonable chance that the person
// might be able to obtain permission to view it.
$r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` = %d LIMIT 1",
dbesc($photo),
intval($resolution)
);
if(count($r)) {
$data = file_get_contents('images/nosign.jpg');
}
}
} }
} }

View file

@ -246,6 +246,11 @@ foreach($_FILES AS $key => $val) {
$rawtags = ((x($_POST,'newtag')) ? notags(trim($_POST['newtag'])) : ''); $rawtags = ((x($_POST,'newtag')) ? notags(trim($_POST['newtag'])) : '');
$item_id = ((x($_POST,'item_id')) ? intval($_POST['item_id']) : 0); $item_id = ((x($_POST,'item_id')) ? intval($_POST['item_id']) : 0);
$albname = ((x($_POST,'albname')) ? notags(trim($_POST['albname'])) : ''); $albname = ((x($_POST,'albname')) ? notags(trim($_POST['albname'])) : '');
$str_group_allow = perms2str($_POST['group_allow']);
$str_contact_allow = perms2str($_POST['contact_allow']);
$str_group_deny = perms2str($_POST['group_deny']);
$str_contact_deny = perms2str($_POST['contact_deny']);
$resource_id = $a->argv[2]; $resource_id = $a->argv[2];
if(! strlen($albname)) if(! strlen($albname))
@ -256,10 +261,14 @@ foreach($_FILES AS $key => $val) {
dbesc($resource_id), dbesc($resource_id),
intval($page_owner_uid) intval($page_owner_uid)
); );
if((count($p)) && (($p[0]['desc'] !== $desc) || ($p[0]['album'] !== $albname))) { if(count($p)) {
$r = q("UPDATE `photo` SET `desc` = '%s', `album` = '%s' WHERE `resource-id` = '%s' AND `uid` = %d", $r = q("UPDATE `photo` SET `desc` = '%s', `album` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' WHERE `resource-id` = '%s' AND `uid` = %d",
dbesc($desc), dbesc($desc),
dbesc($albname), dbesc($albname),
dbesc($str_contact_allow),
dbesc($str_group_allow),
dbesc($str_contact_deny),
dbesc($str_group_deny),
dbesc($resource_id), dbesc($resource_id),
intval($page_owner_uid) intval($page_owner_uid)
); );
@ -900,6 +909,32 @@ function photos_content(&$a) {
return; return;
} }
$prevlink = '';
$nextlink = '';
$prvnxt = q("SELECT `resource-id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `scale` = 0
$sql_extra ORDER BY `created` DESC ",
dbesc($ph[0]['album']),
intval($owner_uid)
);
if(count($prvnxt)) {
for($z = 0; $z < count($prvnxt); $z++) {
if($prvnxt[$z]['resource-id'] == $ph[0]['resource-id']) {
$prv = $z - 1;
$nxt = $z + 1;
if($prv < 0)
$prv = count($prvnxt) - 1;
if($nxt >= count($prvnxt))
$nxt = 0;
break;
}
}
$prevlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] ;
$nextlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] ;
}
if(count($ph) == 1) if(count($ph) == 1)
$hires = $lores = $ph[0]; $hires = $lores = $ph[0];
if(count($ph) > 1) { if(count($ph) > 1) {
@ -929,11 +964,18 @@ function photos_content(&$a) {
$o .= '</div>'; $o .= '</div>';
} }
if($prevlink)
$o .= '<div id="photo-prev-link"><a href="' . $prevlink .'">' . t('<< Prev') . '</a></div>' ;
$o .= '<a href="' . $a->get_baseurl() . '/photo/' $o .= '<div id="photo-photo"><a href="' . $a->get_baseurl() . '/photo/'
. $hires['resource-id'] . '-' . $hires['scale'] . '.jpg" title="' . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg" title="'
. t('View Full Size') . '" ><img src="' . $a->get_baseurl() . '/photo/' . t('View Full Size') . '" ><img src="' . $a->get_baseurl() . '/photo/'
. $lores['resource-id'] . '-' . $lores['scale'] . '.jpg' . '" /></a>'; . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg' . '" /></a></div>';
if($nextlink)
$o .= '<div id="photo-next-link"><a href="' . $nextlink .'">' . t('Next >>') . '</a></div>';
$o .= '<div id="photo-photo-end"></div>';
// Do we have an item for this photo? // Do we have an item for this photo?
@ -1016,6 +1058,8 @@ function photos_content(&$a) {
'$caption' => $ph[0]['desc'], '$caption' => $ph[0]['desc'],
'$tag_label' => t('Add a Tag'), '$tag_label' => t('Add a Tag'),
'$tags' => $link_item['tag'], '$tags' => $link_item['tag'],
'$permissions' => t('Permissions'),
'$aclselect' => populate_acl($ph[0]),
'$help_tags' => t('Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'), '$help_tags' => t('Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'),
'$item_id' => ((count($linked_items)) ? $link_item['id'] : 0), '$item_id' => ((count($linked_items)) ? $link_item['id'] : 0),
'$submit' => t('Submit'), '$submit' => t('Submit'),
@ -1033,8 +1077,14 @@ function photos_content(&$a) {
$likebuttons = ''; $likebuttons = '';
if($can_post || can_write_wall($a,$owner_uid)) if($can_post || can_write_wall($a,$owner_uid)) {
$likebuttons = replace_macros($like_tpl,array('$id' => $link_item['id'])); $likebuttons = replace_macros($like_tpl,array(
'$id' => $item['id'],
'$likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"),
'$wait' => t('Please wait')
));
}
if(! count($r)) { if(! count($r)) {
$o .= '<div id="photo-like-div">'; $o .= '<div id="photo-like-div">';

View file

@ -302,7 +302,12 @@ function profile_content(&$a, $update = 0) {
if(can_write_wall($a,$a->profile['profile_uid'])) { if(can_write_wall($a,$a->profile['profile_uid'])) {
if($item['id'] == $item['parent']) { if($item['id'] == $item['parent']) {
$likebuttons = replace_macros($like_tpl,array('$id' => $item['id'])); $likebuttons = replace_macros($like_tpl,array(
'$id' => $item['id'],
'$likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"),
'$wait' => t('Please wait')
));
} }
if($item['last-child']) { if($item['last-child']) {
$comment = replace_macros($cmnt_tpl,array( $comment = replace_macros($cmnt_tpl,array(
@ -358,8 +363,8 @@ function profile_content(&$a, $update = 0) {
$like = ((isset($alike[$item['id']])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : ''); $like = ((isset($alike[$item['id']])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
$dislike = ((isset($dlike[$item['id']])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : ''); $dislike = ((isset($dlike[$item['id']])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : '');
$location = (($item['location']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : ''); $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
$coord = (($item['coord']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : ''); $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
if($coord) { if($coord) {
if($location) if($location)
$location .= '<br /><span class="smalltext">(' . $coord . ')</span>'; $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';

View file

@ -401,6 +401,10 @@ function register_content(&$a) {
$oidlabel = t("Your OpenID \x28optional\x29: "); $oidlabel = t("Your OpenID \x28optional\x29: ");
} }
// I set this and got even more fake names than before...
$realpeople = ''; // t('Members of this network prefer to communicate with real people who use their real names.');
if(get_config('system','publish_all')) { if(get_config('system','publish_all')) {
$profile_publish_reg = '<input type="hidden" name="profile_publish_reg" value="1" />'; $profile_publish_reg = '<input type="hidden" name="profile_publish_reg" value="1" />';
} }
@ -423,6 +427,7 @@ function register_content(&$a) {
$o = load_view_file("view/register.tpl"); $o = load_view_file("view/register.tpl");
$o = replace_macros($o, array( $o = replace_macros($o, array(
'$oidhtml' => $oidhtml, '$oidhtml' => $oidhtml,
'$realpeople' => $realpeople,
'$regtitle' => t('Registration'), '$regtitle' => t('Registration'),
'$registertext' =>((x($a->config,'register_text')) '$registertext' =>((x($a->config,'register_text'))
? '<div class="error-message">' . $a->config['register_text'] . '</div>' ? '<div class="error-message">' . $a->config['register_text'] . '</div>'
@ -433,7 +438,7 @@ function register_content(&$a) {
'$openid' => $openid_url, '$openid' => $openid_url,
'$namelabel' => t('Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '), '$namelabel' => t('Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '),
'$addrlabel' => t('Your Email Address: '), '$addrlabel' => t('Your Email Address: '),
'$nickdesc' => t('Choose a profile nickname. This must begin with a text character. Your global profile locator will then be \'<strong>nickname@$sitename</strong>\'.'), '$nickdesc' => t('Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.'),
'$nicklabel' => t('Choose a nickname: '), '$nicklabel' => t('Choose a nickname: '),
'$photo' => $photo, '$photo' => $photo,
'$publish' => $profile_publish, '$publish' => $profile_publish,

View file

@ -51,7 +51,7 @@ function search_content(&$a) {
$a->set_pager_total($r[0]['total']); $a->set_pager_total($r[0]['total']);
if(! $r[0]['total']) { if(! $r[0]['total']) {
notice('No results.'); notice( t('No results.') . EOL);
return $o; return $o;
} }
@ -134,13 +134,6 @@ function search_content(&$a) {
} }
} }
if(! $r[0]['total']) {
notice('No results.');
return $o;
}
$o .= paginate($a); $o .= paginate($a);
return $o; return $o;

View file

@ -11,24 +11,24 @@
* Each function in this file is named update_nnnn() where nnnn is an increasing number * Each function in this file is named update_nnnn() where nnnn is an increasing number
* which began counting at 1000. * which began counting at 1000.
* *
* At the top of the file "boot.php" is a define for BUILD_ID. Any time there is a change * At the top of the file "boot.php" is a define for DB_UPDATE_VERSION. Any time there is a change
* to the database schema or one which requires an upgrade path from the existing application, * to the database schema or one which requires an upgrade path from the existing application,
* the BUILD_ID is incremented. * the DB_UPDATE_VERSION is incremented.
* *
* The current BUILD_ID is stored in the config area of the database. If the application starts up * The current DB_UPDATE_VERSION is stored in the config area of the database. If the application starts up
* and BUILD_ID is greater than the last stored build number, we will process every update function * and DB_UPDATE_VERSION is greater than the last stored build number, we will process every update function
* in order from the currently stored value to the new BUILD_ID. This is expected to bring the system * in order from the currently stored value to the new DB_UPDATE_VERSION. This is expected to bring the system
* up to current without requiring re-installation or manual intervention. * up to current without requiring re-installation or manual intervention.
* *
* Once the upgrade functions have completed, the current BUILD_ID is stored as the current value. * Once the upgrade functions have completed, the current DB_UPDATE_VERSION is stored as the current value.
* The BUILD_ID will always be one greater than the last numbered script in this file. * The DB_UPDATE_VERSION will always be one greater than the last numbered script in this file.
* *
* If you change the database schema, the following are required: * If you change the database schema, the following are required:
* 1. Update the file database.sql to match the new schema. * 1. Update the file database.sql to match the new schema.
* 2. Update this file by adding a new function at the end with the number of the current BUILD_ID. * 2. Update this file by adding a new function at the end with the number of the current DB_UPDATE_VERSION.
* This function should modify the current database schema and perform any other steps necessary * This function should modify the current database schema and perform any other steps necessary
* to ensure that upgrade is silent and free from requiring interaction. * to ensure that upgrade is silent and free from requiring interaction.
* 3. Increment the BUILD_ID in boot.php * 3. Increment the DB_UPDATE_VERSION in boot.php
* 4. TEST the upgrade prior to checkin and filing a pull request. * 4. TEST the upgrade prior to checkin and filing a pull request.
* *
*/ */
@ -374,3 +374,6 @@ function update_1038() {
q("ALTER TABLE `item` ADD `plink` CHAR( 255 ) NOT NULL AFTER `target` "); q("ALTER TABLE `item` ADD `plink` CHAR( 255 ) NOT NULL AFTER `target` ");
} }
function update_1039() {
q("ALTER TABLE `addon` ADD `timestamp` BIGINT NOT NULL DEFAULT '0'");
}

View file

@ -192,6 +192,8 @@ $a->strings['Cancel'] = 'Cancel';
$a->strings['Global Directory'] = 'Global Directory'; $a->strings['Global Directory'] = 'Global Directory';
$a->strings['Item not found.'] = 'Item not found.'; $a->strings['Item not found.'] = 'Item not found.';
$a->strings['Private Message'] = 'Private Message'; $a->strings['Private Message'] = 'Private Message';
$a->strings["I like this \x28toggle\x29"] = "I like this \x28toggle\x29";
$a->strings["I don't like this \x28toggle\x29"] = "I don't like this \x28toggle\x29";
$a->strings['This is you'] = 'This is you'; $a->strings['This is you'] = 'This is you';
$a->strings['Delete'] = 'Delete'; $a->strings['Delete'] = 'Delete';
$a->strings['View $name\'s profile'] = 'View $name\'s profile'; $a->strings['View $name\'s profile'] = 'View $name\'s profile';
@ -370,11 +372,12 @@ $a->strings['Your registration is pending approval by the site owner.'] = 'Your
$a->strings["You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'."; $a->strings["You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'.";
$a->strings['If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'] = 'If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'; $a->strings['If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'] = 'If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.';
$a->strings["Your OpenID \x28optional\x29: "] = "Your OpenID \x28optional\x29: "; $a->strings["Your OpenID \x28optional\x29: "] = "Your OpenID \x28optional\x29: ";
$a->strings['Members of this network prefer to communicate with real people who use their real names.'] = 'Members of this network prefer to communicate with real people who use their real names.';
$a->strings['Include your profile in member directory?'] = 'Include your profile in member directory?'; $a->strings['Include your profile in member directory?'] = 'Include your profile in member directory?';
$a->strings['Registration'] = 'Registration'; $a->strings['Registration'] = 'Registration';
$a->strings['Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '] = 'Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '; $a->strings['Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '] = 'Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': ';
$a->strings['Your Email Address: '] = 'Your Email Address: '; $a->strings['Your Email Address: '] = 'Your Email Address: ';
$a->strings['Choose a profile nickname. This must begin with a text character. Your global profile locator will then be \'<strong>nickname@$sitename</strong>\'.'] = 'Choose a profile nickname. This must begin with a text character. Your global profile locator will then be \'<strong>nickname@$sitename</strong>\'.'; $a->strings['Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.'] = 'Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.';
$a->strings['Choose a nickname: '] = 'Choose a nickname: '; $a->strings['Choose a nickname: '] = 'Choose a nickname: ';
$a->strings['Please login.'] = 'Please login.'; $a->strings['Please login.'] = 'Please login.';
$a->strings['Registration revoked for '] = 'Registration revoked for '; $a->strings['Registration revoked for '] = 'Registration revoked for ';

View file

@ -35,4 +35,14 @@
echo $file . "\n"; echo $file . "\n";
include_once($file); include_once($file);
} }
} }
echo "String files\n";
echo 'util/strings.php' . "\n";
include_once('util/strings.php');
$files = glob('view/*/strings.php');
foreach($files as $file) {
echo $file . "\n";
include_once($file);
}

View file

@ -1,5 +0,0 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
<img src="images/like.gif" alt="Ich mag das" title="Ich mag das [toggle]" onclick="dolike($id,'like');" />
<img src="images/dislike.gif" alt="Ich mag das nicht" title="Ich mag das nicht [toggle]" onclick="dolike($id,'dislike');" />
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="Bitte warten" title="Bitte warten" style="display: none;" />
</div>

View file

@ -173,6 +173,8 @@ $a->strings['Submit Request'] = 'Anfrage abschicken';
$a->strings['Cancel'] = 'Abbrechen'; $a->strings['Cancel'] = 'Abbrechen';
$a->strings['Global Directory'] = 'Weltweites Verzeichnis'; $a->strings['Global Directory'] = 'Weltweites Verzeichnis';
$a->strings['Private Message'] = 'Private Nachricht'; $a->strings['Private Message'] = 'Private Nachricht';
$a->strings["I like this \x28toggle\x29"] = "Ich mag das \x28toggle\x29";
$a->strings["I don't like this \x28toggle\x29"] = "Ich mag das nicht \x28toggle\x29";
$a->strings['This is you'] = 'Das bist du'; $a->strings['This is you'] = 'Das bist du';
$a->strings['View $name\'s profile'] = 'Betrachte das Profil von $name'; $a->strings['View $name\'s profile'] = 'Betrachte das Profil von $name';
$a->strings['View $owner_name\'s profile'] = 'Betrachte das Profil von $owner_name'; $a->strings['View $owner_name\'s profile'] = 'Betrachte das Profil von $owner_name';

View file

@ -1,5 +0,0 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
<img src="images/like.gif" alt="I like this" title="I like this [toggle]" onclick="dolike($id,'like');" />
<img src="images/dislike.gif" alt="I don't like this" title="I don't like this [toggle]" onclick="dolike($id,'dislike');" />
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="Please wait" title="Please wait" style="display: none;" />
</div>

View file

@ -1,5 +0,0 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
<img src="images/like.gif" alt="I like this" title="I like this [toggle]" onclick="dolike($id,'like');" />
<img src="images/dislike.gif" alt="I don't like this" title="I don't like this [toggle]" onclick="dolike($id,'dislike');" />
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="Please wait" title="Please wait" style="display: none;" />
</div>

View file

@ -159,6 +159,8 @@ $a->strings['Cancel'] = 'Annuler';
$a->strings['Global Directory'] = 'Annuaire global'; $a->strings['Global Directory'] = 'Annuaire global';
$a->strings['Item not found.'] = 'Élément introuvable.'; $a->strings['Item not found.'] = 'Élément introuvable.';
$a->strings['Private Message'] = 'Message privé'; $a->strings['Private Message'] = 'Message privé';
$a->strings["I like this \x28toggle\x29"] = "I like this \x28toggle\x29";
$a->strings["I don't like this \x28toggle\x29"] = "I don't like this \x28toggle\x29";
$a->strings['This is you'] = 'C\'est vous'; $a->strings['This is you'] = 'C\'est vous';
$a->strings['View $name\'s profile'] = 'Voir le profil de $name'; $a->strings['View $name\'s profile'] = 'Voir le profil de $name';
$a->strings['Item has been removed.'] = 'Cet élément a été enlevé.'; $a->strings['Item has been removed.'] = 'Cet élément a été enlevé.';

View file

@ -1,5 +0,0 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
<img src="images/like.gif" alt="Mi piace questo" title="Mi piace questo [metti/togli]" onclick="dolike($id,'like');" />
<img src="images/dislike.gif" alt="Non mi piace questo" title="Non mi piace questo [metti/togli]" onclick="dolike($id,'dislike');" />
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="Attendi" title="Attendi" style="display: none;" />
</div>

View file

@ -138,9 +138,11 @@ $a->strings['Cancel'] = 'Annulla';
$a->strings['Global Directory'] = 'Elenco Globale'; $a->strings['Global Directory'] = 'Elenco Globale';
$a->strings['Item not found.'] = 'Elemento non trovato.'; $a->strings['Item not found.'] = 'Elemento non trovato.';
$a->strings['Private Message'] = 'Messaggio privato'; $a->strings['Private Message'] = 'Messaggio privato';
$a->strings["I like this \x28toggle\x29"] = "Mi piace questo \x28metti/togli\x29";
$a->strings["I don't like this \x28toggle\x29"] = "Non mi piace questo \x28metti/togli\x29";
$a->strings['This is you'] = 'Questo sei tu'; $a->strings['This is you'] = 'Questo sei tu';
$a->strings['View $name\'s profile'] = 'Guarda il profilo di $name'; $a->strings['View $name\'s profile'] = 'Guarda il profilo di $name';
$a->strings['View $owner_name\'s profile'] = Guarda il profilo di $owner_name'; $a->strings['View $owner_name\'s profile'] = 'Guarda il profilo di $owner_name';
$a->strings['to'] = 'a'; $a->strings['to'] = 'a';
$a->strings['Wall-to-Wall'] = 'Bacheca-A-Bacheca'; $a->strings['Wall-to-Wall'] = 'Bacheca-A-Bacheca';
$a->strings['via Wall-To-Wall:'] = 'via Bacheca-A-Bacheca'; $a->strings['via Wall-To-Wall:'] = 'via Bacheca-A-Bacheca';

5
view/like.tpl Normal file
View file

@ -0,0 +1,5 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
<img src="images/like.gif" alt="$likethis" title="$likethis" onclick="dolike($id,'like');" />
<img src="images/dislike.gif" alt="$nolike" title="$nolike" onclick="dolike($id,'dislike');" />
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div>

View file

@ -8,7 +8,6 @@
<div id="photo-edit-albumname-end"></div> <div id="photo-edit-albumname-end"></div>
<label id="photo-edit-caption-label" for="photo-edit-caption">$capt_label</label> <label id="photo-edit-caption-label" for="photo-edit-caption">$capt_label</label>
<input id="photo-edit-caption" type="text" size="84" name="desc" value="$caption" /> <input id="photo-edit-caption" type="text" size="84" name="desc" value="$caption" />
@ -16,8 +15,21 @@
<label id="photo-edit-tags-label" for="photo-edit-newtag" >$tag_label</label> <label id="photo-edit-tags-label" for="photo-edit-newtag" >$tag_label</label>
<input name="newtag" id="photo-edit-newtag" size="84" title="$help_tags" type="text" /> <input name="newtag" id="photo-edit-newtag" size="84" title="$help_tags" type="text" />
<div id="photo-edit-tags-end"></div> <div id="photo-edit-tags-end"></div>
<div id="photo-edit-perms" class="photo-edit-perms" >
<div id="photo-edit-perms-menu" class="fakelink" onClick="openClose('photo-edit-perms-select');" >$permissions</div>
<div id="photo-edit-perms-menu-end"></div>
<div id="photo-edit-perms-select" style="display: none;" >
$aclselect
</div>
</div>
<div id="photo-edit-perms-end"></div>
<input id="photo-edit-submit-button" type="submit" name="submit" value="$submit" /> <input id="photo-edit-submit-button" type="submit" name="submit" value="$submit" />
<input id="photo-edit-delete-button" type="submit" name="delete" value="$delete" onclick="return confirmDelete()"; /> <input id="photo-edit-delete-button" type="submit" name="delete" value="$delete" onclick="return confirmDelete()"; />

View file

@ -6,6 +6,7 @@
$registertext $registertext
<p id="register-realpeople">$realpeople</p>
<p id="register-fill-desc">$fillwith</p> <p id="register-fill-desc">$fillwith</p>
<p id="register-fill-ext">$fillext</p> <p id="register-fill-ext">$fillext</p>

View file

@ -8,11 +8,14 @@
<div class="wall-item-photo-end"></div> <div class="wall-item-photo-end"></div>
<div class="wall-item-wrapper" id="wall-item-wrapper-$id" > <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
$lock $lock
<a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
<div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
<div class="wall-item-location" id="wall-item-location-$id">$location</div> <div class="wall-item-location" id="wall-item-location-$id">$location</div>
</div> </div>
</span> </span>
<div class="wall-item-author">
<a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
<div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
</div>
<div class="wall-item-content" id="wall-item-content-$id" > <div class="wall-item-content" id="wall-item-content-$id" >
<div class="wall-item-title" id="wall-item-title-$id">$title</div> <div class="wall-item-title" id="wall-item-title-$id">$title</div>
<div class="wall-item-title-end"></div> <div class="wall-item-title-end"></div>

View file

@ -0,0 +1,18 @@
$username,
'$from' har kommenterat något som du följer.
-----
$body
-----
Logga in på $siteurl för att se hela konversationen:
$display
Tack,
$sitename admin

81
view/sv/contact_edit.tpl Normal file
View file

@ -0,0 +1,81 @@
<h2>$header</h2>
<div id="contact-edit-banner-name">$name</div>
<form action="contacts/$contact_id" method="post" >
<input type="hidden" name="contact_id" value="$contact_id">
<div id="contact-edit-wrapper" >
<div id="contact-edit-photo-wrapper" >
<img id="contact-edit-direction-icon" src="$dir_icon" alt="$alt_text" title="$alt_text" />
<div id="contact-edit-photo" >
<a href="$url" title="$visit" /><img src="$photo" $sparkle alt="$name" /></a>
</div>
<div id="contact-edit-photo-end" ></div>
</div>
<div id="contact-edit-nav-wrapper" >
<div id="contact-edit-links" >
<a href="contacts/$contact_id/block" id="contact-edit-block-link" ><img src="images/b_block.gif" alt="$blockunblock" title="$block_text"/></a>
<a href="contacts/$contact_id/ignore" id="contact-edit-ignore-link" ><img src="images/no.gif" alt="$ignorecont" title="$ignore_text"/></a>
</div>
<div id="contact-drop-links" >
<a href="contacts/$contact_id/drop" id="contact-edit-drop-link" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" /></a>
</div>
<div id="contact-edit-nav-end"></div>
<div id="contact-edit-poll-wrapper">
<div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span</div>
<div id="contact-edit-poll-text">$updpub</div>
$poll_interval
<div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div>
</div>
</div>
<div id="contact-edit-end" ></div>
$insecure
$blocked
$ignored
<div id="contact-edit-info-wrapper">
<h4>Kontaktuppgifter / Anteckningar</h4>
<textarea id="contact-edit-info" rows="10" cols="72" name="info" >$info</textarea>
</div>
<div id="contact-edit-info-end"></div>
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
<div id="contact-edit-profile-select-text">
<h4>Profilvisning</h4>
<p>V&auml;lj vilken profil som ska visas f&ouml;r $name n&auml;r han eller hon tittar p&aring; din profil i s&auml;kert l&auml;ge.
</p>
</div>
$profile_select
<div id="contact-edit-profile-select-end"></div>
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
<div id="contact-edit-rating-wrapper">
<h4>Rykte online</h4>
<p>
Ibland kanske dina v&auml;nner vill f&aring; reda p&aring; hur n&aring;gon annan uppf&ouml;r sig p&aring; n&auml;tet innan de v&aring;ga inleda n&aring;gon kontakt. Du kan hj&auml;lpa till genom att ange personens 'rykte'.
</p>
<div id="contact-edit-rating-select-wrapper">
$rating
</div>
<div id="contact-edit-rating-explain">
<p>
Var v&auml;nlig &auml;gna en liten stund &aring;t att fylla i n&aring;got som du k&auml;nner kan vara till hj&auml;lp f&ouml;r andra.
</p>
<textarea id="contact-edit-rating-text" name="reason" rows="3" cols="64" >$reason</textarea>
</div>
</div>
$groups
<input class="contact-edit-submit" type="submit" name="submit" value="Submit" />
</form>
</div>

1124
view/sv/strings.php Normal file

File diff suppressed because it is too large Load diff

View file

@ -203,7 +203,7 @@ div.wall-item-content-wrapper.shiny {
background-repeat:no-repeat; background-repeat:no-repeat;
} }
/* from defautlt */ /* from default */
#jot-perms-icon, #jot-perms-icon,
#profile-location, #profile-location,
#profile-nolocation, #profile-nolocation,
@ -833,31 +833,40 @@ input#dfrn-url {
.wall-item-info { .wall-item-info {
display: block; display: block;
float: left; float: left;
width:150px; width:110px;
margin-right:10px;
} }
.wallwall .wall-item-info { .comment .wall-item-info {
width: 300px; width: 70px;
} }
.wall-item-photo-wrapper { .wall-item-photo-wrapper {
margin-top: 10px; margin-top: 10px;
margin-left: 10px; margin-left: 10px;
margin-bottom: 10px; margin-bottom: 10px;
width: 100px; width: 100px;
} }
.wallwall .wall-item-photo-wrapper {
float: left;
}
.wallwall .wwto {
left: 50px;
margin: 0;
position: absolute;
top: 70px;
width: 30px
}
.wallwall .wwto img {
width: 30px;
height: 30px;
}
.wallwall .wall-item-photo-end { .wallwall .wall-item-photo-end {
clear: both; clear: both;
} }
.wall-item-arrowphoto-wrapper { .wall-item-arrowphoto-wrapper {
margin-top: 40px; position: absolute;
margin-right: 20px; left: 75px;
float: left; top: 70px;
z-index: 100;
} }
.wall-item-wrapper { .wall-item-wrapper {
/*float: left; /*float: left;
@ -868,16 +877,38 @@ input#dfrn-url {
.wall-item-lock { .wall-item-lock {
/*height: 20px;*/ /*height: 20px;*/
/*margin-top: 10px;*/ /*margin-top: 10px;*/
left: 135px; left: 105px;
position: absolute; position: absolute;
top: 1px; top: 1px;
} }
.comment .wall-item-lock {
left: 65px;
}
.wall-item-ago { .wall-item-ago {
color: #888888; color: #888888;
font-size: 0.8em; font-size: 0.8em;
} }
.wall-item-location {
overflow: hidden;
/* add ellipsis on text overflow */
/* this work on safari, opera, ie, chrome. */
/* firefox users have to wait support or we */
/* can use a jquery plugin http://bit.ly/zJskg */
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
width: 100%;
}
.wall-item-like-buttons {
float: left;
margin-right: 10px;
padding-right: 10px;
border-right: 2px solid #fff;
}
.wall-item-like-buttons img { .wall-item-like-buttons img {
cursor: pointer; cursor: pointer;
} }
@ -946,6 +977,10 @@ input#dfrn-url {
background-repeat: repeat-x; background-repeat: repeat-x;
padding: 5px 10px 0px; padding: 5px 10px 0px;
} }
.wall-item-author {
margin-top: 10px;
}
.comment .wall-item-tools { .comment .wall-item-tools {
background:none; background:none;
} }
@ -1791,6 +1826,11 @@ a.mail-list-link {
float: left; float: left;
width: 150px; width: 150px;
} }
#photo-edit-perms-end {
margin-bottom: 15px;
}
#photo-edit-caption, #photo-edit-newtag, #photo-edit-albumname { #photo-edit-caption, #photo-edit-newtag, #photo-edit-albumname {
float: left; float: left;
margin-bottom: 25px; margin-bottom: 25px;
@ -2054,3 +2094,16 @@ a.mail-list-link {
margin-top: 20px; margin-top: 20px;
} }
#photo-prev-link, #photo-next-link {
padding: 10px;
float: left;
}
#photo-photo {
float: left;
}
#photo-photo-end {
clear: both;
}

View file

@ -965,36 +965,41 @@ input#dfrn-url {
float: left; float: left;
} }
.wall-item-wrapper { .wall-item-wrapper {
float: left; margin-left: 10px;;
} }
.wall-item-lock { .wall-item-lock {
height: 20px; position: absolute;
margin-top: 10px; left: 105px;
top: 1px;
} }
.wall-item-ago { .wall-item-ago {
color: #888888; color: #888888;
font-size: 0.8em; font-size: 0.8em;
} }
.wall-item-like-buttons {
.wall-item-like-buttons img { float: left;
cursor: pointer; margin-right: 10px;
padding-right: 10px;
border-right: 2px solid #fff;
} }
.wall-item-links-wrapper { .wall-item-links-wrapper {
float: left; float: left;
margin-top: 100px;
margin-left: 10px;
} }
.wall-item-delete-wrapper { .wall-item-delete-wrapper {
float: right; float: right;
margin-top: 20px;
margin-right: 50px;
} }
.wall-item-delete-end { .wall-item-delete-end {
clear: both; clear: both;
}
.wall-item-like-buttons img {
cursor: pointer;
} }
.wall-item-delete-icon { .wall-item-delete-icon {
@ -1023,6 +1028,22 @@ input#dfrn-url {
overflow: auto; overflow: auto;
} }
.wall-item-tools {
clear: both;
padding: 5px 10px 0px;
}
.wall-item-photo-end {
clear: both;
}
.wall-item-author {
margin-top: 10px;
}
.wall-item-info {
display: block;
float: left;
width:110px;
margin-right:10px;
}
.wall-item-title { .wall-item-title {
float: left; float: left;
@ -1033,7 +1054,7 @@ input#dfrn-url {
.wall-item-body { .wall-item-body {
float: left; float: left;
width: 450px; width: 450px;
margin-top: 30px; margin-top: 10px;
} }
.comment-edit-wrapper { .comment-edit-wrapper {
@ -1848,6 +1869,11 @@ a.mail-list-link {
float: left; float: left;
width: 150px; width: 150px;
} }
#photo-edit-perms-end {
margin-bottom: 15px;
}
#photo-edit-caption, #photo-edit-newtag, #photo-edit-albumname { #photo-edit-caption, #photo-edit-newtag, #photo-edit-albumname {
float: left; float: left;
margin-bottom: 25px; margin-bottom: 25px;
@ -2100,3 +2126,17 @@ a.mail-list-link {
margin-top: 20px; margin-top: 20px;
} }
#photo-prev-link, #photo-next-link {
padding: 10px;
float: left;
}
#photo-photo {
float: left;
}
#photo-photo-end {
clear: both;
}

View file

@ -8,18 +8,21 @@
<div class="wall-item-photo-end"></div> <div class="wall-item-photo-end"></div>
<div class="wall-item-wrapper" id="wall-item-wrapper-$id" > <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
$lock $lock
<a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a> <div class="wall-item-location" id="wall-item-location-$id">$location</div>
<div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
<div class="wall-item-location" id="wall-item-location-$id">$location</div>
$vote
</div> </div>
</span> </span>
<div class="wall-item-author">
<a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
<div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
</div>
<div class="wall-item-content" id="wall-item-content-$id" > <div class="wall-item-content" id="wall-item-content-$id" >
<div class="wall-item-title" id="wall-item-title-$id">$title</div> <div class="wall-item-title" id="wall-item-title-$id">$title</div>
<div class="wall-item-title-end"></div> <div class="wall-item-title-end"></div>
<div class="wall-item-body" id="wall-item-body-$id" >$body</div> <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
</div> </div>
<div class="wall-item-tools" id="wall-item-tools-$id"> <div class="wall-item-tools" id="wall-item-tools-$id">
$vote
$plink $plink
$drop $drop
</div> </div>

View file

@ -1,30 +1,32 @@
<div class="wall-item-outside-wrapper$indent wallwall" id="wall-item-outside-wrapper-$id" > <div class="wall-item-outside-wrapper$indent wallwall" id="wall-item-outside-wrapper-$id" >
<div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" > <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
<span class="wall-item-info" id="wall-item-info-$id"> <span class="wall-item-info" id="wall-item-info-$id">
<div class="wall-item-photo-wrapper" id="wall-item-ownerphoto-wrapper-$id" > <div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$id" >
<a href="$owner_url" title="$olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$id"> <a href="$owner_url" title="$olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$id">
<img src="$owner_photo" class="wall-item-photo$osparkle" id="wall-item-ownerphoto-$id" height="80" width="80" alt="$owner_name" /></a> <img src="$owner_photo" class="wall-item-photo$osparkle" id="wall-item-ownerphoto-$id" height="80" width="80" alt="$owner_name" /></a>
</div> </div>
<div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$wall" /></div> <div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$wall" /></div>
<div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id" > <div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$id" >
<a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id"> <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
<img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" height="80" width="80" alt="$name" /></a> <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" height="80" width="80" alt="$name" /></a>
</div> </div>
<div class="wall-item-photo-end"></div> <div class="wall-item-photo-end"></div>
<div class="wall-item-wrapper" id="wall-item-wrapper-$id" > <div class="wall-item-wrapper" id="wall-item-wrapper-$id" >
$lock $lock
<a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a> $to <a href="$owner_url" title="$olinktitle" class="wall-item-name-link"><span class="wall-item-name$osparkle" id="wall-item-ownername-$id">$owner_name</span></a> $vwall<br />
<div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
<div class="wall-item-location" id="wall-item-location-$id">$location</div> <div class="wall-item-location" id="wall-item-location-$id">$location</div>
$vote
</div> </div>
</span> </span>
<div class="wall-item-author">
<a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a> $to <a href="$owner_url" title="$olinktitle" class="wall-item-name-link"><span class="wall-item-name$osparkle" id="wall-item-ownername-$id">$owner_name</span></a> $vwall<br />
<div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
</div>
<div class="wall-item-content" id="wall-item-content-$id" > <div class="wall-item-content" id="wall-item-content-$id" >
<div class="wall-item-title" id="wall-item-title-$id">$title</div> <div class="wall-item-title" id="wall-item-title-$id">$title</div>
<div class="wall-item-title-end"></div> <div class="wall-item-title-end"></div>
<div class="wall-item-body" id="wall-item-body-$id" >$body</div> <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
</div> </div>
<div class="wall-item-tools" id="wall-item-tools-$id"> <div class="wall-item-tools" id="wall-item-tools-$id">
$vote
$plink $plink
$drop $drop
</div> </div>