Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 43.89 KB | None | 0 0
  1. <?php
  2.  
  3. /***************** DO NOT EDIT THIS FILE *************************
  4. ******************************************************************
  5.  
  6. INFORMATION:
  7. ------------
  8.  
  9. This is a core theme file, you should not need to edit
  10. this file directly. Code changes maybe lost during updates.
  11.  
  12. LAST UPDATED: 26th March 2011
  13. EDITED BY: MARK FAIL
  14. ------------------------------------------------------------------
  15.  
  16. ******************************************************************/
  17.  
  18. $debugMode = false;
  19.  
  20. if ( !defined('WP_CONTENT_URL') )
  21. define( 'WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
  22. if ( !defined('WP_CONTENT_DIR') )
  23. define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
  24.  
  25.  
  26. class PPT_S extends DB_Search_Widget1 {
  27.  
  28. function PPT_S($params=array()){
  29. PPT_S::__construct($params);
  30. }
  31.  
  32. function __construct($params=array()){
  33.  
  34. $this->loadTranslations();
  35. parent::__construct(__('Custom Fields ','premiumpress_advancedsearch'),$params);
  36. add_filter('the_content', array(&$this,'process_tag'),9);
  37.  
  38.  
  39. //
  40.  
  41. //wp_enqueue_script('jquery');
  42.  
  43. }
  44. function init(){
  45. global $CustomSearchFieldStatic;
  46. $CustomSearchFieldStatic['Object'] = new PPT_S();
  47.  
  48. }
  49.  
  50.  
  51. function upgrade($current,$target){
  52. $options = $this->getConfig();
  53. if(version_compare($current,"0.3")<0){
  54. $config = $this->getDefaultConfig();
  55. $config['name'] = __('Default Preset','premiumpress_advancedsearch');
  56. $options['preset-default'] = $config;
  57. }
  58. $options['version']=$target;
  59. update_option($this->id,$options);
  60. }
  61.  
  62. function getInputs($params = false,$visitedPresets=array()){
  63.  
  64. /*if(is_array($params)){
  65. $id = "preset-default";//$params['widget_id'];
  66. } else {
  67. $id = $params;
  68. }*/
  69. $id = "preset-default";
  70.  
  71. if(!isset($visitedPresets[$id])){ $visitedPresets[$id] = ""; }// PP EDIT
  72.  
  73. if($visitedPresets[$id]) return array();
  74. $visitedPresets[$id]=true;
  75.  
  76. global $CustomSearchFieldStatic;
  77.  
  78. if(!isset($CustomSearchFieldStatic['Inputs'][$id])){ $CustomSearchFieldStatic['Inputs'][$id] = ""; } // PP EDIT
  79.  
  80. if(!$CustomSearchFieldStatic['Inputs'][$id]){
  81.  
  82. $config = $this->getConfig($id);
  83. $inputs = array();
  84.  
  85. //if($config['preset']) $inputs = $this->getInputs($config['preset'],$visitedPresets); // PP EDIT
  86.  
  87. $nonFields = $this->getNonInputFields();
  88. if($config)
  89. foreach($config as $k=>$v){
  90. if(in_array($k,$nonFields)) continue;
  91. if(!(class_exists($v['input']) && class_exists($v['comparison']) && class_exists($v['joiner']))) {
  92. continue;
  93. }
  94. $inputs[] = new CustomSearchField($v);
  95.  
  96. }
  97. foreach($inputs as $k=>$v){
  98. $inputs[$k]->setIndex($k);
  99. }
  100. $CustomSearchFieldStatic['Inputs'][$id]=$inputs;
  101. }
  102. return $CustomSearchFieldStatic['Inputs'][$id];
  103. }
  104. function getTitle($params){
  105. $config = $this->getConfig($params['widget_id']);
  106. return $config['name'];
  107. }
  108.  
  109. function form_processPost($post,$old){
  110. unset($post['###TEMPLATE_ID###']);
  111. if(!$post) $post=array('exists'=>1);
  112. return $post;
  113. }
  114. function getDefaultConfig(){
  115. return array('name'=>'Site Search',
  116. 1=>array(
  117. 'label'=>__('Key Words','premiumpress_advancedsearch'),
  118. 'input'=>'TextField',
  119. 'comparison'=>'WordsLikeComparison',
  120. 'joiner'=>'PostDataJoiner',
  121. 'name'=>'all'
  122. ),
  123. 2=>array(
  124. 'label'=>__('Category','premiumpress_advancedsearch'),
  125. 'input'=>'DropDownField',
  126. 'comparison'=>'EqualComparison',
  127. 'joiner'=>'CategoryJoiner'
  128. ),
  129. );
  130. }
  131.  
  132.  
  133.  
  134. function form_outputForm($values,$pref){
  135. $defaults=$this->getDefaultConfig();
  136. $prefId = preg_replace('/^.*\[([^]]*)\]$/','\\1',$pref);
  137. $this->form_existsInput($pref);
  138. $rand = rand();
  139. ?>
  140. <div id='config-template-<?php echo $prefId?>' style='display: none;'>
  141. <?php
  142. $templateDefaults = $defaults[1];
  143. $templateDefaults['label'] = 'Field ###TEMPLATE_ID###';
  144. echo $this->singleFieldHTML($pref,'###TEMPLATE_ID###',$templateDefaults);
  145. ?>
  146. </div>
  147.  
  148. <?php
  149. foreach($this->getClasses('input') as $class=>$desc) {
  150. if(class_exists($class))
  151. $form = new $class();
  152. else $form = false;
  153. if(compat_method_exists1($form,'getConfigForm')){
  154. if($form = $form->getConfigForm($pref.'[###TEMPLATE_ID###]',array('name'=>'###TEMPLATE_NAME###'))){
  155. ?>
  156. <div id='config-input-templates-<?php echo $class?>-<?php echo $prefId?>' style='display: none;'>
  157. <?php echo $form?>
  158. </div>
  159.  
  160. <?php }
  161. }
  162. }
  163. ?>
  164. <div id='config-form-<?php echo $prefId?>'>
  165. <?php
  166. if(!$values) $values = $defaults;
  167. $maxId=0;
  168. $presets = $this->getPresets();
  169. array_unshift($presets,__('NONE','premiumpress_advancedsearch'));
  170. ?>
  171. <br />
  172. <div style="float:left; width:450px;">
  173. <b>Enable Advanced Search Box</b><br />
  174. <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>
  175. </div>
  176. <div style="float:left; width:300px;">
  177. <b>Advanced Search Title</b><br /><br />
  178.  
  179. <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;"/>
  180. </div>
  181. <div class="clearfix"></div>
  182.  
  183.  
  184.  
  185.  
  186. <?php
  187. /*$dd = new AdminDropDown1($pref."[preset]",$values['preset'],$presets);
  188. echo $dd->getInput()."</div>";*/
  189. $nonFields = $this->getNonInputFields();
  190. foreach($values as $id => $val){
  191. $maxId = max($id,$maxId);
  192. if(in_array($id,$nonFields)) continue;
  193. echo "<div id='config-form-$prefId-$id'>".$this->singleFieldHTML($pref,$id,$val)."</div>";
  194. }
  195. ?>
  196. </div>
  197. <div style="clear:both;"></div><br />
  198.  
  199. <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 />
  200.  
  201.  
  202. <script type='text/javascript'>
  203. CustomSearch.create('<?php echo $prefId?>','<?php echo $maxId?>');
  204. <?php
  205. foreach($this->getClasses('joiner') as $joinerClass=>$desc){
  206. if(compat_method_exists1($joinerClass,'getSuggestedFields')){
  207. $options = eval("return $joinerClass::getSuggestedFields();");
  208. $str = '';
  209. foreach($options as $i=>$v){
  210. $k=$i;
  211. if(is_numeric($k)) $k=$v;
  212. $options[$i] = json_encode(array('id'=>$k,'name'=>$v));
  213. }
  214. $str = '['.join(',',$options).']';
  215. echo "CustomSearch.setOptionsFor('$joinerClass',".$str.");\n";
  216. }elseif(eval("return $joinerClass::needsField();")){
  217. echo "CustomSearch.setOptionsFor('$joinerClass',[]);\n";
  218. }
  219. }
  220. ?>
  221. </script>
  222. <?php
  223. }
  224.  
  225. function getNonInputFields(){
  226. return array('exists','name','preset','version');
  227. }
  228.  
  229.  
  230. function singleFieldHTML($pref,$id,$values){
  231.  
  232. $prefId = preg_replace('/^.*\[([^]]*)\]$/','\\1',$pref);
  233. $pref = $pref."[$id]";
  234. $htmlId = $pref."[exists]";
  235. $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'/>";
  236.  
  237.  
  238. $titles ="
  239.  
  240. <p><b>Search Field Caption</b></p>
  241.  
  242.  
  243. <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>
  244.  
  245. ";
  246.  
  247. $output.=" $titles $inputs ";
  248.  
  249.  
  250.  
  251.  
  252. $output.="<div id='form-field-advancedoptions-$prefId-$id' style='display: none; background:#e0ffe5; padding:5px;margin-top:10px;'> <b>Search Field Options</b>";
  253. $inputs='';$titles='';
  254.  
  255. //
  256. $inputs= "<br /><small>Currently set to ".$values['name']."</small>
  257.  
  258. <div id='form-field-dbname-$prefId-$id' class='form-field-title-div'>
  259. <input type='text' name='$pref"."[name]' value='$values[name]' class='form-field-title'/>
  260. </div> ";
  261. $count=1;
  262.  
  263.  
  264. foreach(array('joiner'=>__('Data Type','premiumpress_advancedsearch'),'comparison'=>__('Compare','premiumpress_advancedsearch'),'input'=>__('Widget','premiumpress_advancedsearch')) as $k=>$v){
  265.  
  266. $dd = new AdminDropDown1($pref."[$k]",$values[$k],$this->getClasses($k),array('onChange'=>'CustomSearch.get("'.$prefId.'").updateOptions("'.$id.'","'.$k.'")','css_class'=>"wpcfs-$k"));
  267.  
  268. $titles="".$v." <br />".$titles;
  269.  
  270. $inputs="".$dd->getInput()."".$inputs;
  271. if(++$count==2){
  272. $output.="<div class='form-class-$k'> <br/> $inputs</div>";
  273. $count=0;
  274. $inputs = $titles='';
  275. }
  276. }
  277.  
  278.  
  279. if($titles){
  280. $output.="<div class='form-field-table'> 1-> $titles <br /> $inputs </div>";
  281. $inputs = $titles='';
  282. }
  283.  
  284.  
  285. $titles.="<br /> is the field data numeric? ";
  286. $inputs.="<input type='checkbox' ".($values['numeric']?"checked='true'":"")." name='$pref"."[numeric]'/>";
  287.  
  288. if(class_exists($widgetClass = $values['input'])){
  289. $widget = new $widgetClass();
  290. if(compat_method_exists1($widget,'getConfigForm'))
  291. $widgetConfig=$widget->getConfigForm($pref,$values);
  292. }
  293.  
  294.  
  295. $inputs.="<div id='$this->id"."-$prefId"."-$id"."-widget-config'>$widgetConfig</div>";
  296. $output.="<table class='form-field-table'><tr>$titles</tr><tr>$inputs</tr></table>";
  297. $output.="";
  298.  
  299.  
  300.  
  301. $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>";
  302. return "$output";
  303. }
  304.  
  305. function getRootURL(){
  306. return WP_CONTENT_URL .'/plugins/' . dirname(plugin_basename(__FILE__) ) . '/';
  307. }
  308.  
  309.  
  310. function getJoiners(){
  311. return $this->getClasses('joiner');
  312. }
  313. function getComparisons(){
  314. return $this->getClasses('comparison');
  315. }
  316. function getInputTypes(){
  317. return $this->getClasses('input');
  318. }
  319. function getClasses($type){
  320. global $CustomSearchFieldStatic;
  321. if(!$CustomSearchFieldStatic['Types']){
  322. $CustomSearchFieldStatic['Types'] = array(
  323. "joiner"=>array(
  324. "PostDataJoiner" =>__( "Wordpress Post Field",'premiumpress_advancedsearch'),
  325. "CustomFieldJoiner" =>__( "Custom Field",'premiumpress_advancedsearch'),
  326. "CategoryJoiner" =>__( "Category",'premiumpress_advancedsearch'),
  327. "TagJoiner" =>__( "Tag",'premiumpress_advancedsearch'),
  328. //"PostTypeJoiner" =>__( "Post Type",'premiumpress_advancedsearch'),
  329. ),
  330. "input"=>array(
  331. "TextField" =>__( "Text Input",'premiumpress_advancedsearch'),
  332. "DropDownField" =>__( "Drop Down",'premiumpress_advancedsearch'),
  333. "RadioButtonField" =>__( "Radio Button",'premiumpress_advancedsearch'),
  334. "HiddenField" =>__( "Hidden Constant",'premiumpress_advancedsearch'),
  335. ),
  336. "comparison"=>array(
  337. "EqualComparison" =>__( "Equals",'premiumpress_advancedsearch'),
  338. "LikeComparison" =>__( "Phrase In",'premiumpress_advancedsearch'),
  339. "WordsLikeComparison" =>__( "Words In",'premiumpress_advancedsearch'),
  340. "LessThanComparison" =>__( "Less Than",'premiumpress_advancedsearch'),
  341. "MoreThanComparison" =>__( "More Than",'premiumpress_advancedsearch'),
  342. "AtMostComparison" =>__( "At Most",'premiumpress_advancedsearch'),
  343. "AtLeastComparison" =>__( "At Least",'premiumpress_advancedsearch'),
  344. "RangeComparison" =>__( "Range",'premiumpress_advancedsearch'),
  345. //TODO: Make this work...
  346. // "NotEqualComparison" =>__( "Not Equal To",'premiumpress_advancedsearch'),
  347. )
  348. );
  349. $CustomSearchFieldStatic['Types'] = apply_filters('custom_search_get_classes',$CustomSearchFieldStatic['Types']);
  350. }
  351. return $CustomSearchFieldStatic['Types'][$type];
  352. }
  353.  
  354. function getPresets(){
  355. $presets = array();
  356. foreach(array_keys($config = $this->getConfig()) as $key){
  357. if(strpos($key,'preset-')===0) {
  358. $presets[$key] = $key;
  359. if($name = $config[$key]['name'])
  360. $presets[$key]=$name;
  361. }
  362. }
  363. return $presets;
  364. }
  365. function presets_form(){
  366.  
  367. //
  368. $x=1;
  369. while($x < 20){
  370. if(isset($_POST['ppt_s']['preset-default'][$x])){ $_POST['ppt_s']['preset-default'][$x]['name'] = $_POST['db_customsearch_widget']['preset-default'][$x]['name']; }
  371. $x++;}
  372.  
  373.  
  374. $presets=$this->getPresets();
  375. if(!$preset = $_REQUEST['selected-preset']){
  376. $preset = 'preset-default';
  377. }
  378. if(!$presets[$preset]){
  379. $defaults = $this->getDefaultConfig();
  380. $options = $this->getConfig();
  381. $options[$preset] = $defaults;
  382. if($n = $_POST[$this->id][$preset]['name'])
  383. $options[$preset]['name'] = $n;
  384. elseif($preset=='preset-default')
  385. $options[$preset]['name'] = 'Default';
  386. else{
  387. list($junk,$id) = explode("-",$preset);
  388. $options[$preset]['name'] = 'New Preset '.$id;
  389. }
  390. update_option($this->id,$options);
  391. $presets[$preset] = $options[$preset]['name'];
  392. }
  393. if($_POST['delete']){
  394. check_admin_referer($this->id.'-editpreset-'.$preset);
  395. $options = $this->getConfig();
  396. unset($options[$preset]);
  397. unset($presets[$preset]);
  398. update_option($this->id,$options);
  399. list($preset,$name) = each($presets);
  400. }
  401.  
  402. $index = 1;
  403. while($presets["preset-$index"]) $index++;
  404. $presets["preset-$index"] = __('New Preset','premiumpress_advancedsearch');
  405.  
  406. $linkBase = $_SERVER['REQUEST_URI'];
  407. $linkBase = preg_replace("/&?selected-preset=[^&]*(&|$)/",'',$linkBase);
  408. foreach($presets as $key=>$name){
  409. $config = $this->getConfig($key);
  410. if($config && $config['name']) $name=$config['name'];
  411. if(($n = $_POST[$this->id][$key]['name'])&&(!$_POST['delete']))
  412. $name = $n;
  413. $presets[$key]=$name;
  414. }
  415. $plugin=&$this;
  416. ob_start();
  417. wp_nonce_field($this->id.'-editpreset-'.$preset);
  418. $hidden = ob_get_contents();
  419. $hidden.="<input type='hidden' name='selected-preset' value='$preset'>";
  420. $shouldSave = $_POST['selected-preset'] && !$_POST['delete'] && check_admin_referer($this->id.'-editpreset-'.$preset);
  421. ob_end_clean();
  422.  
  423. /* premium press theme layout */
  424. $STRING = $hidden;
  425. $STRING .= $plugin->configForm($preset,$shouldSave);
  426.  
  427. print $STRING;
  428.  
  429. }
  430. function process_tag($content){
  431. $regex = '/\[\s*premiumpress_advancedsearch\s+(?:([^\]=]+(?:\s+.*)?))?\]/';
  432. return preg_replace_callback($regex, array(&$this, 'generate_from_tag'), $content);
  433. }
  434. function process_shortcode($atts,$content){
  435. return $this->generate_from_tag(array("",$atts['preset']));
  436. }
  437. function generate_from_tag($reMatches){
  438. global $CustomSearchFieldStatic;
  439. ob_start();
  440.  
  441. $preset=$reMatches[1];
  442. if(!$preset) $preset = 'default';
  443. compat_method_exists111($preset);
  444.  
  445. $form = ob_get_contents();
  446. ob_end_clean();
  447. return $form;
  448. }
  449. }
  450. global $CustomSearchFieldStatic;
  451. $CustomSearchFieldStatic['Inputs'] = array();
  452. $CustomSearchFieldStatic['Types'] = array();
  453.  
  454. class AdminDropDown1 extends DropDownField {
  455. function AdminDropDown1($name,$value,$options,$params=array()){
  456. AdminDropDown1::__construct($name,$value,$options,$params);
  457. }
  458. function __construct($name,$value,$options,$params=array()){
  459. $params['options'] = $options;
  460. $params['id'] = $params['name'];
  461. parent::__construct($params);
  462. $this->name = $name;
  463. $this->value = $value;
  464. }
  465. function getHTMLName(){
  466. return $this->name;
  467. }
  468. function getValue(){
  469. return $this->value;
  470. }
  471. function getInput(){
  472. return parent::getInput($this->name,null);
  473. }
  474. }
  475.  
  476. if (!function_exists('json_encode'))
  477. {
  478. function json_encode($a=false)
  479. {
  480. if (is_null($a)) return 'null';
  481. if ($a === false) return 'false';
  482. if ($a === true) return 'true';
  483. if (is_scalar($a))
  484. {
  485. if (is_float($a))
  486. {
  487. // Always use "." for floats.
  488. return floatval(str_replace(",", ".", strval($a)));
  489. }
  490.  
  491. if (is_string($a))
  492. {
  493. static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
  494. return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
  495. }
  496. else
  497. return $a;
  498. }
  499. $isList = true;
  500. for ($i = 0, reset($a); $i < count($a); $i++, next($a))
  501. {
  502. if (key($a) !== $i)
  503. {
  504. $isList = false;
  505. break;
  506. }
  507. }
  508. $result = array();
  509. if ($isList)
  510. {
  511. foreach ($a as $v) $result[] = json_encode($v);
  512. return '[' . join(',', $result) . ']';
  513. }
  514. else
  515. {
  516. foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v);
  517. return '{' . join(',', $result) . '}';
  518. }
  519. }
  520. }
  521. function PPT_AdvancedSearch($presetName='default'){
  522. global $CustomSearchFieldStatic;
  523. if(strpos($presetName,'preset-')!==0) $presetName="preset-$presetName";
  524. $CustomSearchFieldStatic['Object']->renderWidget(array('widget_id'=>$presetName,'noTitle'=>true),array('number'=>$presetName));
  525. }
  526. function compat_method_exists1($class,$method){
  527. return method_exists($class,$method) || in_array(strtolower($method),get_class_methods($class));
  528. }
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535. class ParameterisedObject {
  536. var $params=array();
  537. function ParameterisedObject($params=array()){
  538. $this->__construct($params);
  539. }
  540. function __construct($params=array()){
  541. $this->setParams($params);
  542. if(!is_array($this->params)){
  543. foreach(debug_backtrace() as $trace){
  544. extract($trace);
  545. echo "<li>$file:$line $class.$function</li>";
  546. }
  547. die("<h1>".get_class($this)."</h1>");
  548. }
  549. }
  550.  
  551. function setParams($params){
  552. $this->params=$params;
  553. }
  554.  
  555. function param($key,$default=null){
  556. if(!array_key_exists($key,$this->params)) return $default;
  557. return $this->params[$key];
  558. }
  559. }
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571. class DB_WP_Widget1 extends ParameterisedObject {
  572. function DB_WP_Widget1($name,$params=array()){
  573. DB_WP_Widget1::__construct($name,$params);
  574. }
  575. function __construct($name,$params=array()){
  576. parent::__construct($params);
  577. $this->name = $name;
  578. $this->id = strtolower(get_class($this));
  579. $options = get_option($this->id);
  580.  
  581.  
  582. // register_sidebar_widget($this->name,array(&$this,'renderWidget'));
  583. $doesOwnConfig = $this->param('doesOwnConfig',false);
  584. $desc = $this->param('description',$this->name);
  585. $widget_ops = array('classname' => $this->id, 'description' => __($desc));
  586. $control_ops = array('width' => 400, 'height' => 350, 'id_base' => $this->id);
  587. $name = $this->name;
  588.  
  589. $id = false;
  590. do {
  591. if($options)
  592. foreach ( array_keys($options) as $o ) {
  593. // Old widgets can have null values for some reason
  594. if ( !isset($options[$o]['exists']) )
  595. continue;
  596. $id = "$this->id-".abs($o); // Never never never translate an id
  597. wp_register_sidebar_widget($id, $name, array(&$this,'renderWidget'), $widget_ops, array( 'number' => $o ));
  598. wp_register_widget_control($id, $name, array(&$this,'configForm'), $control_ops, array( 'number' => $o ));
  599. }
  600. $options = array( -1=>array('exists'=>1));
  601. } while(!$id);
  602. }
  603.  
  604. function setParams($params){
  605. parent::setParams($this->overrideParams($params));
  606. }
  607.  
  608. function getDefaults(){
  609. return array('doesOwnConfig'=>false);
  610. }
  611. function overrideParams($params){
  612. foreach($this->getDefaults() as $k=>$v){
  613. if(!array_key_exists($k,$params)) $params[$k] = $v;
  614. }
  615. return $params;
  616. }
  617.  
  618. function renderWidget(){
  619. echo "<h1>Unconfigured Widget</h1>";
  620. }
  621.  
  622. function defaultWidgetConfig(){
  623. return array('exists'=>'1');
  624. }
  625. function getConfig($id=null,$key=null){
  626. $options = get_option($this->id);
  627. if(is_null($id)) return $options;
  628. if(!@array_key_exists($id,$options))
  629. $id = preg_replace('/^.*-(\d+)$/','\\1',$id);
  630. if(is_null($key))
  631. return $options[$id];
  632. else
  633. return $options[$id][$key];
  634. }
  635. function configForm($args,$force=false){
  636. static $first;
  637. global $wp_registered_widgets;
  638.  
  639. if ( !is_array($args) )
  640. $args = array( 'number' => $args );
  641.  
  642. $args = wp_parse_args($args,array('number'=>-1));
  643. static $updated = array();
  644.  
  645. $options = get_option($this->id);
  646.  
  647. if(!$updated[$this->id] && ($_POST['sidebar'] || $force)){
  648. $updated[$this->id]=true;
  649. $sidebar = (string) $_POST['sidebar'];
  650. $default_options=$this->defaultWidgetConfig();
  651.  
  652. $sidebars_widgets = wp_get_sidebars_widgets();
  653. if ( isset($sidebars_widgets[$sidebar]) )
  654. $this_sidebar = $sidebars_widgets[$sidebar];
  655. else
  656. $this_sidebar = array();
  657.  
  658. foreach ( $this_sidebar as $_widget_id ) {
  659. $callback = $wp_registered_widgets[$_widget_id]['callback'];
  660. if(is_array($callback) && get_class($callback[0])==get_class($this) && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) {{
  661. $PPT_ID = $wp_registered_widgets[$_widget_id]['params'][0]['number'];
  662. }
  663. if ( !in_array( "$this->id-$PPT_ID", $_POST['widget-id'] ) )
  664. unset($options[$PPT_ID]);
  665. }
  666. }
  667. foreach ((array)$_POST[$this->id] as $PPT_ID => $posted) {
  668. if(!isset($posted['exists']) && isset($options[$PPT_ID]))continue;
  669.  
  670. $widgetOptions = $this->form_processPost($posted,$options[$PPT_ID]);
  671. $options[$PPT_ID] = $widgetOptions;
  672. }
  673. update_option($this->id,$options);
  674. }
  675. global $mycount;
  676. if(-1==$args['number']){
  677. $args['number']='%i%';
  678. $values = $default_options;
  679. } else {
  680. $values = $options[$args['number']];
  681. }
  682. $this->form_outputForm($values,$this->id.'['.$args['number'].']');
  683. }
  684. function form_processPost($post,$old){
  685. return array('exists'=>1);
  686. }
  687. function form_outputForm($old,$pref){
  688. $this->form_existsInput($pref);
  689. }
  690. function form_existsInput($pref){
  691. echo "<input type='hidden' name='".$pref."[exists]' value='1'/>";
  692. }
  693.  
  694. function nameAsId(){
  695. return strtolower(str_replace(" ","_",$this->name));
  696. }
  697. }
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710. class DB_Search_Widget1 extends DB_WP_Widget1 {
  711. var $inputs = array();
  712.  
  713. function DB_Search_Widget1($name){
  714. DB_Search_Widget1::__construct($name);
  715. }
  716. function __construct($name='Custom',$params=array()){
  717. $this->loadTranslations();
  718. parent::__construct(sprintf(__('%1$s Search','premiumpress_advancedsearch'),$name),$params);
  719. add_filter('posts_join',array(&$this,'join_meta'));
  720. add_filter('posts_where',array(&$this,'sql_restrict'));
  721. add_filter('posts_groupby', array(&$this,'sql_group'));
  722. add_filter('home_template',array(&$this,'rewriteHome'));
  723. add_filter('page_template',array(&$this,'rewriteHome'));
  724. add_filter( 'get_search_query', array(&$this,'getSearchDescription'));
  725.  
  726. }
  727. function loadTranslations(){
  728. static $loaded;
  729. if ( !$loaded && function_exists('load_plugin_textdomain') ) {
  730. $loaded=true;
  731. if ( !defined('WP_PLUGIN_DIR') ) {
  732. load_plugin_textdomain('premiumpress_advancedsearch', str_replace( ABSPATH, '', dirname(__FILE__) ) );
  733. } else {
  734. load_plugin_textdomain('premiumpress_advancedsearch', false, dirname( plugin_basename(__FILE__) ) );
  735. }
  736. }
  737. }
  738. function addInput($input){
  739. $this->inputs[] = $input;
  740. }
  741.  
  742.  
  743. function getInputs($params){
  744. return $this->inputs;
  745. }
  746.  
  747. function getTitle(){
  748. return $this->param('description',$this->name);
  749. }
  750.  
  751. function renderWidget($params=array(),$p2 = array()){
  752. $title = $this->getTitle($params);
  753. $inputs = $this->getInputs($params);
  754. $hidden = "<input type='hidden' name='search-class' value='".$this->getPostIdentifier()."'/>";
  755. $formCssClass = 'custom_search widget custom_search_'.$this->nameAsId();
  756. $formAction = get_option('home');
  757. if(function_exists('locate_template'))
  758.  
  759.  
  760. /* PREMIUM PRESS FORM LAYOUT */
  761.  
  762. $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'>";
  763. $i=0; foreach($inputs as $input){
  764.  
  765. $formTemplate .= "<p class='f3 left'>".$input->getInput()."</p>";
  766.  
  767. //if($i%3){ $formTemplate .= '</div><div class="full clearfix border_t">'; }
  768.  
  769. $i++; }
  770.  
  771. $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>";
  772.  
  773. foreach($inputs as $k=>$v){
  774. if($v->isHidden()){
  775. $hidden.=$v->getInput(false);
  776. unset($inputs[$k]);
  777. }
  778. }
  779. echo $formTemplate;
  780. }
  781.  
  782. function isPosted(){
  783.  
  784. if(isset($_GET['search-class'])){ return $_GET['search-class'] == $this->getPostIdentifier();/*$_GET['search-class'] == $this->getPostIdentifier();*/}
  785.  
  786.  
  787. }
  788. function getPostIdentifier(){
  789. return get_class($this).'-'.$this->id;
  790. }
  791. function isHome($isHome){
  792. return $isHome && !$this->isPosted();
  793. }
  794. function rewriteHome($homeTemplate){
  795. if($this->isPosted()) return get_query_template('search');
  796. return $homeTemplate;
  797. }
  798.  
  799. function join_meta($join){
  800. if($this->isPosted()){
  801. $desc = array();
  802. foreach($this->getInputs("preset-default") as $input){
  803. $join = $input->join_meta($join);
  804. $desc = $input->describeSearch($desc);
  805. }
  806. if($desc){
  807. $desc = join(__(" and ",'premiumpress_advancedsearch'),$desc);
  808. } else {
  809. $desc = __("All Entries",'premiumpress_advancedsearch');
  810. }
  811. $this->desc=$desc;
  812. }
  813. return $join;
  814. }
  815.  
  816. function getSearchDescription($desc){
  817. if($this->isPosted()) return $this->desc;
  818. return $desc;
  819. }
  820. function sql_restrict($where){
  821. if($this->isPosted()){
  822. global $wpdb;
  823. /** This could possibly be considered invasive, need to think this bit through
  824. * properly.
  825. */
  826. $where = preg_replace("_AND\s*\(ID\s*=\s*'\d+'\)_","",$where);
  827. $where = preg_replace("/AND $wpdb->posts.post_type = '(post|page)'/","",$where);
  828. $where.= " AND ($wpdb->posts.post_type='post')";
  829. foreach($this->getInputs("preset-default") as $input){
  830. $where = $input->sql_restrict($where);
  831. }
  832. }
  833. return $where;
  834. }
  835. function sql_group($group){
  836. if($this->isPosted()){
  837. global $wpdb;
  838. $group = "$wpdb->posts.ID";
  839. }
  840. return $group;
  841. }
  842.  
  843. function toSearchString(){
  844. }
  845. }
  846.  
  847.  
  848.  
  849.  
  850.  
  851. class SearchFieldBase {
  852. function SearchFieldBase(){
  853. SearchFieldBase::__construct();
  854. }
  855. function __construct(){
  856. add_filter('search_params',array(&$this,'form_inputs'));
  857. static $index;
  858. $this->index = ++$index;
  859. }
  860. function form_inputs($form){
  861. die("Unimplemented function ".__CLASS__.".".__FUNCTION__);
  862. }
  863. function sql_restrict($where){
  864. die("Unimplemented function ".__CLASS__.".".__FUNCTION__);
  865. }
  866. }
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875. class Field extends ParameterisedObject {
  876. function getValue($name){
  877. if(isset($_REQUEST[$this->getHTMLName($name)])){
  878. $v = $_REQUEST[$this->getHTMLName($name)];
  879. }else{
  880. $v = "";
  881. }
  882.  
  883. if(get_magic_quotes_gpc()) $v= stripslashes($v);
  884. return $v;
  885. }
  886.  
  887. function getHTMLName($name){
  888. return 'cs-'.str_replace(" ","_",$name);
  889. }
  890.  
  891. function getInput($name){
  892. $htmlName = $this->getHTMLName($name);
  893. $value = $this->getValue($name);
  894. return "<input name='$htmlName' value='$value' class='short'/>";
  895. }
  896. function getCSSClass(){
  897. return get_class($this);
  898. }
  899. }
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912. class TextField extends Field {
  913. }
  914. class TextInput extends TextField{}
  915. class DropDownField extends Field {
  916. function DropDownField($params=array()){
  917. $this->__construct($params);
  918. }
  919. function __construct($params = array()){
  920. parent::__construct($params);
  921. if($optionString = $this->param('dropdownoptions',false)){
  922. $options=array();
  923. $optionPairs = explode(',',$optionString);
  924. foreach($optionPairs as $option){
  925. list($k,$v) = explode(':',$option);
  926. if(!$v) $v=$k;
  927. $options[$k]=$v;
  928. }
  929. } else {
  930. $options = $this->param('options',array());
  931. }
  932. $this->options = $options;
  933. }
  934.  
  935. function getOptions($joiner,$name){
  936. if($this->param('fromDb',!$this->options)){
  937. $options = array(''=>__('-------','premiumpress_advancedsearch'));
  938. $auto = $joiner->getAllOptions($name);
  939. asort($auto);
  940. $options +=$auto;
  941. return $options;
  942. } else {
  943. return $this->options;
  944. }
  945. }
  946. function getInput($name,$joiner,$fieldName=null){
  947. if(!$fieldName) $fieldName=$name;
  948. $v = $this->getValue($name);
  949. $id = $this->getHTMLName($name);
  950.  
  951. $options = '';
  952. foreach($this->getOptions($joiner,$fieldName) as $option=>$label){
  953. $checked = ($option==$v)?" selected='true'":"";
  954. $option = htmlspecialchars($option,ENT_QUOTES);
  955. $label = htmlspecialchars($label,ENT_QUOTES);
  956. $options.="<option value='$option'$checked>$label</option>";
  957. }
  958. $atts = '';
  959. if($this->params['onChange']) $atts = ' onChange="'.htmlspecialchars($this->params['onChange']).'"';
  960. if($this->params['id']) $atts .= ' id="'.htmlspecialchars($this->params['id']).'"';
  961. if($this->params['css_class']) $atts .= ' class="'.htmlspecialchars($this->params['css_class']).'"';
  962. return "<select name='$id'$atts class='short' style='font-size:14px; width:240px;'>$options</select>";
  963. }
  964. function getConfigForm($id,$values){
  965. 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]'/>";
  966. }
  967. }
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982. class HiddenField extends Field {
  983. function HiddenField(){
  984. $func_args = func_get_args();
  985. call_user_func_array(array($this,'__construct'),$func_args);
  986. }
  987. function __construct($params = array()){
  988. $params['hidden']=true;
  989. parent::__construct($params);
  990. }
  991. function getValue(){
  992. return $this->param('constant-value',null);
  993. }
  994.  
  995. function getInput($name){
  996. $v=$this->getValue($name);
  997. $id = $this->getHTMLName($name);
  998. return "<input type='hidden' name='".htmlspecialchars($name)."' value='".htmlspecialchars($v)."'/>";
  999. }
  1000. function getConfigForm($id,$values){
  1001. 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']}'/>";
  1002. }
  1003. }
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021. class DropDownFromValues extends DropDownField {
  1022. function DropDownFromValues($params=array()){
  1023. $this->__construct($params);
  1024. }
  1025.  
  1026. function __construct($params=array()){
  1027. $params['fromDb'] = true;
  1028. parent::__construct(array(),$params);
  1029. }
  1030.  
  1031. function getConfigForm($id,$values){
  1032. return "";
  1033. }
  1034. }
  1035. class RadioButtonField extends Field {
  1036. function RadioButtonField($options=array(),$params=array()){
  1037. RadioButtonField::__construct($options,$params);
  1038. }
  1039. function __construct($params=array()){
  1040. parent::__construct($params);
  1041. if($params['radiobuttonoptions']){
  1042. $options=array();
  1043. $optionPairs = explode(',',$params['radiobuttonoptions']);
  1044. foreach($optionPairs as $option){
  1045. list($k,$v) = explode(':',$option);
  1046. if(!$v) $v=$k;
  1047. $options[$k]=$v;
  1048. }
  1049. }
  1050. $this->options = $options;
  1051. }
  1052. function getOptions($joiner,$name){
  1053. if($this->param('fromDb',!$this->options)){
  1054. return $joiner->getAllOptions($name);
  1055. } else {
  1056. return $this->options;
  1057. }
  1058. }
  1059. function getInput($name,$joiner,$fieldName=null){
  1060. if(!$fieldName) $fieldName=$name;
  1061. $v = $this->getValue($name);
  1062. $id = $this->getHTMLName($name);
  1063.  
  1064. $options = '';
  1065. foreach($this->getOptions($joiner,$fieldName) as $option=>$label){
  1066. $option = htmlspecialchars($option,ENT_QUOTES);
  1067. $label = htmlspecialchars($label,ENT_QUOTES);
  1068. $checked = ($option==$v)?" checked='true'":"";
  1069. $htmlId = "$id-$option";
  1070.  
  1071. $options.="<input type='radio' name='$id' id='$htmlId' value='$option'$checked> <label for='$htmlId'>$label</label><br />";
  1072. }
  1073. return $options;
  1074. }
  1075. function getCSSClass(){
  1076. return "RadioButton";
  1077. }
  1078. function getConfigForm($id,$values){
  1079. 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]'/>";
  1080. }
  1081. }
  1082. class RadioButtonFromValues extends RadioButtonField {
  1083. function RadioButtonFromValues($fieldName=null){
  1084. RadioButtonFromValues::__construct($fieldName);
  1085. }
  1086.  
  1087. function __construct($fieldName=null,$params){
  1088. $params['fromDb'] = true;
  1089. parent::__construct($options,$params);
  1090. }
  1091. function getConfigForm($id,$values){
  1092. return "";
  1093. }
  1094. }
  1095.  
  1096. class Comparison {
  1097. function addSQLWhere($field,$value){
  1098. die("Unimplemented function ".__CLASS__.".".__FUNCTION__);
  1099. }
  1100. function describeSearch($value){
  1101. die("Unimplemented function ".__CLASS__.".".__FUNCTION__);
  1102. }
  1103. }
  1104. class EqualComparison extends Comparison {
  1105. function addSQLWhere($field,$value){
  1106. return "$field = '$value'";
  1107. }
  1108. function describeSearch($value){
  1109. return sprintf(__(' is "%1$s"','premiumpress_advancedsearch'),$value);
  1110. }
  1111. }
  1112. class LikeComparison extends Comparison{
  1113. function addSQLWhere($field,$value){
  1114. return $this->getLikeString($field,$value);
  1115. }
  1116. function getLikeString($field,$value){
  1117. return "$field LIKE '%$value%'";
  1118. }
  1119. function describeSearch($value){
  1120. return sprintf(__(' contains "%1$s"','premiumpress_advancedsearch'),$value);
  1121. }
  1122. }
  1123.  
  1124. class WordsLikeComparison extends LikeComparison {
  1125. function addSQLWhere($field,$value){
  1126. $words = explode(" ",$value);
  1127. $like = array(1);
  1128. foreach($words as $word){
  1129. $like[] = $this->getLikeString($field,$word);
  1130. }
  1131. return "(".join(" AND ",$like).")";
  1132. }
  1133. function describeSearch($value){
  1134. return sprintf(__(' contains "%1$s"','premiumpress_advancedsearch'),join('"'.__(" and ",'premiumpress_advancedsearch').'"',explode(" ",$value)));
  1135. }
  1136. }
  1137. class LessThanComparison extends Comparison{
  1138. function addSQLWhere($field,$value){
  1139. return "$field < '$value'";
  1140. }
  1141. function describeSearch($value){
  1142. return sprintf(__(' less than "%1$s"','premiumpress_advancedsearch'),$value);
  1143. }
  1144. }
  1145. class AtMostComparison extends Comparison{
  1146. function addSQLWhere($field,$value){
  1147. return "$field <= '$value'";
  1148. }
  1149. function describeSearch($value){
  1150. return sprintf(__(' at most "%1$s"','premiumpress_advancedsearch'),$value);
  1151. }
  1152. }
  1153. class AtLeastComparison extends Comparison{
  1154. function addSQLWhere($field,$value){
  1155. return "$field >= '$value'";
  1156. }
  1157. function describeSearch($value){
  1158. return sprintf(__(' at least "%1$s"','premiumpress_advancedsearch'),$value);
  1159. }
  1160. }
  1161. class MoreThanComparison extends Comparison{
  1162. function addSQLWhere($field,$value){
  1163. return "$field > '$value'";
  1164. }
  1165. function describeSearch($value){
  1166. return sprintf(__(' more than "%1$s"','premiumpress_advancedsearch'),$value);
  1167. }
  1168. }
  1169. class RangeComparison extends Comparison{
  1170. function addSQLWhere($field,$value){
  1171. list($min,$max) = explode("-",$value);
  1172. $where=1;
  1173. if(strlen($min)>0) $where.=" AND $field >= $min";
  1174. if(strlen($max)>0) $where.=" AND $field <= $max";
  1175. return $where;
  1176. }
  1177. function describeSearch($value){
  1178. list($min,$max) = explode("-",$value);
  1179. if(strlen($min)==0) return sprintf(__(' less than "%1$s"','premiumpress_advancedsearch'),$max);
  1180. if(strlen($max)==0) return sprintf(__(' more than "%1$s"','premiumpress_advancedsearch'),$min);
  1181. return sprintf(__(' between "%1$s" and "%2$s"','premiumpress_advancedsearch'),$min,$max);
  1182. }
  1183. }
  1184. class NotEqualComparison extends Comparison {
  1185. function addSQLWhere($field,$value){
  1186. return "$field != '$value'";
  1187. }
  1188. function describeSearch($value){
  1189. return sprintf(__(' is not "%1$s"','premiumpress_advancedsearch'),$value);
  1190. }
  1191. }
  1192.  
  1193. class BaseJoiner extends ParameterisedObject {
  1194. function BaseJoiner($name=null,$params=array()){
  1195. $this->__construct($name,$params);
  1196. }
  1197. function __construct($name=null,$params=array()){
  1198. parent::__construct($params);
  1199. $this->name=$name;
  1200. }
  1201. function sql_join($join,$name,$index,$value){
  1202. return $join;
  1203. }
  1204. function process_where($where){
  1205. return $where;
  1206. }
  1207. function needsField(){
  1208. return true;
  1209. }
  1210. }
  1211. class CustomFieldJoiner extends BaseJoiner{
  1212. function CustomFieldJoiner($name,$params){
  1213. $this->__construct($name,$params);
  1214. }
  1215. function __construct($name,$params){
  1216. $this->params = $params;
  1217. }
  1218. function param($key,$default=null){
  1219. if(array_key_exists($key,$this->params)) return $this->params[$key];
  1220. return $default;
  1221. }
  1222. function sql_restrict($name,$index,$value,$comparison){
  1223. $table = 'meta'.$index;
  1224. $field = "$table.meta_value".($this->param('numeric',false)?'*1':'');
  1225. $comp = " AND ".$comparison->addSQLWhere($field,$value);
  1226. if($name!='all')
  1227. $comp = " AND ( $table.meta_key='$name' ".$comp.") ";
  1228. return $comp;
  1229.  
  1230. }
  1231. function sql_join($join,$name,$index,$value){
  1232. if(!$value && !$this->param('required',false)) return $join;
  1233. global $wpdb;
  1234. $table = 'meta'.$index;
  1235. return "$join JOIN $wpdb->postmeta $table ON $table.post_id=$wpdb->posts.id";
  1236. }
  1237. function getAllOptions($fieldName){
  1238. global $wpdb;
  1239. $where='';
  1240. if($fieldName!='all')
  1241. $where = " WHERE meta_key='$fieldName'";
  1242. $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");
  1243. $options = array();
  1244. while($r = mysql_fetch_row($q))
  1245. $options[$r[0]] = $r[0];
  1246. return $options;
  1247. }
  1248. function getSuggestedFields(){
  1249. global $wpdb;
  1250. $q = mysql_query($sql = "SELECT DISTINCT meta_key FROM $wpdb->postmeta WHERE meta_key NOT LIKE '\\_%'");
  1251. $options = array('all'=>'All Fields');
  1252. while($r = mysql_fetch_row($q))
  1253. $options[$r[0]] = $r[0];
  1254. return $options;
  1255. }
  1256. }
  1257. class CategoryJoiner extends BaseJoiner {
  1258. function sql_restrict($name,$index,$value,$comparison){
  1259. if(!($value || $this->params['required'])) return $join;
  1260. $table = 'meta'.$index;
  1261. return " AND ( ".$comparison->addSQLWhere("$table.name",$value).")";
  1262. }
  1263. function getTaxonomy(){
  1264. return $this->param('taxonomy','category');
  1265. }
  1266. function getTaxonomyWhere($table){
  1267. return "`$table`.taxonomy='".$this->getTaxonomy()."'";
  1268. }
  1269. function sql_join($join,$name,$index,$value){
  1270. if(!($value || $this->params['required'])) return $join;
  1271. global $wpdb;
  1272. $table = 'meta'.$index;
  1273. $rel = 'rel'.$index;
  1274. $tax = 'tax'.$index;
  1275. 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);
  1276. }
  1277. function getAllOptions($fieldName){
  1278. global $wpdb;
  1279. $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');
  1280. $q = mysql_query($sql);
  1281. if($e = mysql_error()) echo "<h1>SQL: $sql</h1>".mysql_error();
  1282. $options = array();
  1283. while($r = mysql_fetch_row($q))
  1284. $options[$r[0]] = $r[0];
  1285. return $options;
  1286. }
  1287. function needsField(){
  1288. return false;
  1289. }
  1290. }
  1291. class TagJoiner extends CategoryJoiner {
  1292. function getTaxonomy(){
  1293. return $this->param('taxonomy','post_tag');
  1294. }
  1295. }
  1296.  
  1297. class PostTypeJoiner extends BaseJoiner {
  1298. function process_where($where){
  1299. global $wpdb;
  1300. $where = preg_replace("/AND \($wpdb->posts.post_type *= *'(post|page)'\)/","",$where);
  1301. return $where;
  1302. }
  1303. function sql_restrict($name,$index,$value,$comparison){
  1304. global $wpdb;
  1305. if(!($value || $this->params['required'])) return $join;
  1306. return " AND ( ".$comparison->addSQLWhere("$wpdb->posts.post_type",$value).")";
  1307. }
  1308. function getAllOptions($fieldName){
  1309. global $wpdb;
  1310. $q = mysql_query($sql = "SELECT distinct post_type FROM $wpdb->posts p WHERE post_status='publish' ");
  1311. $options = array();
  1312. while($r = mysql_fetch_row($q))
  1313. $options[$r[0]] = $r[0];
  1314. return $options;
  1315. }
  1316. function needsField(){
  1317. return false;
  1318. }
  1319. }
  1320.  
  1321. class PostDataJoiner extends BaseJoiner {
  1322. function sql_restrict($name,$index,$value,$comparison){
  1323. global $wpdb;
  1324. $table = $wpdb->posts;
  1325. if($name=='all'){
  1326. $logic = array();
  1327. foreach($this->getSuggestedFields() as $name=>$desc){
  1328. if($name=='all') continue;
  1329. $logic[] = "( ".$comparison->addSQLWhere("$table.$name",$value).") ";
  1330. }
  1331. $logic = " AND (".join(" OR ",$logic).")";
  1332. return $logic;
  1333. } else {
  1334. return " AND ( ".$comparison->addSQLWhere("$table.$name",$value).") ";
  1335. }
  1336. }
  1337. function sql_join($join,$name,$index,$value){
  1338. return $join;
  1339. }
  1340. function getAllOptions($fieldName){
  1341. global $wpdb;
  1342. $q = mysql_query($sql = "SELECT ".PPTCLEAN($fieldName)." FROM $wpdb->posts");
  1343. $options = array();
  1344. while($r = mysql_fetch_row($q))
  1345. $options[$r[0]] = $r[0];
  1346. return $options;
  1347. }
  1348. function getSuggestedFields(){
  1349. return array(
  1350. 'all'=>__('All Fields','premiumpress_advancedsearch'),
  1351. 'post_content'=>__('Body Text','premiumpress_advancedsearch'),
  1352. 'post_title'=>__('Title','premiumpress_advancedsearch'),
  1353. 'post_author'=>__('Author','premiumpress_advancedsearch'),
  1354. 'post_date'=>__('Date','premiumpress_advancedsearch'),
  1355. );
  1356. }
  1357. }
  1358.  
  1359. class CategorySearch {
  1360. }
  1361.  
  1362. class CustomSearchField extends SearchFieldBase {
  1363. function CustomSearchField($nameOrParams,$input=false,$comparison=false,$joiner=false){
  1364. CustomSearchField::__construct($nameOrParams,$input,$comparison,$joiner);
  1365. }
  1366. function __construct($nameOrParams,$input=false,$comparison=false,$joiner=false){
  1367. parent::__construct();
  1368. if(!is_array($nameOrParams)){
  1369. $params = array('name'=>$nameOrParams);
  1370. } else {
  1371. $params = $nameOrParams;
  1372. }
  1373. $this->name = $params['name'];
  1374. $this->params = $params;
  1375.  
  1376. $this->joiner = $joiner;
  1377. $this->comparison = $comparison;
  1378. $this->input = $input;
  1379.  
  1380. if(!is_object($this->input)){
  1381. $input = $this->param('input','TextField');
  1382. $this->input = new $input($params);
  1383. }
  1384. if(!is_object($this->comparison)){
  1385. $comparison = $this->param('comparison','LikeComparison');
  1386. $this->comparison = new $comparison();
  1387. }
  1388. if(!is_object($this->joiner)){
  1389. $joiner = $this->param('joiner','CustomFieldJoiner');
  1390. $this->joiner = new $joiner($this->param('name'),$this->params);
  1391. }
  1392.  
  1393.  
  1394. }
  1395. function setIndex($n){
  1396. $this->index=$n;
  1397. }
  1398. function param($key,$default=null){
  1399. if(array_key_exists($key,$this->params)) return $this->params[$key];
  1400. return $default;
  1401. }
  1402.  
  1403. function stripInitialForm($form){
  1404. $pref='<!--cs-form-->';
  1405. if(preg_match("/^$pref/",$form)) return $form;
  1406. else return $pref;
  1407. }
  1408.  
  1409. function form_inputs($form){
  1410. $form = $this->stripInitialForm($form);
  1411. return $form.$this->getInput($this->name,$this->joiner);
  1412. }
  1413. function hasValue(){
  1414. return $this->getValue();
  1415. }
  1416. function sql_restrict($where){
  1417. if($this->hasValue()){
  1418. $value = $this->getValue();
  1419. $value = $GLOBALS['wpdb']->escape($value);
  1420. $where.=$this->joiner->sql_restrict($this->name,$this->index,$value,$this->comparison);
  1421. }
  1422. if(method_exists($this->joiner,'process_where'))
  1423. $where = $this->joiner->process_where($where);
  1424. return $where;
  1425. }
  1426. function describeSearch($current){
  1427. if($this->hasValue()){
  1428. $current[] = $this->getLabel()." ".$this->comparison->describeSearch($this->getValue());
  1429. }
  1430. return $current;
  1431.  
  1432. }
  1433. function join_meta($join){
  1434. global $wpdb;
  1435. $join=$this->joiner->sql_join($join,$this->name,$this->index,$this->getValue(),$this->comparison);
  1436. return $join;
  1437. }
  1438.  
  1439. function getQualifiedName(){
  1440. return $this->name.'-'.$this->index;
  1441. }
  1442. function getOldValue(){ return $this->getValue(); }
  1443. function getValue(){
  1444. $v = $this->input->getValue($this->getQualifiedName(),$this->name);
  1445. return $v;
  1446. }
  1447. function getLabel(){
  1448. if(!$this->params['label']) $this->params['label'] = ucwords($this->name);
  1449. return $this->params['label'];
  1450. }
  1451.  
  1452. function isHidden(){
  1453. return $this->input->param('hidden',false);
  1454. }
  1455. function getInput($wrap=true){
  1456. $input = $this->input->getInput($this->getQualifiedName(),$this->joiner,$this->name);
  1457. if($wrap){
  1458. $input = "<label class='searchform-label'>".$this->getLabel()."</label><br /> $input ";
  1459. }
  1460. return $input;
  1461. }
  1462. function getCSSClass(){
  1463. return method_exists($this->input,'getCSSClass')?$this->input->getCSSClass():get_class($this->input);
  1464. }
  1465. }
  1466.  
  1467.  
  1468.  
  1469. if($debugMode){
  1470. add_filter('posts_request','debug_dump_query');
  1471. function debug_dump_query($query){
  1472. echo "<h1>$query</h1>";
  1473. return $query;
  1474. }
  1475. }
  1476. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement