diff --git a/plugins/views/views_php_handler_area.inc b/plugins/views/views_php_handler_area.inc index 0296373..e7240aa 100644 --- a/plugins/views/views_php_handler_area.inc +++ b/plugins/views/views_php_handler_area.inc @@ -36,7 +36,10 @@ class views_php_handler_area extends views_handler_area { function render($empty = FALSE) { // Ecexute output PHP code. if ((!$empty || !empty($this->options['empty'])) && !empty($this->options['php_output'])) { - $function = create_function('$view, $handler, $results', ' ?>' . $this->options['php_output'] . 'options['php_output']; + $function = function($view, $handler, $results) use ($code) { + eval('?>' . $code); + }; ob_start(); $function($this->view, $this, $this->view->result); return ob_get_clean(); diff --git a/plugins/views/views_php_handler_field.inc b/plugins/views/views_php_handler_field.inc index a455a49..2e4ffd2 100644 --- a/plugins/views/views_php_handler_field.inc +++ b/plugins/views/views_php_handler_field.inc @@ -114,7 +114,10 @@ class views_php_handler_field extends views_handler_field { function php_pre_execute() { // Execute static PHP code. if (!empty($this->options['php_setup'])) { - $function = create_function('$view, $handler, &$static', $this->options['php_setup'] . ';'); + $code = $this->options['php_setup']; + $function = function($view, $handler, &$static) use ($code) { + eval($code); + }; ob_start(); $function($this->view, $this, $this->php_static_variable); ob_end_clean(); @@ -128,7 +131,10 @@ class views_php_handler_field extends views_handler_field { function php_post_execute() { // Execute value PHP code. if (!empty($this->options['php_value'])) { - $function = create_function('$view, $handler, &$static, $row', $this->options['php_value'] . ';'); + $code = $this->options['php_value']; + $function = function($view, $handler, &$static, $row) use ($code) { + eval($code); + }; ob_start(); foreach ($this->view->result as $i => &$row) { $normalized_row = new stdClass; @@ -149,7 +155,10 @@ class views_php_handler_field extends views_handler_field { if (!empty($this->options['use_php_click_sortable']) && !empty($this->php_click_sort_order)) { if ($this->options['use_php_click_sortable'] == self::CLICK_SORT_PHP) { if (!empty($this->options['php_click_sortable'])) { - $this->php_click_sort_function = create_function('$view, $handler, &$static, $row1, $row2', $this->options['php_click_sortable'] . ';'); + $code = $this->options['php_click_sortable']; + $this->php_click_sort_function = function($view, $handler, &$static, $row1, $row2) use ($code) { + return eval($code); + }; } } else { @@ -204,7 +213,10 @@ class views_php_handler_field extends views_handler_field { */ function render($values) { if (!empty($this->options['php_output'])) { - $this->php_output_lamda_function = create_function('$view, $handler, &$static, $row, $data, $value', ' ?>' . $this->options['php_output'] . 'options['php_output']; + $this->php_output_lamda_function = function($view, $handler, &$static, $row, $data, $value) use ($code) { + eval('?>' . $code); + }; $normalized_row = new stdClass; if (empty($this->view->style_plugin->rendered_fields)) { diff --git a/plugins/views/views_php_handler_filter.inc b/plugins/views/views_php_handler_filter.inc index 0c97a92..b412c2e 100644 --- a/plugins/views/views_php_handler_filter.inc +++ b/plugins/views/views_php_handler_filter.inc @@ -65,7 +65,10 @@ class views_php_handler_filter extends views_handler_filter { function php_pre_execute() { // Ecexute static PHP code. if (!empty($this->options['php_setup'])) { - $function = create_function('$view, $handler, &$static', $this->options['php_setup'] . ';'); + $code = $this->options['php_setup']; + $function = function($view, $handler, &$static) use ($code) { + eval($code); + }; ob_start(); $function($this->view, $this, $this->php_static_variable); ob_end_clean(); @@ -79,7 +82,10 @@ class views_php_handler_filter extends views_handler_filter { function php_pre_render() { // Evaluate the PHP code. if (!empty($this->options['php_filter'])) { - $function = create_function('$view, $handler, &$static, $row, $data', $this->options['php_filter'] . ';'); + $code = $this->options['php_filter']; + $function = function($view, $handler, &$static, $row, $data) use ($code) { + return eval($code); + }; ob_start(); $normalized_row = new stdClass; diff --git a/plugins/views/views_php_handler_sort.inc b/plugins/views/views_php_handler_sort.inc index cca24ba..a0c2661 100644 --- a/plugins/views/views_php_handler_sort.inc +++ b/plugins/views/views_php_handler_sort.inc @@ -57,7 +57,10 @@ class views_php_handler_sort extends views_handler_sort { function php_pre_execute() { // Ecexute static PHP code. if (!empty($this->options['php_setup'])) { - $function = create_function('$view, $handler, &$static', $this->options['php_setup'] . ';'); + $code = $this->options['php_setup']; + $function = function($view, $handler, &$static) use ($code) { + eval($code); + }; ob_start(); $function($this->view, $this, $this->php_static_variable); ob_end_clean(); @@ -70,7 +73,10 @@ class views_php_handler_sort extends views_handler_sort { */ function php_post_execute() { if (!empty($this->options['php_sort']) && $this->view->style_plugin->build_sort()) { - $this->php_sort_function = create_function('$view, $handler, &$static, $row1, $row2', $this->options['php_sort'] . ';'); + $code = $this->options['php_sort']; + $this->php_sort_function = function($view, $handler, &$static, $row1, $row2) use ($code) { + return eval($code); + }; ob_start(); usort($this->view->result, array($this, 'php_sort')); ob_end_clean(); diff --git a/plugins/views/views_php_plugin_cache.inc b/plugins/views/views_php_plugin_cache.inc index ca6c90f..31587bd 100644 --- a/plugins/views/views_php_plugin_cache.inc +++ b/plugins/views/views_php_plugin_cache.inc @@ -63,7 +63,10 @@ class views_php_plugin_cache extends views_plugin_cache { $cache = cache_get($this->get_results_key(), $this->table); $fresh = !empty($cache); if ($fresh && !empty($this->options['php_cache_results'])) { - $function = create_function('$view, $plugin, $cache', $this->options['php_cache_results'] . ';'); + $code = $this->options['php_cache_results']; + $function = function($view, $plugin, $cache) use ($code) { + return eval($code); + }; ob_start(); $fresh = $function($this->view, $this, $cache); ob_end_clean(); @@ -84,7 +87,10 @@ class views_php_plugin_cache extends views_plugin_cache { $cache = cache_get($this->get_output_key(), $this->table); $fresh = !empty($cache); if ($fresh && !empty($this->options['php_cache_output'])) { - $function = create_function('$view, $plugin, $cache', $this->options['php_cache_output'] . ';'); + $code = $this->options['php_cache_output']; + $function = function($view, $plugin, $cache) use ($code) { + return eval($code); + }; ob_start(); $fresh = $function($this->view, $this, $cache); ob_end_clean(); diff --git a/views_php.module b/views_php.module index 53bd526..2237a68 100644 --- a/views_php.module +++ b/views_php.module @@ -27,7 +27,9 @@ function views_php_check_access($php_access, $view_name, $display_id, $account = } if (!isset($function[$view_name . ':' . $display_id])) { - $function[$view_name . ':' . $display_id] = create_function('$view_name, $display_id, $account', $php_access . ';'); + $function[$view_name . ':' . $display_id] = function($view_name, $display_id, $account) use ($php_access) { + return eval($php_access); + }; } ob_start();