Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Michael Vogel 2013-03-29 11:22:10 +01:00
commit f7fbac2e2b
26 changed files with 24342 additions and 30395 deletions

View File

@ -12,7 +12,7 @@ require_once('library/Mobile_Detect/Mobile_Detect.php');
require_once('include/features.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '3.1.1627' );
define ( 'FRIENDICA_VERSION', '3.1.1644' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1163 );
define ( 'EOL', "<br />\r\n" );

View File

@ -643,7 +643,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal
// fix any escaped ampersands that may have been converted into links
$Text = preg_replace("/\<([^>]*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text);
$Text = preg_replace("/\<([^>]*?)(src|href)=\"[^hfm](.*?)\>/ism",'<$1$2="">',$Text);
$Text = preg_replace("/\<([^>]*?)(src|href)=\"(?!http|ftp|mailto|cid)(.*?)\>/ism",'<$1$2="">',$Text);
if($saved_image)
$Text = bb_replace_images($Text, $saved_image);

View File

@ -19,10 +19,20 @@ function cronhooks_run(&$argv, &$argc){
require_once('include/session.php');
require_once('include/datetime.php');
require_once('include/pidfile.php');
load_config('config');
load_config('system');
$lockpath = get_config('system','lockpath');
if ($lockpath != '') {
$pidfile = new pidfile($lockpath, 'cron.lck');
if($pidfile->is_already_running()) {
logger("cronhooks: Already running");
exit;
}
}
$a->set_baseurl(get_config('system','url'));
load_hooks();

View File

@ -223,4 +223,4 @@ function html2plain($html, $wraplength = 75, $compact = false)
return(trim($message));
}
?>

View File

@ -1149,7 +1149,6 @@ function item_store($arr,$force_parent = false) {
$arr['deny_gid'] = $deny_gid;
$arr['private'] = $private;
$arr['deleted'] = $parent_deleted;
call_hooks('post_remote_end',$arr);
// update the commented timestamp on the parent
@ -1195,6 +1194,14 @@ function item_store($arr,$force_parent = false) {
logger('item_store: put item '.$current_post.' into cachefile '.$cachefile);
}
$r = q('SELECT * FROM `item` WHERE id = %d', intval($current_post));
if (count($r) == 1) {
call_hooks('post_remote_end', $r[0]);
}
else {
logger('item_store: new item not found in DB, id ' . $current_post);
}
return $current_post;
}
@ -1582,6 +1589,26 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
}
/*
This function returns true if $update has an edited timestamp newer
than $existing, i.e. $update contains new data which should override
what's already there. If there is no timestamp yet, the update is
assumed to be newer. If the update has no timestamp, the existing
item is assumed to be up-to-date. If the timestamps are equal it
assumes the update has been seen before and should be ignored.
*/
function edited_timestamp_is_newer($existing, $update) {
if (!x($existing,'edited') || !$existing['edited']) {
return true;
}
if (!x($update,'edited') || !$update['edited']) {
return false;
}
$existing_edited = datetime_convert('UTC', 'UTC', $existing['edited']);
$update_edited = datetime_convert('UTC', 'UTC', $update['edited']);
return (strcmp($existing_edited, $update_edited) < 0);
}
/**
*
* consume_feed - process atom feed and update anything/everything we might need to update
@ -1995,7 +2022,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
// Update content if 'updated' changes
if(count($r)) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
if (edited_timestamp_is_newer($r[0], $datarray)) {
// do not accept (ignore) an earlier edit than one we currently have.
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
@ -2144,7 +2171,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
// Update content if 'updated' changes
if(count($r)) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
if (edited_timestamp_is_newer($r[0], $datarray)) {
// do not accept (ignore) an earlier edit than one we currently have.
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
@ -2898,7 +2925,7 @@ function local_delivery($importer,$data) {
if(count($r)) {
$iid = $r[0]['id'];
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
if (edited_timestamp_is_newer($r[0], $datarray)) {
// do not accept (ignore) an earlier edit than one we currently have.
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
@ -3073,7 +3100,7 @@ function local_delivery($importer,$data) {
// Update content if 'updated' changes
if(count($r)) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
if (edited_timestamp_is_newer($r[0], $datarray)) {
// do not accept (ignore) an earlier edit than one we currently have.
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
@ -3249,7 +3276,7 @@ function local_delivery($importer,$data) {
// Update content if 'updated' changes
if(count($r)) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
if (edited_timestamp_is_newer($r[0], $datarray)) {
// do not accept (ignore) an earlier edit than one we currently have.
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])

View File

@ -88,13 +88,13 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_
if (($new_location_info["path"] == "") AND ($new_location_info["host"] != ""))
$newurl = $new_location_info["scheme"]."://".$new_location_info["host"].$old_location_info["path"];
//$matches = array();
//preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
//$newurl = trim(array_pop($matches));
$matches = array();
if (preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches)) {
$newurl = trim(array_pop($matches));
}
if(strpos($newurl,'/') === 0)
$newurl = $url . $newurl;
$url_parsed = @parse_url($newurl);
if (isset($url_parsed)) {
if (filter_var($newurl, FILTER_VALIDATE_URL)) {
$redirects++;
return fetch_url($newurl,$binary,$redirects,$timeout);
}
@ -188,8 +188,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0)
$newurl = trim(array_pop($matches));
if(strpos($newurl,'/') === 0)
$newurl = $url . $newurl;
$url_parsed = @parse_url($newurl);
if (isset($url_parsed)) {
if (filter_var($newurl, FILTER_VALIDATE_URL)) {
$redirects++;
return fetch_url($newurl,false,$redirects,$timeout);
}

View File

@ -46,7 +46,7 @@ function authenticate_success($user_record, $login_initial = false, $interactive
$master_record = $r[0];
}
$r = q("SELECT `uid`,`username`,`nickname` FROM `user` WHERE `password` = '%s' AND `email` = '%s'",
$r = q("SELECT `uid`,`username`,`nickname` FROM `user` WHERE `password` = '%s' AND `email` = '%s' AND `account_removed` = 0 ",
dbesc($master_record['password']),
dbesc($master_record['email'])
);
@ -56,8 +56,8 @@ function authenticate_success($user_record, $login_initial = false, $interactive
$a->identities = array();
$r = q("select `user`.`uid`, `user`.`username`, `user`.`nickname`
from manage left join user on manage.mid = user.uid
where `manage`.`uid` = %d",
from manage left join user on manage.mid = user.uid where `user`.`account_removed` = 0
and `manage`.`uid` = %d",
intval($master_record['uid'])
);
if($r && count($r))

View File

@ -12,6 +12,15 @@ require_once("include/template_processor.php");
require_once("include/friendica_smarty.php");
if(! function_exists('replace_macros')) {
/**
* This is our template processor
*
* @global Template $t
* @param string|FriendicaSmarty $s the string requiring macro substitution,
* or an instance of FriendicaSmarty
* @param array $r key value pairs (search => replace)
* @return string substituted string
*/
function replace_macros($s,$r) {
global $t;
@ -59,6 +68,7 @@ function random_string($size = 64,$type = RANDOM_STRING_HEX) {
return(substr($s,0,$size));
}}
if(! function_exists('notags')) {
/**
* This is our primary input filter.
*
@ -73,9 +83,9 @@ function random_string($size = 64,$type = RANDOM_STRING_HEX) {
* They will be replaced with safer brackets. This may be filtered further
* if these are not allowed either.
*
* @param string $string Input string
* @return string Filtered string
*/
if(! function_exists('notags')) {
function notags($string) {
return(str_replace(array("<",">"), array('[',']'), $string));
@ -84,10 +94,15 @@ function notags($string) {
// return(str_replace(array("<",">","\xBA","\xBC","\xBE"), array('[',']','','',''), $string));
}}
// use this on "body" or "content" input where angle chars shouldn't be removed,
// and allow them to be safely displayed.
if(! function_exists('escape_tags')) {
/**
* use this on "body" or "content" input where angle chars shouldn't be removed,
* and allow them to be safely displayed.
* @param string $string
* @return string
*/
function escape_tags($string) {
return(htmlspecialchars($string, ENT_COMPAT, 'UTF-8', false));
@ -98,6 +113,12 @@ function escape_tags($string) {
// used to generate initial passwords
if(! function_exists('autoname')) {
/**
* generate a string that's random, but usually pronounceable.
* used to generate initial passwords
* @param int $len
* @return string
*/
function autoname($len) {
if($len <= 0)
@ -173,6 +194,11 @@ function autoname($len) {
// returns escaped text.
if(! function_exists('xmlify')) {
/**
* escape text ($str) for XML transport
* @param string $str
* @return string Escaped text.
*/
function xmlify($str) {
/* $buffer = '';
@ -218,10 +244,12 @@ function xmlify($str) {
return($buffer);
}}
// undo an xmlify
// pass xml escaped text ($s), returns unescaped text
if(! function_exists('unxmlify')) {
/**
* undo an xmlify
* @param string $s xml escaped text
* @return string unescaped text
*/
function unxmlify($s) {
// $ret = str_replace('&amp;','&', $s);
// $ret = str_replace(array('&lt;','&gt;','&quot;','&apos;'),array('<','>','"',"'"),$ret);
@ -233,9 +261,12 @@ function unxmlify($s) {
return $ret;
}}
// convenience wrapper, reverse the operation "bin2hex"
if(! function_exists('hex2bin')) {
/**
* convenience wrapper, reverse the operation "bin2hex"
* @param string $s
* @return number
*/
function hex2bin($s) {
if(! (is_string($s) && strlen($s)))
return '';
@ -247,17 +278,23 @@ function hex2bin($s) {
return(pack("H*",$s));
}}
// Automatic pagination.
// To use, get the count of total items.
// Then call $a->set_pager_total($number_items);
// Optionally call $a->set_pager_itemspage($n) to the number of items to display on each page
// Then call paginate($a) after the end of the display loop to insert the pager block on the page
// (assuming there are enough items to paginate).
// When using with SQL, the setting LIMIT %d, %d => $a->pager['start'],$a->pager['itemspage']
// will limit the results to the correct items for the current page.
// The actual page handling is then accomplished at the application layer.
if(! function_exists('paginate')) {
/**
* Automatic pagination.
*
* To use, get the count of total items.
* Then call $a->set_pager_total($number_items);
* Optionally call $a->set_pager_itemspage($n) to the number of items to display on each page
* Then call paginate($a) after the end of the display loop to insert the pager block on the page
* (assuming there are enough items to paginate).
* When using with SQL, the setting LIMIT %d, %d => $a->pager['start'],$a->pager['itemspage']
* will limit the results to the correct items for the current page.
* The actual page handling is then accomplished at the application layer.
*
* @param App $a App instance
* @return string html for pagination #FIXME remove html
*/
function paginate(&$a) {
$o = '';
$stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string);
@ -314,6 +351,12 @@ function paginate(&$a) {
}}
if(! function_exists('alt_pager')) {
/**
* Alternative pager
* @param App $a App instance
* @param int $i
* @return string html for pagination #FIXME remove html
*/
function alt_pager(&$a, $i) {
$o = '';
$stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string);
@ -338,9 +381,14 @@ function alt_pager(&$a, $i) {
return $o;
}}
// Turn user/group ACLs stored as angle bracketed text into arrays
if(! function_exists('expand_acl')) {
/**
* Turn user/group ACLs stored as angle bracketed text into arrays
*
* @param string $s
* @return array
*/
function expand_acl($s) {
// turn string array of angle-bracketed elements into numeric array
// e.g. "<1><2><3>" => array(1,2,3);
@ -357,9 +405,11 @@ function expand_acl($s) {
return $ret;
}}
// Used to wrap ACL elements in angle brackets for storage
if(! function_exists('sanitise_acl')) {
/**
* Wrap ACL elements in angle brackets for storage
* @param string $item
*/
function sanitise_acl(&$item) {
if(intval($item))
$item = '<' . intval(notags(trim($item))) . '>';
@ -368,14 +418,18 @@ function sanitise_acl(&$item) {
}}
// Convert an ACL array to a storable string
// Normally ACL permissions will be an array.
// We'll also allow a comma-separated string.
if(! function_exists('perms2str')) {
/**
* Convert an ACL array to a storable string
*
* Normally ACL permissions will be an array.
* We'll also allow a comma-separated string.
*
* @param string|array $p
* @return string
*/
function perms2str($p) {
$ret = '';
if(is_array($p))
$tmp = $p;
else
@ -388,10 +442,16 @@ function perms2str($p) {
return $ret;
}}
// generate a guaranteed unique (for this domain) item ID for ATOM
// safe from birthday paradox
if(! function_exists('item_new_uri')) {
/**
* generate a guaranteed unique (for this domain) item ID for ATOM
* safe from birthday paradox
*
* @param string $hostname
* @param int $uid
* @return string
*/
function item_new_uri($hostname,$uid) {
do {
@ -412,6 +472,12 @@ function item_new_uri($hostname,$uid) {
// safe from birthday paradox
if(! function_exists('photo_new_resource')) {
/**
* Generate a guaranteed unique photo ID.
* safe from birthday paradox
*
* @return string
*/
function photo_new_resource() {
do {
@ -427,12 +493,17 @@ function photo_new_resource() {
}}
// wrapper to load a view template, checking for alternate
// languages before falling back to the default
// obsolete, deprecated.
if(! function_exists('load_view_file')) {
/**
* @deprecated
* wrapper to load a view template, checking for alternate
* languages before falling back to the default
*
* @global string $lang
* @global App $a
* @param string $s view name
* @return string
*/
function load_view_file($s) {
global $lang, $a;
if(! isset($lang))
@ -462,6 +533,14 @@ function load_view_file($s) {
}}
if(! function_exists('get_intltext_template')) {
/**
* load a view template, checking for alternate
* languages before falling back to the default
*
* @global string $lang
* @param string $s view path
* @return string
*/
function get_intltext_template($s) {
global $lang;
@ -492,6 +571,13 @@ function get_intltext_template($s) {
}}
if(! function_exists('get_markup_template')) {
/**
* load template $s
*
* @param string $s
* @param string $root
* @return string
*/
function get_markup_template($s, $root = '') {
$stamp1 = microtime(true);
@ -519,6 +605,13 @@ function get_markup_template($s, $root = '') {
}}
if(! function_exists("get_template_file")) {
/**
*
* @param App $a
* @param string $filename
* @param string $root
* @return string
*/
function get_template_file($a, $filename, $root = '') {
$theme = current_theme();
@ -540,16 +633,23 @@ function get_template_file($a, $filename, $root = '') {
// for html,xml parsing - let's say you've got
// an attribute foobar="class1 class2 class3"
// and you want to find out if it contains 'class3'.
// you can't use a normal sub string search because you
// might match 'notclass3' and a regex to do the job is
// possible but a bit complicated.
// pass the attribute string as $attr and the attribute you
// are looking for as $s - returns true if found, otherwise false
if(! function_exists('attribute_contains')) {
/**
* for html,xml parsing - let's say you've got
* an attribute foobar="class1 class2 class3"
* and you want to find out if it contains 'class3'.
* you can't use a normal sub string search because you
* might match 'notclass3' and a regex to do the job is
* possible but a bit complicated.
* pass the attribute string as $attr and the attribute you
* are looking for as $s - returns true if found, otherwise false
*
* @param string $attr attribute value
* @param string $s string to search
* @return boolean True if found, False otherwise
*/
function attribute_contains($attr,$s) {
$a = explode(' ', $attr);
if(count($a) && in_array($s,$a))
@ -558,6 +658,19 @@ function attribute_contains($attr,$s) {
}}
if(! function_exists('logger')) {
/**
* log levels:
* LOGGER_NORMAL (default)
* LOGGER_TRACE
* LOGGER_DEBUG
* LOGGER_DATA
* LOGGER_ALL
*
* @global App $a
* @global dba $db
* @param string $msg
* @param int $level
*/
function logger($msg,$level = 0) {
// turn off logger in install mode
global $a;
@ -580,6 +693,13 @@ function logger($msg,$level = 0) {
if(! function_exists('activity_match')) {
/**
* Compare activity uri. Knows about activity namespace.
*
* @param string $haystack
* @param string $needle
* @return boolean
*/
function activity_match($haystack,$needle) {
if(($haystack === $needle) || ((basename($needle) === $haystack) && strstr($needle,NAMESPACE_ACTIVITY_SCHEMA)))
return true;
@ -587,15 +707,18 @@ function activity_match($haystack,$needle) {
}}
// Pull out all #hashtags and @person tags from $s;
// We also get @person@domain.com - which would make
// the regex quite complicated as tags can also
// end a sentence. So we'll run through our results
// and strip the period from any tags which end with one.
// Returns array of tags found, or empty array.
if(! function_exists('get_tags')) {
/**
* Pull out all #hashtags and @person tags from $s;
* We also get @person@domain.com - which would make
* the regex quite complicated as tags can also
* end a sentence. So we'll run through our results
* and strip the period from any tags which end with one.
* Returns array of tags found, or empty array.
*
* @param string $s
* @return array
*/
function get_tags($s) {
$ret = array();
@ -648,9 +771,15 @@ function get_tags($s) {
}}
// quick and dirty quoted_printable encoding
//
if(! function_exists('qp')) {
/**
* quick and dirty quoted_printable encoding
*
* @param string $s
* @return string
*/
function qp($s) {
return str_replace ("%","=",rawurlencode($s));
}}
@ -658,6 +787,10 @@ return str_replace ("%","=",rawurlencode($s));
if(! function_exists('get_mentions')) {
/**
* @param array $item
* @return string html for mentions #FIXME: remove html
*/
function get_mentions($item) {
$o = '';
if(! strlen($item['tag']))
@ -675,6 +808,13 @@ function get_mentions($item) {
}}
if(! function_exists('contact_block')) {
/**
* Get html for contact block.
*
* @template contact_block.tpl
* @hook contact_block_end (contacts=>array, output=>string)
* @return string
*/
function contact_block() {
$o = '';
$a = get_app();
@ -727,6 +867,14 @@ function contact_block() {
}}
if(! function_exists('micropro')) {
/**
*
* @param array $contact
* @param boolean $redirect
* @param string $class
* @param boolean $textmode
* @return string #FIXME: remove html
*/
function micropro($contact, $redirect = false, $class = '', $textmode = false) {
if($class)
@ -771,6 +919,15 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
if(! function_exists('search')) {
/**
* search box
*
* @param string $s search query
* @param string $id html id
* @param string $url search url
* @param boolean $save show save search button
* @return string html for search box #FIXME: remove html
*/
function search($s,$id='search-box',$url='/search',$save = false) {
$a = get_app();
$o = '<div id="' . $id . '">';
@ -784,6 +941,12 @@ function search($s,$id='search-box',$url='/search',$save = false) {
}}
if(! function_exists('valid_email')) {
/**
* Check if $x is a valid email string
*
* @param string $x
* @return boolean
*/
function valid_email($x){
if(get_config('system','disable_email_validation'))
@ -795,21 +958,26 @@ function valid_email($x){
}}
if(! function_exists('linkify')) {
/**
*
* Function: linkify
*
* Replace naked text hyperlink with HTML formatted hyperlink
*
* @param string $s
*/
if(! function_exists('linkify')) {
function linkify($s) {
$s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\'\%\$\!\+]*)/", ' <a href="$1" target="external-link">$1</a>', $s);
$s = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$s);
return($s);
}}
/**
* Load poke verbs
*
* @return array index is present tense verb
value is array containing past tense verb, translation of present, translation of past
* @hook poke_verbs pokes array
*/
function get_poke_verbs() {
// index is present tense verb
@ -827,11 +995,13 @@ function get_poke_verbs() {
return $arr;
}
/**
* Load moods
* @return array index is mood, value is translated mood
* @hook mood_verbs moods array
*/
function get_mood_verbs() {
// index is present tense verb
// value is array containing past tense verb, translation of present, translation of past
$arr = array(
'happy' => t('happy'),
'sad' => t('sad'),
@ -860,17 +1030,11 @@ function get_mood_verbs() {
}
if(! function_exists('smilies')) {
/**
*
* Function: smilies
*
* Description:
* Replaces text emoticons with graphical images
*
* @Parameter: string $s
*
* Returns string
*
* It is expected that this function will be called using HTML text.
* We will escape text between HTML pre and code blocks from being
* processed.
@ -879,11 +1043,12 @@ function get_mood_verbs() {
* function from being executed by the prepare_text() routine when preparing
* bbcode source for HTML display
*
* @param string $s
* @param boolean $sample
* @return string
* @hook smilie ('texts' => smilies texts array, 'icons' => smilies html array, 'string' => $s)
*/
if(! function_exists('smilies')) {
function smilies($s, $sample = false) {
$a = get_app();
if(intval(get_config('system','no_smilies'))
@ -995,8 +1160,13 @@ function smile_decode($m) {
return(str_replace($m[1],base64url_decode($m[1]),$m[0]));
}
// expand <3333 to the correct number of hearts
/**
* expand <3333 to the correct number of hearts
*
* @param string $x
* @return string
*/
function preg_heart($x) {
$a = get_app();
if(strlen($x[1]) == 1)
@ -1010,6 +1180,12 @@ function preg_heart($x) {
if(! function_exists('day_translate')) {
/**
* Translate days and months names
*
* @param string $s
* @return string
*/
function day_translate($s) {
$ret = str_replace(array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'),
array( t('Monday'), t('Tuesday'), t('Wednesday'), t('Thursday'), t('Friday'), t('Saturday'), t('Sunday')),
@ -1024,23 +1200,31 @@ function day_translate($s) {
if(! function_exists('normalise_link')) {
/**
* Normalize url
*
* @param string $url
* @return string
*/
function normalise_link($url) {
$ret = str_replace(array('https:','//www.'), array('http:','//'), $url);
return(rtrim($ret,'/'));
}}
if(! function_exists('link_compare')) {
/**
*
* Compare two URLs to see if they are the same, but ignore
* slight but hopefully insignificant differences such as if one
* is https and the other isn't, or if one is www.something and
* the other isn't - and also ignore case differences.
*
* Return true if the URLs match, otherwise false.
* @param string $a first url
* @param string $b second url
* @return boolean True if the URLs match, otherwise False
*
*/
if(! function_exists('link_compare')) {
function link_compare($a,$b) {
if(strcasecmp(normalise_link($a),normalise_link($b)) === 0)
return true;
@ -1048,9 +1232,13 @@ function link_compare($a,$b) {
}}
// Find any non-embedded images in private items and add redir links to them
if(! function_exists('redir_private_images')) {
/**
* Find any non-embedded images in private items and add redir links to them
*
* @param App $a
* @param array $item
*/
function redir_private_images($a, &$item) {
$matches = false;
@ -1076,6 +1264,17 @@ function redir_private_images($a, &$item) {
// If attach is true, also add icons for item attachments
if(! function_exists('prepare_body')) {
/**
* Given an item array, convert the body element from bbcode to html and add smilie icons.
* If attach is true, also add icons for item attachments
*
* @param array $item
* @param boolean $attach
* @return string item body html
* @hook prepare_body_init item array before any work
* @hook prepare_body ('item'=>item array, 'html'=>body string) after first bbcode to html
* @hook prepare_body_final ('item'=>item array, 'html'=>body string) after attach icons and blockquote special case handling (spoiler, author)
*/
function prepare_body($item,$attach = false) {
$a = get_app();
@ -1201,9 +1400,13 @@ function prepare_body($item,$attach = false) {
}}
// Given a text string, convert from bbcode to html and add smilie icons.
if(! function_exists('prepare_text')) {
/**
* Given a text string, convert from bbcode to html and add smilie icons.
*
* @param string $text
* @return string
*/
function prepare_text($text) {
require_once('include/bbcode.php');
@ -1217,10 +1420,15 @@ function prepare_text($text) {
}}
/**
* returns
* return array with details for categories and folders for an item
*
* @param array $item
* @return array
*
* [
* //categories [
* [ // categories array
* {
* 'name': 'category name',
* 'removeurl': 'url to remove this category',
@ -1229,7 +1437,8 @@ function prepare_text($text) {
* } ,
* ....
* ],
* // folders [
* [ //folders array
* {
* 'name': 'folder name',
* 'removeurl': 'url to remove this folder',
* 'first': 'is the first in this array? true/false',
@ -1240,6 +1449,7 @@ function prepare_text($text) {
* ]
*/
function get_cats_and_terms($item) {
$a = get_app();
$categories = array();
$folders = array();
@ -1284,11 +1494,12 @@ function get_cats_and_terms($item) {
}
/**
* return atom link elements for all of our hubs
*/
if(! function_exists('feed_hublinks')) {
/**
* return atom link elements for all of our hubs
* @return string hub link xml elements
*/
function feed_hublinks() {
$hub = get_config('system','huburl');
@ -1308,9 +1519,13 @@ function feed_hublinks() {
return $hubxml;
}}
/* return atom link elements for salmon endpoints */
if(! function_exists('feed_salmonlinks')) {
/**
* return atom link elements for salmon endpoints
* @param string $nick user nickname
* @return string salmon link xml elements
*/
function feed_salmonlinks($nick) {
$a = get_app();
@ -1325,6 +1540,11 @@ function feed_salmonlinks($nick) {
}}
if(! function_exists('get_plink')) {
/**
* get private link for item
* @param array $item
* @return boolean|array False if item has not plink, otherwise array('href'=>plink url, 'title'=>translated title)
*/
function get_plink($item) {
$a = get_app();
if (x($item,'plink') && ($item['private'] != 1)) {
@ -1339,6 +1559,11 @@ function get_plink($item) {
}}
if(! function_exists('unamp')) {
/**
* replace html amp entity with amp char
* @param string $s
* @return string
*/
function unamp($s) {
return str_replace('&amp;', '&', $s);
}}
@ -1347,6 +1572,12 @@ function unamp($s) {
if(! function_exists('lang_selector')) {
/**
* get html for language selector
* @global string $lang
* @return string
* @template lang_selector.tpl
*/
function lang_selector() {
global $lang;
@ -1383,6 +1614,11 @@ function lang_selector() {
if(! function_exists('return_bytes')) {
/**
* return number of bytes in size (K, M, G)
* @param string $size_str
* @return number
*/
function return_bytes ($size_str) {
switch (substr ($size_str, -1))
{
@ -1393,6 +1629,9 @@ function return_bytes ($size_str) {
}
}}
/**
* @return string
*/
function generate_user_guid() {
$found = true;
do {
@ -1407,7 +1646,11 @@ function generate_user_guid() {
}
/**
* @param string $s
* @param boolean $strip_padding
* @return string
*/
function base64url_encode($s, $strip_padding = false) {
$s = strtr(base64_encode($s),'+/','-_');
@ -1418,6 +1661,10 @@ function base64url_encode($s, $strip_padding = false) {
return $s;
}
/**
* @param string $s
* @return string
*/
function base64url_decode($s) {
if(is_array($s)) {
@ -1446,6 +1693,16 @@ function base64url_decode($s) {
if (!function_exists('str_getcsv')) {
/**
* Parse csv string
*
* @param string $input
* @param string $delimiter
* @param string $enclosure
* @param string $escape
* @param string $eol
* @return boolean|array False on error, otherwise array[row][column]
*/
function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = '\\', $eol = '\n') {
if (is_string($input) && !empty($input)) {
$output = array();
@ -1502,6 +1759,11 @@ if (!function_exists('str_getcsv')) {
}
}
/**
* return div element with class 'clear'
* @return string
* @deprecated
*/
function cleardiv() {
return '<div class="clear"></div>';
}
@ -1538,6 +1800,8 @@ function html2bb_video($s) {
/**
* apply xmlify() to all values of array $val, recursively
* @param array $val
* @return array
*/
function array_xmlify($val){
if (is_bool($val)) return $val?"true":"false";
@ -1546,6 +1810,13 @@ function array_xmlify($val){
}
/**
* transorm link href and img src from relative to absolute
*
* @param string $text
* @param string $base base url
* @return string
*/
function reltoabs($text, $base)
{
if (empty($base))
@ -1578,6 +1849,12 @@ function reltoabs($text, $base)
return $text;
}
/**
* get translated item type
*
* @param array $itme
* @return string
*/
function item_post_type($item) {
if(intval($item['event-id']))
return t('event');

View File

@ -274,6 +274,7 @@ function admin_page_site_post(&$a){
$maxloadavg = ((x($_POST,'maxloadavg')) ? intval(trim($_POST['maxloadavg'])) : 50);
$dfrn_only = ((x($_POST,'dfrn_only')) ? True : False);
$ostatus_disabled = !((x($_POST,'ostatus_disabled')) ? True : False);
$ostatus_poll_interval = ((x($_POST,'ostatus_poll_interval')) ? intval(trim($_POST['ostatus_poll_interval'])) : 0);
$diaspora_enabled = ((x($_POST,'diaspora_enabled')) ? True : False);
$ssl_policy = ((x($_POST,'ssl_policy')) ? intval($_POST['ssl_policy']) : 0);
$new_share = ((x($_POST,'new_share')) ? True : False);
@ -388,6 +389,7 @@ function admin_page_site_post(&$a){
set_config('system','curl_timeout', $timeout);
set_config('system','dfrn_only', $dfrn_only);
set_config('system','ostatus_disabled', $ostatus_disabled);
set_config('system','ostatus_poll_interval', $ostatus_poll_interval);
set_config('system','diaspora_enabled', $diaspora_enabled);
set_config('config','private_addons', $private_addons);
@ -444,6 +446,15 @@ function admin_page_site(&$a) {
}
}
/* OStatus conversation poll choices */
$ostatus_poll_choices = array(
"-1" => t("Never"),
"0" => t("Frequently"),
"60" => t("Hourly"),
"720" => t("Twice daily"),
"1440" => t("Daily")
);
/* get user names to make the install a personal install of X */
$user_names = array();
$user_names['---'] = t('Multi user instance');
@ -520,6 +531,7 @@ function admin_page_site(&$a) {
'$no_utf' => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','no_utf'), t("Use PHP UTF8 regular expressions")),
'$no_community_page' => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), t("Display a Community page showing all recent public postings on this site.")),
'$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disabled'), t("Provide built-in OStatus \x28identi.ca, status.net, etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")),
'$ostatus_poll_interval' => array('ostatus_poll_interval', t("OStatus conversation completion interval"), (string) intval(get_config('system','ostatus_poll_interval')), t("How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."), $ostatus_poll_choices),
'$diaspora_enabled' => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), t("Provide built-in Diaspora network compatibility.")),
'$dfrn_only' => array('dfrn_only', t('Only allow Friendica contacts'), get_config('system','dfrn_only'), t("All contacts must use Friendica protocols. All other built-in communication protocols disabled.")),
'$verifyssl' => array('verifyssl', t("Verify SSL"), get_config('system','verifyssl'), t("If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.")),
@ -1181,7 +1193,7 @@ readable.");
'$logname' => get_config('system','logfile'),
// name, label, value, help string, extra data...
'$debugging' => array('debugging', t("Debugging"),get_config('system','debugging'), ""),
'$debugging' => array('debugging', t("Enable Debugging"),get_config('system','debugging'), ""),
'$logfile' => array('logfile', t("Log file"), get_config('system','logfile'), t("Must be writable by web server. Relative to your Friendica top-level directory.")),
'$loglevel' => array('loglevel', t("Log level"), get_config('system','loglevel'), "", $log_choices),

View File

@ -172,6 +172,9 @@ function display_content(&$a, $update = 0) {
$description = trim(html2plain(bbcode($r[0]["body"], false, false), 0, true));
$title = trim(html2plain(bbcode($r[0]["title"], false, false), 0, true));
$description = htmlspecialchars($description, ENT_COMPAT, 'UTF-8', true); // allow double encoding here
$title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8', true); // allow double encoding here
if ($title == "")
$title = $r[0]["author-name"];

View File

@ -971,7 +971,7 @@ function item_content(&$a) {
if (is_ajax()){
// ajax return: [<item id>, 0 (no perm) | <owner id>]
echo json_encode(array(intval($a->argv[2]), intval($o)));
kllme();
killme();
}
}
return $o;

View File

@ -594,7 +594,7 @@ function network_content(&$a, $update = 0) {
if($update)
killme();
notice( t('No such group') . EOL );
goaway($a->get_baseurl(true) . '/network');
goaway($a->get_baseurl(true) . '/network/0');
// NOTREACHED
}

File diff suppressed because it is too large Load Diff

View File

@ -79,6 +79,7 @@
{{ inc field_checkbox.tpl with $field=$force_publish }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$no_community_page }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$ostatus_disabled }}{{ endinc }}
{{ inc field_select.tpl with $field=$ostatus_poll_interval }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$diaspora_enabled }}{{ endinc }}
{{ inc field_checkbox.tpl with $field=$dfrn_only }}{{ endinc }}
{{ inc field_input.tpl with $field=$global_directory }}{{ endinc }}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -84,6 +84,7 @@
{{include file="field_checkbox.tpl" field=$force_publish}}
{{include file="field_checkbox.tpl" field=$no_community_page}}
{{include file="field_checkbox.tpl" field=$ostatus_disabled}}
{{include file="field_select.tpl" field=$ostatus_poll_interval}}
{{include file="field_checkbox.tpl" field=$diaspora_enabled}}
{{include file="field_checkbox.tpl" field=$dfrn_only}}
{{include file="field_input.tpl" field=$global_directory}}

View File

@ -255,6 +255,9 @@ a:focus {
img,
figure {
border: 0 none;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
max-width: 550px;
margin: 0;
}

View File

@ -1,36 +0,0 @@
<img style="float:left; margin:5px 20px 0 0" src="/images/friendica-128.png" title="friendica">
<div class="login-form">
<form action="$dest_url" method="post" >
<input type="hidden" name="auth-params" value="login" />
<div id="login_standard">
{{ inc field_input.tpl with $field=$lname }}{{ endinc }}
{{ inc field_password.tpl with $field=$lpassword }}{{ endinc }}
</div>
{{ if $openid }}
<div id="login_openid">
{{ inc field_openid.tpl with $field=$lopenid }}{{ endinc }}
</div>
{{ endif }}
<div id="login-submit-wrapper" >
<input type="submit" name="submit" id="login-submit-button" value="$login" />
</div>
<br /><br />
<div class="login-extra-links">
{{ if $register }}
<a href="register" title="$register.title" id="register-link">$register.desc</a><br />
<a href="lostpass" title="$lostpass" id="lost-password-link" >$lostlink</a>
{{ endif }}
</div>
{{ for $hiddens as $k=>$v }}
<input type="hidden" name="$k" value="$v" />
{{ endfor }}
</form>
</div>
<script type="text/javascript">window.loginName = "$lname.0";</script>

View File

@ -1,41 +0,0 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<img style="float:left; margin:5px 20px 0 0" src="/images/friendica-128.png" title="friendica">
<div class="login-form">
<form action="{{$dest_url}}" method="post" >
<input type="hidden" name="auth-params" value="login" />
<div id="login_standard">
{{include file="field_input.tpl" field=$lname}}
{{include file="field_password.tpl" field=$lpassword}}
</div>
{{if $openid}}
<div id="login_openid">
{{include file="field_openid.tpl" field=$lopenid}}
</div>
{{/if}}
<div id="login-submit-wrapper" >
<input type="submit" name="submit" id="login-submit-button" value="{{$login}}" />
</div>
<br /><br />
<div class="login-extra-links">
{{if $register}}
<a href="register" title="{{$register.title}}" id="register-link">{{$register.desc}}</a><br />
<a href="lostpass" title="{{$lostpass}}" id="lost-password-link" >{{$lostlink}}</a>
{{/if}}
</div>
{{foreach $hiddens as $k=>$v}}
<input type="hidden" name="{{$k}}" value="{{$v}}" />
{{/foreach}}
</form>
</div>
<script type="text/javascript">window.loginName = "{{$lname.0}}";</script>

View File

@ -2,7 +2,7 @@
style.css
Smoothly
Created by alex@friendica.pixelbits.de on 2013-02-27
Created by alex@friendica.pixelbits.de on 2013-03-27
** Colors **
Blue links - #1873a2
@ -70,8 +70,8 @@ input[type=submit]:hover {
color: #efefef;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -119,7 +119,7 @@ section {
}
.lframe {
border: 1px solid #dddddd;
border: 1px solid #7C7D7B;
box-shadow: 3px 3px 6px #959494;
-moz-box-shadow: 3px 3px 6px #959494;
-webkit-box-shadow: 3px 3px 6px #959494;
@ -128,15 +128,15 @@ section {
}
.mframe {
padding: 3px;
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #C5C5C5;
padding: 0;
/*background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #7C7D7B;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;*/
}
#wall-item-lock {
@ -160,8 +160,8 @@ section {
.button:hover {
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -197,25 +197,17 @@ section {
}
#login-extra-links {
width: 90px;
width: auto;
margin-top: 20px;
clear: both;
}
.login-extra-links {
width: 100%;
margin-left: 145px;
margin-left: 0px;
clear: both;
}
#login-extra-links a {
display: block;
margin: 10px;
padding: 5px 0px 5px 0px;
text-align: center;
margin-right: 20px;
}
#login-extra-filler {
display: none;
}
@ -227,25 +219,33 @@ section {
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
padding: 10px;
margin: 10px 0 0 0;
padding: 15px 10px 10px 20px;
margin: 20px 0 0 210px;
}
#login_openid {
width: 300px;
margin-left: 150px;
#login_openid,
#login-extra-links a {
width: 460px;
float: left;
margin: 5px 0 0 230px;
}
#div_id_remember {
width: 258px;
float: left;
margin: 5px 0 0 230px;
}
#login_standard input,
#login_openid input {
height: 20px;
width: 240px;
}
#register-link,
#lost-password-link {
font-size: 80%;
width: 210px;
margin-left: 5px;
width: 260px;
}
#login-name-end,
@ -257,12 +257,11 @@ section {
#login-submit-button,
#login-submit-wrapper {
margin-top: 10px;
margin-left: 75px;
}
#login-submit-button {
width: 280px;
width: 250px;
margin: 10px 0 0 230px;
}
.login-form,
@ -338,11 +337,11 @@ nav {
background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 0px 0px 5px 5px;
-moz-border-radius: 0px 0px 5px 5px;
-webkit-border-radius: 0px 0px 5px 5px;
}
nav a {
@ -393,10 +392,13 @@ nav #user-menu {
background: -moz-linear-gradient( center top, #797979 5%, #898988 100% );
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#797979', endColorstr='#898988');
background-color: #a2a2a2;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border: 1px solid #7C7D8B;
color: #efefef;
text-decoration: none;
text-align: center;
@ -405,8 +407,8 @@ nav #user-menu {
nav #user-menu:hover {
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -589,7 +591,7 @@ ul#user-menu-popup li a.nav-sep {
#sysmsg br {
display:block;
margin:2px 0px;
border-top: 1px solid #dddddd;
border-top: 1px solid #7C7D7B;
}
/* ================= */
@ -634,19 +636,18 @@ aside h4 {
.vcard #profile-photo-wrapper {
margin: 10px 0px;
padding: 1px;
width: 200px;
height: 200px;
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #C5C5C5;
padding: 0;
width: auto;
/*background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-webkit-border-radius: 5px;*/
}
@ -736,7 +737,7 @@ h3 #search:before {
#network-new-link {
background-color: #f3f3f3;
border: 1px solid #cdcdcd;
border: 1px solid #7C7D7B;
margin-bottom: 10px;
border-radius: 5px;
-webkit-border-radius: 5px;
@ -820,7 +821,7 @@ h3 #search:before {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
color: #7c7d7b;
border: 1px solid #cdcdcd;
border: 1px solid #7C7D7B;
}
li.widget-list {
@ -857,8 +858,8 @@ li.widget-list {
background-color: #1873a2;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -903,7 +904,7 @@ li.widget-list {
}
ul .sidebar-group-li {
list-style: none;
list-style: disc;
font-size: 1.0em;
}
@ -954,7 +955,7 @@ ul .sidebar-group-li .icon {
-moz-border-radius: 5px 5px 0px 0px;
-webkit-border-radius: 5px 5px 0px 0px;
border: 1px solid #e2e2e2;
border-bottom: 1px solid #cdcdcd;
border-bottom: 1px solid #7C7D7B;
padding-top: 5px;
padding-bottom: 5px;
vertical-align: baseline;
@ -1009,13 +1010,13 @@ ul .sidebar-group-li .icon {
width: 47px;
height: 47px;
margin-right: 2px;
border: 1px solid #C5C5C5;
border: 1px solid #7C7D7B;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
.contact-block-div {
@ -1185,8 +1186,8 @@ ul .sidebar-group-li .icon {
background-color: #1873a2;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -1347,6 +1348,13 @@ ul .sidebar-group-li .icon {
/* = Posts = */
/* ========= */
.wall-item-name {
font-style: bold !important;
border: 0px !important;
border-radius: 0px !important;
box-shadow: none !important;
}
.wall-item-outside-wrapper {
max-width: 100%;
border-bottom: 1px solid #dedede;
@ -1355,13 +1363,13 @@ ul .sidebar-group-li .icon {
padding-right: 10px;
padding-left: 12px;
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #CDCDCD;
border: 1px solid #7C7D7B;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
.wall-item-outside-wrapper-end {
@ -1381,19 +1389,19 @@ ul .sidebar-group-li .icon {
.wall-item-photo-menu-button {
display: none;
text-indent: -99999px;
background: #eeeeee url("images/menu-user-pin.png") no-repeat 75px center;
background: #eeeeee url("images/menu-user-pin.png") no-repeat 35px center;
position: absolute;
overflow: hidden;
height: 20px;
width: 100%;
top: 85px;
left: -1px;
border-right: 1px solid #dddddd;
border-left: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
top: 82px;
left: 0;
border-right: 1px solid #7C7D7B;
border-left: 1px solid #7C7D7B;
border-bottom: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 0px 0px 5px 5px;
-webkit-border-radius: 0px 0px 5px 5px;
-moz-border-radius: 0px 0px 5px 5px;
@ -1404,26 +1412,29 @@ ul .sidebar-group-li .icon {
width: 100px;
}
.wall-item-photo {
width: 81px !important;
height: 81px !important;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
}
.wall-item-photo-wrapper {
width: 80px;
height: 80px;
padding: 1px;
padding: 0;
position: relative;
border: 1px solid #dddddd;
/*border: 1px solid #7C7D7B;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;*/
}
.wall-item-photo {
border: 1px solid #7C7D7B;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
.wall-item-tools {
@ -1598,13 +1609,14 @@ ul .sidebar-group-li .icon {
}
.wallwall .wwto {
left: 0px;
left: -10px;
margin: 0;
position: absolute;
margin: -1px;
top: 63px;
top: 65px;
width: 30px;
z-index: 900;
width: 0px;
height: 0px;
width: 30px;
height: 30px;
}
.wallwall .wwto img {
@ -1618,8 +1630,8 @@ ul .sidebar-group-li .icon {
.wall-item-arrowphoto-wrapper {
position: absolute;
left: 30px;
top: 67px;
left: 20px;
top: 70px;
z-index: 950;
}
@ -1629,20 +1641,20 @@ ul .sidebar-group-li .icon {
color: #2e3436;
border-top: 1px;
background: #eeeeee;
border-right: 1px solid #dddddd;
border-left: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
border-right: 1px solid #7C7D7B;
border-left: 1px solid #7C7D7B;
border-bottom: 1px solid #7C7D7B;
position: absolute;
left: -1px;
left: 0px;
top: 101px;
display: none;
z-index: 10000;
border-radius: 0px 5px 5px 5px;
-webkit-border-radius: 0px 5px 5px 5px;
-moz-border-radius: 0px 5px 5px 5px;
box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
@ -1650,9 +1662,9 @@ ul .sidebar-group-li .icon {
-webkit-border-radius: 0px 5px 5px 5px;
-moz-border-radius: 0px 5px 5px 5px;
border-radius: 0px 5px 5px 5px;
box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
.wall-item-photo-menu ul {
@ -1733,8 +1745,8 @@ code {
}
.wall-item-outside-wrapper.comment .wall-item-photo {
width: 41px!important;
height: 41px!important;
width: 40px!important;
height: 40px!important;
}
.wall-item-outside-wrapper.comment .wall-item-photo-wrapper {
@ -1743,8 +1755,8 @@ code {
}
.wall-item-outside-wrapper.comment .wall-item-photo-menu-button {
top: 45px;
background-position: 35px center;
top: 42px;
background-position: 15px center;
}
.wall-item-outside-wrapper.comment .wall-item-info {
@ -1823,7 +1835,7 @@ code {
padding: 5px 5px;
background-color: #a2a2a2;
color: #eeeeec;
border: 1px solid #CDCDCD;
border: 1px solid #7C7D7B;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -1831,13 +1843,13 @@ code {
.comment-edit-submit:hover {
background-color: #1873a2;
border: 1px solid #CDCDCD;
border: 1px solid #7C7D7B;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
.comment-edit-submit:active {
@ -1979,10 +1991,10 @@ div[id$="wrapper"] br {
margin-bottom: 70px;
margin-right: 29px;
background-color: #f6f6f6;
border: 1px solid #dddddd;
box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
.profile-match-break,
@ -2021,8 +2033,14 @@ div[id$="wrapper"] br {
}
.photo {
height: 200px!important;
width: 200px!important;
height: 203px !important;
width: 203px !important;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -2358,6 +2376,10 @@ input #photo_edit_form {
-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
border: 1px solid #7C7D7B;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#prvmail-wrapper:before,
@ -2382,6 +2404,10 @@ input #photo_edit_form {
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
z-index: -1;
border: 1px solid #7C7D7B;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#prvmail-wrapper:after,
@ -2394,6 +2420,10 @@ input #photo_edit_form {
-moz-transform: skew(5deg) rotate(5deg);
-ms-transform: skew(5deg) rotate(5deg);
-o-transform: skew(5deg) rotate(5deg);
border: 1px solid #7C7D7B;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
.prvmail-text {
@ -2452,13 +2482,13 @@ margin-left: 0px;
float: left;
padding: 2px;
background-color: #efefef;
border: 1px solid #C5C5C5;
border: 1px solid #7C7D7B;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
.mail-list-detail {
@ -2467,7 +2497,7 @@ margin-left: 0px;
min-height: 70px;
padding: 20px;
padding-top: 10px;
border: 1px solid #dddddd;
border: 1px solid #7C7D7B;
}
.mail-list-sender-name {
@ -2516,6 +2546,7 @@ margin-left: 0px;
.mail-conv-sender-photo {
width: 64px;
height: 64px;
border-radius: 3px 3px 3px 3px;
}
.mail-conv-sender-name {
@ -2545,7 +2576,7 @@ margin-left: 0px;
margin-bottom: 0px;
vertical-align: middle;
margin: auto;
border: 1px solid #dddddd;
border: 1px solid #7C7D7B;
}
.mail-conv-break {
@ -2561,7 +2592,7 @@ margin-left: 0px;
#prvmail-subject {
font-weight: bold;
border: 1px solid #dddddd;
border: 1px solid #7C7D7B;
}
/* ================= */
@ -2667,6 +2698,13 @@ margin-left: 0px;
.contact-entry-photo {
position: relative;
/*border: 1px solid #7C7D7B;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;*/
}
.contact-entry-edit-links .icon {
@ -2711,8 +2749,8 @@ margin-left: 0px;
background-color: #1873a2;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -2857,8 +2895,8 @@ margin-left: 0px;
background-color: #1873a2;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -2893,7 +2931,7 @@ margin-left: 0px;
font-weight: bold;
font-stretch: semi-expanded;
background-color: #f3f3f3;
border: 1px solid #cdcdcd;
border: 1px solid #7C7D7B;
padding: 10px;
margin-top: 20px;
border-radius: 5px;
@ -3050,8 +3088,8 @@ margin-left: 0px;
background-color: #555753;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -3601,8 +3639,8 @@ margin-left: 0px;
clear: left;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -3647,7 +3685,7 @@ margin-left: 0px;
/* =============== */
.field {
margin-bottom: 10px;
/*margin-bottom: 10px;*/
overflow: auto;
padding-bottom: 0px;
width: 100%;
@ -3665,7 +3703,7 @@ margin-left: 0px;
.field label {
float: left;
width: 200px;
width: 210px;
}
.field checkbox {
@ -3676,7 +3714,7 @@ margin-left: 0px;
.field input,
.field textarea {
width: 400px;
border: 1px solid #CDCDCD;
border: 1px solid #7C7D7B;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -3735,6 +3773,21 @@ margin-left: 0px;
.sparkle {
cursor: url('lock.cur'), pointer;
width: 100%;
height: 100%;
/*border: 1px solid #7C7D7B;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;*/
}
.label {
border: 0px;
border-radius: 0px;
box-shadow: none;
}
.icon {
@ -3987,8 +4040,8 @@ footer {
background-color: #1873a2;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -4117,15 +4170,15 @@ ul.menu-popup {
color: #2e3436;
border-top: 0px;
background: #eeeeee;
border-right: 1px solid #dddddd;
border-left: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
border-right: 1px solid #7C7D7B;
border-left: 1px solid #7C7D7B;
border-bottom: 1px solid #7C7D7B;
border-radius: 0px 5px 5px 5px;
-webkit-border-radius: 0px 5px 5px 5px;
-moz-border-radius: 0px 5px 5px 5px;
box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
}
.acpopupitem {
@ -4211,7 +4264,7 @@ ul.menu-popup {
#scrollup {
position: fixed;
right: 1px;
bottom: 30px;
bottom: 260px;
z-index: 100;
}
@ -4400,21 +4453,21 @@ div #datebrowse-sidebar.widget {
#settings-activity-desc,
#settings-notify-desc {
margin:10px 10px 10px 0;
margin: 10px 10px 10px 0;
font-weight: bold;
}
#settings-notifications {
width: 400px;
width: 410px;
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
padding:10px;
margin:10px 10px 10px 0;
padding: 10px;
margin: 10px 10px 10px 0;
}
#id_npassword {}
@ -4429,7 +4482,9 @@ div #datebrowse-sidebar.widget {
#collapsed-comments-page-widget {}
.tool {}
.tool {
list-style-type: disc;
}
#logo-text {
}
@ -4445,8 +4500,8 @@ div #datebrowse-sidebar.widget {
.settings-block {
border: 1px solid #7C7D7B;
box-shadow: 0 0 8px #BDBDBD;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
-moz-box-shadow: 0 0 8px #BDBDBD;
-webkit-box-shadow: 0 0 8px #BDBDBD;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
@ -4493,3 +4548,10 @@ div #datebrowse-sidebar.widget {
width: 75px;
}
#id_remember {
width: auto;
float: right;
}
.field.input.openid {
}

View File

@ -3,7 +3,7 @@
/*
* Name: Smoothly
* Description: Like coffee with milk. Theme optimized for iPad[2].
* Version: Version 2013-02-27.1
* Version: Version 2013-03-27.1
* Author: Alex <https://friendica.pixelbits.de/profile/alex>
* Maintainer: Alex <https://friendica.pixelbits.de/profile/alex>
* Screenshot: <a href="screenshot.png">Screenshot</a>