PluginProbe
Tracking Script Manager / 1.1.6
Tracking Script Manager v1.1.6
trunk 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 All 33 releases
tracking-script-manager / tracking-scripts-manager.php

tracking-scripts-manager.php in Tracking Script Manager 1.1.6, at tracking-scripts-manager.php

522 lines 20.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: Tracking Script Manager
4 * Plugin URI: http://wordpress.org/plugins/tracking-script-manager/
5 * Description: A plugin that allows you to add tracking scripts to your site.
6 * Version: 1.1.6
7 * Author: Red8 Interactive
8 * Author URI: http://red8interactive.com
9 * License: GPL2
10 */
11
12 /*
13 Copyright 2014 Red8 Interactive (email : james@red8interactive.com)
14
15 This program is free software; you can redistribute it and/or
16 modify it under the terms of the GNU General Public License
17 as published by the Free Software Foundation; either version 2
18 of the License, or (at your option) any later version.
19
20 This program is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 GNU General Public License for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with this program; if not, write to the Free Software
27 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
28 */
29
30 if ( ! defined( 'ABSPATH' ) ) {
31 exit; // Exit if accessed directly
32 }
33
34 if( !class_exists('Tracking_Scripts') ) {
35
36 class Tracking_Scripts {
37
38 function __construct() {
39 self::define_constants();
40 self::load_hooks();
41 }
42
43 /**
44 * Defines plugin constants
45 */
46 public static function define_constants() {
47 define('TRACKING_SCRIPT_PATH', plugins_url( ' ', __FILE__ ) );
48 define('TRACKING_SCRIPT_BASENAME', plugin_basename( __FILE__ ));
49 define('TRACKING_SCRIPT_TEXTDOMAIN', 'tracking-scripts-manager');
50
51 define('WP_TRACKING_SCRIPTS_OPTION_GROUP', 'tracking_scripts_options' );
52 define('WP_HEADER_TRACKING_SCRIPT', 'header_tracking_script_code' );
53 define('WP_FOOTER_TRACKING_SCRIPT', 'footer_tracking_script_code' );
54 define('WP_PAGE_TRACKING_SCRIPT', 'page_tracking_script_code' );
55 define('WP_NEW_HEADER_TRACKING_SCRIPT', 'new_header_tracking_script_code' );
56 define('WP_NEW_FOOTER_TRACKING_SCRIPT', 'new_footer_tracking_script_code' );
57 define('WP_NEW_PAGE_TRACKING_SCRIPT', 'new_page_tracking_script_code' );
58 define('WP_NEW_PAGE_TRACKING_SCRIPT_ID', 'new_page_tracking_script_code_id' );
59 define('WP_NEW_PAGE_TRACKING_SCRIPT_LOCATION', 'new_page_tracking_script_code_location' );
60 define('WP_NEW_PAGE_TRACKING_SCRIPT_GLOBAL', 'new_page_tracking_script_code_global' );
61 define('WP_PAGE_TRACKING_SCRIPT_COUNT', 'page_tracking_script_count');
62 }
63
64 public static function load_hooks() {
65 add_action('wp_head', array(__CLASS__, 'find_header_tracking_codes'));
66
67 add_action('wp_footer', array(__CLASS__, 'find_footer_tracking_codes'));
68
69 add_action('admin_menu', array(__CLASS__, 'tracking_scripts_create_menu'));
70
71 add_action('admin_init', array(__CLASS__, 'initialize_admin_posts'));
72
73 add_action( 'wp_ajax_tracking_scripts_get_posts', array(__CLASS__, 'tracking_scripts_posts_ajax_handler') );
74
75 add_action( 'wp_ajax_tracking_scripts_get_post_content', array(__CLASS__, 'tracking_scripts_post_content_ajax_handler') );
76 }
77
78 /*************************************************
79 * Front End
80 **************************************************/
81
82 // Header Tracking Codes
83 public static function find_header_tracking_codes() {
84 $header_scripts = unserialize(get_option(WP_HEADER_TRACKING_SCRIPT));
85
86 if($header_scripts) {
87 foreach($header_scripts as $script) {
88 if($script->active) {
89 echo html_entity_decode(esc_attr($script->script_code), ENT_QUOTES, 'cp1252');
90 }
91 }
92 }
93
94 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT));
95
96 if($page_scripts) {
97 global $wp_query;
98 $post_id = $wp_query->post->ID;
99 foreach($page_scripts as $script) {
100 if($script->active && $script->location == 'header' && $script->page_id == $post_id) {
101 echo html_entity_decode(esc_attr($script->script_code), ENT_QUOTES, 'cp1252');
102 }
103 }
104 }
105 }
106
107
108 // Footer Tracking Codes
109 public static function find_footer_tracking_codes() {
110 $footer_scripts = unserialize(get_option(WP_FOOTER_TRACKING_SCRIPT));
111
112 if($footer_scripts) {
113 foreach($footer_scripts as $script) {
114 if($script->active) {
115 echo html_entity_decode(esc_attr($script->script_code), ENT_QUOTES, 'cp1252');
116 }
117 }
118 }
119
120 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT));
121
122 if($page_scripts) {
123 global $wp_query;
124 $post_id = $wp_query->post->ID;
125 foreach($page_scripts as $script) {
126 if($script->active && $script->location == 'footer' && $script->page_id == $post_id) {
127 echo html_entity_decode(esc_attr($script->script_code), ENT_QUOTES, 'cp1252');
128 }
129 }
130 }
131 }
132
133 /*************************************************
134 * Admin Area
135 **************************************************/
136
137 public static function tracking_scripts_create_menu() {
138 add_menu_page('Tracking Script Manager', 'Tracking Script Manager', 'manage_options', __FILE__, array(__CLASS__, 'tracking_options'), '');
139 add_action('admin_init', array(__CLASS__, 'register_tracking_scripts_settings'));
140 }
141
142 public static function register_tracking_scripts_settings() {
143 register_setting( WP_TRACKING_SCRIPTS_OPTION_GROUP, WP_HEADER_TRACKING_SCRIPT, 'esc_textarea' );
144 register_setting( WP_TRACKING_SCRIPTS_OPTION_GROUP, WP_FOOTER_TRACKING_SCRIPT, 'esc_textarea' );
145 }
146
147 public static function tracking_scripts_admin_tabs( $current = 'add_new' ) {
148 $tabs = array('add_new' => 'Add New', 'global' => 'Global', 'pages' => 'Specific Location');
149 ?><h2><?php _e( 'Tracking Script Manager', TRACKING_SCRIPT_TEXTDOMAIN ); ?></h2>
150 <h2 class="nav-tab-wrapper"><?php
151 foreach($tabs as $tab => $name) {
152 $class = ($tab == $current) ? ' nav-tab-active' : '';
153 ?><a class="nav-tab<?php echo $class; ?>" href="?page=<?php echo TRACKING_SCRIPT_BASENAME; ?>&tab=<?php echo $tab; ?>"><?php _e( $name, TRACKING_SCRIPT_TEXTDOMAIN ); ?></a><?php
154 }
155 ?></h2><?php
156 }
157
158 public static function tracking_options() {
159 self::tracking_scripts_admin_scripts();
160 ?>
161 <div class="wrap tracking_scripts_wrap">
162 <?php
163 global $pagenow;
164 $settings = get_option('tracking_scripts_settings');
165
166 if(isset($_GET['tab'])) {
167 self::tracking_scripts_admin_tabs($_GET['tab']);
168 $pagenow = $_GET['tab'];
169 } else {
170 self::tracking_scripts_admin_tabs('add_new');
171 $pagenow = 'add_new';
172 }
173 ?>
174 <form method="post" action="<?php echo get_admin_url(); ?>admin-post.php">
175 <?php settings_fields(WP_TRACKING_SCRIPTS_OPTION_GROUP); ?>
176 <?php do_settings_sections(WP_TRACKING_SCRIPTS_OPTION_GROUP); ?>
177 <?php if($pagenow == 'add_new') { ?>
178 <?php include_once('templates/tracking-scripts-manager-pro-add-new.php'); ?>
179 <?php } else if($pagenow == 'global') { ?>
180 <?php include_once('templates/tracking-scripts-manager-pro-edit-global.php'); ?>
181 <?php } else { ?>
182 <?php include_once('templates/tracking-scripts-manager-pro-edit-single-post.php'); ?>
183 <?php } ?>
184 </form>
185 </div>
186 <?php
187
188 }
189
190
191 // Admin Scripts
192 public static function tracking_scripts_admin_scripts() {
193 wp_enqueue_script('jquery');
194 wp_enqueue_script('jquery-ui-sortable');
195
196 wp_register_style('tracking-scripts-main', plugins_url('/css/main.css', __FILE__));
197 wp_enqueue_style('tracking-scripts-main');
198
199 wp_enqueue_script( 'tracking_script_js', plugin_dir_url(__FILE__) . '/js/built.min.js', array(), '', true );
200 wp_localize_script( 'tracking_script_js', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
201 }
202
203
204 // Ajax Functions
205 public static function tracking_scripts_posts_ajax_handler() {
206 $post_type = ($_POST['postType']) ? esc_attr($_POST['postType']) : 'post';
207
208 $args = array(
209 'post_type' => $post_type,
210 'posts_per_page' => -1,
211 'orderby' => 'name',
212 'order' => 'ASC'
213 );
214
215 ob_start();
216
217 $query = new WP_Query($args);
218 echo '<option value="none" id="none">Choose '.ucwords($post_type).'</option>';
219 while($query->have_posts()) : $query->the_post();
220 echo '<option value="'.get_the_ID().'" id="'.get_the_ID().'">'.ucwords(get_the_title()).'</option>';
221 endwhile;
222 wp_reset_postdata();
223
224 echo ob_get_clean();
225 die();
226 }
227
228 public static function tracking_scripts_post_content_ajax_handler() {
229 $current_page_id = ($_POST['postID']) ? esc_attr($_POST['postID']) : null;
230
231 if($current_page_id) {
232 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT)); $i = 1;
233 $page_scripts_array = array();
234 foreach($page_scripts as $script) {
235 if($script->page_id == $current_page_id) {
236 $page_scripts_array[$script->location][] = $script;
237 }
238 }
239
240 ob_start();
241 ?>
242 <div id="tracking_scripts_<?php echo $current_page_id; ?>" class="tracking_scripts">
243 <?php
244 $page_header_scripts = (array_key_exists('header', $page_scripts_array)) ? $page_scripts_array['header'] : null;
245 $page_footer_scripts = (array_key_exists('footer', $page_scripts_array)) ? $page_scripts_array['footer'] : null;
246 ?>
247 <h3><?php _e( 'Header', TRACKING_SCRIPT_TEXTDOMAIN ); ?></h3>
248 <?php if($page_header_scripts) { ?>
249 <ul class="tracking_script_list">
250 <?php $i = 1; ?>
251 <?php foreach($page_header_scripts as $script) { ?>
252 <div class="tracking_script">
253 <i class="fa fa-sort" title="Drag to Sort"></i>
254 <p><?php echo $i; ?></p>
255 <div class="script_info">
256 <input type="text" name="page_script_<?php echo $script->script_id; ?>_name" value="<?php echo $script->script_name; ?>" readonly="readonly">
257 <input type="text" name="page_script_<?php echo $script->script_id; ?>_code" value="<?php echo $script->script_code; ?>" readonly="readonly">
258 </div>
259 <i class="active_tracking fa <?php if($script->active === true) { echo 'fa-check-circle'; } else { echo 'fa-circle-o'; } ?>" title="<?php if($script->active === true) { echo 'Deactivate Script'; } else { echo 'Activate Script'; } ?>"></i>
260 <i class="edit_tracking fa fa-edit" title="Edit Script"></i>
261 <i class="delete_tracking fa fa-times" title="Delete Script"></i>
262 <input type="hidden" class="script_order" name="page_script_<?php echo $script->script_id; ?>_order" value="<?php echo $i; ?>">
263 <input type="hidden" class="script_active" name="page_script_<?php echo $script->script_id; ?>_active" value="<?php if($script->active === true) { echo 'true'; } else { echo 'false'; } ?>">
264 <input type="hidden" class="script_exists" name="page_script_<?php echo $script->script_id; ?>_exists" value="true">
265 </div>
266 <?php $i++; ?>
267 <?php } ?>
268 </ul>
269 <?php } ?>
270 <h3><?php _e( 'Footer', TRACKING_SCRIPT_TEXTDOMAIN ); ?></h3>
271 <?php if($page_footer_scripts) { ?>
272 <ul class="tracking_script_list">
273 <?php foreach($page_footer_scripts as $script) { ?>
274 <div class="tracking_script">
275 <i class="fa fa-sort" title="Drag to Sort"></i>
276 <p><?php echo $i; ?></p>
277 <div class="script_info">
278 <input type="text" name="page_script_<?php echo $script->script_id; ?>_name" value="<?php echo $script->script_name; ?>" readonly="readonly">
279 <input type="text" name="page_script_<?php echo $script->script_id; ?>_code" value="<?php echo $script->script_code; ?>" readonly="readonly">
280 </div>
281 <i class="active_tracking fa <?php if($script->active === true) { echo 'fa-check-circle'; } else { echo 'fa-circle-o'; } ?>" title="<?php if($script->active === true) { echo 'Deactivate Script'; } else { echo 'Activate Script'; } ?>"></i>
282 <i class="edit_tracking fa fa-edit" title="Edit Script"></i>
283 <i class="delete_tracking fa fa-times" title="Delete Script"></i>
284 <input type="hidden" class="script_order" name="page_script_<?php echo $script->script_id; ?>_order" value="<?php echo $i; ?>">
285 <input type="hidden" class="script_active" name="page_script_<?php echo $script->script_id; ?>_active" value="<?php if($script->active === true) { echo 'true'; } else { echo 'false'; } ?>">
286 <input type="hidden" class="script_exists" name="page_script_<?php echo $script->script_id; ?>_exists" value="true">
287 </div>
288 <?php $i++; ?>
289 <?php } ?>
290 </ul>
291 <?php } ?>
292 </div>
293 <?php
294 echo ob_get_clean();
295 die();
296 }
297 }
298
299 // Admin Hooks
300 public static function initialize_admin_posts() {
301 add_action('admin_post_save_new_tracking_codes', array(__CLASS__, 'save_new_tracking_codes')); // If the user is logged in
302 add_action('admin_post_update_tracking_codes', array(__CLASS__, 'update_tracking_codes')); // If the user is logged in
303 add_action('admin_post_update_page_tracking_codes', array(__CLASS__, 'update_page_tracking_codes')); // If the user is logged in
304 }
305
306
307
308 // Save New Tracking Codes
309 public static function save_new_tracking_codes() {
310 $header_scripts = unserialize(get_option(WP_HEADER_TRACKING_SCRIPT));
311 $footer_scripts = unserialize(get_option(WP_FOOTER_TRACKING_SCRIPT));
312 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT));
313
314 if(!$header_scripts) {
315 $header_scripts = array();
316 }
317
318 if(!$footer_scripts) {
319 $footer_scripts = array();
320 }
321
322 if($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_GLOBAL] && $_POST[WP_NEW_PAGE_TRACKING_SCRIPT_GLOBAL] == 'yes') {
323 $tracking_location = esc_attr($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_LOCATION]);
324
325 if($tracking_location == 'header') {
326 $tracking = new Tracking_Script();
327 $tracking->script_name = sanitize_text_field($_POST['new_page_script_name']);
328 $tracking->script_code = stripslashes(esc_textarea($_POST[WP_NEW_PAGE_TRACKING_SCRIPT]));
329 $tracking->active = true;
330 $tracking->order = count($header_scripts);
331 $tracking->location = 'header';
332 $header_scripts[] = $tracking;
333 update_option(WP_HEADER_TRACKING_SCRIPT, serialize($header_scripts));
334 } else if($tracking_location == 'footer') {
335 $tracking = new Tracking_Script();
336 $tracking->script_name = sanitize_text_field($_POST['new_page_script_name']);
337 $tracking->script_code = stripslashes(esc_textarea($_POST[WP_NEW_PAGE_TRACKING_SCRIPT]));
338 $tracking->active = true;
339 $tracking->order = count($footer_scripts);
340 $tracking->location = 'footer';
341 $footer_scripts[] = $tracking;
342 update_option(WP_FOOTER_TRACKING_SCRIPT, serialize($footer_scripts));
343 }
344 } else {
345 if($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_ID] && $_POST[WP_NEW_PAGE_TRACKING_SCRIPT]) {
346 $tracking_pagecount = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT_COUNT));
347 if(!$tracking_pagecount) {
348 $tracking_pagecount = 1;
349 } else {
350 $tracking_pagecount++;
351 }
352 update_option(WP_PAGE_TRACKING_SCRIPT_COUNT, serialize($tracking_pagecount));
353
354 $tracking = new Tracking_Script();
355 $tracking->script_name = sanitize_text_field($_POST['new_page_script_name']);
356 $tracking->script_code = stripslashes(esc_textarea($_POST[WP_NEW_PAGE_TRACKING_SCRIPT]));
357 $tracking->active = true;
358 $tracking->page_id = esc_attr($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_ID]);
359 $tracking->location = esc_attr($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_LOCATION]);
360 $tracking->script_id = $tracking_pagecount;
361 $page_scripts[] = $tracking;
362 update_option(WP_PAGE_TRACKING_SCRIPT, serialize($page_scripts));
363 }
364 }
365
366 $redirect_url = get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME;
367 if($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_GLOBAL] == 'yes') {
368 $redirect_url = get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME.'&tab=global';
369 } else if($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_ID] && $_POST[WP_NEW_PAGE_TRACKING_SCRIPT]) {
370 $redirect_url = get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME.'&tab=pages';
371 }
372
373 wp_redirect($redirect_url);
374 exit();
375 }
376
377
378 // Update Global Codes
379 public static function update_tracking_codes() {
380 $header_scripts = unserialize(get_option(WP_HEADER_TRACKING_SCRIPT));
381 $footer_scripts = unserialize(get_option(WP_FOOTER_TRACKING_SCRIPT));
382
383 $i = 1;
384 foreach($header_scripts as $script) {
385 if(isset($_POST['header_script_'.$i.'_name'])) {
386 $script->script_name = sanitize_text_field($_POST['header_script_'.$i.'_name']);
387 }
388 if(isset($_POST['header_script_'.$i.'_code'])) {
389 $script->script_code = stripslashes(esc_textarea($_POST['header_script_'.$i.'_code']));
390 }
391 if(isset($_POST['header_script_'.$i.'_active'])) {
392 if($_POST['header_script_'.$i.'_active'] === 'false') {
393 $script->active = false;
394 } else {
395 $script->active = true;
396 }
397 }
398 if(isset($_POST['header_script_'.$i.'_order'])) {
399 $order = filter_input(INPUT_POST, 'header_script_'.$i.'_order', FILTER_VALIDATE_INT);
400 if(is_int($order)) {
401 $script->order = $order;
402 }
403 }
404 if(isset($_POST['header_script_'.$i.'_exists'])) {
405 if($_POST['header_script_'.$i.'_exists'] === 'false') {
406 unset($header_scripts[$i-1]);
407 }
408 }
409
410 $i++;
411 }
412
413 $i = 1;
414 foreach($footer_scripts as $script) {
415 if(isset($_POST['footer_script_'.$i.'_name'])) {
416 $script->script_name = sanitize_text_field($_POST['footer_script_'.$i.'_name']);
417 }
418 if(isset($_POST['footer_script_'.$i.'_code'])) {
419 $script->script_code = stripslashes(esc_textarea($_POST['footer_script_'.$i.'_code']));
420 }
421 if(isset($_POST['footer_script_'.$i.'_active'])) {
422 if($_POST['footer_script_'.$i.'_active'] === 'false') {
423 $script->active = false;
424 } else {
425 $script->active = true;
426 }
427 }
428 if(isset($_POST['footer_script_'.$i.'_order'])) {
429 $order = filter_input(INPUT_POST, 'footer_script_'.$i.'_order', FILTER_VALIDATE_INT);
430 if(is_int($order)) {
431 $script->order = $order;
432 }
433 }
434 if(isset($_POST['footer_script_'.$i.'_exists'])) {
435 if($_POST['footer_script_'.$i.'_exists'] === 'false') {
436 unset($footer_scripts[$i-1]);
437 }
438 }
439
440 $i++;
441 }
442
443 usort($header_scripts, array(__CLASS__, 'compare_order'));
444 usort($footer_scripts, array(__CLASS__, 'compare_order'));
445
446
447 update_option(WP_HEADER_TRACKING_SCRIPT, serialize($header_scripts));
448 update_option(WP_FOOTER_TRACKING_SCRIPT, serialize($footer_scripts));
449
450 wp_redirect(get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME.'&tab=global');
451 exit();
452 }
453
454
455 // Update Page Specific Codes
456 public static function update_page_tracking_codes() {
457 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT));
458
459 $index = 0;
460 foreach($page_scripts as $script) {
461 $script_id = $script->script_id;
462 if(isset($_POST['page_script_'.$script_id.'_name'])) {
463 $script->script_name = sanitize_text_field($_POST['page_script_'.$script_id.'_name']);
464 }
465 if(isset($_POST['page_script_'.$script_id.'_code'])) {
466 $script->script_code = stripslashes(esc_textarea($_POST['page_script_'.$script_id.'_code']));
467 }
468 if(isset($_POST['page_script_'.$script_id.'_active'])) {
469 if($_POST['page_script_'.$script_id.'_active'] === 'false') {
470 $script->active = false;
471 } else {
472 $script->active = true;
473 }
474 }
475 if(isset($_POST['page_script_'.$script_id.'_order'])) {
476 $order = filter_input(INPUT_POST, 'page_script_'.$script_id.'_order', FILTER_VALIDATE_INT);
477 if(is_int($order)) {
478 $script->order = $order;
479 }
480 }
481 if(isset($_POST['page_script_'.$script_id.'_exists'])) {
482 if($_POST['page_script_'.$script_id.'_exists'] === 'false') {
483 unset($page_scripts[$index]);
484 }
485 }
486 $index++;
487 }
488
489 usort($page_scripts, array(__CLASS__, 'compare_order'));
490
491 update_option(WP_PAGE_TRACKING_SCRIPT, serialize($page_scripts));
492
493 wp_redirect(get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME.'&tab=pages');
494 exit();
495 }
496
497 public static function compare_order($a, $b) {
498 return ($a->order < $b->order) ? -1 : 1;
499 }
500 }
501
502 $class['Tracking_Scripts'] = new Tracking_Scripts();
503 }
504
505 if( !class_exists('Tracking_Script') ) {
506
507 class Tracking_Script {
508 public $script_name;
509 public $script_code;
510 public $active;
511 public $order;
512 public $page_id;
513 public $location;
514 public $script_id;
515
516 function __construct() {
517
518 }
519 }
520
521 }
522 ?>