From 620d4f5752a6c6f09dc1218d231530d9b95bc930 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Fri, 31 May 2013 02:25:42 +0100 Subject: Set a site channel so an admin can use CMS to create home.html and so on, without ever needing to touch HTML again. When I've finished that bit too. --- mod/admin.php | 6 +++++- view/tpl/admin_site.tpl | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mod/admin.php b/mod/admin.php index 670e89066..20518dfc8 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -212,6 +212,7 @@ function admin_page_site_post(&$a){ $theme = ((x($_POST,'theme')) ? notags(trim($_POST['theme'])) : ''); $theme_mobile = ((x($_POST,'theme-mobile')) ? notags(trim($_POST['theme-mobile'])) : ''); $theme_accessibility = ((x($_POST,'theme-accessibility')) ? notags(trim($_POST['theme-accessibility'])) : ''); + $site_channel = ((x($_POST,'site-channel')) ? notags(trim($_POST['site-channel'])) : ''); $maximagesize = ((x($_POST,'maximagesize')) ? intval(trim($_POST['maximagesize'])) : 0); @@ -301,6 +302,8 @@ function admin_page_site_post(&$a){ } else { set_config('system','accessibility-theme', $theme_accessibility); } + + set_config('system','site-channel', $site_channel); set_config('system','maximagesize', $maximagesize); set_config('system','register_policy', $register_policy); @@ -349,7 +352,7 @@ function admin_page_site(&$a) { $lang_choices[$t[1]] = $t[1]; } } - + /* Installed themes */ $theme_choices = array(); $theme_choices_mobile = array(); @@ -408,6 +411,7 @@ function admin_page_site(&$a) { '$theme' => array('theme', t("System theme"), get_config('system','theme'), t("Default system theme - may be over-ridden by user profiles - change theme settings"), $theme_choices), '$theme_mobile' => array('theme-mobile', t("Mobile system theme"), get_config('system','mobile-theme'), t("Theme for mobile devices"), $theme_choices_mobile), '$theme_accessibility' => array('theme-accessibility', t("Accessibility system theme"), get_config('system','accessibility-theme'), t("Accessibility theme"), $theme_choices_accessibility), + '$site_channel' => array('site-channel', t("Channel to use for this website's static pages"), get_config('system','site-channel'), t("Site Channel")), '$ssl_policy' => array('ssl_policy', t("SSL link policy"), (string) intval(get_config('system','ssl_policy')), t("Determines whether generated links should be forced to use SSL"), $ssl_choices), '$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")), '$register_policy' => array('register_policy', t("Register policy"), $a->config['system']['register_policy'], "", $register_choices), diff --git a/view/tpl/admin_site.tpl b/view/tpl/admin_site.tpl index eaf067c27..a0167075d 100755 --- a/view/tpl/admin_site.tpl +++ b/view/tpl/admin_site.tpl @@ -51,6 +51,7 @@ {{include file="field_select.tpl" field=$theme}} {{include file="field_select.tpl" field=$theme_mobile}} {{include file="field_select.tpl" field=$theme_accessibility}} + {{include file="field_input.tpl" field=$site_channel}} {{include file="field_select.tpl" field=$ssl_policy}}
-- cgit v1.2.3 From a061499c913fbe4975897b5c1eb59be546885475 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Fri, 31 May 2013 03:25:44 +0100 Subject: Half-assed use-webpage-instead-of-html. --- mod/home.php | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/mod/home.php b/mod/home.php index f05daf3c7..1c0052386 100644 --- a/mod/home.php +++ b/mod/home.php @@ -25,7 +25,7 @@ function home_init(&$a) { if(! function_exists('home_content')) { function home_content(&$a) { - +/* $o = ''; if(x($_SESSION,'theme')) @@ -42,6 +42,45 @@ function home_content(&$a) { call_hooks("home_content",$o); return $o; +*/ + + +require_once('include/items.php'); +require_once('include/conversation.php'); + + $channel_address = get_config("system", "site_channel" ); +; +//We can do better, but until we figure out auto-linkification, let's keep things simple + $page_id = 'test'; + + $u = q("select channel_id from channel where channel_address = '%s' limit 1", + dbesc($channel_address) + ); + + if(! $u) { + notice( t('Channel not found.') . EOL); + return; + } + + $r = q("select item.* from item left join item_id on item.id = item_id.iid + where item.uid = %d and sid = '%s' and service = 'WEBPAGE' and + item_restrict = %d limit 1", + intval($u[0]['channel_id']), + dbesc($page_id), + intval(ITEM_WEBPAGE) + ); + + if(! $r) { + notice( t('Item not found.') . EOL); + return; + } + + xchan_query($r); + $r = fetch_post_tags($r,true); + $a->profile = array('profile_uid' => $u[0]['channel_id']); + $o .= prepare_page($r[0]); + return $o; +} -}} +} -- cgit v1.2.3 From bfb6f20ef285cb580a102d7ee0e98c18c2efd5bd Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Fri, 31 May 2013 03:38:37 +0100 Subject: By golly, I do believe it works. --- mod/home.php | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/mod/home.php b/mod/home.php index 1c0052386..c074f9db5 100644 --- a/mod/home.php +++ b/mod/home.php @@ -25,7 +25,7 @@ function home_init(&$a) { if(! function_exists('home_content')) { function home_content(&$a) { -/* + $o = ''; if(x($_SESSION,'theme')) @@ -33,25 +33,14 @@ function home_content(&$a) { if(x($_SESSION,'mobile-theme')) unset($_SESSION['mobile-theme']); - $o .= '

' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '

'; - if(file_exists('home.html')) - $o .= file_get_contents('home.html'); - - $o .= login(($a->config['system']['register_policy'] == REGISTER_CLOSED) ? 0 : 1); - - call_hooks("home_content",$o); - - return $o; -*/ - require_once('include/items.php'); require_once('include/conversation.php'); - $channel_address = get_config("system", "site_channel" ); -; + $channel_address = get_config("system", "site-channel" ); + if ($channel_address){ //We can do better, but until we figure out auto-linkification, let's keep things simple - $page_id = 'test'; + $page_id = 'home'; $u = q("select channel_id from channel where channel_address = '%s' limit 1", dbesc($channel_address) @@ -79,8 +68,19 @@ require_once('include/conversation.php'); $r = fetch_post_tags($r,true); $a->profile = array('profile_uid' => $u[0]['channel_id']); $o .= prepare_page($r[0]); - return $o; } + +// If there's no site channel specified, fallback to the old behaviour + else { $o .= '

' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '

'; + if(file_exists('home.html')) + $o .= file_get_contents('home.html'); +} + + $o .= login(($a->config['system']['register_policy'] == REGISTER_CLOSED) ? 0 : 1); + + call_hooks("home_content",$o); + return $o; +} } -- cgit v1.2.3 From 595c2a5e9d1288b1d5a1ee8c98368dc39b25f7de Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Fri, 31 May 2013 03:46:52 +0100 Subject: Lets not require files if we don't need them. --- mod/home.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mod/home.php b/mod/home.php index c074f9db5..86d489853 100644 --- a/mod/home.php +++ b/mod/home.php @@ -33,12 +33,13 @@ function home_content(&$a) { if(x($_SESSION,'mobile-theme')) unset($_SESSION['mobile-theme']); +$channel_address = get_config("system", "site-channel" ); + if ($channel_address){ require_once('include/items.php'); require_once('include/conversation.php'); - $channel_address = get_config("system", "site-channel" ); - if ($channel_address){ + //We can do better, but until we figure out auto-linkification, let's keep things simple $page_id = 'home'; -- cgit v1.2.3 From dc6472e046ee6ac0afc934e8ad1edc1e281a3cb0 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Fri, 31 May 2013 03:52:54 +0100 Subject: Add a webpages tab, where we can edit published pages. --- boot.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/boot.php b/boot.php index 15e442d65..92e62d3ba 100755 --- a/boot.php +++ b/boot.php @@ -2034,6 +2034,13 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){ 'title' => t('Events and Calendar'), 'id' => 'events-tab', ); + $tabs[] = array( + 'label' => t('Wepages'), + 'url' => $a->get_baseurl() . '/webpages', + 'sel' => ((argv(0) == 'webpages') ? 'active' : ''), + 'title' => t('Manage Webpages'), + 'id' => 'webpages-tab', + ); } else { // FIXME -- cgit v1.2.3 From 3f2829a062c9a6bedf7ebdc59db15e064b5a7446 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Wed, 10 Jul 2013 19:36:53 +0100 Subject: Minimum value webpages --- boot.php | 2 +- mod/editwebpage.php | 106 ++++++++++++++++++ mod/webpage.php | 281 +++++++++++++++++++++++++++++++++++++++++++++++ view/tpl/webpagelist.tpl | 12 ++ 4 files changed, 400 insertions(+), 1 deletion(-) create mode 100644 mod/editwebpage.php create mode 100644 mod/webpage.php create mode 100644 view/tpl/webpagelist.tpl diff --git a/boot.php b/boot.php index a98cfdaf0..b7db7d999 100755 --- a/boot.php +++ b/boot.php @@ -2060,7 +2060,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){ ); $tabs[] = array( 'label' => t('Wepages'), - 'url' => $a->get_baseurl() . '/webpages', + 'url' => $a->get_baseurl() . '/webpages' . $nickname, 'sel' => ((argv(0) == 'webpages') ? 'active' : ''), 'title' => t('Manage Webpages'), 'id' => 'webpages-tab', diff --git a/mod/editwebpage.php b/mod/editwebpage.php new file mode 100644 index 000000000..d15d9f364 --- /dev/null +++ b/mod/editwebpage.php @@ -0,0 +1,106 @@ + + 1) ? intval(argv(1)) : 0); + + if(! $post_id) { + notice( t('Item not found') . EOL); + return; + } + + // uid and author_xchan alone should be enough - but it doesn't seem to be any more expensive to use both, so keep it in case of edge cases + $itm = q("SELECT * FROM `item` WHERE `id` = %d and uid = %s and author_xchan = '%s' LIMIT 1", + intval($post_id), + intval(local_user()), + dbesc(get_observer_hash()) + ); + + + + // All of the following is straight from editpost - but we'll need richer editing options for webpages eventually, so we may as well have it's own mod now. + + $plaintext = true; + if(feature_enabled(local_user(),'richtext')) + $plaintext = false; + + $o .= replace_macros(get_markup_template('edpost_head.tpl'), array( + '$title' => t('Edit post') + )); + + + $a->page['htmlhead'] .= replace_macros(get_markup_template('jot-header.tpl'), array( + '$baseurl' => $a->get_baseurl(), + '$editselect' => (($plaintext) ? 'none' : '/(profile-jot-text|prvmail-text)/'), + '$ispublic' => ' ', // t('Visible to everybody'), + '$geotag' => $geotag, + '$nickname' => $a->user['nickname'] + )); + + + $tpl = get_markup_template("jot.tpl"); + + $jotplugins = ''; + $jotnets = ''; + + call_hooks('jot_tool', $jotplugins); + call_hooks('jot_networks', $jotnets); + + $channel = $a->get_channel(); + + //$tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins)); + + + $o .= replace_macros($tpl,array( + '$return_path' => $_SESSION['return_url'], + '$action' => 'item', + '$share' => t('Edit'), + '$upload' => t('Upload photo'), + '$attach' => t('Attach file'), + '$weblink' => t('Insert web link'), + '$youtube' => t('Insert YouTube video'), + '$video' => t('Insert Vorbis [.ogg] video'), + '$audio' => t('Insert Vorbis [.ogg] audio'), + '$setloc' => t('Set your location'), + '$noloc' => t('Clear browser location'), + '$wait' => t('Please wait'), + '$permset' => t('Permission settings'), + '$ptyp' => $itm[0]['type'], + '$content' => undo_post_tagging($itm[0]['body']), + '$post_id' => $post_id, + '$baseurl' => $a->get_baseurl(), + '$defloc' => $channel['channel_location'], + '$visitor' => 'none', + '$pvisit' => 'none', + '$public' => t('Public post'), + '$jotnets' => $jotnets, + '$title' => htmlspecialchars($itm[0]['title']), + '$placeholdertitle' => t('Set title'), + '$category' => '', + '$placeholdercategory' => t('Categories (comma-separated list)'), + '$emtitle' => t('Example: bob@example.com, mary@example.com'), + '$lockstate' => $lockstate, + '$acl' => '', + '$bang' => '', + '$profile_uid' => local_user(), + '$preview' => ((feature_enabled(local_user(),'preview')) ? t('Preview') : ''), + '$jotplugins' => $jotplugins, + '$sourceapp' => t($a->sourcename), + )); + + return $o; + +} + + diff --git a/mod/webpage.php b/mod/webpage.php new file mode 100644 index 000000000..ebb6b2bf3 --- /dev/null +++ b/mod/webpage.php @@ -0,0 +1,281 @@ + 1) + $which = argv(1); + else { + notice( t('Requested profile is not available.') . EOL ); + $a->error = 404; + return; + } + + $profile = 0; + $channel = $a->get_channel(); + + if((local_user()) && (argc() > 2) && (argv(2) === 'view')) { + $which = $channel['channel_address']; + $profile = argv(1); + } + + $a->page['htmlhead'] .= '' . "\r\n" ; + + // Run profile_load() here to make sure the theme is set before + // we start loading content + + profile_load($a,$which,$profile); + +} + + +function webpage_aside(&$a) { + + require_once('include/contact_widgets.php'); + require_once('include/items.php'); + + if(! $a->profile['profile_uid']) + return; + + $channel_display = get_pconfig($a->profile['profile_uid'],'system','channel_format'); + if(! $channel_display) + profile_create_sidebar($a); + + if($channel_display === 'full') + $a->page['template'] = 'full'; + else { + $cat = ((x($_REQUEST,'cat')) ? htmlspecialchars($_REQUEST['cat']) : ''); + $a->set_widget('archive',posted_date_widget($a->get_baseurl(true) . '/channel/' . $a->profile['channel_address'],$a->profile['profile_uid'],true)); + $a->set_widget('categories',categories_widget($a->get_baseurl(true) . '/channel/' . $a->profile['channel_address'],$cat)); + } +} + + +function webpage_content(&$a, $update = 0, $load = false) { + + $category = $datequery = $datequery2 = ''; + + if(argc() > 2) { + for($x = 2; $x < argc(); $x ++) { + if(is_a_date_arg(argv($x))) { + if($datequery) + $datequery2 = escape_tags(argv($x)); + else + $datequery = escape_tags(argv($x)); + } + } + } + + + if(get_config('system','block_public') && (! get_account_id()) && (! remote_user())) { + return login(); + } + + + + require_once("include/bbcode.php"); + require_once('include/security.php'); + require_once('include/conversation.php'); + require_once('include/acl_selectors.php'); + require_once('include/items.php'); + require_once('include/permissions.php'); + + + $groups = array(); + + $o = ''; + + if($update) { + // Ensure we've got a profile owner if updating. + $a->profile['profile_uid'] = $update; + } + else { + if($a->profile['profile_uid'] == local_user()) { + nav_set_selected('home'); + } + } + + $is_owner = (((local_user()) && ($a->profile['profile_uid'] == local_user())) ? true : false); + + $observer = $a->get_observer(); + $ob_hash = (($observer) ? $observer['xchan_hash'] : ''); + + $perms = get_all_perms($a->profile['profile_uid'],$ob_hash); + + if(! $perms['view_stream']) { + notice( t('Permission denied.') . EOL); + return; + } + + + if(! $update) { + + $o .= profile_tabs($a, $is_owner, $a->profile['channel_address']); + + $o .= common_friends_visitor_widget($a->profile['profile_uid']); + + + if($perms['post_wall']) { + + $x = array( + 'is_owner' => $is_owner, + 'allow_location' => ((($is_owner || $observer) && (intval(get_pconfig($a->profile['profile_uid'],'system','use_browser_location')))) ? true : false), + 'default_location' => (($is_owner) ? $a->profile['channel_location'] : ''), + 'nickname' => $a->profile['channel_address'], + 'lockstate' => (((strlen($a->profile['channel_allow_cid'])) || (strlen($a->profile['channel_allow_gid'])) || (strlen($a->profile['channel_deny_cid'])) || (strlen($a->profile['channel_deny_gid']))) ? 'lock' : 'unlock'), + 'acl' => (($is_owner) ? populate_acl($channel, false) : ''), + 'showacl' => (($is_owner) ? 'yes' : ''), + 'bang' => '', + 'visitor' => (($is_owner || $observer) ? 'block' : 'none'), + 'profile_uid' => $a->profile['profile_uid'] + ); + + $o .= status_editor($a,$x); + } + + } + + + /** + * Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups + */ + + + $sql_extra = item_permissions_sql($a->profile['profile_uid'],$remote_contact,$groups); + + + if(($update) && (! $load)) { + + $r = q("SELECT distinct parent AS `item_id` from item + left join abook on item.author_xchan = abook.abook_xchan + WHERE uid = %d AND item_restrict = 0 + AND (item_flags & %d) AND ( item_flags & %d ) + AND ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) + $sql_extra + ORDER BY created DESC", + intval($a->profile['profile_uid']), + intval(ITEM_WEBPAGE), + intval(ITEM_UNSEEN), + intval(ABOOK_FLAG_BLOCKED) + ); + + } + else { + + if(x($category)) { + $sql_extra .= protect_sprintf(file_tag_file_query('item',$category,'category')); + } + + if($datequery) { + $sql_extra2 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery)))); + } + if($datequery2) { + $sql_extra2 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2)))); + } + + + $a->set_pager_itemspage(40); + + $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); + + if($load) { + $r = q("SELECT distinct id AS item_id FROM item + left join abook on item.author_xchan = abook.abook_xchan + WHERE uid = %d AND item_restrict = 0 + AND (item_flags & %d) and (item_flags & %d) + AND ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) + $sql_extra $sql_extra2 + ORDER BY created DESC $pager_sql ", + intval($a->profile['profile_uid']), + intval(ITEM_WEBPAGE), + intval(ITEM_THREAD_TOP), + intval(ABOOK_FLAG_BLOCKED) + + ); + } + else { + $r = array(); + } + } + + if($r) { + + $parents_str = ids_to_querystr($r,'item_id'); + + $items = q("SELECT `item`.*, `item`.`id` AS `item_id` + FROM `item` + WHERE `item`.`uid` = %d AND `item`.`item_restrict` = 0 + AND `item`.`parent` IN ( %s ) + AND (item_flags $ %d) + $sql_extra ", + intval($a->profile['profile_uid']), + intval(ITEM_WEBPAGE), + dbesc($parents_str) + ); + + xchan_query($items); + $items = fetch_post_tags($items, true); + $items = conv_sort($items,'created'); + + } else { + $items = array(); + } + + + if((! $update) && (! $load)) { + + // This is ugly, but we can't pass the profile_uid through the session to the ajax updater, + // because browser prefetching might change it on us. We have to deliver it with the page. + + $o .= '
' . "\r\n"; + $o .= "\r\n"; + + $a->page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( + '$baseurl' => z_root(), + '$pgtype' => 'page', + '$uid' => (($a->profile['profile_uid']) ? $a->profile['profile_uid'] : '0'), + '$gid' => '0', + '$cid' => '0', + '$cmin' => '0', + '$cmax' => '0', + '$star' => '0', + '$liked' => '0', + '$conv' => '0', + '$spam' => '0', + '$nouveau' => '0', + '$wall' => '0', + '$page' => (($a->pager['page'] != 1) ? $a->pager['page'] : 1), + '$search' => '', + '$order' => '', + '$file' => '', + '$cats' => (($category) ? $category : ''), + '$mid' => '', + '$dend' => $datequery, + '$dbegin' => $datequery2 + )); + + + } + + + + if($is_owner) { + + $r = q("UPDATE item SET item_flags = (item_flags ^ %d) + WHERE (item_flags & %d) AND (item_flags & %d) AND uid = %d ", + intval(ITEM_UNSEEN), + intval(ITEM_UNSEEN), + intval(ITEM_WEBPAGE), + intval(local_user()) + ); + } + + + $o .= conversation($a,$items,'channel',$update,'client'); + + if(! $update) + $o .= alt_pager($a,count($items)); + + return $o; +} + diff --git a/view/tpl/webpagelist.tpl b/view/tpl/webpagelist.tpl new file mode 100644 index 000000000..8ae9a1da8 --- /dev/null +++ b/view/tpl/webpagelist.tpl @@ -0,0 +1,12 @@ +{{if $pages}} +
+{{foreach $pages as $key => $items}} +
    +{{foreach $items as $item}} +
  • Edit {{$item.title}}
  • +{{/foreach}} +
+
+
+{{/foreach}} +{{/if}} -- cgit v1.2.3 From 6b85e063e84359bf15140f59b24299eae459f09b Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Wed, 10 Jul 2013 19:46:06 +0100 Subject: Let's use the right files, plus a typo --- boot.php | 2 +- mod/webpage.php | 281 ------------------------------------------------------- mod/webpages.php | 30 ++++++ 3 files changed, 31 insertions(+), 282 deletions(-) delete mode 100644 mod/webpage.php create mode 100644 mod/webpages.php diff --git a/boot.php b/boot.php index b7db7d999..deeb87435 100755 --- a/boot.php +++ b/boot.php @@ -2060,7 +2060,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){ ); $tabs[] = array( 'label' => t('Wepages'), - 'url' => $a->get_baseurl() . '/webpages' . $nickname, + 'url' => $a->get_baseurl() . '/webpage/' . $nickname, 'sel' => ((argv(0) == 'webpages') ? 'active' : ''), 'title' => t('Manage Webpages'), 'id' => 'webpages-tab', diff --git a/mod/webpage.php b/mod/webpage.php deleted file mode 100644 index ebb6b2bf3..000000000 --- a/mod/webpage.php +++ /dev/null @@ -1,281 +0,0 @@ - 1) - $which = argv(1); - else { - notice( t('Requested profile is not available.') . EOL ); - $a->error = 404; - return; - } - - $profile = 0; - $channel = $a->get_channel(); - - if((local_user()) && (argc() > 2) && (argv(2) === 'view')) { - $which = $channel['channel_address']; - $profile = argv(1); - } - - $a->page['htmlhead'] .= '' . "\r\n" ; - - // Run profile_load() here to make sure the theme is set before - // we start loading content - - profile_load($a,$which,$profile); - -} - - -function webpage_aside(&$a) { - - require_once('include/contact_widgets.php'); - require_once('include/items.php'); - - if(! $a->profile['profile_uid']) - return; - - $channel_display = get_pconfig($a->profile['profile_uid'],'system','channel_format'); - if(! $channel_display) - profile_create_sidebar($a); - - if($channel_display === 'full') - $a->page['template'] = 'full'; - else { - $cat = ((x($_REQUEST,'cat')) ? htmlspecialchars($_REQUEST['cat']) : ''); - $a->set_widget('archive',posted_date_widget($a->get_baseurl(true) . '/channel/' . $a->profile['channel_address'],$a->profile['profile_uid'],true)); - $a->set_widget('categories',categories_widget($a->get_baseurl(true) . '/channel/' . $a->profile['channel_address'],$cat)); - } -} - - -function webpage_content(&$a, $update = 0, $load = false) { - - $category = $datequery = $datequery2 = ''; - - if(argc() > 2) { - for($x = 2; $x < argc(); $x ++) { - if(is_a_date_arg(argv($x))) { - if($datequery) - $datequery2 = escape_tags(argv($x)); - else - $datequery = escape_tags(argv($x)); - } - } - } - - - if(get_config('system','block_public') && (! get_account_id()) && (! remote_user())) { - return login(); - } - - - - require_once("include/bbcode.php"); - require_once('include/security.php'); - require_once('include/conversation.php'); - require_once('include/acl_selectors.php'); - require_once('include/items.php'); - require_once('include/permissions.php'); - - - $groups = array(); - - $o = ''; - - if($update) { - // Ensure we've got a profile owner if updating. - $a->profile['profile_uid'] = $update; - } - else { - if($a->profile['profile_uid'] == local_user()) { - nav_set_selected('home'); - } - } - - $is_owner = (((local_user()) && ($a->profile['profile_uid'] == local_user())) ? true : false); - - $observer = $a->get_observer(); - $ob_hash = (($observer) ? $observer['xchan_hash'] : ''); - - $perms = get_all_perms($a->profile['profile_uid'],$ob_hash); - - if(! $perms['view_stream']) { - notice( t('Permission denied.') . EOL); - return; - } - - - if(! $update) { - - $o .= profile_tabs($a, $is_owner, $a->profile['channel_address']); - - $o .= common_friends_visitor_widget($a->profile['profile_uid']); - - - if($perms['post_wall']) { - - $x = array( - 'is_owner' => $is_owner, - 'allow_location' => ((($is_owner || $observer) && (intval(get_pconfig($a->profile['profile_uid'],'system','use_browser_location')))) ? true : false), - 'default_location' => (($is_owner) ? $a->profile['channel_location'] : ''), - 'nickname' => $a->profile['channel_address'], - 'lockstate' => (((strlen($a->profile['channel_allow_cid'])) || (strlen($a->profile['channel_allow_gid'])) || (strlen($a->profile['channel_deny_cid'])) || (strlen($a->profile['channel_deny_gid']))) ? 'lock' : 'unlock'), - 'acl' => (($is_owner) ? populate_acl($channel, false) : ''), - 'showacl' => (($is_owner) ? 'yes' : ''), - 'bang' => '', - 'visitor' => (($is_owner || $observer) ? 'block' : 'none'), - 'profile_uid' => $a->profile['profile_uid'] - ); - - $o .= status_editor($a,$x); - } - - } - - - /** - * Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups - */ - - - $sql_extra = item_permissions_sql($a->profile['profile_uid'],$remote_contact,$groups); - - - if(($update) && (! $load)) { - - $r = q("SELECT distinct parent AS `item_id` from item - left join abook on item.author_xchan = abook.abook_xchan - WHERE uid = %d AND item_restrict = 0 - AND (item_flags & %d) AND ( item_flags & %d ) - AND ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) - $sql_extra - ORDER BY created DESC", - intval($a->profile['profile_uid']), - intval(ITEM_WEBPAGE), - intval(ITEM_UNSEEN), - intval(ABOOK_FLAG_BLOCKED) - ); - - } - else { - - if(x($category)) { - $sql_extra .= protect_sprintf(file_tag_file_query('item',$category,'category')); - } - - if($datequery) { - $sql_extra2 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery)))); - } - if($datequery2) { - $sql_extra2 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2)))); - } - - - $a->set_pager_itemspage(40); - - $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); - - if($load) { - $r = q("SELECT distinct id AS item_id FROM item - left join abook on item.author_xchan = abook.abook_xchan - WHERE uid = %d AND item_restrict = 0 - AND (item_flags & %d) and (item_flags & %d) - AND ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) - $sql_extra $sql_extra2 - ORDER BY created DESC $pager_sql ", - intval($a->profile['profile_uid']), - intval(ITEM_WEBPAGE), - intval(ITEM_THREAD_TOP), - intval(ABOOK_FLAG_BLOCKED) - - ); - } - else { - $r = array(); - } - } - - if($r) { - - $parents_str = ids_to_querystr($r,'item_id'); - - $items = q("SELECT `item`.*, `item`.`id` AS `item_id` - FROM `item` - WHERE `item`.`uid` = %d AND `item`.`item_restrict` = 0 - AND `item`.`parent` IN ( %s ) - AND (item_flags $ %d) - $sql_extra ", - intval($a->profile['profile_uid']), - intval(ITEM_WEBPAGE), - dbesc($parents_str) - ); - - xchan_query($items); - $items = fetch_post_tags($items, true); - $items = conv_sort($items,'created'); - - } else { - $items = array(); - } - - - if((! $update) && (! $load)) { - - // This is ugly, but we can't pass the profile_uid through the session to the ajax updater, - // because browser prefetching might change it on us. We have to deliver it with the page. - - $o .= '
' . "\r\n"; - $o .= "\r\n"; - - $a->page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( - '$baseurl' => z_root(), - '$pgtype' => 'page', - '$uid' => (($a->profile['profile_uid']) ? $a->profile['profile_uid'] : '0'), - '$gid' => '0', - '$cid' => '0', - '$cmin' => '0', - '$cmax' => '0', - '$star' => '0', - '$liked' => '0', - '$conv' => '0', - '$spam' => '0', - '$nouveau' => '0', - '$wall' => '0', - '$page' => (($a->pager['page'] != 1) ? $a->pager['page'] : 1), - '$search' => '', - '$order' => '', - '$file' => '', - '$cats' => (($category) ? $category : ''), - '$mid' => '', - '$dend' => $datequery, - '$dbegin' => $datequery2 - )); - - - } - - - - if($is_owner) { - - $r = q("UPDATE item SET item_flags = (item_flags ^ %d) - WHERE (item_flags & %d) AND (item_flags & %d) AND uid = %d ", - intval(ITEM_UNSEEN), - intval(ITEM_UNSEEN), - intval(ITEM_WEBPAGE), - intval(local_user()) - ); - } - - - $o .= conversation($a,$items,'channel',$update,'client'); - - if(! $update) - $o .= alt_pager($a,count($items)); - - return $o; -} - diff --git a/mod/webpages.php b/mod/webpages.php new file mode 100644 index 000000000..48634551d --- /dev/null +++ b/mod/webpages.php @@ -0,0 +1,30 @@ +


"; +//foreach ($r as $rr) { +//print 'Edit' . ' ' . ($rr['sid']) . '
'; +//} + + $pages = null; + + if($r) { + $pages = array(); + foreach($r as $rr) { + $pages[$rr['iid']][] = array('url' => $rr['iid'],'title' => $rr['sid']); + } + } + + logger('mod_profile: things: ' . print_r($pages,true), LOGGER_DATA); + + return replace_macros(get_markup_template("webpageslist.tpl"), array( + '$webpages' => $webpages + )); + } + + +return; +} \ No newline at end of file -- cgit v1.2.3 From 40a444f01b2d3e7cc9b9c8822a2e36c47e6a25f6 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Wed, 10 Jul 2013 19:53:11 +0100 Subject: One of those days... --- boot.php | 2 +- mod/webpages.php | 66 +++++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/boot.php b/boot.php index deeb87435..8e6852f7a 100755 --- a/boot.php +++ b/boot.php @@ -2060,7 +2060,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){ ); $tabs[] = array( 'label' => t('Wepages'), - 'url' => $a->get_baseurl() . '/webpage/' . $nickname, + 'url' => $a->get_baseurl() . '/webpages/' . $nickname, 'sel' => ((argv(0) == 'webpages') ? 'active' : ''), 'title' => t('Manage Webpages'), 'id' => 'webpages-tab', diff --git a/mod/webpages.php b/mod/webpages.php index 48634551d..3a3e30309 100644 --- a/mod/webpages.php +++ b/mod/webpages.php @@ -1,13 +1,54 @@ 1) + $which = argv(1); + else { + notice( t('Requested profile is not available.') . EOL ); + $a->error = 404; + return; + } + + $profile = 0; + $channel = $a->get_channel(); + + if((local_user()) && (argc() > 2) && (argv(2) === 'view')) { + $which = $channel['channel_address']; + $profile = argv(1); + } + + profile_load($a,$which,$profile); + +} + function webpages_content(&$a) { +// We can do better, but since editing only works for local users and all posts are webpages, return anyone else for now. -$r = q("select * from item_id"); +if (!local_user()) return; -//print "



"; -//foreach ($r as $rr) { -//print 'Edit' . ' ' . ($rr['sid']) . '
'; -//} + +// Create a status editor (for now - we'll need a WYSIWYG eventually) to create pages +require_once ('include/conversation.php'); + $x = array( + 'webpage' => 1, + 'is_owner' => true, + 'nickname' => $channel['channel_address'], + 'lockstate' => (($group || $cid || $channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), + 'bang' => (($group || $cid) ? '!' : ''), + 'visitor' => 'block', + 'profile_uid' => local_user() + ); + + $o .= status_editor($a,$x); + +//Get a list of webpages. We can't display all them because endless scroll makes that unusable, so just list titles and an edit link. +// FIXME - we should sort these results, but it's not obvious what order yet. Alphabetical? Created order? + +$r = q("select * from item_id where uid = %d and service = 'WEBPAGE'", + intval(local_user()) +); $pages = null; @@ -18,13 +59,14 @@ $r = q("select * from item_id"); } } - logger('mod_profile: things: ' . print_r($pages,true), LOGGER_DATA); + //Something is bound to go wrong, so we'll log it - if nothing has blown up in a few days, this should be nuked. + logger('mod_webpages: pages: ' . print_r($pages,true), LOGGER_DATA); - return replace_macros(get_markup_template("webpageslist.tpl"), array( - '$webpages' => $webpages - )); - } +// This isn't pretty, but it works. Until I figure out what to do with the UI, it's Good Enough(TM). + return $o . replace_macros(get_markup_template("webpagelist.tpl"), array( + '$pages' => $pages + )); + -return; -} \ No newline at end of file +} -- cgit v1.2.3