From a09f5fd36d62a4aa3a7fb3a2fb430763a1cfdc7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Valentin?= Date: Tue, 22 Sep 2015 21:55:26 +0200 Subject: [PATCH] [LiveEditor] Fix displaying empty zones (and initializing new disposition) --- neofrag/classes/zone.php | 4 +-- neofrag/core/output.php | 4 +++ .../modules/live_editor/controllers/ajax.php | 10 ++++++ .../live_editor/controllers/ajax_checker.php | 14 +++++++- neofrag/modules/live_editor/js/live-editor.js | 33 ++++++++++++++----- .../live_editor/models/live_editor.php | 10 ++++++ 6 files changed, 63 insertions(+), 12 deletions(-) diff --git a/neofrag/classes/zone.php b/neofrag/classes/zone.php index 3a3b6215..491cb484 100644 --- a/neofrag/classes/zone.php +++ b/neofrag/classes/zone.php @@ -36,13 +36,13 @@ static public function display($disposition_id, $disposition, $page, $zone_id) if (NeoFrag::live_editor() & NeoFrag::ZONES) { $output = '
- '.($page == '*' ? '' : '').' + '.($page == '*' ? '' : '').'

'.(!empty($NeoFrag->load->theme->zones[$zone_id]) ? $NeoFrag->load->theme->zones[$zone_id] : 'Zone #'.$zone_id).'

'. $output; } - $output = ''.$output.''; + $output = ''.$output.''; } return $output; diff --git a/neofrag/core/output.php b/neofrag/core/output.php index 396bdf0e..29eb663e 100644 --- a/neofrag/core/output.php +++ b/neofrag/core/output.php @@ -180,6 +180,10 @@ public function display_zone($zone_id) $disposition = $dispositions[$zone_id]; return Zone::display($disposition['disposition_id'], unserialize($disposition['disposition']), $disposition['page'], $zone_id); } + else if (NeoFrag::live_editor()) + { + return Zone::display(-1, array(), '*', $zone_id); + } return ''; } diff --git a/neofrag/modules/live_editor/controllers/ajax.php b/neofrag/modules/live_editor/controllers/ajax.php index 3c20606c..795bde89 100644 --- a/neofrag/modules/live_editor/controllers/ajax.php +++ b/neofrag/modules/live_editor/controllers/ajax.php @@ -20,6 +20,16 @@ class m_live_editor_c_ajax extends Controller_Module { + public function add_disposition($zone_id) + { + $this->extension('json'); + + return json_encode(array( + 'disposition_id' => $disposition_id = $this->model()->add_disposition($zone_id), + 'html' => $this->row_add($disposition_id, $this->model()->get_disposition($disposition_id)) + )); + } + public function zone_fork($disposition_id, $disposition, $url, $theme, $page, $zone) { $url = str_replace(url(), '', $url); diff --git a/neofrag/modules/live_editor/controllers/ajax_checker.php b/neofrag/modules/live_editor/controllers/ajax_checker.php index a05b50c5..7f10ceb4 100644 --- a/neofrag/modules/live_editor/controllers/ajax_checker.php +++ b/neofrag/modules/live_editor/controllers/ajax_checker.php @@ -20,6 +20,18 @@ class m_live_editor_c_ajax_checker extends Controller_Module { + public function add_disposition() + { + $post = post(); + + if ($this->user('admin') && !empty($post['zone_id'])) + { + return array($post['zone_id']); + } + + throw new Exception(NeoFrag::UNFOUND); + } + public function zone_fork() { return $this->_check_disposition('disposition_id', 'url'); @@ -157,7 +169,7 @@ public function widget_delete() private function _check_disposition() { - if ($this->user('admin') && !array_diff(array_keys($args = array_intersect_key(post(), array_flip(func_get_args()))), func_get_args())) + if ($this->user('admin') && !array_diff(func_get_args(), array_keys($args = array_intersect_key(post(), array_flip(func_get_args()))))) { $args = array_merge(array_flip(func_get_args()), $args); array_splice($args, 1, 0, array($this->model()->get_disposition($args['disposition_id'], $theme, $page, $zone))); diff --git a/neofrag/modules/live_editor/js/live-editor.js b/neofrag/modules/live_editor/js/live-editor.js index 94c2acfe..18554639 100644 --- a/neofrag/modules/live_editor/js/live-editor.js +++ b/neofrag/modules/live_editor/js/live-editor.js @@ -343,17 +343,32 @@ $(function(){ /* Row Add */ $iframe.on('click', '.live-editor-add-row', function(){ - var $this = $(this).parents('[data-disposition-id]:first'); + var $this = $(this).parents('.live-editor-zone:first'); $('.live-editor-save').show(); - $.post('', { - disposition_id: $this.data('disposition-id'), - live_editor: $('input[type="hidden"][name="live_editor"]').val() - }, function(data){ - $this.append(data); - }).always(function(){ - $('.live-editor-save').hide(); - }); + if ($this.data('zone-id')){ + $.post('', { + zone_id: $this.data('zone-id'), + live_editor: $('input[type="hidden"][name="live_editor"]').val() + }, function(data){ + $this .attr('data-disposition-id', data.disposition_id) + .removeAttr('data-zone-id') + .append(data.html) + .find('.live-editor-fork').show(); + }).always(function(){ + $('.live-editor-save').hide(); + }); + } + else { + $.post('', { + disposition_id: $this.data('disposition-id'), + live_editor: $('input[type="hidden"][name="live_editor"]').val() + }, function(data){ + $this.append(data); + }).always(function(){ + $('.live-editor-save').hide(); + }); + } }); /* Row Move */ diff --git a/neofrag/modules/live_editor/models/live_editor.php b/neofrag/modules/live_editor/models/live_editor.php index a91e01db..5e8b951a 100644 --- a/neofrag/modules/live_editor/models/live_editor.php +++ b/neofrag/modules/live_editor/models/live_editor.php @@ -41,6 +41,16 @@ public function set_disposition($disposition_id, $disposition) 'disposition' => serialize($disposition) )); } + + public function add_disposition($zone_id) + { + return $this->db->insert('nf_dispositions', array( + 'theme' => $this->config->nf_default_theme, + 'page' => '*', + 'zone' => $zone_id, + 'disposition' => serialize(array()) + )); + } public function delete_disposition($rows) {