From a50e555515f9635610c28a5756875ae8629f4eb9 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Tue, 7 Jun 2016 16:23:14 -0700 Subject: [PATCH 1/7] 'recent photos' query was buggered, also fix issue #163 by adding configurable sort order to the album widget - default is album name ascending --- Zotlabs/Module/Photos.php | 14 +++++--------- include/photos.php | 28 +++++++++++++--------------- include/widgets.php | 4 +++- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index ada7b4ef1..1bdc23897 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -510,7 +510,7 @@ class Photos extends \Zotlabs\Web\Controller { - function get() { + function get() { // URLs: // photos/name @@ -1277,11 +1277,9 @@ class Photos extends \Zotlabs\Web\Controller { \App::$page['htmlhead'] .= "\r\n" . '' . "\r\n"; - $r = q("SELECT `resource_id`, max(`imgscale`) AS `imgscale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' + $r = q("SELECT `resource_id`, max(`imgscale`) AS `imgscale` FROM `photo` WHERE `uid` = %d and photo_usage in ( %d, %d ) and is_nsfw = %d $sql_extra GROUP BY `resource_id`", intval(\App::$data['channel']['channel_id']), - dbesc('Contact Photos'), - dbesc( t('Contact Photos')), intval(PHOTO_NORMAL), intval(PHOTO_PROFILE), intval($unsafe) @@ -1291,15 +1289,13 @@ class Photos extends \Zotlabs\Web\Controller { \App::set_pager_itemspage(60); } - $r = q("SELECT p.resource_id, p.id, p.filename, p.mimetype, p.album, p.imgscale, p.created FROM photo as p - INNER JOIN ( SELECT resource_id, max(imgscale) as imgscale FROM photo + $r = q("SELECT p.resource_id, p.id, p.filename, p.mimetype, p.album, p.imgscale, p.created FROM photo p + INNER JOIN ( SELECT resource_id, max(imgscale) imgscale FROM photo WHERE uid = %d AND photo_usage IN ( %d, %d ) - AND is_nsfw = %d $sql_extra group by resource_id ) as ph + AND is_nsfw = %d $sql_extra group by resource_id ) ph ON (p.resource_id = ph.resource_id and p.imgscale = ph.imgscale) ORDER by p.created DESC LIMIT %d OFFSET %d", intval(\App::$data['channel']['channel_id']), - dbesc('Contact Photos'), - dbesc( t('Contact Photos')), intval(PHOTO_NORMAL), intval(PHOTO_PROFILE), intval($unsafe), diff --git a/include/photos.php b/include/photos.php index 1cc64f6fa..c64d662ea 100644 --- a/include/photos.php +++ b/include/photos.php @@ -443,7 +443,7 @@ function photo_upload($channel, $observer, $args) { * * success (bool) * * albums (array) */ -function photos_albums_list($channel, $observer) { +function photos_albums_list($channel, $observer, $sort_key = 'album', $direction = 'asc') { $channel_id = $channel['channel_id']; $observer_xchan = (($observer) ? $observer['xchan_hash'] : ''); @@ -451,11 +451,15 @@ function photos_albums_list($channel, $observer) { if(! perm_is_allowed($channel_id, $observer_xchan, 'view_storage')) return false; - /** @FIXME create a permissions SQL which works on arbitrary observers and channels, regardless of login or web status */ - $sql_extra = permissions_sql($channel_id); + $sql_extra = permissions_sql($channel_id,$observer_xchan); - $albums = q("SELECT count( distinct resource_id ) as total, album from photo where uid = %d and photo_usage IN ( %d, %d ) $sql_extra group by album order by max(created) desc", + $sort_key = dbesc($sort_key); + $direction = dbesc($direction); + + + + $albums = q("SELECT count( distinct resource_id ) as total, album from photo where uid = %d and photo_usage IN ( %d, %d ) $sql_extra group by album order by $sort_key $direction", intval($channel_id), intval(PHOTO_NORMAL), intval(PHOTO_PROFILE) @@ -483,20 +487,14 @@ function photos_albums_list($channel, $observer) { return $ret; } -function photos_album_widget($channelx,$observer,$albums = null) { +function photos_album_widget($channelx,$observer,$sortkey = 'album',$direction = 'asc') { $o = ''; - // If we weren't passed an album list, see if the photos module - // dropped one for us to find in App::$data['albums']. - // If all else fails, load it. - - if(! $albums) { - if(array_key_exists('albums', App::$data)) - $albums = App::$data['albums']; - else - $albums = photos_albums_list($channelx,$observer); - } + if(array_key_exists('albums', App::$data)) + $albums = App::$data['albums']; + else + $albums = photos_albums_list($channelx,$observer,$sortkey,$direction); if($albums['success']) { $o = replace_macros(get_markup_template('photo_albums.tpl'),array( diff --git a/include/widgets.php b/include/widgets.php index a1b9f1956..312b63729 100644 --- a/include/widgets.php +++ b/include/widgets.php @@ -799,8 +799,10 @@ function widget_photo_albums($arr) { if((! $channelx) || (! perm_is_allowed(App::$profile['profile_uid'], get_observer_hash(), 'view_storage'))) return ''; require_once('include/photos.php'); + $sortkey = ((array_key_exists('sortkey',$arr)) ? $arr['sortkey'] : 'album'); + $direction = ((array_key_exists('direction',$arr)) ? $arr['direction'] : 'asc'); - return photos_album_widget($channelx, App::get_observer()); + return photos_album_widget($channelx, App::get_observer(),$sortkey,$direction); } From 67665a8b9d8ff1dbcc26a46837447544d8968784 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Tue, 7 Jun 2016 16:37:04 -0700 Subject: [PATCH 2/7] slight alteration to the base description --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ad7a4a9ca..232f122b6 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ Hubzilla - Community Server =========================== -Connected and linked web communities. -------------------------------------- +Groupware re-imagined and re-invented. Connect and link decentralised web communities. +--------------------------------------------------------------------------------------

Installing Hubzilla From 5ef8199dae8f49cf04888799f1257beef0d2a0e0 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Tue, 7 Jun 2016 18:17:39 -0700 Subject: [PATCH 3/7] Finish the config family --- Zotlabs/Lib/AConfig.php | 25 +++ Zotlabs/Lib/AbConfig.php | 73 ++++++++ Zotlabs/Lib/IConfig.php | 165 +++++++++++++++++ Zotlabs/Lib/PConfig.php | 2 +- Zotlabs/Lib/XConfig.php | 160 ++++++++++++++++ include/config.php | 386 ++------------------------------------- 6 files changed, 442 insertions(+), 369 deletions(-) create mode 100644 Zotlabs/Lib/AConfig.php create mode 100644 Zotlabs/Lib/AbConfig.php create mode 100644 Zotlabs/Lib/IConfig.php create mode 100644 Zotlabs/Lib/XConfig.php diff --git a/Zotlabs/Lib/AConfig.php b/Zotlabs/Lib/AConfig.php new file mode 100644 index 000000000..24ec97dfa --- /dev/null +++ b/Zotlabs/Lib/AConfig.php @@ -0,0 +1,25 @@ + $family, 'k' => $key, 'v' => $value, 'sharing' => $sharing); + + if(is_null($idx)) + $item['iconfig'][] = $entry; + else + $item['iconfig'][$idx] = $entry; + return $value; + } + + if(intval($item)) + $iid = intval($item); + + if(! $iid) + return false; + + if(self::Get($item, $family, $key) === false) { + $r = q("insert into iconfig( iid, cat, k, v, sharing ) values ( %d, '%s', '%s', '%s', %d ) ", + intval($iid), + dbesc($family), + dbesc($key), + dbesc($dbvalue), + intval($sharing) + ); + } + else { + $r = q("update iconfig set v = '%s', sharing = %d where iid = %d and cat = '%s' and k = '%s' ", + dbesc($dbvalue), + intval($sharing), + intval($iid), + dbesc($family), + dbesc($key) + ); + } + + if(! $r) + return false; + + return $value; + } + + + + static public function Delete(&$item, $family, $key) { + + + $is_item = false; + $idx = null; + + if(is_array($item)) { + $is_item = true; + if(is_array($item['iconfig'])) { + for($x = 0; $x < count($item['iconfig']); $x ++) { + if($item['iconfig'][$x]['cat'] == $family && $item['iconfig'][$x]['k'] == $key) { + unset($item['iconfig'][$x]); + } + } + } + return true; + } + + if(intval($item)) + $iid = intval($item); + + if(! $iid) + return false; + + return q("delete from iconfig where iid = %d and cat = '%s' and k = '%s' ", + intval($iid), + dbesc($family), + dbesc($key) + ); + + } + +} \ No newline at end of file diff --git a/Zotlabs/Lib/PConfig.php b/Zotlabs/Lib/PConfig.php index 0cd65392e..195321375 100644 --- a/Zotlabs/Lib/PConfig.php +++ b/Zotlabs/Lib/PConfig.php @@ -65,7 +65,7 @@ class PConfig { return false; if(! array_key_exists($uid, \App::$config)) - load_pconfig($uid); + self::Load($uid); if((! array_key_exists($family, \App::$config[$uid])) || (! array_key_exists($key, \App::$config[$uid][$family]))) return false; diff --git a/Zotlabs/Lib/XConfig.php b/Zotlabs/Lib/XConfig.php new file mode 100644 index 000000000..e28dcf559 --- /dev/null +++ b/Zotlabs/Lib/XConfig.php @@ -0,0 +1,160 @@ + $family, 'k' => $key, 'v' => $value, 'sharing' => $sharing); - - if(is_null($idx)) - $item['iconfig'][] = $entry; - else - $item['iconfig'][$idx] = $entry; - return $value; - } - - if(intval($item)) - $iid = intval($item); - - if(! $iid) - return false; - - if(get_iconfig($item, $family, $key) === false) { - $r = q("insert into iconfig( iid, cat, k, v, sharing ) values ( %d, '%s', '%s', '%s', %d ) ", - intval($iid), - dbesc($family), - dbesc($key), - dbesc($dbvalue), - intval($sharing) - ); - } - else { - $r = q("update iconfig set v = '%s', sharing = %d where iid = %d and cat = '%s' and k = '%s' ", - dbesc($dbvalue), - intval($sharing), - intval($iid), - dbesc($family), - dbesc($key) - ); - } - - if(! $r) - return false; - - return $value; + return Zlib\IConfig::Set($item, $family, $key, $value, $sharing = false); } - - function del_iconfig(&$item, $family, $key) { - - - $is_item = false; - $idx = null; - - if(is_array($item)) { - $is_item = true; - if(is_array($item['iconfig'])) { - for($x = 0; $x < count($item['iconfig']); $x ++) { - if($item['iconfig'][$x]['cat'] == $family && $item['iconfig'][$x]['k'] == $key) { - unset($item['iconfig'][$x]); - } - } - } - return true; - } - - if(intval($item)) - $iid = intval($item); - - if(! $iid) - return false; - - return q("delete from iconfig where iid = %d and cat = '%s' and k = '%s' ", - intval($iid), - dbesc($family), - dbesc($key) - ); - + return Zlib\IConfig::Delete($item, $family, $key); } - From e6d20877b8a836891f072122d0e244a647e3cf27 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Tue, 7 Jun 2016 18:27:37 -0700 Subject: [PATCH 4/7] whitespace --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 232f122b6..8a6c003fc 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,11 @@ Hubzilla - Community Server =========================== -Groupware re-imagined and re-invented. Connect and link decentralised web communities. --------------------------------------------------------------------------------------- +Groupware re-imagined and re-invented. +-------------------------------------- + +Connect and link decentralised web communities. +-----------------------------------------------

Installing Hubzilla From e46e7002a8945f3156b4c4dcfdedb57316d94ba9 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Tue, 7 Jun 2016 22:55:24 -0700 Subject: [PATCH 5/7] block random_profile from accessing sys channels --- include/connections.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/connections.php b/include/connections.php index d18383fad..2d10b8354 100644 --- a/include/connections.php +++ b/include/connections.php @@ -590,7 +590,8 @@ function random_profile() { for($i = 0; $i < $retryrandom; $i++) { - $r = q("select xchan_url from xchan left join hubloc on hubloc_hash = xchan_hash where hubloc_connected > %s - interval %s order by $randfunc limit 1", + $r = q("select xchan_url from xchan left join hubloc on hubloc_hash = xchan_hash where xchan_addr not like '%s' and hubloc_connected > %s - interval %s order by $randfunc limit 1", + dbesc('sys@%'), db_utcnow(), db_quoteinterval('30 day') ); From 40bba93a310fab27fb14a9b6a55bcaab1530eba2 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Wed, 8 Jun 2016 19:34:11 -0700 Subject: [PATCH 6/7] potential fix to hubzilla-addons issue 16 --- include/api.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/api.php b/include/api.php index f0d886d9b..be525f7e9 100644 --- a/include/api.php +++ b/include/api.php @@ -1904,10 +1904,15 @@ require_once('include/api_auth.php'); $ret = array(); + $x = array('items' => $r,'api_user' => api_user(),'user_info' => $user_info); + call_hooks('api_format_items',$x); + $r = $x['items']; + if(! $r) return $ret; foreach($r as $item) { + localize_item($item); $status_user = (($item['author_xchan']==$user_info['guid'])?$user_info: api_item_get_user($a,$item)); From 2ad5010dc3f2f8d077a3228915d28a3e256f6e13 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Wed, 8 Jun 2016 20:00:36 -0700 Subject: [PATCH 7/7] issue #59 --- boot.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/boot.php b/boot.php index 76312ed4e..a31d98dbb 100755 --- a/boot.php +++ b/boot.php @@ -1465,6 +1465,12 @@ function check_config(&$a) { @unlink($lockfile); //send the administrator an e-mail file_put_contents($lockfile, $x); + + $r = q("select account_language from account where account_email = '%s' limit 1", + dbesc(App::$config['system']['admin_email']) + ); + push_lang(($r) ? $r[0]['account_language'] : 'en'); + $email_tpl = get_intltext_template("update_fail_eml.tpl"); $email_msg = replace_macros($email_tpl, array( @@ -1482,6 +1488,7 @@ function check_config(&$a) { . 'Content-transfer-encoding: 8bit' ); //try the logger logger('CRITICAL: Update Failed: ' . $x); + pop_lang(); } else set_config('database','update_r' . $x, 'success');