/lib/packages/blocks/blocks.php
PHP | 3299 lines | 2911 code | 358 blank | 30 comment | 174 complexity | f7ce073a2e8adaef57443d06b6789311 MD5 | raw file
Possible License(s): GPL-2.0, MIT, LGPL-2.1, BSD-3-Clause, AGPL-3.0, Apache-2.0
Large files files are truncated, but you can click here to view the full file
- <?php
- require_once(NAVIGATE_PATH.'/lib/packages/blocks/block.class.php');
- require_once(NAVIGATE_PATH.'/lib/packages/blocks/block_group.class.php');
- require_once(NAVIGATE_PATH.'/lib/packages/properties/property.class.php');
- require_once(NAVIGATE_PATH.'/lib/packages/properties/property.layout.php');
- require_once(NAVIGATE_PATH.'/lib/packages/extensions/extension.class.php');
- require_once(NAVIGATE_PATH.'/lib/packages/webusers/webuser_group.class.php');
-
- function run()
- {
- global $layout;
- global $DB;
- global $website;
-
- $out = '';
- $item = new block();
-
- switch($_REQUEST['act'])
- {
- case 'json':
- case 1: // json data retrieval & operations
- switch($_REQUEST['oper'])
- {
- case 'del': // remove rows
- $ids = $_REQUEST['ids'];
- foreach($ids as $id)
- {
- $item->load($id);
- $item->delete();
- }
- echo json_encode(true);
- break;
-
- default: // list or search
- // translation of request search & order fields
- switch($_REQUEST['searchField'])
- {
- case 'id':
- $_REQUEST['searchField'] = 'b.id';
- break;
- case 'type':
- $_REQUEST['searchField'] = 'b.type';
- break;
- case 'title':
- $_REQUEST['searchField'] = 'd.text';
- break;
- case 'category':
- $_REQUEST['searchField'] = 'b.category';
- break;
- case 'dates':
- $_REQUEST['searchField'] = 'b.date_published';
- break;
- case 'enabled':
- $_REQUEST['searchField'] = 'b.enabled';
- break;
- case 'date_modified':
- default:
- $_REQUEST['searchField'] = 'b.date_modified';
- }
-
- if($_REQUEST['sidx']=='dates')
- $_REQUEST['sidx'] = 'b.date_published';
-
- $page = intval($_REQUEST['page']);
- $max = intval($_REQUEST['rows']);
- $offset = ($page - 1) * $max;
- $orderby= $_REQUEST['sidx'].' '.$_REQUEST['sord'];
- $where = " 1=1 ";
-
- if($_REQUEST['_search']=='true' || isset($_REQUEST['quicksearch']))
- {
- if(isset($_REQUEST['quicksearch']))
- $where .= $item->quicksearch($_REQUEST['quicksearch']);
- else if(isset($_REQUEST['filters']))
- {
- $where .= navitable::jqgridsearch($_REQUEST['filters']);
- // special case
- if( strpos($where, 'title LIKE')!== false)
- {
- $where = substr_replace($where, 'd.text', strpos($where, 'title LIKE'), 5);
- }
- }
- else // single search
- $where .= ' AND '.navitable::jqgridcompare($_REQUEST['searchField'], $_REQUEST['searchOper'], $_REQUEST['searchString']);
- }
-
- $sql = ' SELECT SQL_CALC_FOUND_ROWS b.*, d.text as title
- FROM nv_blocks b
- LEFT JOIN nv_webdictionary d
- ON b.id = d.node_id
- AND d.node_type = "block"
- AND d.subtype = "title"
- AND d.lang = "'.$website->languages_list[0].'"
- AND d.website = '.$website->id.'
- WHERE '.$where.'
- AND b.website = '.$website->id.'
- ORDER BY '.$orderby.'
- LIMIT '.$max.'
- OFFSET '.$offset;
-
- if(!$DB->query($sql, 'array'))
- {
- throw new Exception($DB->get_last_error());
- }
-
- $dataset = $DB->result();
- $total = $DB->foundRows();
-
- $block_types = block::types();
- $block_types_list = array();
-
- for($i=0; $i < count($block_types); $i++)
- {
- if(is_numeric($block_types[$i]['id']))
- $block_types_list[$block_types[$i]['code']] = $block_types[$i]['title'];
- else
- $block_types_list[$block_types[$i]['id']] = $block_types[$i]['title'];
- }
-
- $dataset = grid_notes::summary($dataset, 'block', 'id');
-
- // we need to format the values and retrieve the needed strings from the dictionary
- $out = array();
- for($i=0; $i < count($dataset); $i++)
- {
- if(empty($dataset[$i])) continue;
-
- $access = array(
- 0 => '<img src="img/icons/silk/page_white_go.png" align="absmiddle" title="'.t(254, 'Everybody').'" />',
- 1 => '<img src="img/icons/silk/lock.png" align="absmiddle" title="'.t(361, 'Web users only').'" />',
- 2 => '<img src="img/icons/silk/user_gray.png" align="absmiddle" title="'.t(363, 'Users who have not yet signed up or signed in').'" />',
- 3 => '<img src="img/icons/silk/group_key.png" align="absmiddle" title="'.t(512, "Selected web user groups").'" />'
- );
-
- if(empty($dataset[$i]['date_published']))
- $dataset[$i]['date_published'] = '∞';
- else
- $dataset[$i]['date_published'] = core_ts2date($dataset[$i]['date_published'], false);
-
- if(empty($dataset[$i]['date_unpublish']))
- $dataset[$i]['date_unpublish'] = '∞';
- else
- $dataset[$i]['date_unpublish'] = core_ts2date($dataset[$i]['date_unpublish'], false);
-
- if($dataset[$i]['category'] > 0)
- $dataset[$i]['category'] = $DB->query_single(
- 'text',
- 'nv_webdictionary',
- ' node_type = "structure" AND
- node_id = "'.$dataset[$i]['category'].'" AND
- subtype = "title" AND
- lang = "'.$website->languages_list[0].'"
- '
- );
-
- $out[$i] = array(
- 0 => $dataset[$i]['id'],
- 1 => $block_types_list[$dataset[$i]['type']],
- 2 => '<div class="list-row" data-enabled="'.$dataset[$i]['enabled'].'">'.$dataset[$i]['title'].'</div>',
- 3 => $dataset[$i]['date_published'].' - '.$dataset[$i]['date_unpublish'],
- 4 => $access[$dataset[$i]['access']],
- 5 => (($dataset[$i]['enabled']==1)? '<img src="img/icons/silk/accept.png" />' : '<img src="img/icons/silk/cancel.png" />'),
- 6 => $dataset[$i]['_grid_notes_html']
- );
- }
-
- navitable::jqgridJson($out, $page, $offset, $max, $total);
- break;
- }
-
- session_write_close();
- exit;
- break;
-
- case 'load':
- case 'edit':
- case 2:
- if(!empty($_REQUEST['id']))
- {
- $item->load(intval($_REQUEST['id']));
- }
-
- if(isset($_REQUEST['form-sent']))
- {
- $item->load_from_post();
- try
- {
- $item->save();
- property::save_properties_from_post('block', $item->id);
- $id = $item->id;
-
- // set block order
- if(!empty($item->type) && !empty($_REQUEST['blocks-order']))
- block::reorder($item->type, $_REQUEST['blocks-order'], $_REQUEST['blocks-order-fixed']);
-
- unset($item);
- $item = new block();
- $item->load($id);
- $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check');
- }
- catch(Exception $e)
- {
- $layout->navigate_notification($e->getMessage(), true, true);
- }
- users_log::action($_REQUEST['fid'], $item->id, 'save', $item->dictionary[$website->languages_list[0]]['title'], json_encode($_REQUEST));
- }
- else
- users_log::action($_REQUEST['fid'], $item->id, 'load', $item->dictionary[$website->languages_list[0]]['title']);
-
- $out = blocks_form($item);
- break;
-
- case 'delete':
- case 4: // remove
- if(!empty($_REQUEST['id']))
- {
- $item->load(intval($_REQUEST['id']));
- if($item->delete() > 0)
- {
- $layout->navigate_notification(t(55, 'Item removed successfully.'), false);
- $out = blocks_list();
- }
- else
- {
- $layout->navigate_notification(t(56, 'Unexpected error.'), false);
- $out = blocks_form($item);
- }
- users_log::action($_REQUEST['fid'], $item->id, 'remove', $item->dictionary[$website->languages_list[0]]['title']);
- }
- break;
-
- case 'duplicate':
- if(!empty($_REQUEST['id']))
- {
- $item->load(intval($_REQUEST['id']));
-
- $properties = property::load_properties_associative(
- 'block', $item->type,
- 'block', $item->id
- );
-
- // try to duplicate
- $item->id = 0;
- $ok = $item->insert();
-
- if($ok)
- {
- // also duplicate block properties
- $ok = property::save_properties_from_array('block', $item->id, $item->type, $properties);
- }
-
- if($ok)
- {
- $layout->navigate_notification(t(478, 'Item duplicated successfully.'), false, false, 'fa fa-check');
- $out = blocks_form($item);
- }
- else
- {
- $layout->navigate_notification(t(56, 'Unexpected error.'), false);
- $item = new block();
- $item->load(intval($_REQUEST['id']));
- $out = blocks_form($item);
- }
-
- users_log::action($_REQUEST['fid'], $item->id, 'duplicate', $item->dictionary[$website->languages_list[0]]['title'], json_encode($_REQUEST));
- }
- break;
-
- case 'path':
- case 5: // search an existing path
- $DB->query('SELECT path as id, path as label, path as value
- FROM nv_paths
- WHERE path LIKE '.protect('%'.$_REQUEST['term'].'%').'
- AND website = '.$website->id.'
- ORDER BY path ASC
- LIMIT 10',
- 'array');
-
- echo json_encode($DB->result());
-
- core_terminate();
- break;
-
- case 'block_groups_list':
- $out = block_groups_list();
- break;
-
- case 'block_groups_json': // block groups: json data retrieval
- $page = intval($_REQUEST['page']);
- $max = intval($_REQUEST['rows']);
- $offset = ($page - 1) * $max;
-
- list($rs, $total) = block_group::paginated_list($offset, $max, $_REQUEST['sidx'], $_REQUEST['sord']);
-
- $rs = grid_notes::summary($rs, 'block_group', 'id');
-
- // translate $rs to an array of ordered fields
- foreach($rs as $row)
- {
- if(substr($row['blocks'], 0, 2)=='a:') // nv < 2.1
- $row['blocks'] = mb_unserialize($row['blocks']);
- else // nv >= 2.1
- $row['blocks'] = json_decode($row['blocks'], true);
-
- $dataset[] = array(
- 'id' => $row['id'],
- 'code' => $row['code'],
- 'title' => $row['title'],
- 'blocks' => count($row['blocks']),
- 'notes' => $row['_grid_notes_html']
- );
- }
-
- navitable::jqgridJson($dataset, $page, $offset, $max, $total, 'id');
-
- session_write_close();
- exit;
- break;
-
- case 'block_group_edit':
- $item = new block_group();
-
- if(!empty($_REQUEST['id']))
- {
- $item->load(intval($_REQUEST['id']));
- }
-
- if(isset($_REQUEST['form-sent']))
- {
- $item->load_from_post();
- try
- {
- $item->save();
- $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check');
- }
- catch(Exception $e)
- {
- $layout->navigate_notification($e->getMessage(), true, true);
- }
- users_log::action($_REQUEST['fid'], $item->id, 'save', $item->title, json_encode($_REQUEST));
- }
- else if(!empty($_REQUEST['id']))
- users_log::action($_REQUEST['fid'], $item->id, 'edit', $item->title);
-
- $out = block_group_form($item);
- break;
-
- case 'block_group_delete':
- $item = new block_group();
- if(!empty($_REQUEST['id']))
- {
- $item->load(intval($_REQUEST['id']));
- if($item->delete() > 0)
- {
- $layout->navigate_notification(t(55, 'Item removed successfully.'), false);
- $out = block_groups_list();
- }
- else
- {
- $layout->navigate_notification(t(56, 'Unexpected error.'), false);
- $out = block_group_form($item);
- }
- users_log::action($_REQUEST['fid'], $item->id, 'remove', $item->title);
- }
- break;
-
- case 'block_types_list':
- $out = blocks_types_list();
- break;
-
- case 'block_types_json': // block types: json data retrieval
- $page = intval($_REQUEST['page']);
- $max = intval($_REQUEST['rows']);
- $offset = ($page - 1) * $max;
-
- $rs = block::types($_REQUEST['sidx'], $_REQUEST['sord']);
-
- $block_modes = block::modes();
-
- // translate $rs to an array of ordered fields
- foreach($rs as $row)
- {
- $dataset[] = array(
- 'id' => $row['id'],
- 'type' => $block_modes[$row['type']],
- 'code' => $row['code'],
- 'title' => $row['title'],
- 'width' => $row['width'],
- 'height' => $row['height']
- );
- }
-
- $total = count($dataset);
- navitable::jqgridJson($dataset, $page, $offset, $max, $total, 'id');
-
- session_write_close();
- exit;
- break;
-
- case 'block_type_edit':
- case 82: // edit/create block type
-
- $item = NULL;
- $position = NULL;
- $max_id = 0;
-
- $dataset = block::custom_types();
- for($i=0; $i < count($dataset); $i++)
- {
- if($dataset[$i]['id'] > $max_id)
- $max_id = $dataset[$i]['id'];
-
- if($dataset[$i]['id'] == $_REQUEST['id'])
- {
- $item = $dataset[$i];
- $position = $i;
- }
- }
-
- if(empty($item))
- {
- $layout->navigate_notification(t(599, "Sorry, can't display a theme block type info."));
- $out = blocks_types_list();
- }
- else
- {
- if(isset($_REQUEST['form-sent']))
- {
- if(empty($item))
- $item = array('id' => $max_id + 1);
-
- $item['type'] = $_REQUEST['type'];
- $item['title'] = $_REQUEST['title'];
- $item['code'] = $_REQUEST['code'];
- $item['width'] = $_REQUEST['width'];
- $item['height'] = $_REQUEST['height'];
- $item['order'] = $_REQUEST['order'];
- $item['maximum'] = $_REQUEST['maximum'];
- $item['notes'] = pquotes($_REQUEST['notes']);
-
- if(!is_null($position))
- $dataset[$position] = $item;
- else
- $dataset[] = $item;
-
- try
- {
- // save
- $ok = block::types_update($dataset);
- $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check');
- }
- catch(Exception $e)
- {
- $layout->navigate_notification($e->getMessage(), true, true);
- }
- }
-
- $out = blocks_type_form($item);
- }
-
- break;
-
- case 'block_type_delete':
- case 84: // remove block type
- $dataset = block::custom_types();
- $item = NULL;
-
- for($i=0; $i < count($dataset); $i++)
- {
- if($dataset[$i]['id'] == $_REQUEST['id'])
- {
- unset($dataset[$i]);
- break;
- }
- }
-
- try
- {
- block::types_update($dataset);
- $layout->navigate_notification(t(55, 'Item removed successfully.'), false);
- $out = blocks_types_list();
- }
- catch(Exception $e)
- {
- $out = $layout->navigate_message("error", t(23, 'Blocks'), t(56, 'Unexpected error.'));
- }
- break;
-
- case 'block_property_load':
- $property = new property();
-
- if(!empty($_REQUEST['id']))
- {
- if(is_numeric($_REQUEST['id']))
- $property->load(intval($_REQUEST['id']));
- else
- $property->load_from_theme($_REQUEST['id'], null, 'block', $_REQUEST['block']);
- }
-
- header('Content-type: text/json');
-
- $types = property::types();
- $property->type_text = $types[$property->type];
-
- echo json_encode($property);
-
- session_write_close();
- exit;
- break;
-
- case 'block_property_save': // save property details
-
- $property = new property();
-
- if(!empty($_REQUEST['property-id']))
- $property->load(intval($_REQUEST['property-id']));
-
- $property->load_from_post();
- $property->save();
-
- header('Content-type: text/json');
-
- $types = property::types();
- $property->type_text = $types[$property->type];
-
- echo json_encode($property);
-
- session_write_close();
- exit;
- break;
-
- case 'block_property_remove': // remove property
-
- $property = new property();
-
- if(!empty($_REQUEST['property-id']))
- $property->load(intval($_REQUEST['property-id']));
-
- $property->delete();
-
- session_write_close();
- exit;
- break;
-
- case 'block_group_block_options':
- $status = null;
- $block_group = $_REQUEST['block_group'];
- $block_code = $_REQUEST['code'];
- $block_uid = $_REQUEST['block_uid'];
-
- if(isset($_REQUEST['form-sent']))
- $status = property::save_properties_from_post('block_group_block', $block_code, $block_group, $block_code, $block_uid);
-
- $out = block_group_block_options($block_group, $block_code, $block_uid, $status);
-
- echo $out;
-
- core_terminate();
- break;
-
- case 'block_group_extension_block_options':
- $status = null;
- $block_group = $_REQUEST['block_group']; // block_group type
- $block_id = $_REQUEST['block_id']; // extension block id (type)
- $block_uid = $_REQUEST['block_uid']; // extension block unique id
- $block_extension = $_REQUEST['block_extension']; // extension name
-
- if(isset($_REQUEST['form-sent']))
- $status = property::save_properties_from_post('extension_block', $block_group, $block_id, null, $block_uid);
-
- $out = block_group_extension_block_options($block_group, $block_extension, $block_id, $block_uid, $status);
-
- echo $out;
-
- core_terminate();
- break;
-
- case 'list':
- case 0:
- default:
- $out = blocks_list();
- break;
- }
-
- return $out;
- }
-
- function blocks_list()
- {
- global $events;
- global $user;
-
- $navibars = new navibars();
- $navitable = new navitable("blocks_list");
-
- $navibars->title(t(23, 'Blocks'));
-
- // retrieve block groups, if more than 10, do not show quickmenu
-
- $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 class="ui-menu-action-bigger" href="?fid=blocks&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=blocks&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=blocks&act=block_groups_list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/bricks.png"> '.t(506, 'Groups').'</a>'),
- '<a href="?fid=blocks&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(
- '<a href="?fid=blocks&act=edit"><img height="16" align="absmiddle" width="16" src="img/icons/silk/add.png"> '.t(38, 'Create').'</a>',
- '<a href="?fid=blocks&act=list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/application_view_list.png"> '.t(39, 'List').'</a>',
- 'search_form'
- )
- );
-
- if(@$_REQUEST['quicksearch']=='true')
- $navitable->setInitialURL("?fid=blocks&act=json&_search=true&quicksearch=".$_REQUEST['navigate-quicksearch']);
-
- $navitable->setURL('?fid=blocks&act=json');
- $navitable->sortBy('date_modified', 'desc');
- $navitable->setDataIndex('id');
- $navitable->setEditUrl('id', '?fid=blocks&act=edit&id=');
- $navitable->enableSearch();
- if($user->permission("blocks.delete") == 'true')
- $navitable->enableDelete();
- $navitable->setGridNotesObjectName("block");
-
- $navitable->addCol("ID", 'id', "40", "true", "left");
- $navitable->addCol(t(160, 'Type'), 'type', "120", "true", "center");
- $navitable->addCol(t(67, 'Title'), 'title', "400", "true", "left");
- $navitable->addCol(t(85, 'Date published'), 'dates', "100", "true", "center");
- $navitable->addCol(t(364, 'Access'), 'access', "40", "true", "center");
- $navitable->addCol(t(65, 'Enabled'), 'enabled', "40", "true", "center");
- $navitable->addCol(t(168, 'Notes'), 'note', "50", "false", "center");
-
- $navibars->add_content($navitable->generate());
-
- return $navibars->generate();
- }
-
- function blocks_form($item)
- {
- global $user;
- global $DB;
- global $website;
- global $layout;
- global $events;
- global $theme;
-
- $current_version = $_SESSION['current_version'];
- $extra_actions = array();
-
- $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("
- $(document).on('keydown.ctrl_s', function (evt) { navigate_tabform_submit(1); return false; } );
- $(document).on('keydown.ctrl_m', function (evt) { navigate_media_browser(); return false; } );
- ");
-
-
- 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').'"
- );
- }
- ');
-
- if($user->permission("blocks.create") == 'true')
- $extra_actions[] = '<a href="?fid=blocks&act=duplicate&id='.$item->id.'" onclick="$(this).attr(\'#\');"><img height="16" align="absmiddle" width="16" src="img/icons/silk/page_copy.png"> '.t(477, 'Duplicate').'</a>';
- }
-
- array_unshift($extra_actions, '<a href="?fid=blocks&act=block_types_list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/brick_edit.png"> '.t(167, 'Types').'</a>');
-
- $events->add_actions(
- 'blocks',
- array(
- 'item' => null,
- 'navibars' => &$navibars
- ),
- $extra_actions
- );
-
- $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=blocks&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=blocks&act=block_groups_list"><img height="16" align="absmiddle" width="16" src="img/icons/silk/bricks.png"> '.t(506, 'Groups').' ▾</a>'
- );
- }
- else
- {
- $navibars->add_actions(
- array(
- '<a href="?fid=blocks&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($item->id)? '<a href="?fid=blocks&act=edit"><img height="16" align="absmiddle" width="16" src="img/icons/silk/add.png"> '.t(38, 'Create').'</a>' : ''),
- '<a href="?fid=blocks&act=list"><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(NULL, '?fid=blocks&act=edit');
-
- $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']; // block type created via navigate interface
- 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-code-'.$lang.'['.$uid.']" value="'.$pa['code'].'" style="width: 120px;" />', '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-code-'.$lang.'['.$uid.']" value="'.$uid.'" style="width: 120px;" />', '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)
- {
- // navigate 1.x compatibility
- if(!isset($tb->id) && isset($tb->code))
- $tb->id = $tb->code;
-
- if($tb->id == $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'), 180);
- $table->addHeaderColumn(t(197, 'Link'), 390);
- $table->addHeaderColumn('<i class="fa fa-lg fa-fw fa-external-link" title="'.t(324, 'New window').'"></i>', 16);
- $table->addHeaderColumn('<i class="fa fa-lg fa-fw fa-globe" title="'.t(364, 'Access').'"></i>', 20);
- $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' => ''),
- 'access' => array('0' => 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' => '<input type="hidden" name="trigger-links-table-access-'.$lang.'['.$uid.']" data-role="access" id="trigger-links-table-access-'.$lang.'['.$uid.']" value="'.value_or_default($tlinks['access'][$key], 0).'" />
- <i class="fa fa-fw fa-lg fa-eye '.($tlinks['access'][$key]=='1'? 'hidden' : '').'" onclick="navigate_blocks_trigger_links_table_row_access(this);" data-value="0" for="trigger-links-table-access-'.$lang.'['.$uid.']"></i>
- <i class="fa fa-fw fa-lg fa-eye-slash '.($tlinks['access'][$key]=='1'? '' : 'hidden').'" onclick="navigate_blocks_trigger_links_table_row_access(this);" data-value="1" for="trigger-links-table-access-'.$lang.'['.$uid.']"></i>',
- 'align' => 'center'),
- 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' => '<input type="hidden" name="trigger-links-table-access-'.$lang.'['.$uid.']" data-role="access" id="trigger-links-table-access-'.$lang.'['.$uid.']" value="0" />
- <i class="fa fa-fw fa-lg fa-eye" onclick="navigate_blocks_trigger_links_table_row_visibility(this);" data-value="0" for="trigger-links-table-access-'.$lang.'['.$uid.']"></i>
- <i class="fa fa-fw fa-lg fa-eye-slash hidden" onclick="navigate_blocks_trigger_links_table_row_visibility(this);" data-value="1" for="trigger-links-table-access-'.$lang.'['.$uid.']"></i>',
- 'align' => 'center'),
- 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(
- …
Large files files are truncated, but you can click here to view the full file