diff options
-rw-r--r-- | include/apps.php | 54 | ||||
-rw-r--r-- | include/widgets.php | 6 | ||||
-rw-r--r-- | mod/appman.php | 26 | ||||
-rw-r--r-- | mod/apps.php | 26 | ||||
-rw-r--r-- | version.inc | 2 | ||||
-rw-r--r-- | view/tpl/app.tpl | 11 | ||||
-rw-r--r-- | view/tpl/app_select.tpl | 4 | ||||
-rwxr-xr-x | view/tpl/myapps.tpl | 9 |
8 files changed, 121 insertions, 17 deletions
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 diff --git a/include/widgets.php b/include/widgets.php index 37a079bc7..8cd2287a7 100644 --- a/include/widgets.php +++ b/include/widgets.php @@ -78,9 +78,9 @@ function widget_appselect($arr) { return replace_macros(get_markup_template('app_select.tpl'),array( '$title' => t('App Category'), '$system' => t('System'), - '$personal' => t('Personal'), - '$featured' => t('Featured'), - '$new' => t('New') + '$personal' => t('Personal') +// '$featured' => t('Featured'), +// '$new' => t('New') )); } diff --git a/mod/appman.php b/mod/appman.php new file mode 100644 index 000000000..48389a637 --- /dev/null +++ b/mod/appman.php @@ -0,0 +1,26 @@ +<?php /** @file */ + +require_once('include/apps.php'); + +function appman_post(&$a) { + + if(! local_user()) + return; + + $papp = app_decode($_POST['papp']); + + if(! is_array($papp)) { + notice( t('Malformed app.') . EOL); + return; + } + + if($_POST['install']) { + app_install(local_user(),$papp); + } + + if($_POST['delete']) { + app_destroy(local_user(),$papp); + } + + +}
\ No newline at end of file diff --git a/mod/apps.php b/mod/apps.php index 3d06abd49..aeedb5cda 100644 --- a/mod/apps.php +++ b/mod/apps.php @@ -5,15 +5,33 @@ require_once('include/apps.php'); function apps_content(&$a) { + if(argc() == 1 || (! local_user())) { - $apps = get_system_apps(); + $apps = get_system_apps(); -// $o .= print_r($apps,true); + // $o .= print_r($apps,true); -// return $o; + // return $o; + return replace_macros(get_markup_template('apps.tpl'), array( + '$title' => t('Apps'), + '$apps' => $apps, + )); + } - return replace_macros(get_markup_template('apps.tpl'), array( + if(argc() == 3 && argv(2) == 'edit') + $mode = 'edit'; + else + $mode = 'list'; + + $apps = array(); + $list = app_list(local_user()); + if($list) { + foreach($list as $app) + $apps[] = app_render(app_encode($app),$mode); + } + + return replace_macros(get_markup_template('myapps.tpl'), array( '$title' => t('Apps'), '$apps' => $apps, )); diff --git a/version.inc b/version.inc index 396a326bd..6b7ff2f87 100644 --- a/version.inc +++ b/version.inc @@ -1 +1 @@ -2014-05-19.680 +2014-05-20.681 diff --git a/view/tpl/app.tpl b/view/tpl/app.tpl index 30287b044..323dfbe63 100644 --- a/view/tpl/app.tpl +++ b/view/tpl/app.tpl @@ -1,6 +1,13 @@ <div class="app-container"> -<a href="{{$ap.url}}" {{if $ap.hover}}title="{{$ap.hover}}"{{/if}}><img src="{{$ap.photo}}" width="80" height="80" /> -<div class="app-name">{{$ap.name}}</div> +<a href="{{$app.url}}" {{if $app.hover}}title="{{$app.hover}}"{{/if}}><img src="{{$app.photo}}" width="80" height="80" /> +<div class="app-name">{{$app.name}}</div> </a> +{{if $install || $update || $delete }} +<form action="appman" method="post"> +<input type="hidden" name="papp" value="{{$app.papp}}" /> +{{if $install}}<button type="submit" name="install" value="{{$install}}" class="btn btn-default" title="{{$install}}" /><i class="icon-download-alt" ></i></button>{{/if}} +{{if $delete}}<button type="submit" name="delete" value="{{$delete}}" class="btn btn-default" title="{{$delete}}" /><i class="icon-remove drop-icons"></i></button>{{/if}} +</form> +{{/if}} </div> diff --git a/view/tpl/app_select.tpl b/view/tpl/app_select.tpl index 9613b4976..d6eb2c31a 100644 --- a/view/tpl/app_select.tpl +++ b/view/tpl/app_select.tpl @@ -1,10 +1,8 @@ <div class="widget"> <h3>{{$title}}</h3> <ul> -<li><a href="apps/system">{{$system}}</a></li> +<li><a href="apps">{{$system}}</a></li> <li><a href="apps/personal">{{$personal}}</a></li> -<li><a href="apps/featured">{{$featured}}</a></li> -<li><a href="apps/new">{{$new}}</a></li> </ul> </div> diff --git a/view/tpl/myapps.tpl b/view/tpl/myapps.tpl new file mode 100755 index 000000000..1a591f9f8 --- /dev/null +++ b/view/tpl/myapps.tpl @@ -0,0 +1,9 @@ +<h3>{{$title}}</h3> + +{{foreach $apps as $ap}} +<div class="app-container"> +{{$ap}} +</div> +{{/foreach}} +<div class="clear"></div> + |