PluginProbe
Tracking Script Manager / 1.1
Tracking Script Manager v1.1
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, at tracking-scripts-manager.php

527 lines 20.9 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
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
50 define('WP_TRACKING_SCRIPTS_OPTION_GROUP', 'tracking_scripts_options' );
51 define('WP_HEADER_TRACKING_SCRIPT', 'header_tracking_script_code' );
52 define('WP_FOOTER_TRACKING_SCRIPT', 'footer_tracking_script_code' );
53 define('WP_PAGE_TRACKING_SCRIPT', 'page_tracking_script_code' );
54 define('WP_NEW_HEADER_TRACKING_SCRIPT', 'new_header_tracking_script_code' );
55 define('WP_NEW_FOOTER_TRACKING_SCRIPT', 'new_footer_tracking_script_code' );
56 define('WP_NEW_PAGE_TRACKING_SCRIPT', 'new_page_tracking_script_code' );
57 define('WP_NEW_PAGE_TRACKING_SCRIPT_ID', 'new_page_tracking_script_code_id' );
58 define('WP_NEW_PAGE_TRACKING_SCRIPT_LOCATION', 'new_page_tracking_script_code_location' );
59 define('WP_NEW_PAGE_TRACKING_SCRIPT_GLOBAL', 'new_page_tracking_script_code_global' );
60 define('WP_PAGE_TRACKING_SCRIPT_COUNT', 'page_tracking_script_count');
61 }
62
63 public static function load_hooks() {
64 add_action('wp_head', array(__CLASS__, 'find_header_tracking_codes'));
65
66 add_action('wp_footer', array(__CLASS__, 'find_footer_tracking_codes'));
67
68 add_action('admin_menu', array(__CLASS__, 'tracking_scripts_create_menu'));
69
70 add_action('admin_init', array(__CLASS__, 'initialize_admin_posts'));
71
72 add_action( 'wp_ajax_tracking_scripts_get_posts', array(__CLASS__, 'tracking_scripts_posts_ajax_handler') );
73 add_action( 'wp_ajax_nopriv_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 add_action( 'wp_ajax_nopriv_tracking_scripts_get_posts', array(__CLASS__, 'tracking_scripts_posts_ajax_handler') );
77 }
78
79 /*************************************************
80 * Front End
81 **************************************************/
82
83 // Header Tracking Codes
84 public static function find_header_tracking_codes() {
85 $header_scripts = unserialize(get_option(WP_HEADER_TRACKING_SCRIPT));
86
87 if($header_scripts) {
88 foreach($header_scripts as $script) {
89 if($script->active) {
90 echo html_entity_decode(esc_attr($script->script_code), ENT_QUOTES, 'cp1252');
91 }
92 }
93 }
94
95 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT));
96
97 if($page_scripts) {
98 global $wp_query;
99 $post_id = $wp_query->post->ID;
100 foreach($page_scripts as $script) {
101 if($script->active && $script->location == 'header' && $script->page_id == $post_id) {
102 echo html_entity_decode(esc_attr($script->script_code), ENT_QUOTES, 'cp1252');
103 }
104 }
105 }
106 }
107
108
109 // Footer Tracking Codes
110 public static function find_footer_tracking_codes() {
111 $footer_scripts = unserialize(get_option(WP_FOOTER_TRACKING_SCRIPT));
112
113 if($footer_scripts) {
114 foreach($footer_scripts as $script) {
115 if($script->active) {
116 echo html_entity_decode(esc_attr($script->script_code), ENT_QUOTES, 'cp1252');
117 }
118 }
119 }
120
121 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT));
122
123 if($page_scripts) {
124 global $wp_query;
125 $post_id = $wp_query->post->ID;
126 foreach($page_scripts as $script) {
127 if($script->active && $script->location == 'footer' && $script->page_id == $post_id) {
128 echo html_entity_decode(esc_attr($script->script_code), ENT_QUOTES, 'cp1252');
129 }
130 }
131 }
132 }
133
134 /*************************************************
135 * Admin Area
136 **************************************************/
137
138 public static function tracking_scripts_create_menu() {
139 add_menu_page('Tracking Scripts Manager', 'Tracking Scripts Manager', 'administrator', __FILE__, array(__CLASS__, 'tracking_options'), '');
140 add_action('admin_init', array(__CLASS__, 'register_tracking_scripts_settings'));
141 }
142
143 public static function register_tracking_scripts_settings() {
144 register_setting( WP_TRACKING_SCRIPTS_OPTION_GROUP, WP_HEADER_TRACKING_SCRIPT, 'esc_textarea' );
145 register_setting( WP_TRACKING_SCRIPTS_OPTION_GROUP, WP_FOOTER_TRACKING_SCRIPT, 'esc_textarea' );
146 }
147
148 public static function tracking_scripts_admin_tabs( $current = 'add_new' ) {
149 $tabs = array('add_new' => 'Add New', 'global' => 'Global', 'pages' => 'Specific Location');
150 echo '<h2 style="font-size: 22px; font-weight: bold; margin: 10px 0 40px;">Tracking Scripts Manager</h2>';
151 echo '<h2 class="nav-tab-wrapper">';
152 foreach($tabs as $tab => $name) {
153 $class = ($tab == $current) ? ' nav-tab-active' : '';
154 echo "<a class='nav-tab$class' href='?page=".TRACKING_SCRIPT_BASENAME."&tab=$tab'>$name</a>";
155 }
156 echo '</h2>';
157 }
158
159 public static function tracking_options() {
160 self::tracking_scripts_admin_scripts();
161
162 global $pagenow;
163 $settings = get_option('tracking_scripts_settings');
164
165 if(isset($_GET['tab'])) {
166 self::tracking_scripts_admin_tabs($_GET['tab']);
167 $pagenow = $_GET['tab'];
168 } else {
169 self::tracking_scripts_admin_tabs('add_new');
170 $pagenow = 'add_new';
171 }
172 ?>
173 <div class="wrap tracking_scripts_wrap">
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 = $page_scripts_array['header'];
245 $page_footer_scripts = $page_scripts_array['footer'];
246 ?>
247 <h3>Header</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>Footer</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_nopriv_save_new_tracking_codes', array(__CLASS__, 'save_new_tracking_codes')); // If the user in not logged in
303
304 add_action('admin_post_update_tracking_codes', array(__CLASS__, 'update_tracking_codes')); // If the user is logged in
305 add_action('admin_post_nopriv_update_tracking_codes', array(__CLASS__, 'update_tracking_codes')); // If the user in not logged in
306
307 add_action('admin_post_update_page_tracking_codes', array(__CLASS__, 'update_page_tracking_codes')); // If the user is logged in
308 add_action('admin_post_nopriv_update_page_tracking_codes', array(__CLASS__, 'update_page_tracking_codes')); // If the user in not logged in
309 }
310
311
312
313 // Save New Tracking Codes
314 public static function save_new_tracking_codes() {
315 $header_scripts = unserialize(get_option(WP_HEADER_TRACKING_SCRIPT));
316 $footer_scripts = unserialize(get_option(WP_FOOTER_TRACKING_SCRIPT));
317 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT));
318
319 if(!$header_scripts) {
320 $header_scripts = array();
321 }
322
323 if(!$footer_scripts) {
324 $footer_scripts = array();
325 }
326
327 if($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_GLOBAL] && $_POST[WP_NEW_PAGE_TRACKING_SCRIPT_GLOBAL] == 'yes') {
328 $tracking_location = esc_attr($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_LOCATION]);
329
330 if($tracking_location == 'header') {
331 $tracking = new Tracking_Script();
332 $tracking->script_name = sanitize_text_field($_POST['new_page_script_name']);
333 $tracking->script_code = stripslashes(esc_textarea($_POST[WP_NEW_PAGE_TRACKING_SCRIPT]));
334 $tracking->active = true;
335 $tracking->order = count($header_scripts);
336 $tracking->location = 'header';
337 $header_scripts[] = $tracking;
338 update_option(WP_HEADER_TRACKING_SCRIPT, serialize($header_scripts));
339 } else if($tracking_location == 'footer') {
340 $tracking = new Tracking_Script();
341 $tracking->script_name = sanitize_text_field($_POST['new_page_script_name']);
342 $tracking->script_code = stripslashes(esc_textarea($_POST[WP_NEW_PAGE_TRACKING_SCRIPT]));
343 $tracking->active = true;
344 $tracking->order = count($footer_scripts);
345 $tracking->location = 'footer';
346 $footer_scripts[] = $tracking;
347 update_option(WP_FOOTER_TRACKING_SCRIPT, serialize($footer_scripts));
348 }
349 } else {
350 if($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_ID] && $_POST[WP_NEW_PAGE_TRACKING_SCRIPT]) {
351 $tracking_pagecount = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT_COUNT));
352 if(!$tracking_pagecount) {
353 $tracking_pagecount = 1;
354 } else {
355 $tracking_pagecount++;
356 }
357 update_option(WP_PAGE_TRACKING_SCRIPT_COUNT, serialize($tracking_pagecount));
358
359 $tracking = new Tracking_Script();
360 $tracking->script_name = sanitize_text_field($_POST['new_page_script_name']);
361 $tracking->script_code = stripslashes(esc_textarea($_POST[WP_NEW_PAGE_TRACKING_SCRIPT]));
362 $tracking->active = true;
363 $tracking->page_id = esc_attr($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_ID]);
364 $tracking->location = esc_attr($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_LOCATION]);
365 $tracking->script_id = $tracking_pagecount;
366 $page_scripts[] = $tracking;
367 update_option(WP_PAGE_TRACKING_SCRIPT, serialize($page_scripts));
368 }
369 }
370
371 $redirect_url = get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME;
372 if($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_GLOBAL] == 'yes') {
373 $redirect_url = get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME.'&tab=global';
374 } else if($_POST[WP_NEW_PAGE_TRACKING_SCRIPT_ID] && $_POST[WP_NEW_PAGE_TRACKING_SCRIPT]) {
375 $redirect_url = get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME.'&tab=pages';
376 }
377
378 wp_redirect($redirect_url);
379 exit();
380 }
381
382
383 // Update Global Codes
384 public static function update_tracking_codes() {
385 $header_scripts = unserialize(get_option(WP_HEADER_TRACKING_SCRIPT));
386 $footer_scripts = unserialize(get_option(WP_FOOTER_TRACKING_SCRIPT));
387
388 $i = 1;
389 foreach($header_scripts as $script) {
390 if($_POST['header_script_'.$i.'_name']) {
391 $script->script_name = sanitize_text_field($_POST['header_script_'.$i.'_name']);
392 }
393 if($_POST['header_script_'.$i.'_code']) {
394 $script->script_code = stripslashes(esc_textarea($_POST['header_script_'.$i.'_code']));
395 }
396 if($_POST['header_script_'.$i.'_active']) {
397 if($_POST['header_script_'.$i.'_active'] === 'false') {
398 $script->active = false;
399 } else {
400 $script->active = true;
401 }
402 }
403 if($_POST['header_script_'.$i.'_order']) {
404 $order = filter_input(INPUT_POST, 'header_script_'.$i.'_order', FILTER_VALIDATE_INT);
405 if(is_int($order)) {
406 $script->order = $order;
407 }
408 }
409 if($_POST['header_script_'.$i.'_exists']) {
410 if($_POST['header_script_'.$i.'_exists'] === 'false') {
411 unset($header_scripts[$i-1]);
412 }
413 }
414
415 $i++;
416 }
417
418 $i = 1;
419 foreach($footer_scripts as $script) {
420 if($_POST['footer_script_'.$i.'_name']) {
421 $script->script_name = sanitize_text_field($_POST['footer_script_'.$i.'_name']);
422 }
423 if($_POST['footer_script_'.$i.'_code']) {
424 $script->script_code = stripslashes(esc_textarea($_POST['footer_script_'.$i.'_code']));
425 }
426 if($_POST['footer_script_'.$i.'_active']) {
427 if($_POST['footer_script_'.$i.'_active'] === 'false') {
428 $script->active = false;
429 } else {
430 $script->active = true;
431 }
432 }
433 if($_POST['footer_script_'.$i.'_order']) {
434 $order = filter_input(INPUT_POST, 'footer_script_'.$i.'_order', FILTER_VALIDATE_INT);
435 if(is_int($order)) {
436 $script->order = $order;
437 }
438 }
439 if($_POST['footer_script_'.$i.'_exists']) {
440 if($_POST['footer_script_'.$i.'_exists'] === 'false') {
441 unset($footer_scripts[$i-1]);
442 }
443 }
444
445 $i++;
446 }
447
448 usort($header_scripts, array(__CLASS__, 'compare_order'));
449 usort($footer_scripts, array(__CLASS__, 'compare_order'));
450
451
452 update_option(WP_HEADER_TRACKING_SCRIPT, serialize($header_scripts));
453 update_option(WP_FOOTER_TRACKING_SCRIPT, serialize($footer_scripts));
454
455 wp_redirect(get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME.'&tab=global');
456 exit();
457 }
458
459
460 // Update Page Specific Codes
461 public static function update_page_tracking_codes() {
462 $page_scripts = unserialize(get_option(WP_PAGE_TRACKING_SCRIPT));
463
464 $index = 0;
465 foreach($page_scripts as $script) {
466 $script_id = $script->script_id;
467 if($_POST['page_script_'.$script_id.'_name']) {
468 $script->script_name = sanitize_text_field($_POST['page_script_'.$script_id.'_name']);
469 }
470 if($_POST['page_script_'.$script_id.'_code']) {
471 $script->script_code = stripslashes(esc_textarea($_POST['page_script_'.$script_id.'_code']));
472 }
473 if($_POST['page_script_'.$script_id.'_active']) {
474 if($_POST['page_script_'.$script_id.'_active'] === 'false') {
475 $script->active = false;
476 } else {
477 $script->active = true;
478 }
479 }
480 if($_POST['page_script_'.$script_id.'_order']) {
481 $order = filter_input(INPUT_POST, 'page_script_'.$script_id.'_order', FILTER_VALIDATE_INT);
482 if(is_int($order)) {
483 $script->order = $order;
484 }
485 }
486 if($_POST['page_script_'.$script_id.'_exists']) {
487 if($_POST['page_script_'.$script_id.'_exists'] === 'false') {
488 unset($page_scripts[$index]);
489 }
490 }
491 $index++;
492 }
493
494 usort($page_scripts, array(__CLASS__, 'compare_order'));
495
496 update_option(WP_PAGE_TRACKING_SCRIPT, serialize($page_scripts));
497
498 wp_redirect(get_admin_url().'admin.php?page='.TRACKING_SCRIPT_BASENAME.'&tab=pages');
499 exit();
500 }
501
502 public static function compare_order($a, $b) {
503 return ($a->order < $b->order) ? -1 : 1;
504 }
505 }
506
507 $class['Tracking_Scripts'] = new Tracking_Scripts();
508 }
509
510 if( !class_exists('Tracking_Script') ) {
511
512 class Tracking_Script {
513 public $script_name;
514 public $script_code;
515 public $active;
516 public $order;
517 public $page_id;
518 public $location;
519 public $script_id;
520
521 function __construct() {
522
523 }
524 }
525
526 }
527 ?>