From 466fe725bc056ad7ed2c3bf24783b65565293472 Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 18 May 2014 18:21:20 -0700 Subject: start to build out the apps --- include/apps.php | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 6 deletions(-) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index 09aee0389..ac6f34ee5 100644 --- a/include/apps.php +++ b/include/apps.php @@ -119,10 +119,8 @@ function translate_system_apps(&$arr) { } function app_render($app) { - - - - +//debugging + return print_r($app,true); } @@ -177,8 +175,11 @@ function app_store($arr) { $darray['app_desc'] = ((x($arr,'desc')) ? escape_tags($arr['desc']) : ''); $darray['app_photo'] = ((x($arr,'photo')) ? $arr['photo'] : z_root() . '/' . get_default_profile_photo(80)); $darray['app_version'] = ((x($arr,'version')) ? escape_tags($arr['version']) : ''); + $darray['app_addr'] = ((x($arr,'addr')) ? escape_tags($arr['addr']) : ''); + $darray['app_price'] = ((x($arr,'price')) ? escape_tags($arr['price']) : ''); + $darray['app_page'] = ((x($arr,'page')) ? escape_tags($arr['page']) : ''); - $r = q("insert into app ( app_id, app_sig, app_author, app_name, app_desc, app_url, app_photo, app_version, app_channel) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d )", + $r = q("insert into app ( app_id, app_sig, app_author, app_name, app_desc, app_url, app_photo, app_version, app_channel, app_addr, app_price, app_page ) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s' )", dbesc($darray['app_id']), dbesc($darray['app_sig']), dbesc($darray['app_author']), @@ -187,7 +188,10 @@ function app_store($arr) { dbesc($darray['app_url']), dbesc($darray['app_photo']), dbesc($darray['app_version']), - intval($darray['app_channel']) + intval($darray['app_channel']), + dbesc($darray['app_addr']), + dbesc($darray['app_price']), + dbesc($darray['app_page']) ); if($r) $ret['success'] = true; @@ -201,4 +205,50 @@ function app_update($arr) { +} + + +function app_encode($app) { + + $ret = array(); + + if($app['app_id']) + $ret['guid'] = $app['app_id']; + + if($app['app_id']) + $ret['guid'] = $app['app_id']; + + if($app['app_sig']) + $ret['sig'] = $app['app_sig']; + + if($app['app_author']) + $ret['author'] = $app['app_author']; + + if($app['app_name']) + $ret['name'] = $app['app_name']; + + if($app['app_desc']) + $ret['desc'] = $app['app_desc']; + + if($app['app_url']) + $ret['url'] = $app['app_url']; + + if($app['app_photo']) + $ret['photo'] = $app['app_photo']; + + if($app['app_version']) + $ret['version'] = $app['app_version']; + + if($app['app_addr']) + $ret['addr'] = $app['app_addr']; + + if($app['app_price']) + $ret['price'] = $app['app_price']; + + if($app['app_page']) + $ret['page'] = $app['app_page']; + + $j = json_encode($ret); + return '[app]' . base64_encode($j) . '[/app]'; + } \ No newline at end of file -- cgit v1.2.3 From ea67b9bda895d30d3115b04ba78db35e6a8b0a74 Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 18 May 2014 20:00:30 -0700 Subject: apps: fix encoding/decoding and chunk splitting --- include/apps.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index ac6f34ee5..109da2454 100644 --- a/include/apps.php +++ b/include/apps.php @@ -153,7 +153,7 @@ function app_list($uid) { function app_decode($s) { - $x = base64_decode($s); + $x = base64_decode(str_replace(array('
',"\r","\n",' '),array('','','',''),$s)); return json_decode($x,true); } @@ -249,6 +249,6 @@ function app_encode($app) { $ret['page'] = $app['app_page']; $j = json_encode($ret); - return '[app]' . base64_encode($j) . '[/app]'; + return '[app]' . chunk_split(base64_encode($j),72,"\n") . '[/app]'; } \ No newline at end of file -- cgit v1.2.3 From 6d01707a724504a34b8e84e87c6601a046de9739 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 19 May 2014 16:49:11 -0700 Subject: more app backend work --- include/apps.php | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index 109da2454..a1469b400 100644 --- a/include/apps.php +++ b/include/apps.php @@ -126,9 +126,11 @@ function app_render($app) { function app_install($uid,$app) { - - - + $app['uid'] = $uid; + if(app_installed($uid,$app)) + app_update($app); + else + app_store($app); } @@ -168,7 +170,7 @@ function app_store($arr) { if((! $darray['url']) || (! $darray['app_channel'])) return $ret; - $darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : random_string()); + $darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : random_string(). '.' . get_app()->get_hostname()); $darray['app_sig'] = ((x($arr,'sig')) ? $arr['sig'] : ''); $darray['app_author'] = ((x($arr,'author')) ? $arr['author'] : get_observer_hash()); $darray['app_name'] = ((x($arr,'name')) ? escape_tags($arr['name']) : t('Unknown')); @@ -202,8 +204,43 @@ function app_store($arr) { function app_update($arr) { + $darray = array(); + $ret = array('success' => false); + $darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : ''); + $darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0); + $darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : 0); + if((! $darray['url']) || (! $darray['app_channel']) || (! $darray['app_id'])) + return $ret; + $darray['app_sig'] = ((x($arr,'sig')) ? $arr['sig'] : ''); + $darray['app_author'] = ((x($arr,'author')) ? $arr['author'] : get_observer_hash()); + $darray['app_name'] = ((x($arr,'name')) ? escape_tags($arr['name']) : t('Unknown')); + $darray['app_desc'] = ((x($arr,'desc')) ? escape_tags($arr['desc']) : ''); + $darray['app_photo'] = ((x($arr,'photo')) ? $arr['photo'] : z_root() . '/' . get_default_profile_photo(80)); + $darray['app_version'] = ((x($arr,'version')) ? escape_tags($arr['version']) : ''); + $darray['app_addr'] = ((x($arr,'addr')) ? escape_tags($arr['addr']) : ''); + $darray['app_price'] = ((x($arr,'price')) ? escape_tags($arr['price']) : ''); + $darray['app_page'] = ((x($arr,'page')) ? escape_tags($arr['page']) : ''); + + $r = q("update app set app_sig = '%s', app_author = '%s', app_name = '%s', app_desc = '%s', app_url = '%s', app_photo = '%s', app_version = '%s', app_addr = '%s', app_price = '%s', app_page = '%s' where app_id = '%s' and app_channel = %d limit 1", + dbesc($darray['app_sig']), + dbesc($darray['app_author']), + dbesc($darray['app_name']), + dbesc($darray['app_desc']), + dbesc($darray['app_url']), + dbesc($darray['app_photo']), + dbesc($darray['app_version']), + dbesc($darray['app_addr']), + dbesc($darray['app_price']), + dbesc($darray['app_page']), + dbesc($darray['app_id']), + intval($darray['app_channel']) + ); + if($r) + $ret['success'] = true; + + return $ret; } -- cgit v1.2.3 From fc0967b84b5e1301c0ce3a9a41c00985ce16bc82 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 20 May 2014 18:08:49 -0700 Subject: most of the remaining apps basic infrastructure except a form to create the things. Don't let this fool you - there is still a lot of work, but there isn't a whole lot of work to create a demo; in fact you can demo it now. --- include/apps.php | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index a1469b400..536a40f01 100644 --- a/include/apps.php +++ b/include/apps.php @@ -118,10 +118,38 @@ function translate_system_apps(&$arr) { } -function app_render($app) { -//debugging - return print_r($app,true); +// papp is a portable app + +function app_render($papp,$mode = 'view') { + + /** + * modes: + * view: normal mode for viewing an app via bbcode from a conversation or page + * provides install/update button if you're logged in locally + * list: normal mode for viewing an app on the app page + * no buttons are shown + * edit: viewing the app page in editing mode provides a delete button + */ + + $installed = false; + + if(! $papp['photo']) + $papp['photo'] = z_root() . '/' . get_default_profile_photo(80); + + $papp['papp'] = papp_encode($papp); + + if(local_user()) { + $installed = app_installed(local_user(),$papp); + } + + $install_action = (($installed) ? t('Update') : t('Install')); + + return replace_macros(get_markup_template('app.tpl'),array( + '$app' => $papp, + '$install' => ((local_user() && $mode == 'view') ? $install_action : ''), + '$delete' => ((local_user() && $installed && $mode == 'edit') ? t('Delete') : '') + )); } @@ -133,6 +161,15 @@ function app_install($uid,$app) { app_store($app); } +function app_destroy($uid,$app) { + if($uid && $app['guid']) { + $r = q("delete from app where app_id = '%s' and app_channel = %d limit 1", + dbesc($app['guid']), + intval($uid) + ); + } +} + function app_installed($uid,$app) { @@ -245,7 +282,7 @@ function app_update($arr) { } -function app_encode($app) { +function app_encode($app,$embed = false) { $ret = array(); @@ -285,7 +322,16 @@ function app_encode($app) { if($app['app_page']) $ret['page'] = $app['app_page']; + if(! $embed) + return $ret; + $j = json_encode($ret); return '[app]' . chunk_split(base64_encode($j),72,"\n") . '[/app]'; +} + + +function papp_encode($papp) { + return chunk_split(base64_encode(json_encode($papp)),72,"\n"); + } \ No newline at end of file -- cgit v1.2.3 From 5d9f924642872e30c83ac0de4807e0beb2c15011 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 20 May 2014 22:25:36 -0700 Subject: more app work --- include/apps.php | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index 536a40f01..910d1c84d 100644 --- a/include/apps.php +++ b/include/apps.php @@ -93,7 +93,7 @@ function parse_app_description($f) { break; } - logger('require: ' . print_r($ret,true)); +// logger('require: ' . print_r($ret,true)); } if($ret) { translate_system_apps($ret); @@ -156,9 +156,14 @@ function app_render($papp,$mode = 'view') { function app_install($uid,$app) { $app['uid'] = $uid; if(app_installed($uid,$app)) - app_update($app); + $x = app_update($app); else - app_store($app); + $x = app_store($app); + + if($x['success']) + return $x['app_id']; + + return false; } function app_destroy($uid,$app) { @@ -199,14 +204,22 @@ function app_decode($s) { function app_store($arr) { + // logger('app_store: ' . print_r($arr,true)); + $darray = array(); $ret = array('success' => false); $darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : ''); $darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0); - if((! $darray['url']) || (! $darray['app_channel'])) + if((! $darray['app_url']) || (! $darray['app_channel'])) return $ret; + if($arr['photo'] && ! strstr($arr['photo'],z_root())) { + $x = import_profile_photo($arr['photo'],get_observer_hash(),true); + $arr['photo'] = $x[1]; + } + + $darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : random_string(). '.' . get_app()->get_hostname()); $darray['app_sig'] = ((x($arr,'sig')) ? $arr['sig'] : ''); $darray['app_author'] = ((x($arr,'author')) ? $arr['author'] : get_observer_hash()); @@ -232,9 +245,10 @@ function app_store($arr) { dbesc($darray['app_price']), dbesc($darray['app_page']) ); - if($r) + if($r) { $ret['success'] = true; - + $ret['app_id'] = $darray['app_id']; + } return $ret; } @@ -247,9 +261,14 @@ function app_update($arr) { $darray['app_url'] = ((x($arr,'url')) ? $arr['url'] : ''); $darray['app_channel'] = ((x($arr,'uid')) ? $arr['uid'] : 0); $darray['app_id'] = ((x($arr,'guid')) ? $arr['guid'] : 0); - if((! $darray['url']) || (! $darray['app_channel']) || (! $darray['app_id'])) + if((! $darray['app_url']) || (! $darray['app_channel']) || (! $darray['app_id'])) return $ret; + if($arr['photo'] && ! strstr($arr['photo'],z_root())) { + $x = import_profile_photo($arr['photo'],get_observer_hash(),true); + $arr['photo'] = $x[1]; + } + $darray['app_sig'] = ((x($arr,'sig')) ? $arr['sig'] : ''); $darray['app_author'] = ((x($arr,'author')) ? $arr['author'] : get_observer_hash()); $darray['app_name'] = ((x($arr,'name')) ? escape_tags($arr['name']) : t('Unknown')); @@ -274,8 +293,10 @@ function app_update($arr) { dbesc($darray['app_id']), intval($darray['app_channel']) ); - if($r) + if($r) { $ret['success'] = true; + $ret['app_id'] = $darray['app_id']; + } return $ret; -- cgit v1.2.3 From c6de9096fabf913e5e8b4acbde75cd58bb8c9959 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 20 May 2014 22:59:58 -0700 Subject: add zids to all the personal app links --- include/apps.php | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index 910d1c84d..2b5903329 100644 --- a/include/apps.php +++ b/include/apps.php @@ -139,6 +139,11 @@ function app_render($papp,$mode = 'view') { $papp['papp'] = papp_encode($papp); + foreach($papp as $k => $v) { + if(strpos($v,'http') === 0 && $k != 'papp') + $papp[$k] = zid($v); + } + if(local_user()) { $installed = app_installed(local_user(),$papp); } -- cgit v1.2.3 From 77ca117218382b57e2d0590466d9fc38dc016e80 Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 21 May 2014 01:55:32 -0700 Subject: make it possible to edit/delete apps via /apps/personal/edit --- include/apps.php | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index 2b5903329..b5aad2456 100644 --- a/include/apps.php +++ b/include/apps.php @@ -348,6 +348,9 @@ function app_encode($app,$embed = false) { if($app['app_page']) $ret['page'] = $app['app_page']; + if($app['alt_url']) + $ret['alt_url'] = $app['alt_url']; + if(! $embed) return $ret; -- cgit v1.2.3 From 751fda97045ad4e399e9a01cc14d8eb058b361a8 Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 21 May 2014 20:54:09 -0700 Subject: more app work --- include/apps.php | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index b5aad2456..e632ae3d6 100644 --- a/include/apps.php +++ b/include/apps.php @@ -104,7 +104,15 @@ function parse_app_description($f) { function translate_system_apps(&$arr) { - $apps = array( 'Matrix' => t('Matrix'), + $apps = array( + 'Bookmarks' => t('Bookmarks'), + 'Address Book' => t('Address Book'), + 'Login' => t('Login'), + 'Channel Select' => t('Channel Select'), + 'Matrix' => t('Matrix'), + 'Settings' => t('Settings'), + 'Files' => t('Files'), + 'Webpages' => t('Webpages'), 'Channel Home' => t('Channel Home'), 'Profile' => t('Profile'), 'Photos' => t('Photos'), @@ -142,6 +150,9 @@ function app_render($papp,$mode = 'view') { foreach($papp as $k => $v) { if(strpos($v,'http') === 0 && $k != 'papp') $papp[$k] = zid($v); + if($k === 'desc') + $papp['desc'] = str_replace(array('\'','"'),array(''','&dquot;'),$papp['desc']); + } if(local_user()) { @@ -152,7 +163,9 @@ function app_render($papp,$mode = 'view') { return replace_macros(get_markup_template('app.tpl'),array( '$app' => $papp, + '$purchase' => (($papp['page'] && (! $installed)) ? t('Purchase') : ''), '$install' => ((local_user() && $mode == 'view') ? $install_action : ''), + '$edit' => ((local_user() && $installed && $mode == 'edit') ? t('Edit') : ''), '$delete' => ((local_user() && $installed && $mode == 'edit') ? t('Delete') : '') )); } @@ -348,8 +361,8 @@ function app_encode($app,$embed = false) { if($app['app_page']) $ret['page'] = $app['app_page']; - if($app['alt_url']) - $ret['alt_url'] = $app['alt_url']; +// if($app['alt_url']) +// $ret['alt_url'] = $app['alt_url']; if(! $embed) return $ret; -- cgit v1.2.3 From 4d7fc304ea9dd9b756aba406601739652c54f72d Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 21 May 2014 21:47:09 -0700 Subject: Add the admin app --- include/apps.php | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index e632ae3d6..bf5b292d0 100644 --- a/include/apps.php +++ b/include/apps.php @@ -79,6 +79,10 @@ function parse_app_description($f) { if(local_user()) unset($ret); break; + case 'admin': + if(! is_site_admin()) + unset($ret); + break; case 'local_user': if(! local_user()) unset($ret); @@ -105,6 +109,7 @@ function parse_app_description($f) { function translate_system_apps(&$arr) { $apps = array( + 'Site Admin' => t('Site Admin'), 'Bookmarks' => t('Bookmarks'), 'Address Book' => t('Address Book'), 'Login' => t('Login'), -- cgit v1.2.3 From 6f7fb7a2ac3a8462b8f642436d191ccca720cd9e Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 22 May 2014 02:13:33 -0700 Subject: sort by app name and not by apd filename --- include/apps.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'include/apps.php') diff --git a/include/apps.php b/include/apps.php index bf5b292d0..9eb54af00 100644 --- a/include/apps.php +++ b/include/apps.php @@ -31,11 +31,14 @@ function get_system_apps() { } } } - + usort($ret,'app_name_compare'); return $ret; } +function app_name_compare($a,$b) { + return strcmp($a['name'],$b['name']); +} function parse_app_description($f) { $ret = array(); -- cgit v1.2.3