HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: /home/mmickelson/martyknows.com/wp-content/themes/supposedly-clean/themetoolkit.php
<?php
/*
Hack Name: WordPress Theme Toolkit
Plugin URI: http://frenchfragfactory.net/ozh/my-projects/wordpress-theme-toolkit-admin-menu/
Description: Helps theme authors set up an admin menu. Helps theme users customise the theme.
Version: 1.12
Author: Ozh
Author URI: http://planetOzh.com/
*/

/************************************************************************************
*							 DO NOT MODIFY THIS FILE !
************************************************************************************/

/* RELEASE HISTORY :
* 1.0 : initial release
* 1.1 : update for WordPress 2.0 compatibility
* 1.11 : added {separator} template
* 1.12 : more or less minor bug fixing (one when no plugin activated, other with rare mod_security issue) and better compliancy with WP 2.0 roles
*/

if (!function_exists('themetoolkit')) {
	function themetoolkit($theme='',$array='',$file='') {
		global ${$theme};
		if ($theme == '' or $array == '' or $file == '') {
			die ('No theme name, theme option, or parent defined in Theme Toolkit');
		}
		${$theme} = new ThemeToolkit($theme,$array,$file);
	}
}

if (!class_exists('ThemeToolkit')) {
	class ThemeToolkit{

		var $option, $infos;

		function ThemeToolkit($theme,$array,$file){

			global $wp_version;

/*			// is it WP 2.0+ and do we have plugins like "../themes/foo/functions.php" running ?
			if ( $wp_version >= 2 and count(@preg_grep('#^\.\./themes/[^/]+/functions.php$#', get_settings('active_plugins'))) > 0 ) {
				wp_cache_flush();
				$this->upgrade_toolkit();
			}
*/
			$this->infos['path'] = '../themes/' . basename(dirname($file));

			/* Create some vars needed if an admin menu is to be printed */
			if ($array['debug']) {
				if ((basename($file)) == $_GET['page']) $this->infos['debug'] = 1;
				unset($array['debug']);
			}
			if ( isset( $_GET['page'] ) && ( basename( $file ) ) == $_GET['page'] ) {
				$this->infos['menu_options'] = $array;
				$this->infos['classname'] = $theme;
			}
			$this->option=array();

			/* Check this file is registered as a plugin, do it if needed */
//			$this->pluginification();

			/* Get infos about the theme and particularly its 'shortname'
			 * which is used to name the entry in wp_options where data are stored */
			$this->do_init();

			/* Read data from options table */
			$this->read_options();

			/* Are we in the admin area ? Add a menu then ! */
			$this->file = $file;
			add_action('admin_menu', array(&$this, 'add_menu'));
		}


		/* Add an entry to the admin menu area */
		function add_menu() {
			global $wp_version;
			if ( $wp_version >= 2 ) {
				$level = 'edit_theme_options';
			} else {
				$level = 9;
			}
			add_theme_page(__('Theme Options', 'supposedly-clean'), __('Theme Options', 'supposedly-clean'), 'edit_theme_options', basename($this->file), array(&$this,'admin_menu'));
			/* Thank you MCincubus for opening my eyes on the last parameter :) */
		}

		/* Get infos about this theme */
		function do_init() {
			$themes = get_themes();
			$shouldbe= basename($this->infos['path']);
			foreach ($themes as $theme) {
				$current= basename($theme['Template Dir']);
				if ($current == $shouldbe) {
					if (get_settings('template') == $current) {
						$this->infos['active'] = TRUE;
					} else {
						$this->infos['active'] = FALSE;
					}
				$this->infos['theme_name'] = $theme['Name'];
				$this->infos['theme_shortname'] = $current;
				$this->infos['theme_site'] = $theme['Title'];
				$this->infos['theme_version'] = $theme['Version'];
				$this->infos['theme_author'] = preg_replace("#>\s*([^<]*)</a>#", ">\\1</a>", $theme['Author']);
				}
			}
		}

		/* Read theme options as defined by user and populate the array $this->option */
		function read_options() {
			$options = get_option('theme-'.$this->infos['theme_shortname'].'-options');
			$options['_________junk-entry________'] = 'ozh is my god';
			foreach ($options as $key=>$val) {
				$this->option["$key"] = stripslashes($val);
			}
			array_pop($this->option);
			return $this->option;
			/* Curious about this "junk-entry" ? :) A few explanations then.
			 * The problem is that get_option always return an array, even if
			 * no settings has been previously saved in table wp_options. This
			 * junk entry is here to populate the array with at least one value,
			 * removed afterwards, so that the foreach loop doesn't go moo. */
		}

		/* Write theme options as defined by user in database */
		function store_options($array) {
			update_option('theme-'.$this->infos['theme_shortname'].'-options','');
			if (update_option('theme-'.$this->infos['theme_shortname'].'-options',$array)) {
				return __('Options successfully stored', 'supposedly-clean');
			} else {
				return __('Could not save options !', 'supposedly-clean');
			}
		}

		/* Delete options from database */
		  function delete_options() {
			/* Remove entry from database */
			delete_option('theme-'.$this->infos['theme_shortname'].'-options');
			/* Unregister this file as a plugin (therefore remove the admin menu) */
			$this->depluginification();
			/* Revert theme back to Kubrick if this theme was activated */
			if ($this->infos['active']) {
				update_option('template', 'default');
				update_option('stylesheet', 'default');
				do_action('switch_theme', 'Default');
			}
			/* Go back to Theme admin */
			print '<meta http-equiv="refresh" content="0;URL=themes.php?activated=true">';
			echo "<script> self.location(\"themes.php?activated=true\");</script>";
			exit;
		}

		/* Check if the theme has been loaded at least once (so that this file has been registered as a plugin) */
		function is_installed() {
			global $wpdb;
			$where = 'theme-'.$this->infos['theme_shortname'].'-options';
			$check = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->options WHERE option_name = '$where'");
			if ($check == 0) {
				return FALSE;
			} else {
				return TRUE;
			}
		}

		/* Theme used for the first time (create blank entry in database) */
		function do_firstinit() {
			global $wpdb;
			$options = array();
			foreach(array_keys($this->option) as $key) {
				$options["$key"]='';
			}
			add_option('theme-'.$this->infos['theme_shortname'].'-options',$options, 'Options for theme '.$this->infos['theme_name']);
//			return "Theme options added in database (1 entry in table '". $wpdb->options ."')";
		}

		/* The mother of them all : the Admin Menu printing func */
		function admin_menu () {
			global $cache_settings, $wpdb;

			/* Process things when things are to be processed */
			if (@$_POST['action'] == 'store_option') {
				unset($_POST['action']);
				$msg = $this->store_options($_POST);
			} elseif (@$_POST['action'] == 'delete_options') {
				$this->delete_options();
			} elseif (!$this->is_installed()) {
				$msg = $this->do_firstinit();
			}

			if (@$msg) print "<div class='updated'><p><b>" . $msg . "</b></p></div>\n";

			// if (!$this->infos['active']) { /* theme is not active */
			// 	echo '<p>' . __('Please note that this theme is currently <strong>not activated</strong> on your site as the default theme.', 'supposedly-clean') . '</p>';
			// }

			$cache_settings = '';
			$check = $this->read_options();

			echo "<div class='wrap'><h2>" . __('Layout Options', 'supposedly-clean') . "</h2>";
			echo '<p>' . __('This theme allows you to configure some variables to suit your blog, which are:', 'supposedly-clean') . '</p>
			<form action="" method="post">
			<input type="hidden" name="action" value="store_option" />
			<table cellspacing="2" cellpadding="5" border="0" width=100% class="editform">';

			/* Print form, here comes the fun part :) */
			foreach ($this->infos['menu_options'] as $key=>$val) {
				$items='';
				preg_match('/\s*([^{#]*)\s*({([^}]*)})*\s*([#]*\s*(.*))/', $val, $matches);
				if ($matches[3]) {
					$items = split("\|", $matches[3]);
				}

				print "<tr valign='top'><th scope='row' width='33%'>\n";
				if (@$items) {
					$type = array_shift($items);
					switch ($type) {
					case 'separator':
						print '<h3>'.$matches[1]."</h3></th>\n<td>&nbsp;</td>";
						break;
					case 'radio':
						print $matches[1]."</th>\n<td>";
						while ($items) {
							$v=array_shift($items);
							$t=array_shift($items);
							$checked='';
							if ( isset( $this->option[$key] ) && $v == $this->option[$key] ) $checked='checked';
							print "<label for='${key}${v}'><input type='radio' id='${key}${v}' name='$key' value='$v' $checked /> $t</label>";
							if (@$items) print "<br />\n";
						}
						break;
					case 'textarea':
						$rows=array_shift($items);
						$cols=array_shift($items);
					print "<label for='$key'>".$matches[1]."</label></th>\n<td>";
						print "<textarea name='$key' id='$key' rows='$rows' cols='$cols'>" . $this->option[$key] . "</textarea>";
						break;
					case 'checkbox':
						print $matches[1]."</th>\n<td>";
						while ($items) {
							$k=array_shift($items);
							$v=array_shift($items);
							$t=array_shift($items);
							$checked='';
							if ($v == $this->option[$k]) $checked='checked';
							print "<label for='${k}${v}'><input type='checkbox' id='${k}${v}' name='$k' value='$v' $checked /> $t</label>";
							if (@$items) print "<br />\n";
						}
						break;
					}
				} else {
					print "<label for='$key'>".$matches[1]."</label></th>\n<td>";
					print "<input type='text' name='$key' id='$key' value='" . $this->option[$key] . "' />";
				}

				if ($matches[5]) print '<br/>'. $matches[5];
				print "</td></tr>\n";
			}
			echo '</table>
			<p class="submit"><input type="submit" value="' . __('Update Layout &raquo;', 'supposedly-clean') . '" /></p>
			</form></div>';
		}

		/* Make this footer part of the real #footer DIV of WordPress admin area */
		function footercut($string) {
			return preg_replace('#</div><!-- footercut -->.*<div id="footer">#m', '', $string);
		}


		/***************************************
		 * Self-Pluginification (TM)(R)(C) . © ®
		 *
		 * The word "Self-Pluginification" and
		 * any future derivatives are licensed,
		 * patented and trademarked under the
		 * terms of the OHYEAHSURE agreement.
		 * Hmmmmmkey ? Fine.
		 **************************************/
		function pluginification () {
			global $wp_version;
			if ($wp_version<2) {
				$us = $this->infos['path'].'/functions.php';
				$them = get_settings('active_plugins');
				/* Now, are we members of the PPC (Plugins Private Club) yet ? */
				if (!in_array($us,$them)) {
					/* No ? Jeez, claim member card ! */
					$them[]=$us;
					update_option('active_plugins',$them);
					/* Wow. We're l33t now. */
					return TRUE;
				} else {
					return FALSE;
				}
			}
		}

		/***************************************
		 * De-Pluginification (TM)(R)(C) . © ®
		 *
		 * Same legal notice. It's not that I
		 * really like it, but my lawyer asked
		 * for it. I swear.
		 **************************************/
		function depluginification () {
			global $wp_version;
			if ($wp_version<2) {
				$us = $this->infos['path'].'/functions.php';
				$them = get_settings('active_plugins');
				if (in_array($us,$them)) {
					$here = array_search($us,$them);
					unset($them[$here]);
					update_option('active_plugins',$them);
					return TRUE;
				} else {
					return FALSE;
				}
			}
		}

		/***************************************
		 * Really, the whole plugin management
		 * system is really neat in WP, and very
		 * easy to use.
		 **************************************/

		/* Clean plugins lists in order to work with WordPress 2.0 */
		function upgrade_toolkit () {
			$plugins=get_settings('active_plugins');
			$delete=@preg_grep('#^\.\./themes/[^/]+/functions.php$#', $plugins);
			$result=array_diff($plugins,$delete);
			$temp = array();
			foreach($result as $item) $temp[]=$item;
			$result = $temp;
			update_option('active_plugins',$result);
			wp_cache_flush;
		}

	}
}

?>