Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /***************** DO NOT EDIT THIS FILE *************************
- ******************************************************************
- INFORMATION:
- ------------
- This is a core theme file, you should not need to edit
- this file directly. Code changes maybe lost during updates.
- LAST UPDATED: 26th March 2011
- EDITED BY: MARK FAIL
- ------------------------------------------------------------------
- ******************************************************************/
- $debugMode = false;
- if ( !defined('WP_CONTENT_URL') )
- define( 'WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
- if ( !defined('WP_CONTENT_DIR') )
- define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
- class PPT_S extends DB_Search_Widget1 {
- function PPT_S($params=array()){
- PPT_S::__construct($params);
- }
- function __construct($params=array()){
- $this->loadTranslations();
- parent::__construct(__('Custom Fields ','premiumpress_advancedsearch'),$params);
- add_filter('the_content', array(&$this,'process_tag'),9);
- //
- //wp_enqueue_script('jquery');
- }
- function init(){
- global $CustomSearchFieldStatic;
- $CustomSearchFieldStatic['Object'] = new PPT_S();
- }
- function upgrade($current,$target){
- $options = $this->getConfig();
- if(version_compare($current,"0.3")<0){
- $config = $this->getDefaultConfig();
- $config['name'] = __('Default Preset','premiumpress_advancedsearch');
- $options['preset-default'] = $config;
- }
- $options['version']=$target;
- update_option($this->id,$options);
- }
- function getInputs($params = false,$visitedPresets=array()){
- /*if(is_array($params)){
- $id = "preset-default";//$params['widget_id'];
- } else {
- $id = $params;
- }*/
- $id = "preset-default";
- if(!isset($visitedPresets[$id])){ $visitedPresets[$id] = ""; }// PP EDIT
- if($visitedPresets[$id]) return array();
- $visitedPresets[$id]=true;
- global $CustomSearchFieldStatic;
- if(!isset($CustomSearchFieldStatic['Inputs'][$id])){ $CustomSearchFieldStatic['Inputs'][$id] = ""; } // PP EDIT
- if(!$CustomSearchFieldStatic['Inputs'][$id]){
- $config = $this->getConfig($id);
- $inputs = array();
- //if($config['preset']) $inputs = $this->getInputs($config['preset'],$visitedPresets); // PP EDIT
- $nonFields = $this->getNonInputFields();
- if($config)
- foreach($config as $k=>$v){
- if(in_array($k,$nonFields)) continue;
- if(!(class_exists($v['input']) && class_exists($v['comparison']) && class_exists($v['joiner']))) {
- continue;
- }
- $inputs[] = new CustomSearchField($v);
- }
- foreach($inputs as $k=>$v){
- $inputs[$k]->setIndex($k);
- }
- $CustomSearchFieldStatic['Inputs'][$id]=$inputs;
- }
- return $CustomSearchFieldStatic['Inputs'][$id];
- }
- function getTitle($params){
- $config = $this->getConfig($params['widget_id']);
- return $config['name'];
- }
- function form_processPost($post,$old){
- unset($post['###TEMPLATE_ID###']);
- if(!$post) $post=array('exists'=>1);
- return $post;
- }
- function getDefaultConfig(){
- return array('name'=>'Site Search',
- 1=>array(
- 'label'=>__('Key Words','premiumpress_advancedsearch'),
- 'input'=>'TextField',
- 'comparison'=>'WordsLikeComparison',
- 'joiner'=>'PostDataJoiner',
- 'name'=>'all'
- ),
- 2=>array(
- 'label'=>__('Category','premiumpress_advancedsearch'),
- 'input'=>'DropDownField',
- 'comparison'=>'EqualComparison',
- 'joiner'=>'CategoryJoiner'
- ),
- );
- }
- function form_outputForm($values,$pref){
- $defaults=$this->getDefaultConfig();
- $prefId = preg_replace('/^.*\[([^]]*)\]$/','\\1',$pref);
- $this->form_existsInput($pref);
- $rand = rand();
- ?>
- <div id='config-template-<?php echo $prefId?>' style='display: none;'>
- <?php
- $templateDefaults = $defaults[1];
- $templateDefaults['label'] = 'Field ###TEMPLATE_ID###';
- echo $this->singleFieldHTML($pref,'###TEMPLATE_ID###',$templateDefaults);
- ?>
- </div>
- <?php
- foreach($this->getClasses('input') as $class=>$desc) {
- if(class_exists($class))
- $form = new $class();
- else $form = false;
- if(compat_method_exists1($form,'getConfigForm')){
- if($form = $form->getConfigForm($pref.'[###TEMPLATE_ID###]',array('name'=>'###TEMPLATE_NAME###'))){
- ?>
- <div id='config-input-templates-<?php echo $class?>-<?php echo $prefId?>' style='display: none;'>
- <?php echo $form?>
- </div>
- <?php }
- }
- }
- ?>
- <div id='config-form-<?php echo $prefId?>'>
- <?php
- if(!$values) $values = $defaults;
- $maxId=0;
- $presets = $this->getPresets();
- array_unshift($presets,__('NONE','premiumpress_advancedsearch'));
- ?>
- <br />
- <div style="float:left; width:450px;">
- <b>Enable Advanced Search Box</b><br />
- <p><input type='checkbox' <?php if(get_option("display_advanced_search") ==1){ echo "checked"; } ?> name="display_advanced_search" value="1"/> Tick to enable display.</p>
- </div>
- <div style="float:left; width:300px;">
- <b>Advanced Search Title</b><br /><br />
- <input type='text' class='form-title-input' id='<?php echo $prefId?>[name]' name='<?php echo $pref?>[name]' value='<?php echo $values['name']?>' style="font-size:14px; width:300px;"/>
- </div>
- <div class="clearfix"></div>
- <?php
- /*$dd = new AdminDropDown1($pref."[preset]",$values['preset'],$presets);
- echo $dd->getInput()."</div>";*/
- $nonFields = $this->getNonInputFields();
- foreach($values as $id => $val){
- $maxId = max($id,$maxId);
- if(in_array($id,$nonFields)) continue;
- echo "<div id='config-form-$prefId-$id'>".$this->singleFieldHTML($pref,$id,$val)."</div>";
- }
- ?>
- </div>
- <div style="clear:both;"></div><br />
- <br/><a href='#' onClick="return CustomSearch.get('<?php echo $prefId?>').add();" style="background:green; color:white; padding:8px;margin-left:5px;">Add Search Field</a><br /><br />
- <script type='text/javascript'>
- CustomSearch.create('<?php echo $prefId?>','<?php echo $maxId?>');
- <?php
- foreach($this->getClasses('joiner') as $joinerClass=>$desc){
- if(compat_method_exists1($joinerClass,'getSuggestedFields')){
- $options = eval("return $joinerClass::getSuggestedFields();");
- $str = '';
- foreach($options as $i=>$v){
- $k=$i;
- if(is_numeric($k)) $k=$v;
- $options[$i] = json_encode(array('id'=>$k,'name'=>$v));
- }
- $str = '['.join(',',$options).']';
- echo "CustomSearch.setOptionsFor('$joinerClass',".$str.");\n";
- }elseif(eval("return $joinerClass::needsField();")){
- echo "CustomSearch.setOptionsFor('$joinerClass',[]);\n";
- }
- }
- ?>
- </script>
- <?php
- }
- function getNonInputFields(){
- return array('exists','name','preset','version');
- }
- function singleFieldHTML($pref,$id,$values){
- $prefId = preg_replace('/^.*\[([^]]*)\]$/','\\1',$pref);
- $pref = $pref."[$id]";
- $htmlId = $pref."[exists]";
- $output = "<div style='background:#efefef; border:1px solid #ddd; margin-top:30px; float:left; width:45%;padding:10px;margin-right:10px; '> <input type='hidden' name='$htmlId' value='1'/>";
- $titles ="
- <p><b>Search Field Caption</b></p>
- <input type='text' name='$pref"."[label]' value='$values[label]' class='form-field-title'/><br /><a href='#' onClick='return CustomSearch.get(\"$prefId\").toggleOptions(\"$id\");'><br />+ Show Options</a>
- ";
- $output.=" $titles $inputs ";
- $output.="<div id='form-field-advancedoptions-$prefId-$id' style='display: none; background:#e0ffe5; padding:5px;margin-top:10px;'> <b>Search Field Options</b>";
- $inputs='';$titles='';
- //
- $inputs= "<br /><small>Currently set to ".$values['name']."</small>
- <div id='form-field-dbname-$prefId-$id' class='form-field-title-div'>
- <input type='text' name='$pref"."[name]' value='$values[name]' class='form-field-title'/>
- </div> ";
- $count=1;
- foreach(array('joiner'=>__('Data Type','premiumpress_advancedsearch'),'comparison'=>__('Compare','premiumpress_advancedsearch'),'input'=>__('Widget','premiumpress_advancedsearch')) as $k=>$v){
- $dd = new AdminDropDown1($pref."[$k]",$values[$k],$this->getClasses($k),array('onChange'=>'CustomSearch.get("'.$prefId.'").updateOptions("'.$id.'","'.$k.'")','css_class'=>"wpcfs-$k"));
- $titles="".$v." <br />".$titles;
- $inputs="".$dd->getInput()."".$inputs;
- if(++$count==2){
- $output.="<div class='form-class-$k'> <br/> $inputs</div>";
- $count=0;
- $inputs = $titles='';
- }
- }
- if($titles){
- $output.="<div class='form-field-table'> 1-> $titles <br /> $inputs </div>";
- $inputs = $titles='';
- }
- $titles.="<br /> is the field data numeric? ";
- $inputs.="<input type='checkbox' ".($values['numeric']?"checked='true'":"")." name='$pref"."[numeric]'/>";
- if(class_exists($widgetClass = $values['input'])){
- $widget = new $widgetClass();
- if(compat_method_exists1($widget,'getConfigForm'))
- $widgetConfig=$widget->getConfigForm($pref,$values);
- }
- $inputs.="<div id='$this->id"."-$prefId"."-$id"."-widget-config'>$widgetConfig</div>";
- $output.="<table class='form-field-table'><tr>$titles</tr><tr>$inputs</tr></table>";
- $output.="";
- $output.="<br /><br /><a href='#' onClick=\"return CustomSearch.get('$prefId').remove('$id');\" style='background:red; padding:5px; color:white;margin-bottom:5px;'>Delete Search Field</a> <div class='clearfix'></div></div> </div>";
- return "$output";
- }
- function getRootURL(){
- return WP_CONTENT_URL .'/plugins/' . dirname(plugin_basename(__FILE__) ) . '/';
- }
- function getJoiners(){
- return $this->getClasses('joiner');
- }
- function getComparisons(){
- return $this->getClasses('comparison');
- }
- function getInputTypes(){
- return $this->getClasses('input');
- }
- function getClasses($type){
- global $CustomSearchFieldStatic;
- if(!$CustomSearchFieldStatic['Types']){
- $CustomSearchFieldStatic['Types'] = array(
- "joiner"=>array(
- "PostDataJoiner" =>__( "Wordpress Post Field",'premiumpress_advancedsearch'),
- "CustomFieldJoiner" =>__( "Custom Field",'premiumpress_advancedsearch'),
- "CategoryJoiner" =>__( "Category",'premiumpress_advancedsearch'),
- "TagJoiner" =>__( "Tag",'premiumpress_advancedsearch'),
- //"PostTypeJoiner" =>__( "Post Type",'premiumpress_advancedsearch'),
- ),
- "input"=>array(
- "TextField" =>__( "Text Input",'premiumpress_advancedsearch'),
- "DropDownField" =>__( "Drop Down",'premiumpress_advancedsearch'),
- "RadioButtonField" =>__( "Radio Button",'premiumpress_advancedsearch'),
- "HiddenField" =>__( "Hidden Constant",'premiumpress_advancedsearch'),
- ),
- "comparison"=>array(
- "EqualComparison" =>__( "Equals",'premiumpress_advancedsearch'),
- "LikeComparison" =>__( "Phrase In",'premiumpress_advancedsearch'),
- "WordsLikeComparison" =>__( "Words In",'premiumpress_advancedsearch'),
- "LessThanComparison" =>__( "Less Than",'premiumpress_advancedsearch'),
- "MoreThanComparison" =>__( "More Than",'premiumpress_advancedsearch'),
- "AtMostComparison" =>__( "At Most",'premiumpress_advancedsearch'),
- "AtLeastComparison" =>__( "At Least",'premiumpress_advancedsearch'),
- "RangeComparison" =>__( "Range",'premiumpress_advancedsearch'),
- //TODO: Make this work...
- // "NotEqualComparison" =>__( "Not Equal To",'premiumpress_advancedsearch'),
- )
- );
- $CustomSearchFieldStatic['Types'] = apply_filters('custom_search_get_classes',$CustomSearchFieldStatic['Types']);
- }
- return $CustomSearchFieldStatic['Types'][$type];
- }
- function getPresets(){
- $presets = array();
- foreach(array_keys($config = $this->getConfig()) as $key){
- if(strpos($key,'preset-')===0) {
- $presets[$key] = $key;
- if($name = $config[$key]['name'])
- $presets[$key]=$name;
- }
- }
- return $presets;
- }
- function presets_form(){
- //
- $x=1;
- while($x < 20){
- if(isset($_POST['ppt_s']['preset-default'][$x])){ $_POST['ppt_s']['preset-default'][$x]['name'] = $_POST['db_customsearch_widget']['preset-default'][$x]['name']; }
- $x++;}
- $presets=$this->getPresets();
- if(!$preset = $_REQUEST['selected-preset']){
- $preset = 'preset-default';
- }
- if(!$presets[$preset]){
- $defaults = $this->getDefaultConfig();
- $options = $this->getConfig();
- $options[$preset] = $defaults;
- if($n = $_POST[$this->id][$preset]['name'])
- $options[$preset]['name'] = $n;
- elseif($preset=='preset-default')
- $options[$preset]['name'] = 'Default';
- else{
- list($junk,$id) = explode("-",$preset);
- $options[$preset]['name'] = 'New Preset '.$id;
- }
- update_option($this->id,$options);
- $presets[$preset] = $options[$preset]['name'];
- }
- if($_POST['delete']){
- check_admin_referer($this->id.'-editpreset-'.$preset);
- $options = $this->getConfig();
- unset($options[$preset]);
- unset($presets[$preset]);
- update_option($this->id,$options);
- list($preset,$name) = each($presets);
- }
- $index = 1;
- while($presets["preset-$index"]) $index++;
- $presets["preset-$index"] = __('New Preset','premiumpress_advancedsearch');
- $linkBase = $_SERVER['REQUEST_URI'];
- $linkBase = preg_replace("/&?selected-preset=[^&]*(&|$)/",'',$linkBase);
- foreach($presets as $key=>$name){
- $config = $this->getConfig($key);
- if($config && $config['name']) $name=$config['name'];
- if(($n = $_POST[$this->id][$key]['name'])&&(!$_POST['delete']))
- $name = $n;
- $presets[$key]=$name;
- }
- $plugin=&$this;
- ob_start();
- wp_nonce_field($this->id.'-editpreset-'.$preset);
- $hidden = ob_get_contents();
- $hidden.="<input type='hidden' name='selected-preset' value='$preset'>";
- $shouldSave = $_POST['selected-preset'] && !$_POST['delete'] && check_admin_referer($this->id.'-editpreset-'.$preset);
- ob_end_clean();
- /* premium press theme layout */
- $STRING = $hidden;
- $STRING .= $plugin->configForm($preset,$shouldSave);
- print $STRING;
- }
- function process_tag($content){
- $regex = '/\[\s*premiumpress_advancedsearch\s+(?:([^\]=]+(?:\s+.*)?))?\]/';
- return preg_replace_callback($regex, array(&$this, 'generate_from_tag'), $content);
- }
- function process_shortcode($atts,$content){
- return $this->generate_from_tag(array("",$atts['preset']));
- }
- function generate_from_tag($reMatches){
- global $CustomSearchFieldStatic;
- ob_start();
- $preset=$reMatches[1];
- if(!$preset) $preset = 'default';
- compat_method_exists111($preset);
- $form = ob_get_contents();
- ob_end_clean();
- return $form;
- }
- }
- global $CustomSearchFieldStatic;
- $CustomSearchFieldStatic['Inputs'] = array();
- $CustomSearchFieldStatic['Types'] = array();
- class AdminDropDown1 extends DropDownField {
- function AdminDropDown1($name,$value,$options,$params=array()){
- AdminDropDown1::__construct($name,$value,$options,$params);
- }
- function __construct($name,$value,$options,$params=array()){
- $params['options'] = $options;
- $params['id'] = $params['name'];
- parent::__construct($params);
- $this->name = $name;
- $this->value = $value;
- }
- function getHTMLName(){
- return $this->name;
- }
- function getValue(){
- return $this->value;
- }
- function getInput(){
- return parent::getInput($this->name,null);
- }
- }
- if (!function_exists('json_encode'))
- {
- function json_encode($a=false)
- {
- if (is_null($a)) return 'null';
- if ($a === false) return 'false';
- if ($a === true) return 'true';
- if (is_scalar($a))
- {
- if (is_float($a))
- {
- // Always use "." for floats.
- return floatval(str_replace(",", ".", strval($a)));
- }
- if (is_string($a))
- {
- static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
- return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
- }
- else
- return $a;
- }
- $isList = true;
- for ($i = 0, reset($a); $i < count($a); $i++, next($a))
- {
- if (key($a) !== $i)
- {
- $isList = false;
- break;
- }
- }
- $result = array();
- if ($isList)
- {
- foreach ($a as $v) $result[] = json_encode($v);
- return '[' . join(',', $result) . ']';
- }
- else
- {
- foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v);
- return '{' . join(',', $result) . '}';
- }
- }
- }
- function PPT_AdvancedSearch($presetName='default'){
- global $CustomSearchFieldStatic;
- if(strpos($presetName,'preset-')!==0) $presetName="preset-$presetName";
- $CustomSearchFieldStatic['Object']->renderWidget(array('widget_id'=>$presetName,'noTitle'=>true),array('number'=>$presetName));
- }
- function compat_method_exists1($class,$method){
- return method_exists($class,$method) || in_array(strtolower($method),get_class_methods($class));
- }
- class ParameterisedObject {
- var $params=array();
- function ParameterisedObject($params=array()){
- $this->__construct($params);
- }
- function __construct($params=array()){
- $this->setParams($params);
- if(!is_array($this->params)){
- foreach(debug_backtrace() as $trace){
- extract($trace);
- echo "<li>$file:$line $class.$function</li>";
- }
- die("<h1>".get_class($this)."</h1>");
- }
- }
- function setParams($params){
- $this->params=$params;
- }
- function param($key,$default=null){
- if(!array_key_exists($key,$this->params)) return $default;
- return $this->params[$key];
- }
- }
- class DB_WP_Widget1 extends ParameterisedObject {
- function DB_WP_Widget1($name,$params=array()){
- DB_WP_Widget1::__construct($name,$params);
- }
- function __construct($name,$params=array()){
- parent::__construct($params);
- $this->name = $name;
- $this->id = strtolower(get_class($this));
- $options = get_option($this->id);
- // register_sidebar_widget($this->name,array(&$this,'renderWidget'));
- $doesOwnConfig = $this->param('doesOwnConfig',false);
- $desc = $this->param('description',$this->name);
- $widget_ops = array('classname' => $this->id, 'description' => __($desc));
- $control_ops = array('width' => 400, 'height' => 350, 'id_base' => $this->id);
- $name = $this->name;
- $id = false;
- do {
- if($options)
- foreach ( array_keys($options) as $o ) {
- // Old widgets can have null values for some reason
- if ( !isset($options[$o]['exists']) )
- continue;
- $id = "$this->id-".abs($o); // Never never never translate an id
- wp_register_sidebar_widget($id, $name, array(&$this,'renderWidget'), $widget_ops, array( 'number' => $o ));
- wp_register_widget_control($id, $name, array(&$this,'configForm'), $control_ops, array( 'number' => $o ));
- }
- $options = array( -1=>array('exists'=>1));
- } while(!$id);
- }
- function setParams($params){
- parent::setParams($this->overrideParams($params));
- }
- function getDefaults(){
- return array('doesOwnConfig'=>false);
- }
- function overrideParams($params){
- foreach($this->getDefaults() as $k=>$v){
- if(!array_key_exists($k,$params)) $params[$k] = $v;
- }
- return $params;
- }
- function renderWidget(){
- echo "<h1>Unconfigured Widget</h1>";
- }
- function defaultWidgetConfig(){
- return array('exists'=>'1');
- }
- function getConfig($id=null,$key=null){
- $options = get_option($this->id);
- if(is_null($id)) return $options;
- if(!@array_key_exists($id,$options))
- $id = preg_replace('/^.*-(\d+)$/','\\1',$id);
- if(is_null($key))
- return $options[$id];
- else
- return $options[$id][$key];
- }
- function configForm($args,$force=false){
- static $first;
- global $wp_registered_widgets;
- if ( !is_array($args) )
- $args = array( 'number' => $args );
- $args = wp_parse_args($args,array('number'=>-1));
- static $updated = array();
- $options = get_option($this->id);
- if(!$updated[$this->id] && ($_POST['sidebar'] || $force)){
- $updated[$this->id]=true;
- $sidebar = (string) $_POST['sidebar'];
- $default_options=$this->defaultWidgetConfig();
- $sidebars_widgets = wp_get_sidebars_widgets();
- if ( isset($sidebars_widgets[$sidebar]) )
- $this_sidebar = $sidebars_widgets[$sidebar];
- else
- $this_sidebar = array();
- foreach ( $this_sidebar as $_widget_id ) {
- $callback = $wp_registered_widgets[$_widget_id]['callback'];
- if(is_array($callback) && get_class($callback[0])==get_class($this) && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) {{
- $PPT_ID = $wp_registered_widgets[$_widget_id]['params'][0]['number'];
- }
- if ( !in_array( "$this->id-$PPT_ID", $_POST['widget-id'] ) )
- unset($options[$PPT_ID]);
- }
- }
- foreach ((array)$_POST[$this->id] as $PPT_ID => $posted) {
- if(!isset($posted['exists']) && isset($options[$PPT_ID]))continue;
- $widgetOptions = $this->form_processPost($posted,$options[$PPT_ID]);
- $options[$PPT_ID] = $widgetOptions;
- }
- update_option($this->id,$options);
- }
- global $mycount;
- if(-1==$args['number']){
- $args['number']='%i%';
- $values = $default_options;
- } else {
- $values = $options[$args['number']];
- }
- $this->form_outputForm($values,$this->id.'['.$args['number'].']');
- }
- function form_processPost($post,$old){
- return array('exists'=>1);
- }
- function form_outputForm($old,$pref){
- $this->form_existsInput($pref);
- }
- function form_existsInput($pref){
- echo "<input type='hidden' name='".$pref."[exists]' value='1'/>";
- }
- function nameAsId(){
- return strtolower(str_replace(" ","_",$this->name));
- }
- }
- class DB_Search_Widget1 extends DB_WP_Widget1 {
- var $inputs = array();
- function DB_Search_Widget1($name){
- DB_Search_Widget1::__construct($name);
- }
- function __construct($name='Custom',$params=array()){
- $this->loadTranslations();
- parent::__construct(sprintf(__('%1$s Search','premiumpress_advancedsearch'),$name),$params);
- add_filter('posts_join',array(&$this,'join_meta'));
- add_filter('posts_where',array(&$this,'sql_restrict'));
- add_filter('posts_groupby', array(&$this,'sql_group'));
- add_filter('home_template',array(&$this,'rewriteHome'));
- add_filter('page_template',array(&$this,'rewriteHome'));
- add_filter( 'get_search_query', array(&$this,'getSearchDescription'));
- }
- function loadTranslations(){
- static $loaded;
- if ( !$loaded && function_exists('load_plugin_textdomain') ) {
- $loaded=true;
- if ( !defined('WP_PLUGIN_DIR') ) {
- load_plugin_textdomain('premiumpress_advancedsearch', str_replace( ABSPATH, '', dirname(__FILE__) ) );
- } else {
- load_plugin_textdomain('premiumpress_advancedsearch', false, dirname( plugin_basename(__FILE__) ) );
- }
- }
- }
- function addInput($input){
- $this->inputs[] = $input;
- }
- function getInputs($params){
- return $this->inputs;
- }
- function getTitle(){
- return $this->param('description',$this->name);
- }
- function renderWidget($params=array(),$p2 = array()){
- $title = $this->getTitle($params);
- $inputs = $this->getInputs($params);
- $hidden = "<input type='hidden' name='search-class' value='".$this->getPostIdentifier()."'/>";
- $formCssClass = 'custom_search widget custom_search_'.$this->nameAsId();
- $formAction = get_option('home');
- if(function_exists('locate_template'))
- /* PREMIUM PRESS FORM LAYOUT */
- $formTemplate = "<div class='AdvancedSearchBox' id='AdvancedSearchBox' style='display:none'> <h2>".$title."</h2><form method='get' action='".$formAction."'>".$hidden."<div class='full clearfix border_t border_b'>";
- $i=0; foreach($inputs as $input){
- $formTemplate .= "<p class='f3 left'>".$input->getInput()."</p>";
- //if($i%3){ $formTemplate .= '</div><div class="full clearfix border_t">'; }
- $i++; }
- $formTemplate .= "</div> <br /> <input type='submit' class='button blue' style='color:white;' value='Start Search'/> <input type='button' onClick=\"$('#AdvancedSearchBox').hide()\" class=\"button grey\" value=\"Hide Search Box\" /> </form></div>";
- foreach($inputs as $k=>$v){
- if($v->isHidden()){
- $hidden.=$v->getInput(false);
- unset($inputs[$k]);
- }
- }
- echo $formTemplate;
- }
- function isPosted(){
- if(isset($_GET['search-class'])){ return $_GET['search-class'] == $this->getPostIdentifier();/*$_GET['search-class'] == $this->getPostIdentifier();*/}
- }
- function getPostIdentifier(){
- return get_class($this).'-'.$this->id;
- }
- function isHome($isHome){
- return $isHome && !$this->isPosted();
- }
- function rewriteHome($homeTemplate){
- if($this->isPosted()) return get_query_template('search');
- return $homeTemplate;
- }
- function join_meta($join){
- if($this->isPosted()){
- $desc = array();
- foreach($this->getInputs("preset-default") as $input){
- $join = $input->join_meta($join);
- $desc = $input->describeSearch($desc);
- }
- if($desc){
- $desc = join(__(" and ",'premiumpress_advancedsearch'),$desc);
- } else {
- $desc = __("All Entries",'premiumpress_advancedsearch');
- }
- $this->desc=$desc;
- }
- return $join;
- }
- function getSearchDescription($desc){
- if($this->isPosted()) return $this->desc;
- return $desc;
- }
- function sql_restrict($where){
- if($this->isPosted()){
- global $wpdb;
- /** This could possibly be considered invasive, need to think this bit through
- * properly.
- */
- $where = preg_replace("_AND\s*\(ID\s*=\s*'\d+'\)_","",$where);
- $where = preg_replace("/AND $wpdb->posts.post_type = '(post|page)'/","",$where);
- $where.= " AND ($wpdb->posts.post_type='post')";
- foreach($this->getInputs("preset-default") as $input){
- $where = $input->sql_restrict($where);
- }
- }
- return $where;
- }
- function sql_group($group){
- if($this->isPosted()){
- global $wpdb;
- $group = "$wpdb->posts.ID";
- }
- return $group;
- }
- function toSearchString(){
- }
- }
- class SearchFieldBase {
- function SearchFieldBase(){
- SearchFieldBase::__construct();
- }
- function __construct(){
- add_filter('search_params',array(&$this,'form_inputs'));
- static $index;
- $this->index = ++$index;
- }
- function form_inputs($form){
- die("Unimplemented function ".__CLASS__.".".__FUNCTION__);
- }
- function sql_restrict($where){
- die("Unimplemented function ".__CLASS__.".".__FUNCTION__);
- }
- }
- class Field extends ParameterisedObject {
- function getValue($name){
- if(isset($_REQUEST[$this->getHTMLName($name)])){
- $v = $_REQUEST[$this->getHTMLName($name)];
- }else{
- $v = "";
- }
- if(get_magic_quotes_gpc()) $v= stripslashes($v);
- return $v;
- }
- function getHTMLName($name){
- return 'cs-'.str_replace(" ","_",$name);
- }
- function getInput($name){
- $htmlName = $this->getHTMLName($name);
- $value = $this->getValue($name);
- return "<input name='$htmlName' value='$value' class='short'/>";
- }
- function getCSSClass(){
- return get_class($this);
- }
- }
- class TextField extends Field {
- }
- class TextInput extends TextField{}
- class DropDownField extends Field {
- function DropDownField($params=array()){
- $this->__construct($params);
- }
- function __construct($params = array()){
- parent::__construct($params);
- if($optionString = $this->param('dropdownoptions',false)){
- $options=array();
- $optionPairs = explode(',',$optionString);
- foreach($optionPairs as $option){
- list($k,$v) = explode(':',$option);
- if(!$v) $v=$k;
- $options[$k]=$v;
- }
- } else {
- $options = $this->param('options',array());
- }
- $this->options = $options;
- }
- function getOptions($joiner,$name){
- if($this->param('fromDb',!$this->options)){
- $options = array(''=>__('-------','premiumpress_advancedsearch'));
- $auto = $joiner->getAllOptions($name);
- asort($auto);
- $options +=$auto;
- return $options;
- } else {
- return $this->options;
- }
- }
- function getInput($name,$joiner,$fieldName=null){
- if(!$fieldName) $fieldName=$name;
- $v = $this->getValue($name);
- $id = $this->getHTMLName($name);
- $options = '';
- foreach($this->getOptions($joiner,$fieldName) as $option=>$label){
- $checked = ($option==$v)?" selected='true'":"";
- $option = htmlspecialchars($option,ENT_QUOTES);
- $label = htmlspecialchars($label,ENT_QUOTES);
- $options.="<option value='$option'$checked>$label</option>";
- }
- $atts = '';
- if($this->params['onChange']) $atts = ' onChange="'.htmlspecialchars($this->params['onChange']).'"';
- if($this->params['id']) $atts .= ' id="'.htmlspecialchars($this->params['id']).'"';
- if($this->params['css_class']) $atts .= ' class="'.htmlspecialchars($this->params['css_class']).'"';
- return "<select name='$id'$atts class='short' style='font-size:14px; width:240px;'>$options</select>";
- }
- function getConfigForm($id,$values){
- return "<label for='$id-dropdown-options'><b>Drop Down Options</b></label> <br /><small>Seperate each with a comma (eg. 1,2,3,4)</small><input id='$id-dropdown-options' name='$id"."[dropdownoptions]' value='$values[dropdownoptions]'/>";
- }
- }
- class HiddenField extends Field {
- function HiddenField(){
- $func_args = func_get_args();
- call_user_func_array(array($this,'__construct'),$func_args);
- }
- function __construct($params = array()){
- $params['hidden']=true;
- parent::__construct($params);
- }
- function getValue(){
- return $this->param('constant-value',null);
- }
- function getInput($name){
- $v=$this->getValue($name);
- $id = $this->getHTMLName($name);
- return "<input type='hidden' name='".htmlspecialchars($name)."' value='".htmlspecialchars($v)."'/>";
- }
- function getConfigForm($id,$values){
- return "<br /><label for='$id-constant-value'><b>Constant Value</b></label><input id='$id-constant-value' name='$id"."[constant-value]' value='{$values['constant-value']}'/>";
- }
- }
- class DropDownFromValues extends DropDownField {
- function DropDownFromValues($params=array()){
- $this->__construct($params);
- }
- function __construct($params=array()){
- $params['fromDb'] = true;
- parent::__construct(array(),$params);
- }
- function getConfigForm($id,$values){
- return "";
- }
- }
- class RadioButtonField extends Field {
- function RadioButtonField($options=array(),$params=array()){
- RadioButtonField::__construct($options,$params);
- }
- function __construct($params=array()){
- parent::__construct($params);
- if($params['radiobuttonoptions']){
- $options=array();
- $optionPairs = explode(',',$params['radiobuttonoptions']);
- foreach($optionPairs as $option){
- list($k,$v) = explode(':',$option);
- if(!$v) $v=$k;
- $options[$k]=$v;
- }
- }
- $this->options = $options;
- }
- function getOptions($joiner,$name){
- if($this->param('fromDb',!$this->options)){
- return $joiner->getAllOptions($name);
- } else {
- return $this->options;
- }
- }
- function getInput($name,$joiner,$fieldName=null){
- if(!$fieldName) $fieldName=$name;
- $v = $this->getValue($name);
- $id = $this->getHTMLName($name);
- $options = '';
- foreach($this->getOptions($joiner,$fieldName) as $option=>$label){
- $option = htmlspecialchars($option,ENT_QUOTES);
- $label = htmlspecialchars($label,ENT_QUOTES);
- $checked = ($option==$v)?" checked='true'":"";
- $htmlId = "$id-$option";
- $options.="<input type='radio' name='$id' id='$htmlId' value='$option'$checked> <label for='$htmlId'>$label</label><br />";
- }
- return $options;
- }
- function getCSSClass(){
- return "RadioButton";
- }
- function getConfigForm($id,$values){
- return "<br /><label for='$id-radiobutton-options'><b>Radio Button Options</b></label><br /><small>Seperate each with a comma (eg. 1,2,3,4)</small><input id='$id-radiobutton-options' name='$id"."[radiobuttonoptions]' value='$values[radiobuttonoptions]'/>";
- }
- }
- class RadioButtonFromValues extends RadioButtonField {
- function RadioButtonFromValues($fieldName=null){
- RadioButtonFromValues::__construct($fieldName);
- }
- function __construct($fieldName=null,$params){
- $params['fromDb'] = true;
- parent::__construct($options,$params);
- }
- function getConfigForm($id,$values){
- return "";
- }
- }
- class Comparison {
- function addSQLWhere($field,$value){
- die("Unimplemented function ".__CLASS__.".".__FUNCTION__);
- }
- function describeSearch($value){
- die("Unimplemented function ".__CLASS__.".".__FUNCTION__);
- }
- }
- class EqualComparison extends Comparison {
- function addSQLWhere($field,$value){
- return "$field = '$value'";
- }
- function describeSearch($value){
- return sprintf(__(' is "%1$s"','premiumpress_advancedsearch'),$value);
- }
- }
- class LikeComparison extends Comparison{
- function addSQLWhere($field,$value){
- return $this->getLikeString($field,$value);
- }
- function getLikeString($field,$value){
- return "$field LIKE '%$value%'";
- }
- function describeSearch($value){
- return sprintf(__(' contains "%1$s"','premiumpress_advancedsearch'),$value);
- }
- }
- class WordsLikeComparison extends LikeComparison {
- function addSQLWhere($field,$value){
- $words = explode(" ",$value);
- $like = array(1);
- foreach($words as $word){
- $like[] = $this->getLikeString($field,$word);
- }
- return "(".join(" AND ",$like).")";
- }
- function describeSearch($value){
- return sprintf(__(' contains "%1$s"','premiumpress_advancedsearch'),join('"'.__(" and ",'premiumpress_advancedsearch').'"',explode(" ",$value)));
- }
- }
- class LessThanComparison extends Comparison{
- function addSQLWhere($field,$value){
- return "$field < '$value'";
- }
- function describeSearch($value){
- return sprintf(__(' less than "%1$s"','premiumpress_advancedsearch'),$value);
- }
- }
- class AtMostComparison extends Comparison{
- function addSQLWhere($field,$value){
- return "$field <= '$value'";
- }
- function describeSearch($value){
- return sprintf(__(' at most "%1$s"','premiumpress_advancedsearch'),$value);
- }
- }
- class AtLeastComparison extends Comparison{
- function addSQLWhere($field,$value){
- return "$field >= '$value'";
- }
- function describeSearch($value){
- return sprintf(__(' at least "%1$s"','premiumpress_advancedsearch'),$value);
- }
- }
- class MoreThanComparison extends Comparison{
- function addSQLWhere($field,$value){
- return "$field > '$value'";
- }
- function describeSearch($value){
- return sprintf(__(' more than "%1$s"','premiumpress_advancedsearch'),$value);
- }
- }
- class RangeComparison extends Comparison{
- function addSQLWhere($field,$value){
- list($min,$max) = explode("-",$value);
- $where=1;
- if(strlen($min)>0) $where.=" AND $field >= $min";
- if(strlen($max)>0) $where.=" AND $field <= $max";
- return $where;
- }
- function describeSearch($value){
- list($min,$max) = explode("-",$value);
- if(strlen($min)==0) return sprintf(__(' less than "%1$s"','premiumpress_advancedsearch'),$max);
- if(strlen($max)==0) return sprintf(__(' more than "%1$s"','premiumpress_advancedsearch'),$min);
- return sprintf(__(' between "%1$s" and "%2$s"','premiumpress_advancedsearch'),$min,$max);
- }
- }
- class NotEqualComparison extends Comparison {
- function addSQLWhere($field,$value){
- return "$field != '$value'";
- }
- function describeSearch($value){
- return sprintf(__(' is not "%1$s"','premiumpress_advancedsearch'),$value);
- }
- }
- class BaseJoiner extends ParameterisedObject {
- function BaseJoiner($name=null,$params=array()){
- $this->__construct($name,$params);
- }
- function __construct($name=null,$params=array()){
- parent::__construct($params);
- $this->name=$name;
- }
- function sql_join($join,$name,$index,$value){
- return $join;
- }
- function process_where($where){
- return $where;
- }
- function needsField(){
- return true;
- }
- }
- class CustomFieldJoiner extends BaseJoiner{
- function CustomFieldJoiner($name,$params){
- $this->__construct($name,$params);
- }
- function __construct($name,$params){
- $this->params = $params;
- }
- function param($key,$default=null){
- if(array_key_exists($key,$this->params)) return $this->params[$key];
- return $default;
- }
- function sql_restrict($name,$index,$value,$comparison){
- $table = 'meta'.$index;
- $field = "$table.meta_value".($this->param('numeric',false)?'*1':'');
- $comp = " AND ".$comparison->addSQLWhere($field,$value);
- if($name!='all')
- $comp = " AND ( $table.meta_key='$name' ".$comp.") ";
- return $comp;
- }
- function sql_join($join,$name,$index,$value){
- if(!$value && !$this->param('required',false)) return $join;
- global $wpdb;
- $table = 'meta'.$index;
- return "$join JOIN $wpdb->postmeta $table ON $table.post_id=$wpdb->posts.id";
- }
- function getAllOptions($fieldName){
- global $wpdb;
- $where='';
- if($fieldName!='all')
- $where = " WHERE meta_key='$fieldName'";
- $q = mysql_query($sql = "SELECT DISTINCT meta_value FROM $wpdb->postmeta m JOIN $wpdb->posts p ON m.post_id=p.id AND p.post_status='publish' $where");
- $options = array();
- while($r = mysql_fetch_row($q))
- $options[$r[0]] = $r[0];
- return $options;
- }
- function getSuggestedFields(){
- global $wpdb;
- $q = mysql_query($sql = "SELECT DISTINCT meta_key FROM $wpdb->postmeta WHERE meta_key NOT LIKE '\\_%'");
- $options = array('all'=>'All Fields');
- while($r = mysql_fetch_row($q))
- $options[$r[0]] = $r[0];
- return $options;
- }
- }
- class CategoryJoiner extends BaseJoiner {
- function sql_restrict($name,$index,$value,$comparison){
- if(!($value || $this->params['required'])) return $join;
- $table = 'meta'.$index;
- return " AND ( ".$comparison->addSQLWhere("$table.name",$value).")";
- }
- function getTaxonomy(){
- return $this->param('taxonomy','category');
- }
- function getTaxonomyWhere($table){
- return "`$table`.taxonomy='".$this->getTaxonomy()."'";
- }
- function sql_join($join,$name,$index,$value){
- if(!($value || $this->params['required'])) return $join;
- global $wpdb;
- $table = 'meta'.$index;
- $rel = 'rel'.$index;
- $tax = 'tax'.$index;
- return $join." JOIN $wpdb->term_relationships $rel ON $rel.object_id=$wpdb->posts.id JOIN $wpdb->term_taxonomy $tax ON $tax.term_taxonomy_id=$rel.term_taxonomy_id JOIN $wpdb->terms $table ON $table.term_id=$tax.term_id AND ".$this->getTaxonomyWhere($tax);
- }
- function getAllOptions($fieldName){
- global $wpdb;
- $sql = "SELECT distinct t.name FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id JOIN $wpdb->posts p ON tr.object_id=p.id AND p.post_status='publish' WHERE ".$this->getTaxonomyWhere('tt');
- $q = mysql_query($sql);
- if($e = mysql_error()) echo "<h1>SQL: $sql</h1>".mysql_error();
- $options = array();
- while($r = mysql_fetch_row($q))
- $options[$r[0]] = $r[0];
- return $options;
- }
- function needsField(){
- return false;
- }
- }
- class TagJoiner extends CategoryJoiner {
- function getTaxonomy(){
- return $this->param('taxonomy','post_tag');
- }
- }
- class PostTypeJoiner extends BaseJoiner {
- function process_where($where){
- global $wpdb;
- $where = preg_replace("/AND \($wpdb->posts.post_type *= *'(post|page)'\)/","",$where);
- return $where;
- }
- function sql_restrict($name,$index,$value,$comparison){
- global $wpdb;
- if(!($value || $this->params['required'])) return $join;
- return " AND ( ".$comparison->addSQLWhere("$wpdb->posts.post_type",$value).")";
- }
- function getAllOptions($fieldName){
- global $wpdb;
- $q = mysql_query($sql = "SELECT distinct post_type FROM $wpdb->posts p WHERE post_status='publish' ");
- $options = array();
- while($r = mysql_fetch_row($q))
- $options[$r[0]] = $r[0];
- return $options;
- }
- function needsField(){
- return false;
- }
- }
- class PostDataJoiner extends BaseJoiner {
- function sql_restrict($name,$index,$value,$comparison){
- global $wpdb;
- $table = $wpdb->posts;
- if($name=='all'){
- $logic = array();
- foreach($this->getSuggestedFields() as $name=>$desc){
- if($name=='all') continue;
- $logic[] = "( ".$comparison->addSQLWhere("$table.$name",$value).") ";
- }
- $logic = " AND (".join(" OR ",$logic).")";
- return $logic;
- } else {
- return " AND ( ".$comparison->addSQLWhere("$table.$name",$value).") ";
- }
- }
- function sql_join($join,$name,$index,$value){
- return $join;
- }
- function getAllOptions($fieldName){
- global $wpdb;
- $q = mysql_query($sql = "SELECT ".PPTCLEAN($fieldName)." FROM $wpdb->posts");
- $options = array();
- while($r = mysql_fetch_row($q))
- $options[$r[0]] = $r[0];
- return $options;
- }
- function getSuggestedFields(){
- return array(
- 'all'=>__('All Fields','premiumpress_advancedsearch'),
- 'post_content'=>__('Body Text','premiumpress_advancedsearch'),
- 'post_title'=>__('Title','premiumpress_advancedsearch'),
- 'post_author'=>__('Author','premiumpress_advancedsearch'),
- 'post_date'=>__('Date','premiumpress_advancedsearch'),
- );
- }
- }
- class CategorySearch {
- }
- class CustomSearchField extends SearchFieldBase {
- function CustomSearchField($nameOrParams,$input=false,$comparison=false,$joiner=false){
- CustomSearchField::__construct($nameOrParams,$input,$comparison,$joiner);
- }
- function __construct($nameOrParams,$input=false,$comparison=false,$joiner=false){
- parent::__construct();
- if(!is_array($nameOrParams)){
- $params = array('name'=>$nameOrParams);
- } else {
- $params = $nameOrParams;
- }
- $this->name = $params['name'];
- $this->params = $params;
- $this->joiner = $joiner;
- $this->comparison = $comparison;
- $this->input = $input;
- if(!is_object($this->input)){
- $input = $this->param('input','TextField');
- $this->input = new $input($params);
- }
- if(!is_object($this->comparison)){
- $comparison = $this->param('comparison','LikeComparison');
- $this->comparison = new $comparison();
- }
- if(!is_object($this->joiner)){
- $joiner = $this->param('joiner','CustomFieldJoiner');
- $this->joiner = new $joiner($this->param('name'),$this->params);
- }
- }
- function setIndex($n){
- $this->index=$n;
- }
- function param($key,$default=null){
- if(array_key_exists($key,$this->params)) return $this->params[$key];
- return $default;
- }
- function stripInitialForm($form){
- $pref='<!--cs-form-->';
- if(preg_match("/^$pref/",$form)) return $form;
- else return $pref;
- }
- function form_inputs($form){
- $form = $this->stripInitialForm($form);
- return $form.$this->getInput($this->name,$this->joiner);
- }
- function hasValue(){
- return $this->getValue();
- }
- function sql_restrict($where){
- if($this->hasValue()){
- $value = $this->getValue();
- $value = $GLOBALS['wpdb']->escape($value);
- $where.=$this->joiner->sql_restrict($this->name,$this->index,$value,$this->comparison);
- }
- if(method_exists($this->joiner,'process_where'))
- $where = $this->joiner->process_where($where);
- return $where;
- }
- function describeSearch($current){
- if($this->hasValue()){
- $current[] = $this->getLabel()." ".$this->comparison->describeSearch($this->getValue());
- }
- return $current;
- }
- function join_meta($join){
- global $wpdb;
- $join=$this->joiner->sql_join($join,$this->name,$this->index,$this->getValue(),$this->comparison);
- return $join;
- }
- function getQualifiedName(){
- return $this->name.'-'.$this->index;
- }
- function getOldValue(){ return $this->getValue(); }
- function getValue(){
- $v = $this->input->getValue($this->getQualifiedName(),$this->name);
- return $v;
- }
- function getLabel(){
- if(!$this->params['label']) $this->params['label'] = ucwords($this->name);
- return $this->params['label'];
- }
- function isHidden(){
- return $this->input->param('hidden',false);
- }
- function getInput($wrap=true){
- $input = $this->input->getInput($this->getQualifiedName(),$this->joiner,$this->name);
- if($wrap){
- $input = "<label class='searchform-label'>".$this->getLabel()."</label><br /> $input ";
- }
- return $input;
- }
- function getCSSClass(){
- return method_exists($this->input,'getCSSClass')?$this->input->getCSSClass():get_class($this->input);
- }
- }
- if($debugMode){
- add_filter('posts_request','debug_dump_query');
- function debug_dump_query($query){
- echo "<h1>$query</h1>";
- return $query;
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement