2016-04-19 03:38:38 +00:00
< ? php
namespace Zotlabs\Module ;
require_once ( 'include/menu.php' );
2016-05-22 23:54:30 +00:00
require_once ( 'include/channel.php' );
2016-04-19 03:38:38 +00:00
class Menu extends \Zotlabs\Web\Controller {
2018-06-06 04:12:42 +00:00
2016-04-19 03:38:38 +00:00
function init () {
2018-06-06 04:12:42 +00:00
if ( argc () > 1 && argv ( 1 ) === 'sys' && is_site_admin ()) {
2016-04-19 03:38:38 +00:00
$sys = get_sys_channel ();
2018-06-06 04:12:42 +00:00
if ( $sys && intval ( $sys [ 'channel_id' ])) {
2016-04-19 03:38:38 +00:00
\App :: $is_sys = true ;
}
}
2018-06-06 04:12:42 +00:00
if ( argc () > 1 )
$which = argv ( 1 );
else
return ;
profile_load ( $which );
2016-04-19 03:38:38 +00:00
}
2018-06-06 04:12:42 +00:00
2016-04-19 03:38:38 +00:00
2018-06-06 04:12:42 +00:00
function post () {
2016-04-19 03:38:38 +00:00
2018-06-06 04:12:42 +00:00
if ( ! \App :: $profile ) {
return ;
}
$which = argv ( 1 );
$uid = \App :: $profile [ 'channel_id' ];
2016-04-19 03:38:38 +00:00
if ( array_key_exists ( 'sys' , $_REQUEST ) && $_REQUEST [ 'sys' ] && is_site_admin ()) {
$sys = get_sys_channel ();
$uid = intval ( $sys [ 'channel_id' ]);
\App :: $is_sys = true ;
}
if ( ! $uid )
return ;
$_REQUEST [ 'menu_channel_id' ] = $uid ;
if ( $_REQUEST [ 'menu_bookmark' ])
$_REQUEST [ 'menu_flags' ] |= MENU_BOOKMARK ;
if ( $_REQUEST [ 'menu_system' ])
$_REQUEST [ 'menu_flags' ] |= MENU_SYSTEM ;
$menu_id = (( argc () > 1 ) ? intval ( argv ( 1 )) : 0 );
if ( $menu_id ) {
$_REQUEST [ 'menu_id' ] = intval ( argv ( 1 ));
$r = menu_edit ( $_REQUEST );
if ( $r ) {
menu_sync_packet ( $uid , get_observer_hash (), $menu_id );
//info( t('Menu updated.') . EOL);
2018-06-06 04:12:42 +00:00
goaway ( z_root () . '/mitem/' . $which . '/' . $menu_id . (( \App :: $is_sys ) ? '?f=&sys=1' : '' ));
2016-04-19 03:38:38 +00:00
}
else
notice ( t ( 'Unable to update menu.' ) . EOL );
}
else {
$r = menu_create ( $_REQUEST );
if ( $r ) {
menu_sync_packet ( $uid , get_observer_hash (), $r );
//info( t('Menu created.') . EOL);
2018-06-06 04:12:42 +00:00
goaway ( z_root () . '/mitem/' . $which . '/' . $r . (( \App :: $is_sys ) ? '?f=&sys=1' : '' ));
2016-04-19 03:38:38 +00:00
}
else
notice ( t ( 'Unable to create menu.' ) . EOL );
}
}
2016-08-01 03:14:25 +00:00
function get () {
2016-04-19 03:38:38 +00:00
2018-06-06 04:12:42 +00:00
if ( ! \App :: $profile ) {
notice ( t ( 'Requested profile is not available.' ) . EOL );
\App :: $error = 404 ;
return ;
}
$which = argv ( 1 );
$_SESSION [ 'return_url' ] = \App :: $query_string ;
2016-04-19 03:38:38 +00:00
$uid = local_channel ();
2018-06-06 04:12:42 +00:00
$owner = 0 ;
$channel = null ;
$observer = \App :: get_observer ();
$channel = \App :: get_channel ();
if ( \App :: $is_sys && is_site_admin ()) {
2016-04-19 03:38:38 +00:00
$sys = get_sys_channel ();
2018-06-06 04:12:42 +00:00
if ( $sys && intval ( $sys [ 'channel_id' ])) {
$uid = $owner = intval ( $sys [ 'channel_id' ]);
$channel = $sys ;
$observer = $sys ;
}
2016-04-19 03:38:38 +00:00
}
2018-06-06 04:12:42 +00:00
if ( ! $owner ) {
// Figure out who the page owner is.
$r = channelx_by_nick ( $which );
if ( $r ) {
$owner = intval ( $r [ 'channel_id' ]);
}
}
$ob_hash = (( $observer ) ? $observer [ 'xchan_hash' ] : '' );
$perms = get_all_perms ( $owner , $ob_hash );
if ( ! $perms [ 'write_pages' ]) {
2016-04-19 03:38:38 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
2018-06-06 04:12:42 +00:00
return ;
2016-04-19 03:38:38 +00:00
}
2018-06-06 04:12:42 +00:00
// Get the observer, check their permissions
$ob_hash = (( $observer ) ? $observer [ 'xchan_hash' ] : '' );
$perms = get_all_perms ( $owner , $ob_hash );
if ( ! $perms [ 'write_pages' ]) {
notice ( t ( 'Permission denied.' ) . EOL );
return ;
}
if ( argc () == 2 ) {
2016-04-19 03:38:38 +00:00
2018-06-06 04:12:42 +00:00
$channel = (( $sys ) ? $sys : channelx_by_n ( $owner ));
2016-04-19 03:38:38 +00:00
// list menus
2018-06-06 04:12:42 +00:00
$x = menu_list ( $owner );
2016-04-19 03:38:38 +00:00
if ( $x ) {
for ( $y = 0 ; $y < count ( $x ); $y ++ ) {
2018-06-06 04:12:42 +00:00
$m = menu_fetch ( $x [ $y ][ 'menu_name' ], $owner , get_observer_hash ());
2016-04-19 03:38:38 +00:00
if ( $m )
2016-08-01 03:14:25 +00:00
$x [ $y ][ 'element' ] = '[element]' . base64url_encode ( json_encode ( menu_element ( $channel , $m ))) . '[/element]' ;
2016-04-19 03:38:38 +00:00
$x [ $y ][ 'bookmark' ] = (( $x [ $y ][ 'menu_flags' ] & MENU_BOOKMARK ) ? true : false );
}
}
$create = replace_macros ( get_markup_template ( 'menuedit.tpl' ), array (
'$menu_name' => array ( 'menu_name' , t ( 'Menu Name' ), '' , t ( 'Unique name (not visible on webpage) - required' ), '*' ),
'$menu_desc' => array ( 'menu_desc' , t ( 'Menu Title' ), '' , t ( 'Visible on webpage - leave empty for no title' ), '' ),
'$menu_bookmark' => array ( 'menu_bookmark' , t ( 'Allow Bookmarks' ), 0 , t ( 'Menu may be used to store saved bookmarks' ), array ( t ( 'No' ), t ( 'Yes' ))),
'$submit' => t ( 'Submit and proceed' ),
'$sys' => \App :: $is_sys ,
2018-06-06 04:12:42 +00:00
'$nick' => $which ,
2016-04-19 03:38:38 +00:00
'$display' => 'none'
));
$o = replace_macros ( get_markup_template ( 'menulist.tpl' ), array (
'$title' => t ( 'Menus' ),
'$create' => $create ,
'$menus' => $x ,
'$nametitle' => t ( 'Menu Name' ),
'$desctitle' => t ( 'Menu Title' ),
'$edit' => t ( 'Edit' ),
'$drop' => t ( 'Drop' ),
'$created' => t ( 'Created' ),
'$edited' => t ( 'Edited' ),
'$new' => t ( 'New' ),
'$bmark' => t ( 'Bookmarks allowed' ),
'$hintnew' => t ( 'Create' ),
'$hintdrop' => t ( 'Delete this menu' ),
'$hintcontent' => t ( 'Edit menu contents' ),
'$hintedit' => t ( 'Edit this menu' ),
2018-06-06 04:12:42 +00:00
'$nick' => $which ,
2016-04-19 03:38:38 +00:00
'$sys' => \App :: $is_sys
));
return $o ;
}
2018-06-06 04:12:42 +00:00
if ( argc () > 2 ) {
if ( intval ( argv ( 2 ))) {
2016-04-19 03:38:38 +00:00
2018-06-06 04:12:42 +00:00
if ( argc () == 4 && argv ( 3 ) == 'drop' ) {
menu_sync_packet ( $owner , get_observer_hash (), intval ( argv ( 1 )), true );
$r = menu_delete_id ( intval ( argv ( 2 )), $owner );
2016-04-19 03:38:38 +00:00
if ( ! $r )
notice ( t ( 'Menu could not be deleted.' ) . EOL );
2018-06-06 04:12:42 +00:00
goaway ( z_root () . '/menu/' . $which . (( \App :: $is_sys ) ? '?f=&sys=1' : '' ));
2016-04-19 03:38:38 +00:00
}
2018-06-06 04:12:42 +00:00
$m = menu_fetch_id ( intval ( argv ( 2 )), $owner );
2016-04-19 03:38:38 +00:00
if ( ! $m ) {
notice ( t ( 'Menu not found.' ) . EOL );
return '' ;
}
$o = replace_macros ( get_markup_template ( 'menuedit.tpl' ), array (
'$header' => t ( 'Edit Menu' ),
'$sys' => \App :: $is_sys ,
2018-06-06 04:12:42 +00:00
'$menu_id' => intval ( argv ( 2 )),
'$menu_edit_link' => 'mitem/' . $which . '/' . intval ( argv ( 1 )) . (( \App :: $is_sys ) ? '?f=&sys=1' : '' ),
2016-04-19 03:38:38 +00:00
'$hintedit' => t ( 'Add or remove entries to this menu' ),
'$editcontents' => t ( 'Edit menu contents' ),
'$menu_name' => array ( 'menu_name' , t ( 'Menu name' ), $m [ 'menu_name' ], t ( 'Must be unique, only seen by you' ), '*' ),
'$menu_desc' => array ( 'menu_desc' , t ( 'Menu title' ), $m [ 'menu_desc' ], t ( 'Menu title as seen by others' ), '' ),
'$menu_bookmark' => array ( 'menu_bookmark' , t ( 'Allow bookmarks' ), (( $m [ 'menu_flags' ] & MENU_BOOKMARK ) ? 1 : 0 ), t ( 'Menu may be used to store saved bookmarks' ), array ( t ( 'No' ), t ( 'Yes' ))),
'$menu_system' => (( $m [ 'menu_flags' ] & MENU_SYSTEM ) ? 1 : 0 ),
2018-06-06 04:12:42 +00:00
'$nick' => $which ,
2016-04-19 03:38:38 +00:00
'$submit' => t ( 'Submit and proceed' )
));
return $o ;
}
else {
notice ( t ( 'Not found.' ) . EOL );
return ;
}
}
}
}