diff options
-rw-r--r-- | Zotlabs/Module/Webpages.php | 987 | ||||
-rw-r--r-- | view/de/hmessages.po | 16 |
2 files changed, 520 insertions, 483 deletions
diff --git a/Zotlabs/Module/Webpages.php b/Zotlabs/Module/Webpages.php index e2ad7753b..effe92614 100644 --- a/Zotlabs/Module/Webpages.php +++ b/Zotlabs/Module/Webpages.php @@ -1,152 +1,156 @@ <?php - namespace Zotlabs\Module; require_once('include/channel.php'); require_once('include/conversation.php'); require_once('include/acl_selectors.php'); + class Webpages extends \Zotlabs\Web\Controller { function init() { - - if (argc() > 1 && argv(1) === 'sys' && is_site_admin()) { + + if(argc() > 1 && argv(1) === 'sys' && is_site_admin()) { $sys = get_sys_channel(); - if ($sys && intval($sys['channel_id'])) { + if($sys && intval($sys['channel_id'])) { \App::$is_sys = true; } } - - if (argc() > 1) + + if(argc() > 1) $which = argv(1); else return; - + profile_load($which); + } - + + function get() { - - if (!\App::$profile) { - notice(t('Requested profile is not available.') . EOL); + + if(! \App::$profile) { + notice( t('Requested profile is not available.') . EOL ); \App::$error = 404; return; } - + $which = argv(1); - + $_SESSION['return_url'] = \App::$query_string; - + $uid = local_channel(); $owner = 0; $observer = \App::get_observer(); - + $channel = \App::get_channel(); switch ($_SESSION['action']) { - case 'import': - $_SESSION['action'] = null; - $o .= replace_macros(get_markup_template('webpage_import.tpl'), array( - '$title' => t('Import Webpage Elements'), - '$importbtn' => t('Import selected'), - '$action' => 'import', - '$pages' => $_SESSION['pages'], - '$layouts' => $_SESSION['layouts'], - '$blocks' => $_SESSION['blocks'], - )); - return $o; - - case 'importselected': - $_SESSION['action'] = null; - break; - case 'export_select_list': - $_SESSION['action'] = null; - if (!$uid) { - $_SESSION['export'] = null; - break; - } - require_once('include/import.php'); - - $pages = get_webpage_elements($channel, 'pages'); - $layouts = get_webpage_elements($channel, 'layouts'); - $blocks = get_webpage_elements($channel, 'blocks'); - $o .= replace_macros(get_markup_template('webpage_export_list.tpl'), array( - '$title' => t('Export Webpage Elements'), - '$exportbtn' => t('Export selected'), - '$action' => $_SESSION['export'], // value should be 'zipfile' or 'cloud' - '$pages' => $pages['pages'], - '$layouts' => $layouts['layouts'], - '$blocks' => $blocks['blocks'], - )); - $_SESSION['export'] = null; - return $o; - - default : - $_SESSION['action'] = null; - break; + case 'import': + $_SESSION['action'] = null; + $o .= replace_macros(get_markup_template('webpage_import.tpl'), array( + '$title' => t('Import Webpage Elements'), + '$importbtn' => t('Import selected'), + '$action' => 'import', + '$pages' => $_SESSION['pages'], + '$layouts' => $_SESSION['layouts'], + '$blocks' => $_SESSION['blocks'], + )); + return $o; + + case 'importselected': + $_SESSION['action'] = null; + break; + case 'export_select_list': + $_SESSION['action'] = null; + if(!$uid) { + $_SESSION['export'] = null; + break; + } + require_once('include/import.php'); + + $pages = get_webpage_elements($channel, 'pages'); + $layouts = get_webpage_elements($channel, 'layouts'); + $blocks = get_webpage_elements($channel, 'blocks'); + $o .= replace_macros(get_markup_template('webpage_export_list.tpl'), array( + '$title' => t('Export Webpage Elements'), + '$exportbtn' => t('Export selected'), + '$action' => $_SESSION['export'], // value should be 'zipfile' or 'cloud' + '$pages' => $pages['pages'], + '$layouts' => $layouts['layouts'], + '$blocks' => $blocks['blocks'], + )); + $_SESSION['export'] = null; + return $o; + + default : + $_SESSION['action'] = null; + break; } - - - if (\App::$is_sys && is_site_admin()) { + + + if(\App::$is_sys && is_site_admin()) { $sys = get_sys_channel(); - if ($sys && intval($sys['channel_id'])) { + if($sys && intval($sys['channel_id'])) { $uid = $owner = intval($sys['channel_id']); $channel = $sys; $observer = $sys; } } - - if (!$owner) { + + if(! $owner) { // Figure out who the page owner is. - $r = q("select channel_id from channel where channel_address = '%s'", dbesc($which) + $r = q("select channel_id from channel where channel_address = '%s'", + dbesc($which) ); - if ($r) { + if($r) { $owner = intval($r[0]['channel_id']); } } - + $ob_hash = (($observer) ? $observer['xchan_hash'] : ''); - - $perms = get_all_perms($owner, $ob_hash); - - if (!$perms['write_pages']) { - notice(t('Permission denied.') . EOL); + + $perms = get_all_perms($owner,$ob_hash); + + if(! $perms['write_pages']) { + notice( t('Permission denied.') . EOL); return; } - - $mimetype = (($_REQUEST['mimetype']) ? $_REQUEST['mimetype'] : get_pconfig($owner, 'system', 'page_mimetype')); - - $layout = (($_REQUEST['layout']) ? $_REQUEST['layout'] : get_pconfig($owner, 'system', 'page_layout')); - + + $mimetype = (($_REQUEST['mimetype']) ? $_REQUEST['mimetype'] : get_pconfig($owner,'system','page_mimetype')); + + $layout = (($_REQUEST['layout']) ? $_REQUEST['layout'] : get_pconfig($owner,'system','page_layout')); + // Create a status editor (for now - we'll need a WYSIWYG eventually) to create pages // Nickname is set to the observers xchan, and profile_uid to the owner's. // This lets you post pages at other people's channels. - - if ((!$channel) && ($uid) && ($uid == \App::$profile_uid)) { + + if((! $channel) && ($uid) && ($uid == \App::$profile_uid)) { $channel = \App::get_channel(); } - if ($channel) { + if($channel) { $channel_acl = array( 'allow_cid' => $channel['channel_allow_cid'], 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], - 'deny_gid' => $channel['channel_deny_gid'] + 'deny_cid' => $channel['channel_deny_cid'], + 'deny_gid' => $channel['channel_deny_gid'] ); - } else { - $channel_acl = ['allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '']; } - + else { + $channel_acl = [ 'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '' ]; + } + $is_owner = ($uid && $uid == $owner); //$o = profile_tabs($a, $is_owner, \App::$profile['channel_address']); $o = ''; - + $x = array( 'webpage' => ITEM_TYPE_WEBPAGE, 'is_owner' => true, 'nickname' => \App::$profile['channel_address'], 'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), - 'acl' => (($is_owner) ? populate_acl($channel_acl, false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')) : ''), + 'acl' => (($is_owner) ? populate_acl($channel_acl,false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')) : ''), 'permissions' => $channel_acl, 'showacl' => (($is_owner) ? true : false), 'visitor' => true, @@ -158,30 +162,33 @@ class Webpages extends \Zotlabs\Web\Controller { 'layout' => $layout, 'layoutselect' => true, 'expanded' => true, - 'novoting' => true, + 'novoting'=> true, 'bbco_autocomplete' => 'bbcode', 'bbcode' => true ); - - if ($_REQUEST['title']) + + if($_REQUEST['title']) $x['title'] = $_REQUEST['title']; - if ($_REQUEST['body']) + if($_REQUEST['body']) $x['body'] = $_REQUEST['body']; - if ($_REQUEST['pagetitle']) + if($_REQUEST['pagetitle']) $x['pagetitle'] = $_REQUEST['pagetitle']; - - + + // 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. - - + + /** @TODO - this should be replaced with pagelist_widget */ + $sql_extra = item_permissions_sql($owner); - + $r = q("select * from iconfig left join item on iconfig.iid = item.id where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item_type = %d - $sql_extra order by item.created desc", intval($owner), intval(ITEM_TYPE_WEBPAGE) + $sql_extra order by item.created desc", + intval($owner), + intval(ITEM_TYPE_WEBPAGE) ); // $r = q("select * from item_id left join item on item_id.iid = item.id @@ -189,81 +196,81 @@ class Webpages extends \Zotlabs\Web\Controller { // intval($owner), // intval(ITEM_TYPE_WEBPAGE) // ); - - if (!$r) + + if(! $r) $x['pagetitle'] = 'home'; - $editor = status_editor($a, $x); + $editor = status_editor($a,$x); $pages = null; - - if ($r) { + + if($r) { $pages = array(); - foreach ($r as $rr) { + foreach($r as $rr) { unobscure($rr); - + $lockstate = (($rr['allow_cid'] || $rr['allow_gid'] || $rr['deny_cid'] || $rr['deny_gid']) ? 'lock' : 'unlock'); - + $element_arr = array( - 'type' => 'webpage', - 'title' => $rr['title'], - 'body' => $rr['body'], - 'created' => $rr['created'], - 'edited' => $rr['edited'], - 'mimetype' => $rr['mimetype'], - 'pagetitle' => $rr['v'], - 'mid' => $rr['mid'], - 'layout_mid' => $rr['layout_mid'] + 'type' => 'webpage', + 'title' => $rr['title'], + 'body' => $rr['body'], + 'created' => $rr['created'], + 'edited' => $rr['edited'], + 'mimetype' => $rr['mimetype'], + 'pagetitle' => $rr['v'], + 'mid' => $rr['mid'], + 'layout_mid' => $rr['layout_mid'] ); $pages[$rr['iid']][] = array( - 'url' => $rr['iid'], - 'pagetitle' => $rr['v'], - 'title' => $rr['title'], - 'created' => datetime_convert('UTC', date_default_timezone_get(), $rr['created']), - 'edited' => datetime_convert('UTC', date_default_timezone_get(), $rr['edited']), - 'bb_element' => '[element]' . base64url_encode(json_encode($element_arr)) . '[/element]', - 'lockstate' => $lockstate + 'url' => $rr['iid'], + 'pagetitle' => $rr['v'], + 'title' => $rr['title'], + 'created' => datetime_convert('UTC',date_default_timezone_get(),$rr['created']), + 'edited' => datetime_convert('UTC',date_default_timezone_get(),$rr['edited']), + 'bb_element' => '[element]' . base64url_encode(json_encode($element_arr)) . '[/element]', + 'lockstate' => $lockstate ); } } - - + + //Build the base URL for edit links $url = z_root() . '/editwebpage/' . $which; - + $o .= replace_macros(get_markup_template('webpagelist.tpl'), array( - '$listtitle' => t('Webpages'), - '$baseurl' => $url, - '$create' => t('Create'), - '$edit' => t('Edit'), - '$share' => t('Share'), - '$delete' => t('Delete'), - '$pages' => $pages, - '$channel' => $which, - '$editor' => $editor, - '$view' => t('View'), - '$preview' => t('Preview'), - '$actions_txt' => t('Actions'), + '$listtitle' => t('Webpages'), + '$baseurl' => $url, + '$create' => t('Create'), + '$edit' => t('Edit'), + '$share' => t('Share'), + '$delete' => t('Delete'), + '$pages' => $pages, + '$channel' => $which, + '$editor' => $editor, + '$view' => t('View'), + '$preview' => t('Preview'), + '$actions_txt' => t('Actions'), '$pagelink_txt' => t('Page Link'), - '$title_txt' => t('Page Title'), - '$created_txt' => t('Created'), - '$edited_txt' => t('Edited') + '$title_txt' => t('Page Title'), + '$created_txt' => t('Created'), + '$edited_txt' => t('Edited') )); - + return $o; } - + function post() { - $action = $_REQUEST['action']; - if ($action) { + $action = $_REQUEST['action']; + if( $action ){ switch ($action) { - case 'scan': - + case 'scan': + // the state of this variable tracks whether website files have been scanned (null, true, false) - $cloud = null; - + $cloud = null; + // Website files are to be imported from an uploaded zip file - if (($_FILES) && array_key_exists('zip_file', $_FILES) && isset($_POST['w_upload'])) { + if(($_FILES) && array_key_exists('zip_file',$_FILES) && isset($_POST['w_upload'])) { $source = $_FILES["zip_file"]["tmp_name"]; $type = $_FILES["zip_file"]["type"]; $okay = false; @@ -274,8 +281,8 @@ class Webpages extends \Zotlabs\Web\Controller { break; } } - if (!$okay) { - notice(t('Invalid file type.') . EOL); + if(!$okay) { + notice( t('Invalid file type.') . EOL); return; } $zip = new \ZipArchive(); @@ -284,35 +291,36 @@ class Webpages extends \Zotlabs\Web\Controller { $website = dirname($source) . '/' . $tmp_folder_name; $zip->extractTo($website); // change this to the correct site path $zip->close(); - @unlink($source); // delete the compressed file now that the content has been extracted + @unlink($source); // delete the compressed file now that the content has been extracted $cloud = false; } else { - notice(t('Error opening zip file') . EOL); + notice( t('Error opening zip file') . EOL); return null; - } - } + } + } // Website files are to be imported from the channel cloud files - if (($_POST) && array_key_exists('path', $_POST) && isset($_POST['cloudsubmit'])) { + if (($_POST) && array_key_exists('path',$_POST) && isset($_POST['cloudsubmit'])) { $channel = \App::get_channel(); $dirpath = get_dirpath_by_cloudpath($channel, $_POST['path']); - if (!$dirpath) { - notice(t('Invalid folder path.') . EOL); + if(!$dirpath) { + notice( t('Invalid folder path.') . EOL); return null; } $cloud = true; - } + } + // If the website files were uploaded or specified in the cloud files, then $cloud // should be either true or false if ($cloud !== null) { require_once('include/import.php'); $elements = []; - if ($cloud) { - $path = $_POST['path']; + if($cloud) { + $path = $_POST['path']; } else { - $path = $website; + $path = $website; } $elements['pages'] = scan_webpage_elements($path, 'page', $cloud); $elements['layouts'] = scan_webpage_elements($path, 'layout', $cloud); @@ -320,367 +328,380 @@ class Webpages extends \Zotlabs\Web\Controller { $_SESSION['blocks'] = $elements['blocks']; $_SESSION['layouts'] = $elements['layouts']; $_SESSION['pages'] = $elements['pages']; - if (!(empty($elements['pages']) && empty($elements['blocks']) && empty($elements['layouts']))) { + if(!(empty($elements['pages']) && empty($elements['blocks']) && empty($elements['layouts']))) { //info( t('Webpages elements detected.') . EOL); $_SESSION['action'] = 'import'; } else { - notice(t('No webpage elements detected.') . EOL); + notice( t('No webpage elements detected.') . EOL); $_SESSION['action'] = null; } + } - + // If the website elements were imported from a zip file, delete the temporary decompressed files if ($cloud === false && $website && $elements) { $_SESSION['tempimportpath'] = $website; //rrmdir($website); // Delete the temporary decompressed files } - + break; - + case 'importselected': - require_once('include/import.php'); - $channel = \App::get_channel(); - - // Import layout first so that pages that reference new layouts will find - // the mid of layout items in the database - // Obtain the user-selected layouts to import and import them - $checkedlayouts = $_POST['layout']; - $layouts = []; - if (!empty($checkedlayouts)) { - foreach ($checkedlayouts as $name) { - foreach ($_SESSION['layouts'] as &$layout) { - if ($layout['name'] === $name) { - $layout['import'] = 1; - $layoutstoimport[] = $layout; + require_once('include/import.php'); + $channel = \App::get_channel(); + + // Import layout first so that pages that reference new layouts will find + // the mid of layout items in the database + + // Obtain the user-selected layouts to import and import them + $checkedlayouts = $_POST['layout']; + $layouts = []; + if (!empty($checkedlayouts)) { + foreach ($checkedlayouts as $name) { + foreach ($_SESSION['layouts'] as &$layout) { + if ($layout['name'] === $name) { + $layout['import'] = 1; + $layoutstoimport[] = $layout; + } + } + } + foreach ($layoutstoimport as $elementtoimport) { + $layouts[] = import_webpage_element($elementtoimport, $channel, 'layout'); } - } - } - foreach ($layoutstoimport as $elementtoimport) { - $layouts[] = import_webpage_element($elementtoimport, $channel, 'layout'); - } - } - $_SESSION['import_layouts'] = $layouts; - - // Obtain the user-selected blocks to import and import them - $checkedblocks = $_POST['block']; - $blocks = []; - if (!empty($checkedblocks)) { - foreach ($checkedblocks as $name) { - foreach ($_SESSION['blocks'] as &$block) { - if ($block['name'] === $name) { - $block['import'] = 1; - $blockstoimport[] = $block; + } + $_SESSION['import_layouts'] = $layouts; + + // Obtain the user-selected blocks to import and import them + $checkedblocks = $_POST['block']; + $blocks = []; + if (!empty($checkedblocks)) { + foreach ($checkedblocks as $name) { + foreach ($_SESSION['blocks'] as &$block) { + if ($block['name'] === $name) { + $block['import'] = 1; + $blockstoimport[] = $block; + } + } + } + foreach ($blockstoimport as $elementtoimport) { + $blocks[] = import_webpage_element($elementtoimport, $channel, 'block'); } - } - } - foreach ($blockstoimport as $elementtoimport) { - $blocks[] = import_webpage_element($elementtoimport, $channel, 'block'); - } - } - $_SESSION['import_blocks'] = $blocks; - - // Obtain the user-selected pages to import and import them - $checkedpages = $_POST['page']; - $pages = []; - if (!empty($checkedpages)) { - foreach ($checkedpages as $pagelink) { - foreach ($_SESSION['pages'] as &$page) { - if ($page['pagelink'] === $pagelink) { - $page['import'] = 1; - $pagestoimport[] = $page; + } + $_SESSION['import_blocks'] = $blocks; + + // Obtain the user-selected pages to import and import them + $checkedpages = $_POST['page']; + $pages = []; + if (!empty($checkedpages)) { + foreach ($checkedpages as $pagelink) { + foreach ($_SESSION['pages'] as &$page) { + if ($page['pagelink'] === $pagelink) { + $page['import'] = 1; + $pagestoimport[] = $page; + } + } + } + foreach ($pagestoimport as $elementtoimport) { + $pages[] = import_webpage_element($elementtoimport, $channel, 'page'); } - } + } + $_SESSION['import_pages'] = $pages; + if(!(empty($_SESSION['import_pages']) && empty($_SESSION['import_blocks']) && empty($_SESSION['import_layouts']))) { + info( t('Import complete.') . EOL); } - foreach ($pagestoimport as $elementtoimport) { - $pages[] = import_webpage_element($elementtoimport, $channel, 'page'); + if(isset($_SESSION['tempimportpath'])) { + rrmdir($_SESSION['tempimportpath']); // Delete the temporary decompressed files + unset($_SESSION['tempimportpath']); } - } - $_SESSION['import_pages'] = $pages; - if (!(empty($_SESSION['import_pages']) && empty($_SESSION['import_blocks']) && empty($_SESSION['import_layouts']))) { - info(t('Import complete.') . EOL); - } - if (isset($_SESSION['tempimportpath'])) { - rrmdir($_SESSION['tempimportpath']); // Delete the temporary decompressed files - unset($_SESSION['tempimportpath']); - } - break; - + break; + case 'exportzipfile': - - if (isset($_POST['w_download'])) { - $_SESSION['action'] = 'export_select_list'; - $_SESSION['export'] = 'zipfile'; - if (isset($_POST['zipfilename']) && $_POST['zipfilename'] !== '') { - $filename = filter_var($_POST['zipfilename'], FILTER_SANITIZE_ENCODED); - } else { - $filename = 'website.zip'; + + if(isset($_POST['w_download'])) { + $_SESSION['action'] = 'export_select_list'; + $_SESSION['export'] = 'zipfile'; + if(isset($_POST['zipfilename']) && $_POST['zipfilename'] !== '') { + $filename = filter_var($_POST['zipfilename'], FILTER_SANITIZE_ENCODED); + } else { + $filename = 'website.zip'; + } + $_SESSION['zipfilename'] = $filename; + } - $_SESSION['zipfilename'] = $filename; - } - - break; - + + break; + case 'exportcloud': - if (isset($_POST['exportcloudpath']) && $_POST['exportcloudpath'] !== '') { - $_SESSION['action'] = 'export_select_list'; - $_SESSION['export'] = 'cloud'; - $_SESSION['exportcloudpath'] = filter_var($_POST['exportcloudpath'], FILTER_SANITIZE_ENCODED); - } - - break; - + if(isset($_POST['exportcloudpath']) && $_POST['exportcloudpath'] !== '') { + $_SESSION['action'] = 'export_select_list'; + $_SESSION['export'] = 'cloud'; + $_SESSION['exportcloudpath'] = filter_var($_POST['exportcloudpath'], FILTER_SANITIZE_ENCODED); + } + + break; + case 'cloud': case 'zipfile': - - $channel = \App::get_channel(); - - $tmp_folder_name = random_string(10); - $zip_folder_name = random_string(10); - $zip_filename = $_SESSION['zipfilename']; - $tmp_folderpath = '/tmp/' . $tmp_folder_name; - $zip_folderpath = '/tmp/' . $zip_folder_name; - if (!mkdir($zip_folderpath, 0770, false)) { - logger('Error creating zip file export folder: ' . $zip_folderpath, LOGGER_NORMAL); - json_return_and_die(array('message' => 'Error creating zip file export folder')); - } - $zip_filepath = '/tmp/' . $zip_folder_name . '/' . $zip_filename; - - $checkedblocks = $_POST['block']; - $blocks = []; - if (!empty($checkedblocks)) { - foreach ($checkedblocks as $mid) { - $b = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig - left join item on item.id = iconfig.iid - where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'BUILDBLOCK' order by iconfig.v asc limit 1", dbesc($mid), intval($channel['channel_id']) - ); - if ($b) { - $b = $b[0]; - $blockinfo = array( - 'body' => $b['body'], - 'mimetype' => $b['mimetype'], - 'title' => $b['title'], - 'name' => $b['v'], - 'json' => array( - 'title' => $b['title'], - 'name' => $b['v'], - 'mimetype' => $b['mimetype'], - ) - ); - switch ($blockinfo['mimetype']) { - case 'text/html': - $block_ext = 'html'; - break; - case 'text/bbcode': - $block_ext = 'bbcode'; - break; - case 'text/markdown': - $block_ext = 'md'; - break; - case 'application/x-pdl': - $block_ext = 'pdl'; - break; - case 'application/x-php': - $block_ext = 'php'; - break; - default: - $block_ext = 'bbcode'; - break; - } - $block_filename = $blockinfo['name'] . '.' . $block_ext; - $tmp_blockfolder = $tmp_folderpath . '/blocks/' . $blockinfo['name']; - $block_filepath = $tmp_blockfolder . '/' . $block_filename; - $blockinfo['json']['contentfile'] = $block_filename; - $block_jsonpath = $tmp_blockfolder . '/block.json'; - if (!is_dir($tmp_blockfolder) && !mkdir($tmp_blockfolder, 0770, true)) { - logger('Error creating temp export folder: ' . $tmp_blockfolder, LOGGER_NORMAL); - json_return_and_die(array('message' => 'Error creating temp export folder')); - } - file_put_contents($block_filepath, $blockinfo['body']); - file_put_contents($block_jsonpath, json_encode($blockinfo['json'], JSON_UNESCAPED_SLASHES)); - } + + $channel = \App::get_channel(); + + $tmp_folder_name = random_string(10); + $zip_folder_name = random_string(10); + $zip_filename = $_SESSION['zipfilename']; + $tmp_folderpath = '/tmp/' . $tmp_folder_name; + $zip_folderpath = '/tmp/' . $zip_folder_name; + if (!mkdir($zip_folderpath, 0770, false)) { + logger('Error creating zip file export folder: ' . $zip_folderpath, LOGGER_NORMAL); + json_return_and_die(array('message' => 'Error creating zip file export folder')); } - } - - $checkedlayouts = $_POST['layout']; - $layouts = []; - if (!empty($checkedlayouts)) { - foreach ($checkedlayouts as $mid) { - $l = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig + $zip_filepath = '/tmp/' . $zip_folder_name . '/' . $zip_filename; + + $checkedblocks = $_POST['block']; + $blocks = []; + if (!empty($checkedblocks)) { + foreach ($checkedblocks as $mid) { + $b = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig left join item on item.id = iconfig.iid - where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'PDL' order by iconfig.v asc limit 1", dbesc($mid), intval($channel['channel_id']) - ); - if ($l) { - $l = $l[0]; - $layoutinfo = array( - 'body' => $l['body'], - 'mimetype' => $l['mimetype'], - 'description' => $l['title'], - 'name' => $l['v'], - 'json' => array( - 'description' => $l['title'], - 'name' => $l['v'], - 'mimetype' => $l['mimetype'], - ) - ); - switch ($layoutinfo['mimetype']) { - case 'text/bbcode': - default: - $layout_ext = 'bbcode'; - break; - } - $layout_filename = $layoutinfo['name'] . '.' . $layout_ext; - $tmp_layoutfolder = $tmp_folderpath . '/layouts/' . $layoutinfo['name']; - $layout_filepath = $tmp_layoutfolder . '/' . $layout_filename; - $layoutinfo['json']['contentfile'] = $layout_filename; - $layout_jsonpath = $tmp_layoutfolder . '/layout.json'; - if (!is_dir($tmp_layoutfolder) && !mkdir($tmp_layoutfolder, 0770, true)) { - logger('Error creating temp export folder: ' . $tmp_layoutfolder, LOGGER_NORMAL); - json_return_and_die(array('message' => 'Error creating temp export folder')); + where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'BUILDBLOCK' order by iconfig.v asc limit 1", + dbesc($mid), + intval($channel['channel_id']) + ); + if($b) { + $b = $b[0]; + $blockinfo = array( + 'body' => $b['body'], + 'mimetype' => $b['mimetype'], + 'title' => $b['title'], + 'name' => $b['v'], + 'json' => array( + 'title' => $b['title'], + 'name' => $b['v'], + 'mimetype' => $b['mimetype'], + ) + ); + switch ($blockinfo['mimetype']) { + case 'text/html': + $block_ext = 'html'; + break; + case 'text/bbcode': + $block_ext = 'bbcode'; + break; + case 'text/markdown': + $block_ext = 'md'; + break; + case 'application/x-pdl': + $block_ext = 'pdl'; + break; + case 'application/x-php': + $block_ext = 'php'; + break; + default: + $block_ext = 'bbcode'; + break; + } + $block_filename = $blockinfo['name'] . '.' . $block_ext; + $tmp_blockfolder = $tmp_folderpath . '/blocks/' . $blockinfo['name']; + $block_filepath = $tmp_blockfolder . '/' . $block_filename; + $blockinfo['json']['contentfile'] = $block_filename; + $block_jsonpath = $tmp_blockfolder . '/block.json'; + if (!is_dir($tmp_blockfolder) && !mkdir($tmp_blockfolder, 0770, true)) { + logger('Error creating temp export folder: ' . $tmp_blockfolder, LOGGER_NORMAL); + json_return_and_die(array('message' => 'Error creating temp export folder')); + } + file_put_contents($block_filepath, $blockinfo['body']); + file_put_contents($block_jsonpath, json_encode($blockinfo['json'], JSON_UNESCAPED_SLASHES)); + } } - file_put_contents($layout_filepath, $layoutinfo['body']); - file_put_contents($layout_jsonpath, json_encode($layoutinfo['json'], JSON_UNESCAPED_SLASHES)); - } } - } - - $checkedpages = $_POST['page']; - $pages = []; - if (!empty($checkedpages)) { - foreach ($checkedpages as $mid) { - - $p = q("select * from iconfig left join item on iconfig.iid = item.id - where item.uid = %d and item.mid = '%s' and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item_type = %d", intval($channel['channel_id']), dbesc($mid), intval(ITEM_TYPE_WEBPAGE) - ); - - if ($p) { - foreach ($p as $pp) { - // Get the associated layout - $layoutinfo = array(); - if ($pp['layout_mid']) { + + $checkedlayouts = $_POST['layout']; + $layouts = []; + if (!empty($checkedlayouts)) { + foreach ($checkedlayouts as $mid) { $l = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig - left join item on item.id = iconfig.iid - where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'PDL' order by iconfig.v asc limit 1", dbesc($pp['layout_mid']), intval($channel['channel_id']) + left join item on item.id = iconfig.iid + where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'PDL' order by iconfig.v asc limit 1", + dbesc($mid), + intval($channel['channel_id']) ); - if ($l) { - $l = $l[0]; - $layoutinfo = array( - 'body' => $l['body'], - 'mimetype' => $l['mimetype'], - 'description' => $l['title'], - 'name' => $l['v'], - 'json' => array( - 'description' => $l['title'], - 'name' => $l['v'], - ) - ); - switch ($layoutinfo['mimetype']) { - case 'text/bbcode': - default: - $layout_ext = 'bbcode'; - break; - } - $layout_filename = $layoutinfo['name'] . '.' . $layout_ext; - $tmp_layoutfolder = $tmp_folderpath . '/layouts/' . $layoutinfo['name']; - $layout_filepath = $tmp_layoutfolder . '/' . $layout_filename; - $layoutinfo['json']['contentfile'] = $layout_filename; - $layout_jsonpath = $tmp_layoutfolder . '/layout.json'; - if (!is_dir($tmp_layoutfolder) && !mkdir($tmp_layoutfolder, 0770, true)) { - logger('Error creating temp export folder: ' . $tmp_layoutfolder, LOGGER_NORMAL); - json_return_and_die(array('message' => 'Error creating temp export folder')); - } - file_put_contents($layout_filepath, $layoutinfo['body']); - file_put_contents($layout_jsonpath, json_encode($layoutinfo['json'], JSON_UNESCAPED_SLASHES)); + if($l) { + $l = $l[0]; + $layoutinfo = array( + 'body' => $l['body'], + 'mimetype' => $l['mimetype'], + 'description' => $l['title'], + 'name' => $l['v'], + 'json' => array( + 'description' => $l['title'], + 'name' => $l['v'], + 'mimetype' => $l['mimetype'], + ) + ); + switch ($layoutinfo['mimetype']) { + case 'text/bbcode': + default: + $layout_ext = 'bbcode'; + break; + } + $layout_filename = $layoutinfo['name'] . '.' . $layout_ext; + $tmp_layoutfolder = $tmp_folderpath . '/layouts/' . $layoutinfo['name']; + $layout_filepath = $tmp_layoutfolder . '/' . $layout_filename; + $layoutinfo['json']['contentfile'] = $layout_filename; + $layout_jsonpath = $tmp_layoutfolder . '/layout.json'; + if (!is_dir($tmp_layoutfolder) && !mkdir($tmp_layoutfolder, 0770, true)) { + logger('Error creating temp export folder: ' . $tmp_layoutfolder, LOGGER_NORMAL); + json_return_and_die(array('message' => 'Error creating temp export folder')); + } + file_put_contents($layout_filepath, $layoutinfo['body']); + file_put_contents($layout_jsonpath, json_encode($layoutinfo['json'], JSON_UNESCAPED_SLASHES)); } - } - switch ($pp['mimetype']) { - case 'text/html': - $page_ext = 'html'; - break; - case 'text/bbcode': - $page_ext = 'bbcode'; - break; - case 'text/markdown': - $page_ext = 'md'; - break; - case 'application/x-pdl': - $page_ext = 'pdl'; - break; - case 'application/x-php': - $page_ext = 'php'; - break; - default: - break; - } - $pageinfo = array( - 'title' => $pp['title'], - 'body' => $pp['body'], - 'pagelink' => $pp['v'], - 'mimetype' => $pp['mimetype'], - 'contentfile' => $pp['v'] . '.' . $page_ext, - 'layout' => ((x($layoutinfo, 'name')) ? $layoutinfo['name'] : ''), - 'json' => array( - 'title' => $pp['title'], - 'pagelink' => $pp['v'], - 'mimetype' => $pp['mimetype'], - 'layout' => ((x($layoutinfo, 'name')) ? $layoutinfo['name'] : ''), - ) - ); - $page_filename = $pageinfo['pagelink'] . '.' . $page_ext; - $tmp_pagefolder = $tmp_folderpath . '/pages/' . $pageinfo['pagelink']; - $page_filepath = $tmp_pagefolder . '/' . $page_filename; - $page_jsonpath = $tmp_pagefolder . '/page.json'; - $pageinfo['json']['contentfile'] = $page_filename; - if (!is_dir($tmp_pagefolder) && !mkdir($tmp_pagefolder, 0770, true)) { - logger('Error creating temp export folder: ' . $tmp_pagefolder, LOGGER_NORMAL); - json_return_and_die(array('message' => 'Error creating temp export folder')); - } - file_put_contents($page_filepath, $pageinfo['body']); - file_put_contents($page_jsonpath, json_encode($pageinfo['json'], JSON_UNESCAPED_SLASHES)); } - } } - } - if ($action === 'zipfile') { - // Generate the zip file - \Zotlabs\Lib\ExtendedZip::zipTree($tmp_folderpath, $zip_filepath, \ZipArchive::CREATE); - // Output the file for download - header('Content-disposition: attachment; filename="' . $zip_filename . '"'); - header("Content-Type: application/zip"); - $success = readfile($zip_filepath); - } elseif ($action === 'cloud') { // Only zipfile or cloud should be possible values for $action here - if (isset($_SESSION['exportcloudpath'])) { - require_once('include/attach.php'); - $cloudpath = urldecode($_SESSION['exportcloudpath']); - $channel = \App::get_channel(); - $dirpath = get_dirpath_by_cloudpath($channel, $cloudpath); - if (!$dirpath) { - $x = attach_mkdirp($channel, $channel['channel_hash'], array('pathname' => $cloudpath)); - $folder_hash = (($x['success']) ? $x['data']['hash'] : ''); - - if (!$x['success']) { - logger('Failed to create cloud file folder', LOGGER_NORMAL); - } - $dirpath = get_dirpath_by_cloudpath($channel, $cloudpath); - if (!is_dir($dirpath)) { - logger('Failed to create cloud file folder', LOGGER_NORMAL); + + $checkedpages = $_POST['page']; + $pages = []; + if (!empty($checkedpages)) { + foreach ($checkedpages as $mid) { + + $p = q("select * from iconfig left join item on iconfig.iid = item.id + where item.uid = %d and item.mid = '%s' and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item_type = %d", + intval($channel['channel_id']), + dbesc($mid), + intval(ITEM_TYPE_WEBPAGE) + ); + + if($p) { + foreach ($p as $pp) { + // Get the associated layout + $layoutinfo = array(); + if($pp['layout_mid']) { + $l = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig + left join item on item.id = iconfig.iid + where mid = '%s' and item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'PDL' order by iconfig.v asc limit 1", + dbesc($pp['layout_mid']), + intval($channel['channel_id']) + ); + if($l) { + $l = $l[0]; + $layoutinfo = array( + 'body' => $l['body'], + 'mimetype' => $l['mimetype'], + 'description' => $l['title'], + 'name' => $l['v'], + 'json' => array( + 'description' => $l['title'], + 'name' => $l['v'], + ) + ); + switch ($layoutinfo['mimetype']) { + case 'text/bbcode': + default: + $layout_ext = 'bbcode'; + break; + } + $layout_filename = $layoutinfo['name'] . '.' . $layout_ext; + $tmp_layoutfolder = $tmp_folderpath . '/layouts/' . $layoutinfo['name']; + $layout_filepath = $tmp_layoutfolder . '/' . $layout_filename; + $layoutinfo['json']['contentfile'] = $layout_filename; + $layout_jsonpath = $tmp_layoutfolder . '/layout.json'; + if (!is_dir($tmp_layoutfolder) && !mkdir($tmp_layoutfolder, 0770, true)) { + logger('Error creating temp export folder: ' . $tmp_layoutfolder, LOGGER_NORMAL); + json_return_and_die(array('message' => 'Error creating temp export folder')); + } + file_put_contents($layout_filepath, $layoutinfo['body']); + file_put_contents($layout_jsonpath, json_encode($layoutinfo['json'], JSON_UNESCAPED_SLASHES)); + } + } + switch ($pp['mimetype']) { + case 'text/html': + $page_ext = 'html'; + break; + case 'text/bbcode': + $page_ext = 'bbcode'; + break; + case 'text/markdown': + $page_ext = 'md'; + break; + case 'application/x-pdl': + $page_ext = 'pdl'; + break; + case 'application/x-php': + $page_ext = 'php'; + break; + default: + break; + } + $pageinfo = array( + 'title' => $pp['title'], + 'body' => $pp['body'], + 'pagelink' => $pp['v'], + 'mimetype' => $pp['mimetype'], + 'contentfile' => $pp['v'] . '.' . $page_ext, + 'layout' => ((x($layoutinfo,'name')) ? $layoutinfo['name'] : ''), + 'json' => array( + 'title' => $pp['title'], + 'pagelink' => $pp['v'], + 'mimetype' => $pp['mimetype'], + 'layout' => ((x($layoutinfo,'name')) ? $layoutinfo['name'] : ''), + ) + ); + $page_filename = $pageinfo['pagelink'] . '.' . $page_ext; + $tmp_pagefolder = $tmp_folderpath . '/pages/' . $pageinfo['pagelink']; + $page_filepath = $tmp_pagefolder . '/' . $page_filename; + $page_jsonpath = $tmp_pagefolder . '/page.json'; + $pageinfo['json']['contentfile'] = $page_filename; + if (!is_dir($tmp_pagefolder) && !mkdir($tmp_pagefolder, 0770, true)) { + logger('Error creating temp export folder: ' . $tmp_pagefolder, LOGGER_NORMAL); + json_return_and_die(array('message' => 'Error creating temp export folder')); + } + file_put_contents($page_filepath, $pageinfo['body']); + file_put_contents($page_jsonpath, json_encode($pageinfo['json'], JSON_UNESCAPED_SLASHES)); + } + } + } + } + if($action === 'zipfile') { + // Generate the zip file + \Zotlabs\Lib\ExtendedZip::zipTree($tmp_folderpath, $zip_filepath, \ZipArchive::CREATE); + // Output the file for download + header('Content-disposition: attachment; filename="' . $zip_filename . '"'); + header("Content-Type: application/zip"); + $success = readfile($zip_filepath); + } elseif ($action === 'cloud') { // Only zipfile or cloud should be possible values for $action here + if(isset($_SESSION['exportcloudpath'])) { + require_once('include/attach.php'); + $cloudpath = urldecode($_SESSION['exportcloudpath']); + $channel = \App::get_channel(); + $dirpath = get_dirpath_by_cloudpath($channel, $cloudpath); + if(!$dirpath) { + $x = attach_mkdirp($channel, $channel['channel_hash'], array('pathname' => $cloudpath)); + $folder_hash = (($x['success']) ? $x['data']['hash'] : ''); + + if (!$x['success']) { + logger('Failed to create cloud file folder', LOGGER_NORMAL); + } + $dirpath = get_dirpath_by_cloudpath($channel, $cloudpath); + if (!is_dir($dirpath)) { + logger('Failed to create cloud file folder', LOGGER_NORMAL); + } + } + + $success = copy_folder_to_cloudfiles($channel, $channel['channel_hash'], $tmp_folderpath, $cloudpath); } - } - - $success = copy_folder_to_cloudfiles($channel, $channel['channel_hash'], $tmp_folderpath, $cloudpath); } - } - if (!$success) { - logger('Error exporting webpage elements', LOGGER_NORMAL); - } - - rrmdir($zip_folderpath); - rrmdir($tmp_folderpath); // delete temporary files - - break; + if(!$success) { + logger('Error exporting webpage elements', LOGGER_NORMAL); + } + + rrmdir($zip_folderpath); rrmdir($tmp_folderpath); // delete temporary files + + break; default : break; } + } + } - + } diff --git a/view/de/hmessages.po b/view/de/hmessages.po index 62f7fe602..e8c16faaa 100644 --- a/view/de/hmessages.po +++ b/view/de/hmessages.po @@ -13751,3 +13751,19 @@ msgstr "Cron-Aufgaben laufen nicht." #, php-format msgid "[hubzilla] Cron tasks not running on %s" msgstr "[hubzilla] Cron-Aufgaben für %s laufen nicht" + +#: ../../addon/demohub/demohub.php:41 +msgid "Welcome to the Hubzilla demo hub!" +msgstr "Willkommen auf dem Hubzilla demo Hub!" + +#: ../../addon/demohub/demohub.php:42 +msgid "This demo hub is designed to give you a chance to explore some of the features offered by the Hubzilla platform. The activities of the fictional characters illustrate only a few of the ways communities can use Hubzilla to collaborate and connect." +msgstr "Dieser demo Hub (Hubzilla-Knoten) ist konzipiert, um Ihnen eine Chance zu geben, einige Features der Hubzilla-Platform kennenzulernen. Die fiktive Aktivitäten illustrieren nur einige von vielen Möglichkeiten, die den Communities für die Kommunikation und Zusammenarbeit im Hubzilla-Netzwerk zur Verfügung stehen." + +#: ../../addon/demohub/demohub.php:45 +msgid "To really grasp what Hubzilla is offering in terms of nomadic identity and decentralized access control, you have to try it for yourself. Run your own hub or register on an open hub. You can always clone your channels and migrate to another hub later. With Hubzilla, <i>you</i> not only own your <b>data</b>, but your <b>identity</b> as well!</p><p>The demo resets every ten minutes, which may interrupt your session. Simply reload the page as necessary. You can return to this dialog using the blue info button in the navbar." +msgstr "Sie können selbst in der Praxis testen, welche Möglichkeiten Ihnen im Hubzilla-Netzwerk mit Nomadic Identity und mit dem dezentralen Zugang. Richten Sie einen eigenen Hubzilla-Knoten ein oder registrieren Sie sich auf einem offenen Hub. Sie können dann Ihren Kanal klonen oder mit diesem Kanal auf einen anderen Hub umziehen. Mit Hubzilla kontrollieren Sie Ihre Daten, aber auch Ihre Identität!</p><p>Die Demoinstanz wird im 10-Minuten-Takt zurückgesetzt, wobei Ihre Hubzilla-Sitzung evtl. unterbrochen wird. Laden Sie die Website #^https://demo.hubzilla.org/ einfach neu, um fortzufahren. Sie können dieses Dialog-Fenster mit einem Klick auf das blaue [i]-Symbol rechts oben in der Navigationsleiste." + +#: ../../addon/demohub/demohub.php:52 +msgid "Explore" +msgstr "Erforschen"
\ No newline at end of file |