function blocks_form($item) { global $user; global $DB; global $website; global $layout; global $events; global $theme; $current_version = $_SESSION['current_version']; $navibars = new navibars(); $naviforms = new naviforms(); $layout->navigate_media_browser(); // we can use media browser in this function if (empty($item->id)) { $navibars->title(t(23, 'Blocks') . ' / ' . t(38, 'Create')); } else { $navibars->title(t(23, 'Blocks') . ' / ' . t(170, 'Edit') . ' [' . $item->id . ']'); } $navibars->add_actions(array('<a href="#" onclick="javascript: navigate_media_browser();" title="Ctrl+M"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/images.png"> ' . t(36, 'Media') . ' </a>')); $layout->add_script("\r\n \$(document).on('keydown.ctrl_s', function (evt) { navigate_tabform_submit(1); return false; } );\r\n \$(document).on('keydown.ctrl_m', function (evt) { navigate_media_browser(); return false; } );\r\n "); if (!empty($item->id)) { $notes = grid_notes::comments('block', $item->id); $navibars->add_actions(array('<a href="#" onclick="javascript: navigate_display_notes_dialog();"><span class="navigate_grid_notes_span" style=" width: 20px; line-height: 16px; ">' . count($notes) . '</span><img src="img/skins/badge.png" width="20px" height="18px" style="margin-top: -2px;" class="grid_note_edit" align="absmiddle" /> ' . t(168, 'Notes') . '</a>')); } if (empty($item->id)) { $navibars->add_actions(array($user->permission('blocks.create') == 'true' ? '<a href="#" onclick="navigate_tabform_submit(1);" title="Ctrl+S"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . ' </a>' : "")); } else { $navibars->add_actions(array($user->permission('blocks.edit') == 'true' ? '<a href="#" onclick="navigate_tabform_submit(1);" title="Ctrl+S"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . ' </a>' : "", $user->permission("blocks.delete") == 'true' ? '<a href="#" onclick="navigate_delete_dialog();"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/cancel.png"> ' . t(35, 'Delete') . ' </a>' : "")); $layout->add_script(' function navigate_delete_dialog() { navigate_confirmation_dialog( function() { window.location.href = "?fid=blocks&act=delete&id=' . $item->id . '"; }, null, null, "' . t(35, 'Delete') . '" ); } '); } $group_blocks_links = array(); list($bg_rs, $bg_total) = block_group::paginated_list(0, 10, 'title', 'desc'); if ($bg_total > 0 && $bg_total <= 10) { foreach ($bg_rs as $bg) { $group_blocks_links[] = '<a href="?fid=' . $_REQUEST['fid'] . '&act=block_group_edit&id=' . $bg['id'] . '"><i class="fa fa-fw fa-caret-right"></i> ' . $bg['title'] . '</a>'; } $events->add_actions('blocks', array('item' => null, 'navibars' => &$navibars), $group_blocks_links, '<a class="content-actions-submenu-trigger" href="?fid=' . $_REQUEST['fid'] . '&act=block_groups_list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/bricks.png"> ' . t(506, 'Groups') . ' ▾</a>'); } $navibars->add_actions(array(!empty($group_blocks_links) ? '' : '<a href="?fid=' . $_REQUEST['fid'] . '&act=block_groups_list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/bricks.png"> ' . t(506, 'Groups') . '</a>', '<a href="?fid=' . $_REQUEST['fid'] . '&act=block_types_list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/brick_edit.png"> ' . t(167, 'Types') . '</a>')); $navibars->add_actions(array(!empty($item->id) ? '<a href="?fid=' . $_REQUEST['fid'] . '&act=2"><img height="16" align="absmiddle" width="16" src="img/icons/silk/add.png"> ' . t(38, 'Create') . '</a>' : '', '<a href="?fid=' . $_REQUEST['fid'] . '&act=0"><img height="16" align="absmiddle" width="16" src="img/icons/silk/application_view_list.png"> ' . t(39, 'List') . '</a>', 'search_form')); if (!empty($item->id)) { $layout->navigate_notes_dialog('block', $item->id); } $navibars->form(); $navibars->add_content(' <script type="text/javascript" src="lib/packages/blocks/blocks.js?r=' . $current_version->revision . '"></script> '); $navibars->add_tab(t(43, "Main")); $navibars->add_tab_content($naviforms->hidden('form-sent', 'true')); $navibars->add_tab_content($naviforms->hidden('id', $item->id)); $navibars->add_tab_content_row(array('<label>ID</label>', '<span>' . (!empty($item->id) ? $item->id : t(52, '(new)')) . '</span>')); $block_types = block::types(); $block_types_keys = array(); $block_types_info = array(); for ($i = 0; $i < count($block_types); $i++) { if ($item->type == $block_types[$i]['code']) { $block_type_width = $block_types[$i]['width']; } $block_size_helper = ''; if (!empty($block_types[$i]['width']) || !empty($block_types[$i]['height'])) { if (empty($block_types[$i]['width'])) { $block_types[$i]['width'] = '***'; } if (empty($block_types[$i]['height'])) { $block_types[$i]['height'] = '***'; } $block_size_helper = ' (' . $block_types[$i]['width'] . ' x ' . $block_types[$i]['height'] . ' px)'; } if (is_numeric($block_types[$i]['id'])) { $block_types_keys[] = $block_types[$i]['code']; } else { $block_types_keys[] = $block_types[$i]['id']; } // block described in theme definition $block_types_info[] = $block_types[$i]['title'] . $block_size_helper; } $navibars->add_tab_content_row(array('<label>' . t(160, 'Type') . '</label>', $naviforms->selectfield('type', $block_types_keys, $block_types_info, $item->type))); $navibars->add_tab_content_row(array('<label>' . t(85, 'Date published') . '</label>', $naviforms->datefield('date_published', $item->date_published, true))); $navibars->add_tab_content_row(array('<label>' . t(90, 'Date unpublished') . '</label>', $naviforms->datefield('date_unpublish', $item->date_unpublish, true))); // Notes field is deprecated, but we keep on showing the existing Notes if (!empty($item->notes)) { $navibars->add_tab_content_row(array('<label>' . t(168, 'Notes') . '</label>', $naviforms->textarea('notes', $item->notes))); } $navibars->add_tab_content_row(array('<label>' . t(364, 'Access') . '</label>', $naviforms->selectfield('access', array(0 => 0, 1 => 2, 2 => 1, 3 => 3), array(0 => t(254, 'Everybody'), 1 => t(362, 'Not signed in'), 2 => t(361, 'Web users only'), 3 => t(512, 'Selected web user groups')), $item->access, 'navigate_webuser_groups_visibility($(this).val());', false, array(1 => t(363, 'Users who have not yet signed in'))))); $webuser_groups = webuser_group::all_in_array(); $navibars->add_tab_content_row(array('<label>' . t(506, "Groups") . '</label>', $naviforms->multiselect('groups', array_keys($webuser_groups), array_values($webuser_groups), $item->groups)), 'webuser-groups-field'); $layout->add_script(' function navigate_webuser_groups_visibility(access_value) { if(access_value==3) $("#webuser-groups-field").show(); else $("#webuser-groups-field").hide(); } navigate_webuser_groups_visibility(' . $item->access . '); '); if (empty($item->id)) { $item->enabled = true; } $navibars->add_tab_content_row(array('<label>' . t(65, 'Enabled') . '</label>', $naviforms->checkbox('enabled', $item->enabled))); if ($item->date_modified > 0) { $navibars->add_tab_content_row(array('<label>' . t(227, 'Date modified') . '</label>', core_ts2date($item->date_modified, true))); } $navibars->add_tab(t(9, "Content")); switch ($item->class) { case 'poll': $options = array(); foreach ($website->languages_list as $lang) { $options[$lang] = language::name_by_code($lang); } $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('language_selector', $options, $website->languages_list[0], "navigate_items_select_language(this);"))); foreach ($website->languages_list as $lang) { $navibars->add_tab_content(' <div class="language_fields" id="language_fields_' . $lang . '" style=" display: none; "> '); $navibars->add_tab_content_row(array('<label>' . t(558, 'Question') . '</label>', $naviforms->textfield('title-' . $lang, @$item->dictionary[$lang]['title']), '')); // Poll options $table = new naviorderedtable("poll_answers_table_" . $lang); $table->setWidth("330px"); $table->setHiddenInput("poll-answers-table-order-" . $lang); $navibars->add_tab_content($naviforms->hidden("poll-answers-table-order-" . $lang, "")); $table->addHeaderColumn(t(67, 'Title'), 200); //$table->addHeaderColumn(t(237, 'Code'), 120); $table->addHeaderColumn(t(352, 'Votes'), 80); $table->addHeaderColumn(t(35, 'Remove'), 50); if (!empty($item->trigger[$lang])) { $poll_answers = $item->trigger[$lang]; foreach ($poll_answers as $pa) { $uid = uniqid(); $table->addRow("poll-answers-table-row-" . $uid, array(array('content' => '<input type="text" name="poll-answers-table-title-' . $lang . '[' . $uid . ']" value="' . $pa['title'] . '" style="width: 200px;" />', 'align' => 'left'), array('content' => '<input type="text" name="poll-answers-table-votes-' . $lang . '[' . $uid . ']" value="' . intval($pa['votes']) . '" style="width: 80px;" />', 'align' => 'left'), array('content' => '<img src="' . NAVIGATE_URL . '/img/icons/silk/cancel.png" style="cursor: pointer;" onclick="navigate_blocks_poll_answers_table_row_remove(this);" />', 'align' => 'center'))); } } $uid = uniqid(); $table->addRow("poll-answers-table-row-model-" . $lang, array(array('content' => '<input type="text" name="poll-answers-table-title-' . $lang . '[' . $uid . ']" value="" style="width: 200px;" />', 'align' => 'left'), array('content' => '<input type="text" name="poll-answers-table-votes-' . $lang . '[' . $uid . ']" value="0" style="width: 80px;" />', 'align' => 'left'), array('content' => '<img src="' . NAVIGATE_URL . '/img/icons/silk/cancel.png" style="cursor: pointer;" onclick="navigate_blocks_poll_answers_table_row_remove(this);" />', 'align' => 'center'))); $navibars->add_tab_content_row(array('<label>' . t(559, "Answers") . '</label>', '<div id="poll-answers-' . $lang . '">' . $table->generate() . '</div>', '<label> </label>', '<button id="poll-answers-table-add-' . $lang . '" data-lang="' . $lang . '"><img src="img/icons/silk/add.png" align="absmiddle" style="cursor:pointer;" /> ' . t(472, 'Add') . '</button>')); $navibars->add_tab_content(' </div> '); } foreach ($website->languages_list as $alang) { $layout->add_script(' $(window).on("load", function() { poll_answers_table_row_models["' . $alang . '"] = $("#poll-answers-table-row-model-' . $alang . '").html(); if($("#poll_answers_table_' . $alang . '").find("tr").not(".nodrag").length > 1) $("#poll-answers-table-row-model-' . $alang . '").hide(); navigate_naviorderedtable_poll_answers_table_' . $alang . '_reorder(); }); '); } $layout->add_script(' var active_languages = ["' . implode('", "', array_keys($options)) . '"]; navigate_items_select_language("' . $website->languages_list[0] . '"); '); break; case 'block': case 'theme': default: $options = array(); foreach ($website->languages_list as $lang) { $options[$lang] = language::name_by_code($lang); } $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('language_selector', $options, $website->languages_list[0], "navigate_items_select_language(this);"))); foreach ($website->languages_list as $lang) { $navibars->add_tab_content('<div class="language_fields" id="language_fields_' . $lang . '" style=" display: none; ">'); $navibars->add_tab_content_row(array('<label>' . t(67, 'Title') . '</label>', $naviforms->textfield('title-' . $lang, @$item->dictionary[$lang]['title']), '')); $block_trigger_types = array('' => t(181, 'Hidden'), 'title' => t(67, 'Title'), 'content' => t(9, 'Content'), 'image' => t(157, 'Image'), 'rollover' => t(182, 'Rollover'), 'video' => t(272, 'Video'), 'html' => 'HTML', 'links' => t(549, 'Links'), 'flash' => 'Flash'); // check block trigger restrictions in theme definition if (is_array($theme->blocks)) { foreach ($theme->blocks as $tb) { if ($tb->code == $item->type && isset($tb->trigger)) { if (!is_array($tb->trigger)) { $tb->trigger = array($tb->trigger); } foreach ($block_trigger_types as $btt_key => $btt_val) { if (empty($btt_key) || in_array($btt_key, $tb->trigger)) { continue; } unset($block_trigger_types[$btt_key]); } $block_trigger_types = array_filter($block_trigger_types); } } } $navibars->add_tab_content_row(array('<label>' . t(160, 'Type') . '</label>', $naviforms->selectfield('trigger-type-' . $lang, array_keys($block_trigger_types), array_values($block_trigger_types), $item->trigger['trigger-type'][$lang], "navigate_blocks_trigger_change('" . $lang . "', this);"))); $navibars->add_tab_content_row(array('<label>' . t(157, 'Image') . '</label>', $naviforms->dropbox('trigger-image-' . $lang, @$item->trigger['trigger-image'][$lang], 'image'))); $navibars->add_tab_content_row(array('<label>' . t(182, 'Rollover') . ' (off / on)</label>', $naviforms->dropbox('trigger-rollover-' . $lang, @$item->trigger['trigger-rollover'][$lang], 'image'), $naviforms->dropbox('trigger-rollover-active-' . $lang, @$item->trigger['trigger-rollover-active'][$lang], 'image'), '')); $navibars->add_tab_content_row(array('<label>' . t(272, 'Video') . '</label>', $naviforms->dropbox('trigger-video-' . $lang, @$item->trigger['trigger-video'][$lang], 'video'))); $navibars->add_tab_content_row(array('<label>Flash (SWF)</label>', $naviforms->dropbox('trigger-flash-' . $lang, @$item->trigger['trigger-flash'][$lang], 'flash'), '')); /* links list */ // check if navigate must show an icon selector $links_icons = ''; if (!empty($theme) && !empty($theme->blocks)) { foreach ($theme->blocks as $tb) { if ($item->type == $tb->id) { $links_icons = @$tb->icons; break; } } } $table = new naviorderedtable("trigger_links_table_" . $lang); $table->setWidth("776px"); $table->setHiddenInput("trigger-links-table-order-" . $lang); $navibars->add_tab_content($naviforms->hidden("trigger-links-table-order-" . $lang, "")); $table->addHeaderColumn(t(242, 'Icon'), 50); $table->addHeaderColumn(t(67, 'Title'), 200); $table->addHeaderColumn(t(197, 'Link'), 390); $table->addHeaderColumn('<i class="fa fa-external-link" title="' . t(324, 'New window') . '"></i>', 16); $table->addHeaderColumn(t(35, 'Remove'), 50); if (empty($item->trigger['trigger-links'][$lang]['link'])) { // create a default entry $item->trigger['trigger-links'][$lang] = array('order' => '', 'icon' => '', 'title' => array('0' => ''), 'link' => array('0' => '')); } if (!empty($item->trigger['trigger-links'][$lang])) { $tlinks = $item->trigger['trigger-links'][$lang]; foreach ($tlinks['link'] as $key => $link) { $uid = uniqid(); $table->addRow(uniqid('trigger-links-table-row-'), array(empty($links_icons) ? array('content' => '-', 'align' => 'center') : array('content' => '<select name="trigger-links-table-icon-' . $lang . '[' . $uid . ']" data-select2-value="' . $tlinks['icon'][$key] . '" data-role="icon" style="width: 190px;"></select>', 'align' => 'left'), array('content' => '<input type="text" name="trigger-links-table-title-' . $lang . '[' . $uid . ']" value="' . $tlinks['title'][$key] . '" data-role="title" style="width: 250px;" />', 'align' => 'left'), array('content' => '<input type="text" name="trigger-links-table-link-' . $lang . '[' . $uid . ']" value="' . $tlinks['link'][$key] . '" data-role="link" style="width: 260px;" />' . '<a class="uibutton nv_block_nv_link_trigger"><i class="fa fa-sitemap"></i></a>', 'align' => 'left', 'style' => 'white-space: nowrap;'), array('content' => '<input type="checkbox" name="trigger-links-table-new_window-' . $lang . '[' . $uid . ']" data-role="target" id="trigger-links-table-new_window-' . $lang . '[' . $uid . ']" value="1" ' . ($tlinks['new_window'][$key] == '1' ? 'checked="checked"' : '') . ' /> <label for="trigger-links-table-new_window-' . $lang . '[' . $uid . ']" />', 'align' => 'left'), array('content' => '<img src="' . NAVIGATE_URL . '/img/icons/silk/cancel.png" style="cursor: pointer;" onclick="navigate_blocks_trigger_links_table_row_remove(this);" />', 'align' => 'center'))); } } $uid = uniqid(); $table->addRow("trigger-links-table-row-model-" . $lang, array(empty($links_icons) ? array('content' => '-', 'align' => 'center') : array('content' => '<select name="trigger-links-table-icon-' . $lang . '[' . $uid . ']" data-select2-value="" data-role="icon" style="width: 190px;"></select>', 'align' => 'left'), array('content' => '<input type="text" name="trigger-links-table-title-' . $lang . '[' . $uid . ']" value="" data-role="title" style="width: 250px;" />', 'align' => 'left'), array('content' => '<input type="text" name="trigger-links-table-link-' . $lang . '[' . $uid . ']" value="" data-role="link" style="width: 260px;" />' . '<a class="uibutton nv_block_nv_link_trigger"><i class="fa fa-sitemap"></i></a>', 'align' => 'left'), array('content' => '<input type="checkbox" name="trigger-links-table-new_window-' . $lang . '[' . $uid . ']" data-role="target" id="trigger-links-table-new_window-' . $lang . '[' . $uid . ']" value="1" /> <label for="trigger-links-table-new_window-' . $lang . '[' . $uid . ']" />', 'align' => 'left'), array('content' => '<img src="' . NAVIGATE_URL . '/img/icons/silk/cancel.png" style="cursor: pointer;" onclick="navigate_blocks_trigger_links_table_row_remove(this);" />', 'align' => 'center'))); $navibars->add_tab_content_row(array('<label>' . t(549, "Links") . '</label>', '<div id="trigger-links-' . $lang . '">' . $table->generate() . '</div>', '<label> </label>', '<button id="trigger-links-table-add-' . $lang . '" data-lang="' . $lang . '"><img src="img/icons/silk/add.png" align="absmiddle" style="cursor:pointer;" /> ' . t(472, 'Add') . '</button>')); $navibars->add_tab_content_row(array('<label>HTML</label>', $naviforms->scriptarea('trigger-html-' . $lang, @$item->trigger['trigger-html'][$lang]), '')); $editor_width = ""; if (!empty($block_type_width)) { if ($block_type_width > 500) { $editor_width = $block_type_width . 'px'; } else { $editor_width = '500px'; } } $translate_menu = ''; if (!empty($translate_extensions)) { $translate_extensions_titles = array(); $translate_extensions_actions = array(); foreach ($translate_extensions as $te) { if ($te['enabled'] == '0') { continue; } $translate_extensions_titles[] = $te['title']; $translate_extensions_actions[] = 'javascript: navigate_tinymce_translate_' . $te['code'] . '(\'trigger-content-' . $lang . '-' . $lang . '\', \'' . $lang . '\');'; } if (!empty($translate_extensions_actions)) { $translate_menu = $naviforms->splitbutton('translate_' . $lang, '<img src="img/icons/silk/comment.png" align="absmiddle"> ' . t(188, 'Translate'), $translate_extensions_actions, $translate_extensions_titles); } } $navibars->add_tab_content_row(array('<label>' . t(9, "Content") . ' <span class="editor_selector" for="trigger-content-' . $lang . '">' . '<i class="fa fa-border fa-fw fa-lg fa-file-text-o active" data-action="tinymce" title="' . t(614, "Edit with TinyMCE") . '"></i> ' . '<i class="fa fa-border fa-fw fa-lg fa-code" data-action="html" title="' . t(615, "Edit as source code") . '"></i> ' . '<i class="fa fa-border fa-fw fa-lg fa-eraser" data-action="clear" title="' . t(208, "Remove all content") . '"></i>' . '</span>' . '</label>', $naviforms->editorfield('trigger-content-' . $lang, @$item->trigger['trigger-content'][$lang], $editor_width, $lang), '<div style="clear:both; margin-top:5px; float:left; margin-bottom: 10px;">', '<label> </label>', $translate_menu, !empty($theme->content_samples) ? '<button onclick="navigate_blocks_copy_from_theme_samples(\'trigger-content-' . $lang . '\', \'trigger\', \'' . $lang . '\', \'' . "tinymce" . '\'); return false;"><img src="img/icons/silk/rainbow.png" align="absmiddle"> ' . t(553, 'Fragments') . ' | ' . $theme->title . '</button> ' : '', '</div>', '<br />'), '', 'lang="' . $lang . '"'); $navibars->add_tab_content_row(array('<label>' . t(172, 'Action') . '</label>', $naviforms->selectfield('action-type-' . $lang, array(0 => '', 1 => 'web', 2 => 'web-n', 3 => 'javascript', 4 => 'file', 5 => 'image'), array(0 => t(183, 'Do nothing'), 1 => t(173, 'Open URL'), 2 => t(174, 'Open URL (new window)'), 3 => 'Javascript', 4 => t(175, 'Download file'), 5 => t(176, 'View image')), $item->action['action-type'][$lang], "navigate_blocks_action_change('" . $lang . "', this);"))); /* show/hide appropiate row type by action */ $selected_link_title = ''; if (!empty($item->action['action-web'][$lang])) { $path = explode('/', $item->action['action-web'][$lang]); if (count($path) > 0 && $path[0] == 'nv:') { if ($path[2] == 'structure') { $tmp = new structure(); $tmp->load($path[3]); $selected_link_title = $tmp->dictionary[$lang]['title']; $layout->add_script(' $(".nv_block_nv_link_info[data-lang=' . $lang . ']").find("img[data-type=structure]").removeClass("hidden"); '); } else { if ($path[2] == 'element') { $tmp = new item(); $tmp->load($path[3]); $selected_link_title = $tmp->dictionary[$lang]['title']; $layout->add_script(' $(".nv_block_nv_link_info[data-lang=' . $lang . ']").find("img[data-type=element]").removeClass("hidden"); '); } } } } $navibars->add_tab_content_row(array('<label>' . t(184, 'Webpage') . '</label>', $naviforms->autocomplete('action-web-' . $lang, @$item->action['action-web'][$lang], '?fid=' . $_REQUEST['fid'] . '&act=path'), '<a class="uibutton nv_block_nv_link_trigger"><i class="fa fa-sitemap"></i></a>', '<div class="subcomment nv_block_nv_link_info" data-lang="' . $lang . '"> <img src="img/icons/silk/sitemap_color.png" class="hidden" data-type="structure" sprite="false" /> <img src="img/icons/silk/page.png" class="hidden" data-type="element" sprite="false" /> ' . '<span>' . $selected_link_title . '</span>' . '</div>')); $layout->add_script(' $("input[name=action-web-' . $lang . ']").on("keydown", function() { var div_info = $(this).parent().find(".nv_block_nv_link_info"); $(div_info).find("span").text(""); $(div_info).find("img").addClass("hidden"); }); '); $navibars->add_tab_content_row(array('<label>Javascript</label>', $naviforms->textfield('action-javascript-' . $lang, @$item->action['action-javascript'][$lang], NULL, "navigate_blocks_action_javascript_clean_quotes('action-javascript-" . $lang . "');"), '<div class="subcomment"><img src="img/icons/silk/information.png" align="absmiddle" /> ' . t(606, 'Double quotes not allowed, use single quotes only') . '</div>')); $layout->add_script(' function navigate_blocks_action_javascript_clean_quotes(id) { var content = $("#" + id).val(); content = content.replace(\'"\', "\'"); $("#" + id).val(content); } '); $navibars->add_tab_content_row(array('<label>' . t(82, 'File') . '</label>', $naviforms->dropbox('action-file-' . $lang, @$item->action['action-file'][$lang]), '')); $navibars->add_tab_content_row(array('<label>' . t(157, 'Image') . '</label>', $naviforms->dropbox('action-image-' . $lang, @$item->action['action-image'][$lang], 'image'), '')); // copy from other language if (count($website->languages) > 1) { $block_copyfrom_titles = array(); $block_copyfrom_actions = array(); foreach ($website->languages as $bcpl) { if ($bcpl['language'] == $lang) { continue; } $block_copyfrom_titles[] = language::name_by_code($bcpl['language']); $block_copyfrom_actions[] = 'javascript: navigate_blocks_copy_from_language(\'' . $bcpl['language'] . '\', \'' . $lang . '\');'; } $copy_from_menu = $naviforms->splitbutton('block_copyfrom_' . $lang, '<img src="img/icons/silk/comment.png" align="absmiddle"> ' . t(189, 'Copy from') . '...', $block_copyfrom_actions, $block_copyfrom_titles); $navibars->add_tab_content_row('<label> </label>' . $copy_from_menu); } $navibars->add_tab_content('</div>'); } $layout->add_script(' function navigate_blocks_copy_from_language(from, to) { // copy title (if destination is empty) if($("#title-" + to).val()=="") $("#title-" + to).val($("#title-" + from).val()); // copy trigger type $("#trigger-type-" + to) .val($("#trigger-type-" + from).val()) .trigger("change"); // copy trigger value, depending on the trigger type switch($("#trigger-type-" + to).val()) { case "image": navigate_dropbox_clone_value("trigger-image-" + from, "trigger-image-" + to); break; case "rollover": navigate_dropbox_clone_value("trigger-rollover-" + from, "trigger-rollover-" + to); navigate_dropbox_clone_value("trigger-rollover-active-" + from, "trigger-rollover-active-" + to); break; case "video": navigate_dropbox_clone_value("trigger-video-" + from, "trigger-video-" + to); break; case "flash": navigate_dropbox_clone_value("trigger-flash-" + from, "trigger-flash-" + to); break; case "html": // ncid: navigate codemirror instance destination // ncio: navigate codemirror instance destination for(ncid in navigate_codemirror_instances) { if($(navigate_codemirror_instances[ncid].getTextArea()).attr("id") == "trigger-html-" + to) { for(ncio in navigate_codemirror_instances) { if($(navigate_codemirror_instances[ncio].getTextArea()).attr("id") == "trigger-html-" + from) { navigate_codemirror_instances[ncid].setValue(navigate_codemirror_instances[ncio].getValue()); } } } } $(navigate_codemirror_instances).each(function() { this.refresh(); } ); break; case "links": // remove previous links (if any) $("#trigger-links-" + to).find("tr").not("#trigger-links-table-row-model-" + to).not(":first").remove(); // copy each link in the origin language $("#trigger-links-" + from).find("tr").not("#trigger-links-table-row-model-" + from).not(":first").each(function() { // add a row $("#trigger-links-table-add-" + to).trigger("click"); $(this).find("td").each(function(i) { if($(this).find(".select2-container").length > 0) { // select2 field var input_name = $("#trigger_links_table_" + to).find("tr:visible:last").find("td").eq(i).find("select").attr("name"); var input_value = $(this).find("select").val(); if(input_name) $("select[name=\\""+input_name+"\\"]").val(input_value).trigger("change"); } else { // standard input or checkbox field $("#trigger_links_table_" + to).find("tr:visible:last").find("td").eq(i).find("input").val($(this).find("input").val()); if($(this).find("input").attr("checked")) $("#trigger_links_table_" + to).find("tr:visible:last").find("td").eq(i).find("input").attr("checked", "checked"); } }); }); break; case "content": tinyMCE.get("trigger-content-" + to).setContent( tinyMCE.get("trigger-content-" + from).getContent() ); break; case "title": case "": default: // nothing to do break; } // copy action type $("#action-type-" + to) .val($("#action-type-" + from).val()) .trigger("change"); // copy action value switch($("#action-type-" + to).val()) { case "web": case "web-n": $("#action-web-" + to).val($("#action-web-" + from).val()); break; case "javascript": $("#action-javascript-" + to).val($("#action-javascript-" + from).val()); break; case "file": navigate_dropbox_clone_value("action-file-" + from, "action-file-" + to); break; case "image": navigate_dropbox_clone_value("action-image-" + from, "action-image-" + to); break; case "": default: // nothing to do break; } } '); // right now, only fontawesome icon set is supported $fontawesome_classes = ''; if ($links_icons == 'fontawesome') { $fontawesome_classes = block::fontawesome_list(); $fontawesome_classes = array_map(function ($v) { $x = new stdClass(); $x->id = $v; if (!empty($v)) { $x->text = substr($v, 3); } return $x; }, $fontawesome_classes); } $layout->add_script(' var active_languages = ["' . implode('", "', array_keys($options)) . '"]; navigate_items_select_language("' . $website->languages_list[0] . '"); navigate_fontawesome_classes = ' . json_encode($fontawesome_classes) . '; '); foreach ($website->languages_list as $alang) { $layout->add_script(' $(window).on("load", function() { $("#trigger-type-' . $alang . '").val("' . $item->trigger['trigger-type'][$alang] . '"); $("#action-type-' . $alang . '").val("' . $item->action['action-type'][$alang] . '"); navigate_blocks_trigger_change("' . $alang . '", $("<input type=\\"hidden\\" value=\\"' . $item->trigger['trigger-type'][$alang] . '\\" />")); links_table_row_models["' . $alang . '"] = $("#trigger-links-table-row-model-' . $alang . '").html(); if($("#trigger_links_table_' . $alang . '").find("tr").not(".nodrag").length > 1) $("#trigger-links-table-row-model-' . $alang . '").hide(); // prepare select2 to select icons if(' . ($links_icons == 'fontawesome' ? 'true' : 'false') . ') { $("[id^=trigger_links_table_").find("tr").each(function(i, tr) { // do not apply select2 to head row if(!$(tr).find("select")) return; // do not apply select2 to model row if($(tr).attr("id") && ($(this).attr("id")).indexOf("table-row-model") > 0) return; navigate_blocks_trigger_links_table_icon_selector(tr); }); } }); '); } $layout->add_content(' <div id="navigate_blocks_copy_from_theme_samples" style=" display: none; "> <div class="navigate-form-row"> <label>' . t(79, 'Template') . '</label> <select id="navigate_blocks_copy_from_theme_samples_options" name="navigate_blocks_copy_from_theme_samples_options" onchange="navigate_blocks_copy_from_theme_samples_preview(this.value, $(this).attr(\'type\'), $(this).find(\'option:selected\').attr(\'source\'));"> </select> </div> <div class="navigate-form-row"> <div id="navigate_blocks_copy_from_theme_samples_text" name="navigate_blocks_copy_from_theme_samples_text" style="border: 1px solid #CCCCCC; float: left; height: auto; min-height: 20px; overflow: auto; width: 97%; padding: 3px; background: #f7f7f7;"> </div> <div id="navigate_blocks_copy_from_theme_samples_text_raw" style=" display: none; "></div> </div> </div> '); $layout->add_script(' var theme_content_samples = ' . json_encode($theme->content_samples) . '; var website_theme = "' . $website->theme . '"; '); break; } if (!empty($item->type)) { // we need to know if the block is defined in the active theme or in the database (numeric ID) foreach ($block_types as $bt) { if ($bt['code'] == $item->type) { $block_type_id = $bt['id']; break; } } $properties_html = navigate_property_layout_form('block', $block_type_id, 'block', $item->id); if (!empty($properties_html)) { $navibars->add_tab(t(77, "Properties")); $navibars->add_tab_content($properties_html); } } $navibars->add_tab(t(336, "Display")); $default_value = 1; if (!empty($item->categories)) { $default_value = 0; } else { if (!empty($item->exclusions)) { $default_value = 2; } } $navibars->add_tab_content_row(array('<label>' . t(330, 'Categories') . '</label>', $naviforms->buttonset('all_categories', array('1' => t(396, 'All categories'), '0' => t(405, 'Selection'), '2' => t(552, 'Exclusions')), $default_value))); $hierarchy = structure::hierarchy(0); $categories_list = structure::hierarchyList($hierarchy, $item->categories); $exclusions_list = structure::hierarchyList($hierarchy, $item->exclusions); $navibars->add_tab_content_row(array('<label> </label>', '<div class="category_tree" id="category-tree-parent"> <img src="img/icons/silk/world.png" align="absmiddle" /> ' . $website->name . '<div class="tree_ul">' . $categories_list . '</div>' . '</div>')); $navibars->add_tab_content_row(array('<label> </label>', '<div class="category_tree" id="exclusions-tree-parent"> <img src="img/icons/silk/world.png" align="absmiddle" /> ' . $website->name . '<div class="tree_ul">' . $exclusions_list . '</div>' . '</div>')); if (!is_array($item->categories)) { $item->categories = array(); } if (!is_array($item->exclusions)) { $item->exclusions = array(); } $navibars->add_tab_content($naviforms->hidden('categories', implode(',', $item->categories))); $navibars->add_tab_content($naviforms->hidden('exclusions', implode(',', $item->exclusions))); $elements_display = "all"; if (!empty($item->elements['exclusions'])) { $elements_display = "exclusions"; } else { if (!empty($item->elements['selection'])) { $elements_display = "selection"; } } $navibars->add_tab_content_row(array('<label>' . t(22, 'Elements') . ' ' . t(428, '(no category)') . '</label>', $naviforms->buttonset('elements_display', array('all' => t(443, 'All'), 'selection' => t(405, 'Selection'), 'exclusions' => t(552, 'Exclusions')), $elements_display, "navigate_blocks_elements_display_change(this)"))); $layout->add_script(' function navigate_blocks_elements_display_change(el) { el = $(el).prev(); if($(el).val()=="all") $("#elements_selection_wrapper").hide(); else $("#elements_selection_wrapper").show(); } navigate_blocks_elements_display_change($("label[for=elements_display_' . $elements_display . ']")); '); if (!is_array($item->elements)) { $item->elements = array(); } $items_ids = array_values($item->elements); $items_ids = $items_ids[0]; if (empty($items_ids)) { $items_ids = array(); } $items_titles = array(); for ($i = 0; $i < count($items_ids); $i++) { $item_title = $DB->query_single('text', 'nv_webdictionary', ' node_type = "item" AND website = "' . $website->id . '" AND node_id = "' . $items_ids[$i] . '" AND subtype = "title" AND lang = "' . $website->languages_published[0] . '"'); $items_titles[$i] = $item_title; } $navibars->add_tab_content_row(array('<label> </label>', $naviforms->selectfield("elements_selection", $items_ids, $items_titles, $items_ids, null, true, null, null, false)), "elements_selection_wrapper"); $layout->add_script(' $("#elements_selection").select2({ placeholder: "' . t(533, "Find element by title") . '", minimumInputLength: 1, ajax: { url: "' . NAVIGATE_URL . '/' . NAVIGATE_MAIN . '?fid=items&act=json_find_item", dataType: "json", delay: 100, data: function(params) { return { title: params.term, //association: "free", embedding: 0, nd: new Date().getTime(), page_limit: 30, // page size page: params.page // page number }; }, processResults: function (data, params) { params.page = params.page || 1; return { results: data.items, pagination: { more: (params.page * 30) < data.total_count } }; } }, templateSelection: function(row) { if(row.id) return row.text + " <helper style=\'opacity: .5;\'>#" + row.id + "</helper>"; else return row.text; }, escapeMarkup: function (markup) { return markup; }, // let our custom formatter work triggerChange: true }); $("#elements_selection_wrapper").find(".select2-search__field").css("width", "408px"); $("#elements_selection_wrapper").find("li.select2-search").css("width", "auto"); '); if (!empty($item->type)) { $navibars->add_tab(t(171, 'Order')); // order blocs of the same type $DB->query('SELECT b.id as id, d.text as title, b.fixed as fixed FROM nv_blocks b, nv_webdictionary d WHERE b.type = "' . $item->type . '" AND d.node_type = "block" AND d.subtype = "title" AND d.lang = "' . $website->languages_list[0] . '" AND d.node_id = b.id AND d.website = ' . $website->id . ' AND b.website = ' . $website->id . ' ORDER BY b.position ASC'); $block_ids = $DB->result('id'); $blocks = $DB->result(); $navibars->add_tab_content($naviforms->hidden('blocks-order', implode('#', $block_ids))); $table = new naviorderedtable("blocks_order_table"); $table->setWidth("408px"); $table->setHiddenInput("blocks-order"); $table->addHeaderColumn('ID', 50); $table->addHeaderColumn(t(67, 'Title'), 350); $table->addHeaderColumn('<div style=" text-align: center; ">' . t(394, 'Fixed') . '</div>', 50); foreach ($blocks as $block) { $table->addRow($block->id, array(array('content' => $block->id, 'align' => 'left'), array('content' => $block->title, 'align' => 'left'), array('content' => '<span class="checkbox-wrapper"> <input type="checkbox" name="blocks-order-fixed[' . $block->id . ']" id="blocks-order-fixed[' . $block->id . ']" value="1" ' . ($block->fixed == '1' ? 'checked="checked"' : '') . ' /> <label for="blocks-order-fixed[' . $block->id . ']" /> </span>', 'align' => 'center'))); } $navibars->add_tab_content_row(array('<label>' . t(23, 'Blocks') . '</label>', '<div>' . $table->generate() . '</div>', '<div class="subcomment"><img src="img/icons/silk/information.png" align="absmiddle" /> ' . t(72, 'Drag any row to assign priorities') . '</div>', '<div class="subcomment"><span class="ui-icon ui-icon-lightbulb" style=" float: left; margin-right: 4px; "></span> ' . t(395, '"Fixed" assigns a static position when the order is random') . '</div>')); } return $navibars->generate(); }
function websites_form($item) { global $user; global $DB; global $layout; global $events; $navibars = new navibars(); $naviforms = new naviforms(); $layout->navigate_media_browser(); // we want to use media browser in this function $layout->navigate_editorfield_link_dialog(); $theme = new theme(); if (!empty($item->theme)) { $theme->load($item->theme); } if (empty($item->id)) { $navibars->title(t(241, 'Websites') . ' / ' . t(38, 'Create')); } else { $navibars->title(t(241, 'Websites') . ' / ' . t(170, 'Edit') . ' [' . $item->id . ']'); } if ($user->permission('websites.edit') == 'true') { $navibars->add_actions(array('<a href="#" onclick="javascript: navigate_media_browser();" title="Ctrl+m"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/images.png"> ' . t(36, 'Media') . '</a>')); $extra_actions = array(); $extra_actions[] = '<a href="#" action="navigate_reset_statistics" onclick="javascript: navigate_reset_statistics();"><img height="16" align="absmiddle" width="16" src="img/icons/silk/chart_line.png"> ' . t(429, 'Reset statistics') . '</a>'; $layout->add_script(' function navigate_reset_statistics() { navigate_confirmation_dialog( function() { $.post( "?fid=websites&act=reset_statistics&website=' . $item->id . '", {}, function(data) { $("a[action=\'navigate_reset_statistics\']").parent().fadeOut(); } ); }, "<div>' . t(430, 'Do you really want to remove all statistics of this website?') . '</div>" ); } '); if (!empty($item->id)) { $extra_actions[] = '<a href="#" action="navigate_replace_urls" onclick="javascript: navigate_replace_urls();"><img height="16" align="absmiddle" width="16" src="img/icons/silk/database_refresh.png"> ' . t(603, 'Replace URLs') . '</a>'; // try to find the OLD url for NAVIGATE_DOWNLOAD $old_url_guessed = ""; $DB->query(' SELECT text FROM nv_webdictionary WHERE node_type = "item" AND website = ' . $item->id . ' AND text LIKE ' . protect("%navigate_download.php%") . ' LIMIT 1 '); $rs = $DB->result('text'); preg_match("/<img .*?(?=src)src=\"([^\"]+)\"/si", $rs[0], $old_url_guessed); $old_url_guessed = @$old_url_guessed[1]; $old_url_guessed = substr($old_url_guessed, 0, strpos($old_url_guessed, NAVIGATE_FOLDER)); $layout->add_content(' <div id="navigate_replace_urls_dialog" style="display: none;"> <div id="" class="navigate-form-row"> <label>' . t(604, "Old") . '</label> <input type="text" style=" width: 300px;" id="replace_urls_old" name="replace_urls_old" value="' . $old_url_guessed . '/" /> </div> <div id="" class="navigate-form-row"> <label>' . t(605, "New") . '</label> <input type="text" style=" width: 300px;" id="replace_urls_new" name="replace_urls_new" value="' . NAVIGATE_PARENT . '/" /> </div> <div class="navigate-form-row"> <div class="subcomment">' . t(523, "This action can NOT be undone.") . '</div> </div> </div> '); $layout->add_script(' function navigate_replace_urls() { $("#navigate_replace_urls_dialog").dialog({ resizable: true, height: 180, width: 520, modal: true, title: "' . t(603, 'Replace URLs') . '", buttons: { "' . t(190, 'Ok') . '": function() { $.post( "?fid=websites&act=replace_urls", { old: $("#replace_urls_old").val(), new: $("#replace_urls_new").val(), website: ' . $item->id . ' }, function(data) { if(data!="true") navigate_notification("' . t(56, "Unexpected error.") . '"); else { navigate_notification("' . t(53, "Data saved successfully") . '", false, "fa fa-check"); $("#navigate_replace_urls_dialog").dialog("close"); } } ); }, "' . t(58, 'Cancel') . '": function() { $("#navigate_replace_urls_dialog").dialog("close"); } } }); } '); $extra_actions[] = '<a href="#" action="navigate_remove_website_data" onclick="javascript: navigate_remove_website_data();"><img height="16" align="absmiddle" width="16" src="img/icons/silk/cross.png"> ' . t(208, 'Remove all content') . '</a>'; $layout->add_script(' function navigate_remove_website_data() { var confirmation = "<div>"; confirmation += "<br /><div><strong>' . t(497, 'Do you really want to erase this data?') . '</strong> (' . t(16, "Structure") . ', ' . t(22, "Elements") . ', ' . t(23, "Blocks") . ', ' . t(250, "Comments") . '...)</div><br />"; confirmation += "<form action=\\"?\\" onSubmit=\\"return false;\\"><div class=\\"navigate-form-row\\"><label>' . t(2, "Password") . '</label></div><input type=\\"password\\" id=\\"navigate_remove_website_data_password\\" style=\\"width: 90%;\\" /></form></div>"; confirmation += "</div>"; $(confirmation).dialog({ resizable: true, height: 250, width: 400, modal: true, title: "' . t(59, 'Confirmation') . '", buttons: { "' . t(190, 'Ok') . '": function() { $(this).dialog("close"); $.post( "?fid=websites&act=remove_content", { website: $("#id").val(), password: $("#navigate_remove_website_data_password").val() }, function(data) { if(data=="true") { navigate_notification("' . t(419, "Process complete") . '"); $("a[action=\'navigate_remove_website_data\']").parent().fadeOut(); } else navigate_notification("' . t(56, "Unexpected error.") . ' " + data, true); } ); }, "' . t(58, 'Cancel') . '": function() { $(this).dialog("close"); } } }); } '); } // we attach an event to "websites" which will be fired by navibars to put an extra button $events->add_actions('websites', array('website' => &$item, 'navibars' => &$navibars), $extra_actions); if (empty($item->id)) { $navibars->add_actions(array('<a href="#" onclick="navigate_tabform_submit(1);" title="Ctrl+s"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . '</a>')); } else { $navibars->add_actions(array('<a href="#" onclick="navigate_tabform_submit(1);" title="Ctrl+s"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/accept.png"> ' . t(34, 'Save') . '</a>', $user->permission('websites.delete') == 'true' ? '<a href="#" onclick="navigate_delete_dialog();"> <img height="16" align="absmiddle" width="16" src="img/icons/silk/cancel.png"> ' . t(35, 'Delete') . '</a>' : '')); $delete_html = array(); $delete_html[] = '<div id="navigate-delete-dialog" class="hidden">' . t(57, 'Do you really want to delete this item?') . '</div>'; $delete_html[] = '<script language="javascript" type="text/javascript">'; $delete_html[] = 'function navigate_delete_dialog()'; $delete_html[] = '{'; $delete_html[] = '$("#navigate-delete-dialog").removeClass("hidden");'; $delete_html[] = '$("#navigate-delete-dialog").dialog({ resizable: true, height: 150, width: 300, modal: true, title: "' . t(59, 'Confirmation') . '", buttons: { "' . t(35, 'Delete') . '": function() { $(this).dialog("close"); window.location.href = "?fid=' . $_REQUEST['fid'] . '&act=4&id=' . $item->id . '"; }, "' . t(58, 'Cancel') . '": function() { $(this).dialog("close"); } } });'; $delete_html[] = '}'; $delete_html[] = '</script>'; $navibars->add_content(implode("\n", $delete_html)); } $layout->add_script("\r\n \$(document).on('keydown.ctrl_s', function (evt) { navigate_items_tabform_submit(1); return false; } );\r\n \$(document).on('keydown.ctrl_m', function (evt) { navigate_media_browser(); return false; } );\r\n "); } $navibars->add_actions(array($user->permission('websites.edit') == 'true' && !empty($item->id) ? '<a href="?fid=websites&act=2"><img height="16" align="absmiddle" width="16" src="img/icons/silk/add.png"> ' . t(38, 'Create') . '</a>' : '', '<a href="?fid=websites&act=0"><img height="16" align="absmiddle" width="16" src="img/icons/silk/application_view_list.png"> ' . t(39, 'List') . '</a>', 'search_form')); $navibars->form(); $navibars->add_tab(t(7, "Settings")); $navibars->add_tab_content($naviforms->hidden('form-sent', 'true')); $navibars->add_tab_content($naviforms->hidden('id', $item->id)); $navibars->add_tab_content_row(array('<label>' . t(67, 'Title') . '</label>', $naviforms->textfield('title', $item->name))); $navibars->add_tab_content_row(array('<label>' . t(287, 'Protocol') . '</label>', $naviforms->selectfield('protocol', array(0 => 'http://', 1 => 'https://'), array(0 => 'HTTP', 1 => 'HTTPS [' . t(288, 'Secured site (requires certificate)') . ']'), $item->protocol))); $navibars->add_tab_content_row(array('<label>' . t(228, 'Subdomain') . '</label>', $naviforms->textfield('subdomain', $item->subdomain), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' www</span>')); $navibars->add_tab_content_row(array('<label>' . t(229, 'Domain') . '</label>', $naviforms->textfield('domain', $item->domain), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' naviwebs.net</span>')); $navibars->add_tab_content_row(array('<label>' . t(141, 'Folder') . '</label>', $naviforms->textfield('folder', $item->folder), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' /new-website</span>')); $homepage_url = ""; if (!empty($item->homepage)) { $homepage_url = $item->homepage_from_structure(); } $navibars->add_tab_content_row(array('<label>' . t(187, 'Homepage') . '</label>', $naviforms->hidden('homepage_from_structure', is_numeric($item->homepage) ? $item->homepage : ""), $naviforms->autocomplete('homepage', $homepage_url, '?fid=' . $_REQUEST['fid'] . '&wid=' . $item->id . '&act=5'), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' /en/home</span>')); $navibars->add_tab_content_row(array('<div class="subcomment"><img src="img/icons/silk/house.png" align="absmiddle" /> <span id="navigate-website-home-url"></span></div>')); $layout->add_content(' <div id="homepage_change_dialog" style="display: none;"> ' . t(595, "Right now the homepage is set from a structure element which allows multilanguage redirecting.") . ' <br /><br /> ' . t(596, "Do you want to enter a fixed path for the homepage?") . ' </div> '); $layout->add_script(' $("#homepage").on("click keydown", function(ev) { if($("#homepage_from_structure").val()!="") { $("#homepage_change_dialog").dialog({ title: "' . t(59, "Confirmation") . '", modal: true, width: 400, height: 150, buttons: [ { text: "' . t(190, "Ok") . '", icons: { primary: "ui-icon-check" }, click: function() { $("#homepage_from_structure").val(""); $("#homepage").focus(); $("#homepage_change_dialog").dialog("close"); } }, { text: "' . t(58, "Cancel") . '", icons: { primary: "ui-icon-close" }, click: function() { setTimeout( function() { $("div.ui-widget-overlay").hide(); $("#homepage").blur(); }, 100 ); $("#homepage_change_dialog").dialog("close"); } } ] }); } }); $("#subdomain,#domain,#folder,#homepage").on("keyup", navigate_website_update_home_url); $("#protocol").on("change", navigate_website_update_home_url); function navigate_website_update_home_url() { var url = $("#protocol").val(); if($("#subdomain").val().length > 0) url += $("#subdomain").val() + "."; url += $("#domain").val(); url += $("#folder").val(); url += $("#homepage").val(); $("#navigate-website-home-url").html(url); } navigate_website_update_home_url(); '); if (!empty($item->theme)) { $navibars->add_tab_content_row(array('<label>' . t(368, 'Theme') . '</label>', '<strong> <a href="?fid=8&act=themes"> <img height="16" width="16" align="absmiddle" src="img/icons/silk/rainbow.png" /> </a> ' . $theme->title . ' </strong>')); } $navibars->add_tab_content_row(array('<label>' . t(515, 'Not found paths') . '...</label>', $naviforms->selectfield('wrong_path_action', array(0 => 'blank', 1 => 'homepage', 2 => 'theme_404', 3 => 'http_404', 4 => 'website_path'), array(0 => t(516, 'Show a blank page'), 1 => t(517, 'Redirect to home page'), 2 => t(518, 'Use the custom 404 template of a theme (if exists)'), 3 => t(519, 'Send a 404 HTTP error header'), 4 => t(642, 'Redirect to a website page')), $item->wrong_path_action, 'navigate_websites_wrong_path_action_change(this)', false), '<a class="uibutton nv_website_wrong_path_trigger hidden"><i class="fa fa-sitemap"></i></a>', '<span id="navigate-website-wrong-path-redirect" class="nv_website_wrong_path_info navigate-form-row-info">' . $item->wrong_path_redirect . '</span>', $naviforms->hidden('wrong_path_redirect', $item->wrong_path_redirect))); $layout->add_script(' function navigate_websites_wrong_path_action_change(el) { $(el).parent().find(".nv_website_wrong_path_trigger").addClass("hidden"); $(el).parent().find(".nv_website_wrong_path_info").addClass("hidden"); if($(el).val()=="website_path") { $(el).parent().find(".nv_website_wrong_path_trigger").removeClass("hidden"); $(el).parent().find(".nv_website_wrong_path_info").removeClass("hidden"); } } navigate_websites_wrong_path_action_change($("#wrong_path_action")); $(".nv_website_wrong_path_trigger").on("click", function() { var trigger = this; // hide "replace title" when calling the dialog from the block action // leave it enabled when calling the dialog from the Links table if($(this).parents("table.box-table").length == 0) $("#nv_link_dialog_replace_text").parent().css("visibility", "hidden"); $("#nv_link_dialog").removeClass("hidden"); $("#nv_link_dialog").dialog({ title: $("#nv_link_dialog").attr("title"), modal: true, width: 620, height: 400, buttons: [ { text: "Ok", click: function(event, ui) { // check if there is any path selected if(!$("#nv_link_dialog_dynamic_path").hasClass("hidden")) { var input_path = $("#wrong_path_redirect"); input_path.val($("#nv_link_dialog_dynamic_path").text()); $(".nv_website_wrong_path_info").html($("#nv_link_dialog_dynamic_path").text()); $("#nv_link_dialog").dialog("close"); } } }, { text: "Cancel", click: function(event, ui) { $("#nv_link_dialog").dialog("close"); } } ], close: function() { $("#nv_link_dialog_replace_text").parent().css("visibility", "visible"); } }); }); '); // when no path is given $navibars->add_tab_content_row(array('<label>' . t(625, 'Empty paths') . '...</label>', $naviforms->selectfield('empty_path_action', array(0 => 'homepage_redirect', 1 => 'homepage_noredirect', 2 => 'blank', 3 => 'theme_404', 4 => 'http_404'), array(0 => t(517, 'Redirect to home page'), 1 => t(626, 'Display the home page, without changing the route'), 2 => t(516, 'Show a blank page'), 3 => t(518, 'Use the custom 404 template of a theme (if exists)'), 4 => t(519, 'Send a 404 HTTP error header')), $item->empty_path_action, '', false))); $navibars->add_tab_content_row(array('<label>' . t(68, 'Status') . '</label>', $naviforms->selectfield('permission', array(0 => 0, 1 => 1, 2 => 2), array(0 => t(69, 'Published'), 1 => t(70, 'Private'), 2 => t(71, 'Closed')), $item->permission, '', false, array(0 => t(360, 'Visible to everybody'), 1 => t(359, 'Visible only to Navigate CMS users'), 2 => t(358, 'Hidden to everybody'))))); $layout->add_script(' $("#permission").on("change", function() { if($(this).val() > 0) $("#redirect_to").parent().show(); else $("#redirect_to").parent().hide(); }); $("#permission").trigger("change"); '); $navibars->add_tab_content_row(array('<label>' . t(505, 'Redirect to') . '</label>', $naviforms->textfield('redirect_to', $item->redirect_to), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' /landing_page.html</span>')); $navibars->add_tab(t(63, "Languages")); // system locales $locales = $item->unix_locales(); $system = PHP_OS; if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' && empty($locales)) { $locales = $item->windows_locales(); $system = 'MS Windows'; } /* Languages selector */ if (!is_array($item->languages_list)) { $item->languages_list = array(); } $table = new naviorderedtable("website_languages_table"); //$table->setWidth("600px"); $table->setHiddenInput("languages-order"); $navibars->add_tab_content($naviforms->hidden('languages-order', implode('#', $item->languages_list))); $table->addHeaderColumn(t(159, 'Name'), 160); $table->addHeaderColumn(t(237, 'Code'), 60); $table->addHeaderColumn(t(471, 'Variant') . '/' . t(473, 'Region'), 120); $table->addHeaderColumn(t(474, 'System locale') . ' (' . $system . ')', 150); $table->addHeaderColumn(t(64, 'Published'), 60); $table->addHeaderColumn(t(35, 'Remove'), 60); $DB->query('SELECT code, name FROM nv_languages'); $languages_rs = $DB->result(); $languages = array(); foreach ($languages_rs as $lang) { $languages[$lang->name] = $lang->code; } if (empty($item->languages)) { // load default language settings $item->languages_list = array('en'); $item->languages_published = array('en'); $item->languages = array('en' => array('language' => 'en', 'variant' => '', 'code' => 'en', 'system_locale' => strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? 'ENU_USA' : 'en_US.utf8')); } if (empty($item->languages)) { $item->languages = array(); } // add previously assigned locales if they are missing foreach ($item->languages as $lcode => $ldef) { if (!in_array($ldef['system_locale'], $locales)) { $locales[$ldef['system_locale']] = '? [' . $ldef['system_locale'] . ']'; } } $p = 0; foreach ($item->languages as $lcode => $ldef) { $p++; $published = array_search($lcode, $item->languages_published) !== false; $variant = !empty($ldef['variant']); $select_language = $naviforms->select_from_object_array('language-id[]', $languages_rs, 'code', 'name', $ldef['language'], ' width: 150px; '); if (empty($locales)) { $select_locale = $naviforms->textfield('language-locale[]', $ldef['system_locale'], '300px'); } else { $select_locale = $naviforms->selectfield('language-locale[]', array_keys($locales), array_values($locales), $ldef['system_locale'], '', false, array(), 'width: 300px;'); } $uid = uniqid(); $table->addRow($p, array(array('content' => $select_language, 'align' => 'left'), array('content' => '<div style=" white-space: nowrap; "><input type="text" name="language-code[]" value="' . $ldef['language'] . '" style="width: 30px;" /></div>', 'align' => 'left'), array('content' => '<input type="checkbox" name="language-variant[]" id="language-variant[' . $uid . ']" value="1" ' . ($variant ? 'checked="checked"' : '') . ' style="float:left;" class="raw-checkbox" /> <input type="text" name="language-variant-code[]" value="' . $ldef['variant'] . '" style="width: 75px;" />', 'align' => 'left'), array('content' => $select_locale, 'align' => 'left'), array('content' => '<input type="hidden" name="language-published[]" value="' . ($published ? '1' : '0') . '" /><input type="checkbox" id="language-published[' . $uid . ']" value="' . $lcode . '" ' . ($published ? 'checked="checked"' : '') . ' onclick=" if($(this).is(\':checked\')) { $(this).prev().val(1); } else { $(this).prev().val(0); }; " /><label for="language-published[' . $uid . ']"></label>', 'align' => 'center'), array('content' => '<img src="' . NAVIGATE_URL . '/img/icons/silk/cancel.png" onclick="navigate_websites_language_remove(this);" />', 'align' => 'center'))); } $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', '<div>' . $table->generate() . '</div>', '<div class="subcomment"> <img src="img/icons/silk/information.png" align="absmiddle" /> ' . t(72, 'Drag any row to assign priorities') . ' </div>')); $navibars->add_tab_content_row(array('<label> </label>', '<button id="websites-languages-add"><img src="img/icons/silk/add.png" align="absmiddle" style="cursor:pointer;" /> ' . t(472, 'Add') . '</button>')); $layout->add_script(' $("#website_languages_table tr").eq(1).find("td:last").children().hide(); $(\'input[name="language-variant[]"]\').each(function(i, el) { if($(el).is(":checked")) $(el).next().removeClass("ui-state-disabled"); else $(el).next().val("").addClass("ui-state-disabled"); }); $(\'input[name="language-variant-code[]"]\').on("click", function() { if(!$(this).prev().is(":checked")) $(this).prev().trigger("click"); }); $("#website_languages_table").on("change", \'select[name="language-id[]"]\', function() { var input = $(this).parent().next().find("input"); $(input).val($(this).val()); $(input).effect("highlight", {}, 2000); }); $("#website_languages_table").on("change", \'input[name="language-variant[]"]\', function() { if($(this).is(":checked")) $(this).next().removeClass("ui-state-disabled"); else $(this).next().val("").addClass("ui-state-disabled"); }); $("#websites-languages-add").on("click", function() { var tr = $("#website_languages_table").find("tr").eq(1).clone(); var tsid = new Date().getTime(); $(tr).attr("id", tsid); $(tr).find("input,label,select").each(function() { if($(this).attr("id")) { var new_name = ($(this).attr("id").split("["))[0]; $(this).attr("id", new_name + "[" + tsid + "]"); } if($(this).attr("for")) { var new_name = ($(this).attr("for").split("["))[0]; $(this).attr("for", new_name + "[" + tsid + "]"); } }); $("#website_languages_table").find("tbody:last").append(tr); $("#website_languages_table").tableDnD({ onDrop: function(table, row) { navigate_naviorderedtable_website_languages_table_reorder(); } }); navigate_naviorderedtable_website_languages_table_reorder(); $(tr).find("td:first").find("a,div,span").remove(); $(tr).find("td").eq(3).find("a,div,span").remove(); navigate_selector_upgrade($(tr).find("td:first").find("select")); if($(tr).find("td").eq(3).find("select").length > 0) navigate_selector_upgrade($(tr).find("td").eq(3).find("select")); return false; }); function navigate_websites_language_remove(el) { $(el).parent().parent().remove(); } function navigate_naviorderedtable_website_languages_table_reorder() { $("#website_languages_table tr").find("td:last").not(":first").children().show(); $("#website_languages_table tr").eq(1).find("td:last").children().hide(); } '); $navibars->add_tab(t(485, "Aliases")); $table = new naviorderedtable("website_aliases_table"); $table->addHeaderColumn(t(486, 'Alias'), 160); $table->addHeaderColumn('', 24); $table->addHeaderColumn(t(487, 'Real URL'), 60); $table->addHeaderColumn(t(35, 'Remove'), 60); $table->addRow($lang->code, array(array('content' => '<div style="width: 308px;">http://example.domain.com/demo</div>', 'align' => 'left'), array('content' => '→', 'align' => 'center'), array('content' => '<div style="width: 308px;">http://www.domain.com/example/demo</div>', 'align' => 'left'), array('content' => '', 'align' => 'left'))); if (!is_array($item->aliases)) { $item->aliases = array(); } foreach ($item->aliases as $alias => $realurl) { $table->addRow($lang->code, array(array('content' => '<input type="text" name="website-aliases-alias[]" value="' . $alias . '" style="width: 300px;" />', 'align' => 'left'), array('content' => '→', 'align' => 'center'), array('content' => '<input type="text" name="website-aliases-real[]" value="' . $realurl . '" style="width: 300px;" />', 'align' => 'left'), array('content' => '<img src="' . NAVIGATE_URL . '/img/icons/silk/cancel.png" onclick="navigate_websites_aliases_remove(this);" />', 'align' => 'center'))); } $navibars->add_tab_content_row(array('<label>' . t(485, 'Aliases') . '</label>', '<div>' . $table->generate() . '</div>', '<div class="subcomment"> <img src="img/icons/silk/information.png" align="absmiddle" /> ' . t(72, 'Drag any row to assign priorities') . ' </div>')); $navibars->add_tab_content_row(array('<label> </label>', '<button id="websites-aliases-add"><img src="img/icons/silk/add.png" align="absmiddle" style="cursor:pointer;" /> ' . t(472, 'Add') . '</button>')); $layout->add_script(' $("#websites-aliases-add").on("click", function() { var tr = $("<tr><td></td><td></td><td></td><td></td></tr>"); $(tr).attr("id", new Date().getTime()); $(tr).find("td").eq(0).html("<input type=\\"text\\" name=\\"website-aliases-alias[]\\" style=\\"width: 300px;\\" />"); $(tr).find("td").attr("align", "center").eq(1).html("→"); $(tr).find("td").eq(2).html("<input type=\\"text\\" name=\\"website-aliases-real[]\\" style=\\"width: 300px;\\" />"); $(tr).find("td").attr("align", "center").eq(3).html("<img src=\\"' . NAVIGATE_URL . '/img/icons/silk/cancel.png\\" onclick=\\"navigate_websites_aliases_remove(this);\\" />"); $("#website_aliases_table").find("tbody:last").append(tr); $("#website_aliases_table").tableDnD(); return false; }); function navigate_websites_aliases_remove(el) { $(el).parent().parent().remove(); } '); $navibars->add_tab(t(9, "Content")); // keep the default value for Navigate CMS < 2.0 if (empty($item->word_separator)) { $item->word_separator = "_"; } $navibars->add_tab_content_row(array('<label>' . t(633, 'Word separator in paths') . '</label>', $naviforms->selectfield('word_separator', array(0 => '-', 1 => '_'), array(0 => t(634, "Hyphen") . " /navigate-cms", 1 => t(635, "Underscore") . " /navigate_cms"), $item->word_separator), '<span class="navigate-form-row-info">' . t(636, 'Existing paths will not be modified') . '</span>')); $navibars->add_tab_content_row(array('<label>' . t(50, 'Date format') . '</label>', $naviforms->selectfield('date_format', array(0 => 'd/m/Y', 1 => 'd-m-Y', 2 => 'm/d/Y', 3 => 'm-d-Y', 4 => 'Y-m-d', 5 => 'Y/m/d'), array(0 => date('d/m/Y'), 1 => date('d-m-Y'), 2 => date('m/d/Y'), 3 => date('m-d-Y'), 4 => date('Y-m-d'), 5 => date('Y/m/d')), $item->date_format))); $timezones = property::timezones(); if (empty($item->default_timezone)) { $item->default_timezone = date_default_timezone_get(); } $navibars->add_tab_content_row(array('<label>' . t(207, 'Default timezone') . '</label>', $naviforms->selectfield("default_timezone", array_keys($timezones), array_values($timezones), $item->default_timezone))); $navibars->add_tab_content_row(array('<label>' . t(433, 'Resize uploaded images') . '</label>', $naviforms->selectfield('resize_uploaded_images', array(0 => 0, 1 => 600, 2 => 800, 3 => 960, 4 => 1200, 5 => 1600, 6 => 2000), array(0 => t(434, 'Keep original file'), 1 => '600 px', 2 => '800 px', 3 => '960 px', 4 => '1200 px', 5 => '1600 px', 6 => '2000 px'), $item->resize_uploaded_images), '<span class="navigate-form-row-info">' . t(435, 'Maximum width or height') . '</span>')); // navigate cms 2.0.2: website->tinymce_css field is DEPRECATED (will be removed in a future revision) if (!empty($item->tinymce_css)) { $navibars->add_tab_content_row(array('<label>tinyMCE CSS</label>', $naviforms->textfield('tinymce_css', $item->tinymce_css), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' /css/style.content.css</span>')); } $navibars->add_tab_content_row(array('<label>' . t(328, 'Favicon') . '</label>', $naviforms->dropbox('website-favicon', $item->favicon, "image"))); $navibars->add_tab_content_row(array('<label>' . t(597, 'Share files in media browser') . '</label>', $naviforms->checkbox('share_files_media_browser', $item->share_files_media_browser == '1'), '<span class="navigate-form-row-info">(' . t(598, 'Only between websites of the current Navigate CMS installation') . ')</span>')); // default comment options for elements $navibars->add_tab_content_row(array('<label>' . t(252, 'Comments enabled for') . '</label>', $naviforms->selectfield('comments_enabled_for', array(0 => 0, 1 => 1, 2 => 2), array(0 => t(253, 'Nobody'), 1 => t(24, 'Registered users'), 2 => t(254, 'Everyone')), $item->comments_enabled_for))); $webuser_name = ''; if ($item->comments_default_moderator == "c_author") { $webuser_name = t(545, 'Content author'); } else { if (!empty($item->comments_default_moderator)) { $webuser_name = $DB->query_single('username', 'nv_users', ' id = ' . intval($item->comments_default_moderator)); } } $moderator_id = array('c_author'); $moderator_username = array('{' . t(545, 'Content author') . '}'); if (!empty($item->comments_default_moderator)) { if ($item->comments_default_moderator != 'c_author') { $moderator_username[] = $DB->query_single('username', 'nv_users', ' id = ' . intval($item->comments_default_moderator)); $moderator_id[] = $item->comments_default_moderator; } } $navibars->add_tab_content_row(array('<label>' . t(255, 'Moderator') . '</label>', $naviforms->selectfield('comments_default_moderator', $moderator_id, $moderator_username, $item->comments_default_moderator, null, false, null, null, false), '<span style="display: none;" id="comments_default_moderator-helper">' . t(535, "Find user by name") . '</span>', '<div class="subcomment"><img align="absmiddle" src="' . NAVIGATE_URL . '/img/icons/silk/information.png" /> ' . t(256, 'Leave blank to accept all comments') . '</div>')); $layout->add_script(' // comments moderator autocomplete $("#comments_default_moderator").select2( { placeholder: $("#comments_default_moderator-helper").text(), minimumInputLength: 0, ajax: { url: "?fid=items&act=json_find_user", dataType: "json", delay: 100, data: function (params) { return { username: params.term, nd: new Date().getTime(), page_limit: 30, // page size page: params.page // page number }; }, processResults: function (data, params) { params.page = params.page || 1; data.items.unshift({id: "c_author", text: "{' . t(545, 'Content author') . '}" }); data.total_count++; return { results: data.items, pagination: { more: (params.page * 30) < data.total_count } }; } }, templateSelection: function(row) { if(row.id && row.id != "c_author") return row.text + " <helper style=\'opacity: .5;\'>#" + row.id + "</helper>"; else return row.text; }, escapeMarkup: function (markup) { return markup; }, // let our custom formatter work triggerChange: true, allowClear: true }); $("#comments_default_moderator-text").on("change", function(e) { $("#comments_default_moderator").val(e.val); }); '); /* TAB EMAIL */ $navibars->add_tab(t(44, "E-Mail")); $navibars->add_tab_content_row(array('<label>' . t(548, "Method") . '</label>', $naviforms->buttonset('mail_mailer', array('smtp' => 'SMTP', 'sendmail' => 'Sendmail', 'mail' => 'PHP mail'), empty($item->mail_mailer) ? 'smtp' : $item->mail_mailer, "navigate_change_mail_transport(this);"))); $layout->add_script(' function navigate_change_mail_transport(el) { var mail_mailer = ""; if(el=="smtp" || el=="sendmail" || el=="mail") mail_mailer = el; else mail_mailer = $("input#" + $(el).attr("for")).val(); $("#mail_server").parent().show(); $("#mail_port").parent().show(); $("#mail_security").parent().show(); $("#mail_user").parent().show(); $("#mail_password").parent().show(); if(mail_mailer=="sendmail" || mail_mailer=="mail") { $("#mail_server").parent().hide(); $("#mail_port").parent().hide(); $("#mail_security").parent().hide(); $("#mail_user").parent().hide(); $("#mail_password").parent().hide(); } } navigate_change_mail_transport("' . (empty($item->mail_mailer) ? 'smtp' : $item->mail_mailer) . '"); '); $navibars->add_tab_content_row(array('<label>' . t(231, 'Server') . '</label>', $naviforms->textfield('mail_server', $item->mail_server), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' localhost, mail.yourdomain.com</span>')); $navibars->add_tab_content_row(array('<label>' . t(232, 'Port') . '</label>', $naviforms->textfield('mail_port', $item->mail_port), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' 25</span>')); $navibars->add_tab_content_row(array('<label>' . t(427, 'Security protocol') . '</label>', $naviforms->selectfield('mail_security', array(0, 1, 2), array(t(581, "None"), "SSL / TLS", "STARTTLS"), $item->mail_security))); $navibars->add_tab_content_row(array('<label>' . t(1, 'User') . '</label>', $naviforms->textfield('mail_user', $item->mail_user), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' web@yourdomain.com</span>')); $navibars->add_tab_content_row(array('<label>' . t(233, 'Address') . '</label>', $naviforms->textfield('mail_address', $item->mail_address), '<span class="navigate-form-row-info">' . t(230, 'Ex.') . ' web@yourdomain.com</span>')); $navibars->add_tab_content_row(array('<label>' . t(2, 'Password') . '</label>', '<input type="password" name="mail_password" id="mail_password" autocomplete="off" value="" size="32" />', '<span class="navigate-form-row-info">' . t(48, "Leave blank to keep the current value") . '</span>')); // force removing the browser saved password $layout->add_script(' setTimeout(function() { $("input[name=mail_password]").val(""); }, 10); '); if (empty($item->contact_emails)) { $item->contact_emails = array(); } $navibars->add_tab_content_row(array('<label>' . t(263, 'Support E-Mails') . '</label>', $naviforms->textarea('contact_emails', implode("\n", $item->contact_emails)), '<span class="navigate-form-row-info">' . t(264, "One entry per line") . '</span>')); $navibars->add_tab_content_row(array('<label> </label>', '<button id="mail_test"><img src="' . NAVIGATE_URL . '/img/icons/silk/email_go.png" align="absmiddle" /> ' . t(390, "Test") . '</button>')); $layout->add_script(' $("#mail_test").on("click", function() { navigate_status("' . t(391, "Trying to send a test e-mail…") . '", "loader", true); $.ajax({ type: "POST", url: "?fid=' . $_GET['fid'] . '&act=email_test", data: { mail_mailer: $("input[name=\\"mail_mailer[]\\"]:checked").val(), mail_server: $("#mail_server").val(), mail_port: $("#mail_port").val(), mail_security: $("#mail_security").is(":checked"), mail_user: $("#mail_user").val(), mail_address: $("#mail_address").val(), mail_password: $("#mail_password").val(), send_to: $("#contact_emails").val() }, success: function(data) { navigate_status(navigate_lang_dictionary[42], "ready"); if(!data) navigate_notification("' . t(56, "Unexpected error.") . '"); else navigate_notification("' . t(392, "E-Mail sent") . '"); }, error: function(data) { navigate_status(navigate_lang_dictionary[42], "ready"); var error_message = (data.responseText).split("<br />")[0]; if(error_message!="") error_message = ": " + error_message; navigate_notification("' . t(56, "Unexpected error.") . '" + error_message, true); }, dataType: "json" }); return false; }); '); /* METATAGS TAB */ if (!empty($item->id) && !empty($item->languages)) { $navibars->add_tab(t(513, "Metatags")); $website_languages_selector = $item->languages(); $website_languages_selector = array_merge(array('' => '(' . t(443, 'All') . ')'), $website_languages_selector); $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('metatags_language_selector', $website_languages_selector, '', "navigate_tabform_language_selector(this);"))); foreach ($item->languages_list as $lang) { $language_info = '<span class="navigate-form-row-language-info" title="' . language::name_by_code($lang) . '"><img src="img/icons/silk/comment.png" align="absmiddle" />' . $lang . '</span>'; $navibars->add_tab_content_row(array('<label>' . t(334, 'Description') . ' ' . $language_info . '</label>', $naviforms->textfield('metatag_description-' . $lang, $item->metatag_description[$lang]), '<span class="navigate-form-row-info">150-160</span>'), '', 'lang="' . $lang . '"'); $navibars->add_tab_content_row(array('<label>' . t(536, 'Keywords') . ' ' . $language_info . '</label>', $naviforms->textfield('metatag_keywords-' . $lang, $item->metatag_keywords[$lang])), '', 'lang="' . $lang . '"'); $layout->add_script(' $("#metatag_keywords-' . $lang . '").tagit({ removeConfirmation: true, allowSpaces: true, singleField: true, singleFieldDelimiter: ",", placeholderText: "+", autocomplete: { delay: 0, minLength: 1, source: "?fid=items&act=json_tags_search&lang=' . $lang . '" }, afterTagAdded: function(event, ui) { var tags = $(this).tagit("assignedTags"); if(tags.length > 0) tags = tags.join(","); else tags = ""; $("#metatag_keywords-' . $lang . '").val(tags); } }); '); $navibars->add_tab_content_row(array('<label>' . t(514, "Additional metatags") . ' ' . $language_info . '</label>', $naviforms->scriptarea('metatags-' . $lang, $item->metatags[$lang], 'html', ' width: 75%; height: 100px; ')), '', 'lang="' . $lang . '"'); } } /* SERVICES TAB */ $navibars->add_tab(t(178, "Services")); $navibars->add_tab_content_row(array('<label>' . t(498, 'Additional scripts') . '</label>', $naviforms->scriptarea('additional_scripts', $item->additional_scripts, 'js', ' width: 600px; height: 250px; '), '<div style="clear: both;"><label> </label><script type="text/javascript">...</script></div>')); if (!empty($item->theme)) { $navibars->add_tab(t(368, 'Theme') . ': ' . $theme->title); if (!is_array($theme->options)) { $theme->options = array(); } // show a language selector (only if it's a multilanguage website and has properties) if (!empty($theme->options) && count($item->languages) > 1) { $website_languages_selector = $item->languages(); $website_languages_selector = array_merge(array('' => '(' . t(443, 'All') . ')'), $website_languages_selector); $navibars->add_tab_content_row(array('<label>' . t(63, 'Languages') . '</label>', $naviforms->buttonset('language_selector', $website_languages_selector, '', "navigate_tabform_language_selector(this);")), "navigate-form-tab-theme-language_selector"); // hide languages selector if there isn't a multilanguage property $layout->add_script(' $(document).ready(function() { if($("#navigate-form-tab-theme-language_selector").parent().find(".navigate-form-row[lang]").length < 1) { $("#navigate-form-tab-theme-language_selector").css("display", "none"); } }); '); } // common property: style // 1: get available style IDs $styles_values = array_keys((array) $theme->styles); if (!is_array($styles_values)) { $styles_values = array(); } // 2: prepare array of style ID => style name $styles = array(); foreach ($styles_values as $sv) { $styles[$sv] = $theme->styles->{$sv}->name; if (empty($styles[$sv])) { $styles[$sv] = $sv; } $styles[$sv] = $theme->t($styles[$sv]); } $property = new property(); $property->id = 'style'; $property->name = t(431, 'Style'); $property->type = 'option'; $property->options = serialize($styles); $property->value = $item->theme_options->style; $navibars->add_tab_content(navigate_property_layout_field($property)); foreach ($theme->options as $theme_option) { $property = new property(); $property->load_from_theme($theme_option, $item->theme_options->{$theme_option->id}); $navibars->add_tab_content(navigate_property_layout_field($property, "", $item->id)); } navigate_property_layout_scripts($item->id); } $events->trigger('websites', 'edit', array('item' => &$item, 'navibars' => &$navibars, 'naviforms' => &$naviforms)); return $navibars->generate(); }