aboutsummaryrefslogtreecommitdiffstats
path: root/BSF/plugins/event_tracer
diff options
context:
space:
mode:
Diffstat (limited to 'BSF/plugins/event_tracer')
-rw-r--r--BSF/plugins/event_tracer/event_list.php90
-rw-r--r--BSF/plugins/event_tracer/event_list.tpl17
-rw-r--r--BSF/plugins/event_tracer/index.php30
-rw-r--r--BSF/plugins/event_tracer/main.inc.php137
-rw-r--r--BSF/plugins/event_tracer/maintain.inc.php9
-rw-r--r--BSF/plugins/event_tracer/tracer_admin.php31
-rw-r--r--BSF/plugins/event_tracer/tracer_admin.tpl29
7 files changed, 343 insertions, 0 deletions
diff --git a/BSF/plugins/event_tracer/event_list.php b/BSF/plugins/event_tracer/event_list.php
new file mode 100644
index 000000000..ae617fe87
--- /dev/null
+++ b/BSF/plugins/event_tracer/event_list.php
@@ -0,0 +1,90 @@
+<?php
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+
+function get_php_files($path, $to_ignore=array(), $recursive=true )
+{
+ $files = array();
+ if (is_dir($path))
+ {
+ if ($contents = opendir($path))
+ {
+ while (($node = readdir($contents)) !== false)
+ {
+ if ($node != '.' and $node != '..' and $node != '.svn'
+ and !in_array($node, $to_ignore) )
+ {
+ if ( $recursive and is_dir($path.'/'.$node) )
+ {
+ $files = array_merge($files, get_php_files($path.'/'.$node, $to_ignore));
+
+ }
+ if ( is_file($path.'/'.$node) )
+ {
+ $files[] = $path.'/'.$node;
+ }
+ }
+ }
+ closedir($contents);
+ }
+ }
+ return $files;
+}
+
+$files = array();
+$files = array_merge( $files, get_php_files('.', array(), false) );
+$files = array_merge( $files, get_php_files('./include') );
+$files = array_merge( $files, get_php_files('./admin') );
+$files = array_unique($files);
+
+$events = array();
+foreach ($files as $file)
+{
+ $code = file_get_contents($file);
+ $code = preg_replace( '#\?'.'>.*<\?php#m', '', $code);
+ $code = preg_replace( '#\/\*.*\*\/#m', '', $code);
+ $code = preg_replace( '#\/\/.*#', '', $code);
+
+ $count = preg_match_all(
+ '#[^a-zA-Z_$-]trigger_(action|event)\s*\(\s*([^,)]+)#m',
+ $code, $matches
+ );
+
+ for ($i=0; $i<$count; $i++)
+ {
+ $type = $matches[1][$i];
+ $name = preg_replace( '#^[\'"]?([^\'"]*)[\'"]?$#', '$1', $matches[2][$i]);
+ array_push($events, array($type,$name,$file) );
+ }
+}
+
+$sort= isset($_GET['sort']) ? $_GET['sort'] : 1;
+usort(
+ $events,
+ create_function( '$a,$b', 'return $a['.$sort.']>$b['.$sort.'];' )
+ );
+
+global $template;
+
+$url = get_admin_plugin_menu_link(__FILE__);
+
+$template->assign( array(
+ 'NB_EVENTS' => count($events),
+ 'U_SORT0' => add_url_params($url, array('sort'=>0) ),
+ 'U_SORT1' => add_url_params($url, array('sort'=>1) ),
+ 'U_SORT2' => add_url_params($url, array('sort'=>2) ),
+ ) );
+
+$template->assign('events', array());
+foreach ($events as $e)
+{
+ $template->append( 'events', array(
+ 'TYPE' => $e[0],
+ 'NAME' => $e[1],
+ 'FILE' => $e[2],
+ )
+ );
+}
+
+$template->set_filenames( array('event_list' => dirname(__FILE__).'/event_list.tpl' ) );
+$template->assign_var_from_handle( 'ADMIN_CONTENT', 'event_list');
+?>
diff --git a/BSF/plugins/event_tracer/event_list.tpl b/BSF/plugins/event_tracer/event_list.tpl
new file mode 100644
index 000000000..accc27278
--- /dev/null
+++ b/BSF/plugins/event_tracer/event_list.tpl
@@ -0,0 +1,17 @@
+{* $Id$ *}
+There are {$NB_EVENTS} calls to triger_event or triger_action.
+
+<table width="99%" class="table2">
+<tr class="throw">
+ <th><a href="{$U_SORT0}">Type</a></th>
+ <th><a href="{$U_SORT1}">Name</a></th>
+ <th><a href="{$U_SORT2}">File</a></th>
+</tr>
+{foreach from=$events item=event}
+<tr>
+ <td>{$event.TYPE}</td>
+ <td>{$event.NAME}</td>
+ <td>{$event.FILE}</td>
+</tr>
+{/foreach}
+</table>
diff --git a/BSF/plugins/event_tracer/index.php b/BSF/plugins/event_tracer/index.php
new file mode 100644
index 000000000..c15b15795
--- /dev/null
+++ b/BSF/plugins/event_tracer/index.php
@@ -0,0 +1,30 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based picture gallery |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
+// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU General Public License as published by |
+// | the Free Software Foundation |
+// | |
+// | This program is distributed in the hope that it will be useful, but |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
+// | General Public License for more details. |
+// | |
+// | You should have received a copy of the GNU General Public License |
+// | along with this program; if not, write to the Free Software |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA. |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
diff --git a/BSF/plugins/event_tracer/main.inc.php b/BSF/plugins/event_tracer/main.inc.php
new file mode 100644
index 000000000..dcf282146
--- /dev/null
+++ b/BSF/plugins/event_tracer/main.inc.php
@@ -0,0 +1,137 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based picture gallery |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2003-2008 Piwigo team http://phpwebgallery.net |
+// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU General Public License as published by |
+// | the Free Software Foundation |
+// | |
+// | This program is distributed in the hope that it will be useful, but |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
+// | General Public License for more details. |
+// | |
+// | You should have received a copy of the GNU General Public License |
+// | along with this program; if not, write to the Free Software |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA. |
+// +-----------------------------------------------------------------------+
+
+/*
+Plugin Name: Event tracer
+Version: 1.8.a
+Description: For developers. Shows all calls to trigger_event.
+Plugin URI: http://piwigo.org
+Author: Piwigo team
+Author URI: http://piwigo.org
+*/
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+
+class EventTracer
+{
+ var $me_working;
+ var $my_config;
+
+ function EventTracer()
+ {
+ $this->me_working=0;
+ }
+
+ function get_config_file_dir()
+ {
+ global $conf;
+ return $conf['local_data_dir'].'/plugins/';
+ }
+
+ function get_config_file_name()
+ {
+ return basename(dirname(__FILE__)).'.dat';
+ }
+
+ function load_config()
+ {
+ $x = @file_get_contents( $this->get_config_file_dir().$this->get_config_file_name() );
+ if ($x!==false)
+ {
+ $c = unserialize($x);
+ // do some more tests here
+ $this->my_config = $c;
+ }
+ if ( !isset($this->my_config)
+ or empty($this->my_config['filters']) )
+ {
+ $this->my_config['filters'] = array( '.*' );
+ $this->my_config['show_args'] = false;
+ $this->save_config();
+ }
+ }
+
+ function save_config()
+ {
+ $dir = $this->get_config_file_dir();
+ @mkdir($dir);
+ $file = fopen( $dir.$this->get_config_file_name(), 'w' );
+ fwrite($file, serialize($this->my_config) );
+ fclose( $file );
+ }
+
+ function on_pre_trigger_event($event_info)
+ {
+ $this->dump('pre_trigger_event', $event_info);
+ }
+ function on_post_trigger_event($event_info)
+ {
+ $this->dump('post_trigger_event', $event_info);
+ }
+
+ function on_trigger_action($event_info)
+ {
+ $this->dump('trigger_action', $event_info);
+ }
+
+ function dump($event, $event_info)
+ {
+ foreach( $this->my_config['filters'] as $filter)
+ {
+ if ( preg_match( '/'.$filter.'/', $event_info['event'] ) )
+ {
+ if ($this->my_config['show_args'])
+ {
+ $s = '<pre>';
+ $s .= htmlspecialchars( var_export( $event_info['data'], true ) );
+ $s .= '</pre>';
+ }
+ else
+ $s = '';
+ pwg_debug($event.' "'.$event_info['event'].'" '.($s) );
+ break;
+ }
+ }
+ }
+
+ function plugin_admin_menu($menu)
+ {
+ array_push($menu,
+ array(
+ 'NAME' => 'Event Tracer',
+ 'URL' => get_admin_plugin_menu_link(dirname(__FILE__).'/tracer_admin.php')
+ )
+ );
+ return $menu;
+ }
+}
+
+$obj = new EventTracer();
+$obj->load_config();
+
+add_event_handler('get_admin_plugin_menu_links', array(&$obj, 'plugin_admin_menu') );
+add_event_handler('pre_trigger_event', array(&$obj, 'on_pre_trigger_event') );
+add_event_handler('post_trigger_event', array(&$obj, 'on_post_trigger_event') );
+add_event_handler('trigger_action', array(&$obj, 'on_trigger_action') );
+set_plugin_data($plugin['id'], $obj);
+?>
diff --git a/BSF/plugins/event_tracer/maintain.inc.php b/BSF/plugins/event_tracer/maintain.inc.php
new file mode 100644
index 000000000..f7d0131c5
--- /dev/null
+++ b/BSF/plugins/event_tracer/maintain.inc.php
@@ -0,0 +1,9 @@
+<?php
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+
+function plugin_uninstall($plugin_id)
+{
+ global $conf;
+ @unlink( $conf['local_data_dir'].'/plugins/'.$plugin_id.'.dat' );
+}
+?>
diff --git a/BSF/plugins/event_tracer/tracer_admin.php b/BSF/plugins/event_tracer/tracer_admin.php
new file mode 100644
index 000000000..b17f2a301
--- /dev/null
+++ b/BSF/plugins/event_tracer/tracer_admin.php
@@ -0,0 +1,31 @@
+<?php
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+
+$me = get_plugin_data($plugin_id);
+
+global $template;
+$template->set_filenames( array('plugin_admin_content' => dirname(__FILE__).'/tracer_admin.tpl') );
+
+if ( isset($_POST['eventTracer_filters']) )
+{
+ $v = $_POST['eventTracer_filters'];
+ $v = str_replace( "\r\n", "\n", $v );
+ $v = str_replace( "\n\n", "\n", $v );
+ $v = stripslashes($v);
+ if (!empty($v))
+ $me->my_config['filters'] = explode("\n", $v);
+ else
+ $me->my_config['filters'] = array();
+ $me->my_config['show_args'] = isset($_POST['eventTracer_show_args']);
+ $me->save_config();
+ global $page;
+ array_push($page['infos'], 'event tracer options saved');
+}
+$template->assign('EVENT_TRACER_FILTERS', implode("\n", $me->my_config['filters'] ) );
+$template->assign('EVENT_TRACER_SHOW_ARGS', $me->my_config['show_args'] ? 'checked="checked"' : '' );
+$template->assign('U_LIST_EVENTS', get_admin_plugin_menu_link(dirname(__FILE__).'/event_list.php'));
+
+//$template->assign_var('EVENT_TRACER_F_ACTION', $my_url);
+
+$template->assign_var_from_handle( 'ADMIN_CONTENT', 'plugin_admin_content');
+?>
diff --git a/BSF/plugins/event_tracer/tracer_admin.tpl b/BSF/plugins/event_tracer/tracer_admin.tpl
new file mode 100644
index 000000000..17d7e2b01
--- /dev/null
+++ b/BSF/plugins/event_tracer/tracer_admin.tpl
@@ -0,0 +1,29 @@
+{* $Id$ *}
+<div class="titrePage">
+ <h2>Event Tracer</h2>
+</div>
+
+<p>
+The event tracer is a developer tool that logs in the footer of the window all calls to trigger_event method.
+You can use this plugin to see what events is Piwigo calling.
+<b>Note that $conf['show_queries'] must be true.</b>
+</p>
+<form method="post" action="" class="general">
+<fieldset>
+ <legend>Event Tracer</legend>
+
+<label>Show event argument
+ <input type="checkbox" name="eventTracer_show_args" {$EVENT_TRACER_SHOW_ARGS} />
+</label>
+<br/>
+<label>Fill below a list of regular expressions (one per line).
+An event will be logged if its name matches at least one expression in the list.
+ <textarea name="eventTracer_filters" id="eventTracer_filters"rows="10" cols="80">{$EVENT_TRACER_FILTERS}</textarea>
+</label>
+
+</fieldset>
+
+<p><input class="submit" type="submit" value="Submit" /></p>
+
+<p><a href="{$U_LIST_EVENTS}">Click here to see a complete list of actions and events trigered by this PWG version</a>.</p>
+</form>