aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzotlabs <mike@macgirvin.com>2018-11-13 20:37:52 -0800
committerzotlabs <mike@macgirvin.com>2018-11-13 20:37:52 -0800
commitcfc43f6dea22c4c23ed485a7b321de76515f584d (patch)
tree11bc8dd44a4c33c390996f9190aabd135712add2
parentee85784be18c14905568fb259411f490c8d6bd91 (diff)
parent1260887fa743a4e5522dea366f0a584430b0a9a0 (diff)
downloadvolse-hubzilla-cfc43f6dea22c4c23ed485a7b321de76515f584d.tar.gz
volse-hubzilla-cfc43f6dea22c4c23ed485a7b321de76515f584d.tar.bz2
volse-hubzilla-cfc43f6dea22c4c23ed485a7b321de76515f584d.zip
Merge branch 'master' into zvi
-rw-r--r--Zotlabs/Lib/Enotify.php14
-rw-r--r--Zotlabs/Module/Photo.php33
-rw-r--r--Zotlabs/Module/Photos.php12
-rw-r--r--Zotlabs/Module/Search.php6
-rw-r--r--include/bbcode.php12
-rwxr-xr-xinclude/dba/dba_driver.php18
-rw-r--r--include/photo/photo_driver.php305
-rw-r--r--include/text.php15
-rw-r--r--view/es-es/hstrings.php4
-rw-r--r--view/theme/redbasic/css/style.css10
-rw-r--r--view/theme/redbasic/schema/Focus-Light.php3
-rw-r--r--view/tpl/activity_filter_widget.tpl2
12 files changed, 248 insertions, 186 deletions
diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php
index cfb0bd344..25c96d9cc 100644
--- a/Zotlabs/Lib/Enotify.php
+++ b/Zotlabs/Lib/Enotify.php
@@ -825,7 +825,7 @@ class Enotify {
// convert this logic into a json array just like the system notifications
- return array(
+ $x = array(
'notify_link' => $item['llink'],
'name' => $item['author']['xchan_name'],
'url' => $item['author']['xchan_url'],
@@ -835,9 +835,19 @@ class Enotify {
'b64mid' => ((in_array($item['verb'], [ACTIVITY_LIKE, ACTIVITY_DISLIKE])) ? 'b64.' . base64url_encode($item['thr_parent']) : 'b64.' . base64url_encode($item['mid'])),
'notify_id' => 'undefined',
'thread_top' => (($item['item_thread_top']) ? true : false),
- 'message' => strip_tags(bbcode($itemem_text))
+ 'message' => strip_tags(bbcode($itemem_text)),
+ // these are for the superblock addon
+ 'hash' => $item['author']['xchan_hash'],
+ 'uid' => local_channel(),
+ 'display' => true
);
+ call_hooks('enotify_format',$x);
+ if(! $x['display']) {
+ return [];
+ }
+
+ return $x;
}
}
diff --git a/Zotlabs/Module/Photo.php b/Zotlabs/Module/Photo.php
index d76fca278..95e3404fb 100644
--- a/Zotlabs/Module/Photo.php
+++ b/Zotlabs/Module/Photo.php
@@ -10,7 +10,7 @@ require_once('include/photos.php');
class Photo extends \Zotlabs\Web\Controller {
function init() {
-
+
$prvcachecontrol = false;
$streaming = null;
$channel = null;
@@ -32,6 +32,7 @@ class Photo extends \Zotlabs\Web\Controller {
}
$observer_xchan = get_observer_hash();
+ $ismodified = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
if(isset($type)) {
@@ -79,13 +80,14 @@ class Photo extends \Zotlabs\Web\Controller {
intval(PHOTO_PROFILE)
);
if($r) {
- $modified = strtotime($r[0]['edited']);
+ $modified = strtotime($r[0]['edited'] . "Z");
$data = dbunescbin($r[0]['content']);
$mimetype = $r[0]['mimetype'];
}
if(intval($r[0]['os_storage']))
$data = file_get_contents($data);
}
+
if(! $data) {
$data = fetch_image_from_url($default,$mimetype);
}
@@ -126,9 +128,7 @@ class Photo extends \Zotlabs\Web\Controller {
$photo = substr($photo,0,-2);
// If viewing on a high-res screen, attempt to serve a higher resolution image:
if ($resolution == 2 && ($cookie_value > 1))
- {
$resolution = 1;
- }
}
$r = q("SELECT uid, photo_usage FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1",
@@ -165,10 +165,13 @@ class Photo extends \Zotlabs\Web\Controller {
if($exists && $allowed) {
$data = dbunescbin($e[0]['content']);
+ $filesize = $e[0]['filesize'];
$mimetype = $e[0]['mimetype'];
- $modified = strtotime($e[0]['edited']);
+ $modified = strtotime($e[0]['edited'] . 'Z');
if(intval($e[0]['os_storage']))
$streaming = $data;
+ if($e[0]['allow_cid'] != '' || $e[0]['allow_gid'] != '' || $e[0]['deny_gid'] != '' || $e[0]['deny_gid'] != '')
+ $prvcachecontrol = true;
}
else {
if(! $allowed) {
@@ -179,9 +182,20 @@ class Photo extends \Zotlabs\Web\Controller {
}
}
+ } else {
+ http_status_exit(404,'not found');
}
}
-
+
+ header_remove('Pragma');
+
+ if($ismodified === gmdate("D, d M Y H:i:s", $modified) . " GMT") {
+ header_remove('Expires');
+ header_remove('Cache-Control');
+ header_remove('Set-Cookie');
+ http_status_exit(304,'not modified');
+ }
+
if(! isset($data)) {
if(isset($resolution)) {
switch($resolution) {
@@ -219,11 +233,6 @@ class Photo extends \Zotlabs\Web\Controller {
}
- if(function_exists('header_remove')) {
- header_remove('Pragma');
- header_remove('pragma');
- }
-
header("Content-type: " . $mimetype);
if($prvcachecontrol) {
@@ -253,7 +262,7 @@ class Photo extends \Zotlabs\Web\Controller {
}
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modified) . " GMT");
- header("Content-Length: " . strlen($data));
+ header("Content-Length: " . (isset($filesize) ? $filesize : strlen($data)));
// If it's a file resource, stream it.
diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php
index 78bfb1f09..03fd8a53d 100644
--- a/Zotlabs/Module/Photos.php
+++ b/Zotlabs/Module/Photos.php
@@ -263,7 +263,8 @@ class Photos extends \Zotlabs\Web\Controller {
$fsize = strlen($data);
}
- $x = q("update photo set content = '%s', filesize = %d, height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 0",
+ $x = q("update photo set edited = '%s', content = '%s', filesize = %d, height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 0",
+ dbesc(datetime_convert()),
dbescbin($data),
intval($fsize),
intval($height),
@@ -278,7 +279,8 @@ class Photos extends \Zotlabs\Web\Controller {
$width = $ph->getWidth();
$height = $ph->getHeight();
- $x = q("update photo set content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 1",
+ $x = q("update photo set edited = '%s', content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 1",
+ dbesc(datetime_convert()),
dbescbin($ph->imageString()),
intval($height),
intval($width),
@@ -293,7 +295,8 @@ class Photos extends \Zotlabs\Web\Controller {
$width = $ph->getWidth();
$height = $ph->getHeight();
- $x = q("update photo set content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 2",
+ $x = q("update photo set edited = '%s', content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 2",
+ dbesc(datetime_convert()),
dbescbin($ph->imageString()),
intval($height),
intval($width),
@@ -308,7 +311,8 @@ class Photos extends \Zotlabs\Web\Controller {
$width = $ph->getWidth();
$height = $ph->getHeight();
- $x = q("update photo set content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 3",
+ $x = q("update photo set edited = '%s', content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 3",
+ dbesc(datetime_convert()),
dbescbin($ph->imageString()),
intval($height),
intval($width),
diff --git a/Zotlabs/Module/Search.php b/Zotlabs/Module/Search.php
index e520c671d..272bbdac1 100644
--- a/Zotlabs/Module/Search.php
+++ b/Zotlabs/Module/Search.php
@@ -6,7 +6,7 @@ class Search extends \Zotlabs\Web\Controller {
function init() {
if(x($_REQUEST,'search'))
- \App::$data['search'] = $_REQUEST['search'];
+ \App::$data['search'] = escape_tags($_REQUEST['search']);
}
@@ -46,12 +46,12 @@ class Search extends \Zotlabs\Web\Controller {
if(x(\App::$data,'search'))
$search = trim(\App::$data['search']);
else
- $search = ((x($_GET,'search')) ? trim(rawurldecode($_GET['search'])) : '');
+ $search = ((x($_GET,'search')) ? trim(escape_tags(rawurldecode($_GET['search']))) : '');
$tag = false;
if(x($_GET,'tag')) {
$tag = true;
- $search = ((x($_GET,'tag')) ? trim(rawurldecode($_GET['tag'])) : '');
+ $search = ((x($_GET,'tag')) ? trim(escape_tags(rawurldecode($_GET['tag']))) : '');
}
$static = ((array_key_exists('static',$_REQUEST)) ? intval($_REQUEST['static']) : 0);
diff --git a/include/bbcode.php b/include/bbcode.php
index 137e25a9c..c5d6ef998 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -1198,24 +1198,24 @@ function bbcode($Text, $options = []) {
// Images
// [img]pathtoimage[/img]
if (strpos($Text,'[/img]') !== false) {
- $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '<img style="max-width=100%;" src="$1" alt="' . t('Image/photo') . '" />', $Text);
+ $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '<img style="max-width: 100%;" src="$1" alt="' . t('Image/photo') . '" />', $Text);
}
if (strpos($Text,'[/zmg]') !== false) {
- $Text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/ism", '<img class="zrl" style="max-width=100%;" src="$1" alt="' . t('Image/photo') . '" />', $Text);
+ $Text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/ism", '<img class="zrl" style="max-width: 100%;" src="$1" alt="' . t('Image/photo') . '" />', $Text);
}
// [img float={left, right}]pathtoimage[/img]
if (strpos($Text,'[/img]') !== false) {
- $Text = preg_replace("/\[img float=left\](.*?)\[\/img\]/ism", '<img style="max-width=100%;" src="$1" style="float: left;" alt="' . t('Image/photo') . '" />', $Text);
+ $Text = preg_replace("/\[img float=left\](.*?)\[\/img\]/ism", '<img src="$1" style="max-width: 100%; float: left;" alt="' . t('Image/photo') . '" />', $Text);
}
if (strpos($Text,'[/img]') !== false) {
- $Text = preg_replace("/\[img float=right\](.*?)\[\/img\]/ism", '<img style="max-width=100%;" src="$1" style="float: right;" alt="' . t('Image/photo') . '" />', $Text);
+ $Text = preg_replace("/\[img float=right\](.*?)\[\/img\]/ism", '<img src="$1" style="max-width: 100%; float: right;" alt="' . t('Image/photo') . '" />', $Text);
}
if (strpos($Text,'[/zmg]') !== false) {
- $Text = preg_replace("/\[zmg float=left\](.*?)\[\/zmg\]/ism", '<img style="max-width=100%;" class="zrl" src="$1" style="float: left;" alt="' . t('Image/photo') . '" />', $Text);
+ $Text = preg_replace("/\[zmg float=left\](.*?)\[\/zmg\]/ism", '<img class="zrl" src="$1" style="max-width: 100%; float: left;" alt="' . t('Image/photo') . '" />', $Text);
}
if (strpos($Text,'[/zmg]') !== false) {
- $Text = preg_replace("/\[zmg float=right\](.*?)\[\/zmg\]/ism", '<img style="max-width=100%;" class="zrl" src="$1" style="float: right;" alt="' . t('Image/photo') . '" />', $Text);
+ $Text = preg_replace("/\[zmg float=right\](.*?)\[\/zmg\]/ism", '<img class="zrl" src="$1" style="max-width: 100%; float: right;" alt="' . t('Image/photo') . '" />', $Text);
}
// [img=widthxheight]pathtoimage[/img]
diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php
index 9533acc7f..ee0e06a91 100755
--- a/include/dba/dba_driver.php
+++ b/include/dba/dba_driver.php
@@ -173,14 +173,14 @@ abstract class dba_driver {
return false;
}
- if(strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1') && (! strpbrk($server,':;'))) {
- if(! z_dns_check($server)) {
- $this->error = sprintf( t('Cannot locate DNS info for database server \'%s\''), $server);
- $this->connected = false;
- $this->db = null;
- return false;
- }
- }
+ // if(strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1') && (! strpbrk($server,':;'))) {
+ // if(! z_dns_check($server)) {
+ // $this->error = sprintf( t('Cannot locate DNS info for database server \'%s\''), $server);
+ // $this->connected = false;
+ // $this->db = null;
+ // return false;
+ // }
+ // }
return true;
}
@@ -468,7 +468,7 @@ function db_columns($table) {
if(ACTIVE_DBTYPE === DBTYPE_POSTGRES) {
$r = q("SELECT column_name as field FROM information_schema.columns WHERE table_schema = 'public' AND table_name = '%s'",
dbesc($table)
- );
+ );
if($r) {
return ids_to_array($r,'field');
}
diff --git a/include/photo/photo_driver.php b/include/photo/photo_driver.php
index 2e2f5a758..4173d727e 100644
--- a/include/photo/photo_driver.php
+++ b/include/photo/photo_driver.php
@@ -350,8 +350,7 @@ abstract class photo_driver {
$p['allow_gid'] = (($arr['allow_gid']) ? $arr['allow_gid'] : '');
$p['deny_cid'] = (($arr['deny_cid']) ? $arr['deny_cid'] : '');
$p['deny_gid'] = (($arr['deny_gid']) ? $arr['deny_gid'] : '');
- $p['created'] = (($arr['created']) ? $arr['created'] : datetime_convert());
- $p['edited'] = (($arr['edited']) ? $arr['edited'] : $p['created']);
+ $p['edited'] = (($arr['edited']) ? $arr['edited'] : datetime_convert());
$p['title'] = (($arr['title']) ? $arr['title'] : '');
$p['description'] = (($arr['description']) ? $arr['description'] : '');
$p['photo_usage'] = intval($arr['photo_usage']);
@@ -365,13 +364,15 @@ abstract class photo_driver {
if(! intval($p['imgscale']))
logger('save: ' . print_r($arr,true), LOGGER_DATA);
- $x = q("select id from photo where resource_id = '%s' and uid = %d and xchan = '%s' and imgscale = %d limit 1",
+ $x = q("select id, created from photo where resource_id = '%s' and uid = %d and xchan = '%s' and imgscale = %d limit 1",
dbesc($p['resource_id']),
intval($p['uid']),
dbesc($p['xchan']),
intval($p['imgscale'])
);
+
if($x) {
+ $p['created'] = (($x['created']) ? $x['created'] : $p['edited']);
$r = q("UPDATE photo set
aid = %d,
uid = %d,
@@ -427,6 +428,7 @@ abstract class photo_driver {
);
}
else {
+ $p['created'] = (($arr['created']) ? $arr['created'] : $p['edited']);
$r = q("INSERT INTO photo
( aid, uid, xchan, resource_id, created, edited, filename, mimetype, album, height, width, content, os_storage, filesize, imgscale, photo_usage, title, description, os_path, display_path, allow_cid, allow_gid, deny_cid, deny_gid )
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
@@ -464,11 +466,6 @@ abstract class photo_driver {
-
-
-
-
-
/**
* Guess image mimetype from filename or from Content-Type header
*
@@ -485,11 +482,11 @@ function guess_image_type($filename, $headers = '') {
$h = explode("\n",$headers);
foreach ($h as $l) {
list($k,$v) = array_map("trim", explode(":", trim($l), 2));
- $hdrs[$k] = $v;
+ $hdrs[strtolower($k)] = $v;
}
logger('Curl headers: '.var_export($hdrs, true), LOGGER_DEBUG);
- if (array_key_exists('Content-Type', $hdrs))
- $type = $hdrs['Content-Type'];
+ if (array_key_exists('content-type', $hdrs))
+ $type = $hdrs['content-type'];
}
if (is_null($type)){
@@ -570,122 +567,166 @@ function delete_thing_photo($url,$ob_hash) {
-function import_xchan_photo($photo,$xchan,$thing = false) {
-
- $flags = (($thing) ? PHOTO_THING : PHOTO_XCHAN);
- $album = (($thing) ? 'Things' : 'Contact Photos');
-
- logger('import_xchan_photo: updating channel photo from ' . $photo . ' for ' . $xchan, LOGGER_DEBUG);
-
- if($thing)
- $hash = photo_new_resource();
- else {
- $r = q("select resource_id from photo where xchan = '%s' and photo_usage = %d and imgscale = 4 limit 1",
- dbesc($xchan),
- intval(PHOTO_XCHAN)
- );
- if($r) {
- $hash = $r[0]['resource_id'];
- }
- else {
- $hash = photo_new_resource();
- }
- }
-
- $photo_failure = false;
- $img_str = '';
-
- if($photo) {
- $filename = basename($photo);
-
- $result = z_fetch_url($photo,true);
-
- if($result['success']) {
- $img_str = $result['body'];
- $type = guess_image_type($photo, $result['header']);
-
- $h = explode("\n",$result['header']);
- if($h) {
- foreach($h as $hl) {
- if(stristr($hl,'content-type:')) {
- if(! stristr($hl,'image/')) {
- $photo_failure = true;
- }
- }
- }
- }
- }
- }
- else {
- $photo_failure = true;
- }
-
- if(! $photo_failure) {
- $img = photo_factory($img_str, $type);
- if($img->is_valid()) {
- $width = $img->getWidth();
- $height = $img->getHeight();
-
- if($width && $height) {
- if(($width / $height) > 1.2) {
- // crop out the sides
- $margin = $width - $height;
- $img->cropImage(300,($margin / 2),0,$height,$height);
- }
- elseif(($height / $width) > 1.2) {
- // crop out the bottom
- $margin = $height - $width;
- $img->cropImage(300,0,0,$width,$width);
-
- }
- else {
- $img->scaleImageSquare(300);
- }
-
- }
- else
- $photo_failure = true;
-
- $p = array('xchan' => $xchan,'resource_id' => $hash, 'filename' => basename($photo), 'album' => $album, 'photo_usage' => $flags, 'imgscale' => 4);
-
- $r = $img->save($p);
-
- if($r === false)
- $photo_failure = true;
-
- $img->scaleImage(80);
- $p['imgscale'] = 5;
-
- $r = $img->save($p);
-
- if($r === false)
- $photo_failure = true;
-
- $img->scaleImage(48);
- $p['imgscale'] = 6;
-
- $r = $img->save($p);
-
- if($r === false)
- $photo_failure = true;
-
- $photo = z_root() . '/photo/' . $hash . '-4';
- $thumb = z_root() . '/photo/' . $hash . '-5';
- $micro = z_root() . '/photo/' . $hash . '-6';
- }
- else {
- logger('import_xchan_photo: invalid image from ' . $photo);
- $photo_failure = true;
- }
- }
- if($photo_failure) {
- $photo = z_root() . '/' . get_default_profile_photo();
- $thumb = z_root() . '/' . get_default_profile_photo(80);
- $micro = z_root() . '/' . get_default_profile_photo(48);
- $type = 'image/png';
- }
+/**
+ * @brief fetches an photo from external site and prepares its miniatures.
+ *
+ * @param string $photo
+ * external URL to fetch base image
+ * @param string $xchan
+ * channel unique hash
+ * @param boolean $thing
+ * TRUE if this is a thing URL
+ * @param boolean $force
+ * TRUE if ignore image modification date check (force fetch)
+ *
+ * @return array of results
+ * * \e string \b 0 => local URL to full image
+ * * \e string \b 1 => local URL to standard thumbnail
+ * * \e string \b 2 => local URL to micro thumbnail
+ * * \e string \b 3 => image type
+ * * \e boolean \b 4 => TRUE if fetch failure
+ * * \e string \b 5 => modification date
+ */
- return(array($photo,$thumb,$micro,$type,$photo_failure));
+function import_xchan_photo($photo,$xchan,$thing = false,$force = false) {
+
+ $modified = '';
+
+ $flags = (($thing) ? PHOTO_THING : PHOTO_XCHAN);
+ $album = (($thing) ? 'Things' : 'Contact Photos');
+
+ logger('import_xchan_photo: updating channel photo from ' . $photo . ' for ' . $xchan, LOGGER_DEBUG);
+
+ if($thing) {
+ $hash = photo_new_resource();
+ }
+ else {
+ $r = q("select resource_id, edited, mimetype from photo where xchan = '%s' and photo_usage = %d and imgscale = 4 limit 1",
+ dbesc($xchan),
+ intval(PHOTO_XCHAN)
+ );
+ if($r) {
+ $hash = $r[0]['resource_id'];
+ $modified = $r[0]['edited'];
+ $type = $r[0]['mimetype'];
+ }
+ else {
+ $hash = photo_new_resource();
+ }
+ }
+
+ $photo_failure = false;
+ $img_str = '';
+
+ if($photo) {
+ $filename = basename($photo);
+
+ if($force || $modified == '') {
+ $result = z_fetch_url($photo,true);
+ }
+ else {
+ $h = array('headers' => array("If-Modified-Since: " . gmdate("D, d M Y H:i:s", strtotime($modified . "Z")) . " GMT"));
+ $result = z_fetch_url($photo,true,0,$h);
+ }
+
+ if($result['success']) {
+ $img_str = $result['body'];
+ $type = guess_image_type($photo, $result['header']);
+ $modified = gmdate('Y-m-d H:i:s', (preg_match('/last-modified: (.+) \S+/i', $result['header'], $o) ? strtotime($o[1] . 'Z') : time()));
+
+ if(is_null($type))
+ $photo_failure = true;
+ }
+ elseif($result['return_code'] == 304) {
+ $photo = z_root() . '/photo/' . $hash . '-4';
+ $thumb = z_root() . '/photo/' . $hash . '-5';
+ $micro = z_root() . '/photo/' . $hash . '-6';
+ }
+ else {
+ $photo_failure = true;
+ }
+
+ }
+ else
+ $photo_failure = true;
+
+ if(! $photo_failure && $result['return_code'] != 304) {
+ $img = photo_factory($img_str, $type);
+ if($img->is_valid()) {
+ $width = $img->getWidth();
+ $height = $img->getHeight();
+
+ if($width && $height) {
+ if(($width / $height) > 1.2) {
+ // crop out the sides
+ $margin = $width - $height;
+ $img->cropImage(300,($margin / 2),0,$height,$height);
+ }
+ elseif(($height / $width) > 1.2) {
+ // crop out the bottom
+ $margin = $height - $width;
+ $img->cropImage(300,0,0,$width,$width);
+
+ }
+ else {
+ $img->scaleImageSquare(300);
+ }
+
+ }
+ else
+ $photo_failure = true;
+
+ $p = array(
+ 'xchan' => $xchan,
+ 'resource_id' => $hash,
+ 'filename' => basename($photo),
+ 'album' => $album,
+ 'photo_usage' => $flags,
+ 'imgscale' => 4,
+ 'edited' => $modified
+ );
+
+ $r = $img->save($p);
+
+ if($r === false)
+ $photo_failure = true;
+
+ $img->scaleImage(80);
+ $p['imgscale'] = 5;
+
+ $r = $img->save($p);
+
+ if($r === false)
+ $photo_failure = true;
+
+ $img->scaleImage(48);
+ $p['imgscale'] = 6;
+
+ $r = $img->save($p);
+
+ if($r === false)
+ $photo_failure = true;
+
+ $photo = z_root() . '/photo/' . $hash . '-4';
+ $thumb = z_root() . '/photo/' . $hash . '-5';
+ $micro = z_root() . '/photo/' . $hash . '-6';
+ }
+ else {
+ logger('import_xchan_photo: invalid image from ' . $photo);
+ $photo_failure = true;
+ }
+ }
+ if($photo_failure) {
+ $default = get_default_profile_photo();
+ $photo = z_root() . '/' . $default;
+ $thumb = z_root() . '/' . get_default_profile_photo(80);
+ $micro = z_root() . '/' . get_default_profile_photo(48);
+ $type = 'image/png';
+ $modified = gmdate('Y-m-d H:i:s', filemtime($default));
+ }
+
+ logger('HTTP code: ' . $result['return_code'] . '; modified: ' . $modified . '; failure: ' . ($photo_failure ? 'yes' : 'no') . '; URL: ' . $photo, LOGGER_DEBUG);
+ return(array($photo,$thumb,$micro,$type,$photo_failure,$modified));
}
@@ -700,16 +741,8 @@ function import_channel_photo_from_url($photo,$aid,$uid) {
$img_str = $result['body'];
$type = guess_image_type($photo, $result['header']);
- $h = explode("\n",$result['header']);
- if($h) {
- foreach($h as $hl) {
- if(stristr($hl,'content-type:')) {
- if(! stristr($hl,'image/')) {
- $photo_failure = true;
- }
- }
- }
- }
+ if(is_null($type))
+ $photo_failure = true;
}
}
else {
diff --git a/include/text.php b/include/text.php
index d3130023c..6a6d814d7 100644
--- a/include/text.php
+++ b/include/text.php
@@ -620,6 +620,19 @@ function attribute_contains($attr, $s) {
}
/**
+ * @brief Log to syslog
+ *
+ * @param string $msg Message to log
+ * @param int $priority - compatible with syslog
+ */
+function hz_syslog($msg, $priority = LOG_INFO) {
+ openlog("hz-log", LOG_PID | LOG_PERROR, LOG_LOCAL0);
+ syslog($priority, $msg);
+ closelog();
+}
+
+
+/**
* @brief Logging function for Hubzilla.
*
* Logging output is configured through Hubzilla's system config. The log file
@@ -1048,7 +1061,7 @@ function micropro($contact, $redirect = false, $class = '', $mode = false) {
function search($s,$id='search-box',$url='/search',$save = false) {
return replace_macros(get_markup_template('searchbox.tpl'),array(
- '$s' => $s,
+ '$s' => htmlspecialchars($s),
'$id' => $id,
'$action_url' => z_root() . $url,
'$search_label' => t('Search'),
diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php
index 2024504a1..a459e10dd 100644
--- a/view/es-es/hstrings.php
+++ b/view/es-es/hstrings.php
@@ -2,10 +2,10 @@
if(! function_exists("string_plural_select_es_es")) {
function string_plural_select_es_es($n){
- return ($n != 1);;
+ return ($n != 1 ? 1 : 0);
}}
App::$rtl = 0;
-App::$strings["plural_function_code"] = "(n != 1)";
+App::$strings["plural_function_code"] = "(n != 1 ? 1 : 0)";
App::$strings["Can view my channel stream and posts"] = "Pueden verse la actividad y publicaciones de mi canal";
App::$strings["Can send me their channel stream and posts"] = "Se me pueden enviar entradas y contenido de un canal";
App::$strings["Can view my default channel profile"] = "Puede verse mi perfil de canal predeterminado.";
diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css
index ddf3d1295..f2c1b7a48 100644
--- a/view/theme/redbasic/css/style.css
+++ b/view/theme/redbasic/css/style.css
@@ -872,10 +872,6 @@ div.jGrowl div.jGrowl-notification {
margin-left: 20px;
}
-.reshared-content img {
- width: 100%;
-}
-
.shared_header img {
border-radius: $radius;
margin-right: 10px;
@@ -884,21 +880,19 @@ div.jGrowl div.jGrowl-notification {
.tag1 {
font-size : 0.9em !important;
}
+
.tag2 {
font-size : 1.0em !important;
}
-
.tag3 {
font-size : 1.1em !important;
}
-
.tag4 {
font-size : 1.2em !important;
}
-
.tag5 {
font-size : 1.3em !important;
}
@@ -918,12 +912,10 @@ div.jGrowl div.jGrowl-notification {
font-size : 1.6em !important;
}
-
.tag9 {
font-size : 1.7em !important;
}
-
.tag10 {
font-size : 1.8em !important;
}
diff --git a/view/theme/redbasic/schema/Focus-Light.php b/view/theme/redbasic/schema/Focus-Light.php
index 14ee130d9..8a542d1b8 100644
--- a/view/theme/redbasic/schema/Focus-Light.php
+++ b/view/theme/redbasic/schema/Focus-Light.php
@@ -3,10 +3,11 @@
if (! $nav_bg)
$nav_bg = "#f8f9fa";
if (! $nav_icon_colour)
- $nav_icon_colour = "rgba(0, 0, 0, 0.5);";
+ $nav_icon_colour = "rgba(0, 0, 0, 0.5)";
if (! $nav_active_icon_colour)
$nav_active_icon_colour = "rgba(0, 0, 0, 0.7)";
if (! $radius)
$radius = "4px";
if (! $banner_colour)
$banner_colour = "rgba(0, 0, 0, 0.7)";
+
diff --git a/view/tpl/activity_filter_widget.tpl b/view/tpl/activity_filter_widget.tpl
index 1eb11c10f..7d10100ba 100644
--- a/view/tpl/activity_filter_widget.tpl
+++ b/view/tpl/activity_filter_widget.tpl
@@ -17,7 +17,7 @@
</form>
</div>
<script>
- $("#cid-filter").name_autocomplete(baseurl + '/acl', 'a', true, function(data) {
+ $("#cid-filter").contact_autocomplete(baseurl + '/acl', 'a', true, function(data) {
$("#cid").val(data.id);
});
</script>