[44] | 1 | <?php
|
---|
| 2 |
|
---|
| 3 | if( !class_exists('BDPRSS_DB') ) {
|
---|
| 4 |
|
---|
| 5 | class BDPRSS_DB
|
---|
| 6 | {
|
---|
| 7 | var $sitetable;
|
---|
| 8 | var $cfeedurl, $csitename, $cdescription, $csiteurl, $clastpolltime, $curlindex,
|
---|
| 9 | $cnextpolltime, $cgmtadjust, $cupdatetime, /*$ctimeindex,*/ $cidentifier,
|
---|
| 10 | $csitenameoverride, $cpollingfreqmins;
|
---|
| 11 |
|
---|
| 12 | var $itemtable;
|
---|
| 13 | var $iidentifier, $ifeedurl, $iitemname, $iitemtext, /*$iitemnum,*/ $iitemurl, $iitemtime,
|
---|
| 14 | /*$ifeedindex,*/ /*$itimeindex,*/ /*$updateindex*/ $iitemdate;
|
---|
| 15 |
|
---|
| 16 | var $pbaoutputtable;
|
---|
| 17 | var $pbaoidentifier, $pbaoname, $pbaopage2hookin,
|
---|
| 18 | $pbaodefaultlist, $pbaomaxitems, $pbaoformattype,
|
---|
| 19 | $pbaotemplate_ticker, $pbaoappend_extra_link, $pbaoappend_cache_link, $pbaoadd_social_bookmarks,
|
---|
| 20 | $pbaosidebarwidget,
|
---|
| 21 | $pbaomaxlength, $pbaomaxwordlength, $pbaoitem_date_format, $pbaoallowablexhtmltags,
|
---|
| 22 | $pbaoiscachable, $otemplate_cache, $pbaocacheviewpage,
|
---|
| 23 | $pba_channel_rssgenerationallowed,
|
---|
| 24 | $pba_channel_title, $pba_channel_link,
|
---|
| 25 | $pba_channel_description, $pba_channel_language, $pba_channel_copyright,
|
---|
| 26 | $otemplate_kalender, $oarchive_date_format,
|
---|
| 27 | $okalendermonthslist, $okalenderboxtablecaption, $okalender_last, $okalender_next,
|
---|
| 28 | $okalenderboxdaysofweeklist, $pbao_superparameter;
|
---|
| 29 |
|
---|
| 30 | var $listtable;
|
---|
| 31 | var $lidentifier, $lname, $lurls, $llistall;
|
---|
| 32 |
|
---|
| 33 | var $errortable;
|
---|
| 34 | var $eidentifier, $efeedurl, $etime, $etext /* , $efeedindex */;
|
---|
| 35 |
|
---|
| 36 | var $mtablestatus;
|
---|
| 37 | var $memtable, $mdatetime, $mstatus, $mnotice;
|
---|
| 38 |
|
---|
| 39 | var $now;
|
---|
| 40 | var $bdprss_prevent_dupe_updates;
|
---|
| 41 |
|
---|
| 42 | var $memtablesok, $memtables_were_ok, $serverstatus;
|
---|
| 43 |
|
---|
| 44 | function BDPRSS_DB()
|
---|
| 45 | {
|
---|
| 46 | /* BDPRSS_DB() - initialisition function that sets constant names for later use */
|
---|
| 47 |
|
---|
| 48 | global $wpdb, $table_prefix;
|
---|
| 49 |
|
---|
| 50 | $this->now = time();
|
---|
| 51 | $this->bdprss_prevent_dupe_updates=array();
|
---|
| 52 |
|
---|
| 53 | // --- site-table
|
---|
| 54 | $this->sitetable = $table_prefix.'pba_sites';
|
---|
| 55 | $this->cidentifier = 'identifier'; // primary key
|
---|
| 56 | $this->cfeedurl = 'feed_url'; // indexed
|
---|
| 57 | $this->csitename = 'site_name';
|
---|
| 58 | $this->csitenameoverride = 'site_name_overriden'; // manual override for site feed names
|
---|
| 59 | $this->cdescription = 'description';
|
---|
| 60 | $this->csitelicense = 'site_license';
|
---|
| 61 | $this->csiteurl = 'site_url';
|
---|
| 62 | $this->clastpolltime = 'last_poll_time'; // time last polled
|
---|
| 63 | $this->cnextpolltime = 'next_poll_time'; // next scheduked poll
|
---|
| 64 | $this->cpollingfreqmins = 'polling_freq_in_mins'; // adjustable polling frequency
|
---|
| 65 | $this->cupdatetime = 'site_update_time'; // time last updated
|
---|
| 66 | $this->cgmtadjust = 'gmt_adjustment'; // GMT adjustment to pubDate
|
---|
| 67 |
|
---|
| 68 | // --- item-table
|
---|
| 69 | $this->itemtable = $table_prefix."pba_items";
|
---|
| 70 | $this->iidentifier = "identifier"; // primary key
|
---|
| 71 | $this->ifeedurl = "item_feed_url"; // ( combined unique key
|
---|
| 72 | $this->iitemurl = "item_url"; // ( combined unique key
|
---|
| 73 | $this->iitemname = "item_name";
|
---|
| 74 | $this->iitemsitename = "item_site_name";
|
---|
| 75 | $this->iitemsiteurl = "item_site_url";
|
---|
| 76 | $this->iitemlicense = "item_license";
|
---|
| 77 | $this->iitemtext = "text_body";
|
---|
| 78 | $this->iitemtime = "item_time"; // item pubDate time
|
---|
| 79 | $this->iitemdate = "item_date"; // item date
|
---|
| 80 | $this->iitemupdate = "item_update_time"; // item last updated time -- for debugging
|
---|
| 81 |
|
---|
| 82 | //pba options table
|
---|
| 83 | $this->optionstable = $table_prefix."pba_options";
|
---|
| 84 |
|
---|
| 85 | // --- pbaoutputtable
|
---|
| 86 | $this->pbaoutputtable = $table_prefix."pba_outputs";
|
---|
| 87 |
|
---|
| 88 | //management
|
---|
| 89 | $this->pbaoidentifier = "identifier"; // primary key
|
---|
| 90 | $this->pbaoname = "name"; // a useful handle
|
---|
| 91 | $this->pbaopage2hookin = "page2hookin"; //wp page to hook output in
|
---|
| 92 |
|
---|
| 93 | //item selection
|
---|
| 94 | $this->pbaodefaultlist = "default_list"; // default list filter
|
---|
| 95 | $this->pbaomaxitems = "items_per_site"; //
|
---|
| 96 | $this->pbaoformattype = "type"; // type of list:
|
---|
| 97 |
|
---|
| 98 | //ticker page formatting
|
---|
| 99 | $this->pbaotemplate_ticker = "template_ticker";
|
---|
| 100 |
|
---|
| 101 | $this->pbaoappend_extra_link = "append_extra_link";
|
---|
| 102 | $this->pbaoappend_cache_link = "append_cache_link";
|
---|
| 103 | $this->pbaoadd_social_bookmarks = "add_social_bookmarks";
|
---|
| 104 |
|
---|
| 105 | $this->pbaosidebarwidget = "template_sidebarwidget";
|
---|
| 106 |
|
---|
| 107 | //item formatting
|
---|
| 108 |
|
---|
| 109 | $this->pbaomaxlength = "max_words_in_synposis";// 0 = no limit
|
---|
| 110 | $this->pbaomaxwordlength = "max_word_length"; //
|
---|
| 111 | $this->pbaoitem_date_format = "item_date_format"; //
|
---|
| 112 | $this->pbaoallowablexhtmltags= "allowable_xhtml_tags"; //
|
---|
| 113 |
|
---|
| 114 | //cache
|
---|
| 115 | $this->pbaoiscachable = "enable_caching";
|
---|
| 116 | $this->otemplate_cache = "template_cache";
|
---|
| 117 | $this->pbaocacheviewpage = "cache_view_page";
|
---|
| 118 |
|
---|
| 119 | //feed
|
---|
| 120 | $this->pba_channel_rssgenerationallowed = "channel_rssgenerationallowed";
|
---|
| 121 | $this->pba_channel_title = "channel_title";
|
---|
| 122 | $this->pba_channel_link = "channel_link";
|
---|
| 123 | $this->pba_channel_description = "channel_description";
|
---|
| 124 | $this->pba_channel_language = "channel_language";
|
---|
| 125 | $this->pba_channel_copyright = "channel_copyright";
|
---|
| 126 |
|
---|
| 127 | //kalender
|
---|
| 128 | $this->otemplate_kalender = "template_kalender";
|
---|
| 129 | $this->oarchive_date_format = "archive_date_format";
|
---|
| 130 | $this->okalendermonthslist = "kalendermonthslist";
|
---|
| 131 | $this->okalenderboxtablecaption = "kalenderboxtablecaption";
|
---|
| 132 | $this->okalender_last = "kalender_last";
|
---|
| 133 | $this->okalender_next = "kalender_next";
|
---|
| 134 | $this->okalenderboxdaysofweeklist = "kalenderboxdaysofweeklist";
|
---|
| 135 | $this->pbao_superparameter = "superparameter";
|
---|
| 136 |
|
---|
| 137 | // --- list-table
|
---|
| 138 | $this->listtable = $table_prefix."pba_lists";
|
---|
| 139 |
|
---|
| 140 | $this->lidentifier = "identifier"; // primary key
|
---|
| 141 | $this->lname = "name"; // a useful handle
|
---|
| 142 | $this->lurls = "url_list"; // comma separate list
|
---|
| 143 | $this->llistall = "list_all"; // list all url ids
|
---|
| 144 |
|
---|
| 145 | // --- error-table
|
---|
| 146 | $this->errortable = $table_prefix.'pba_errors';
|
---|
| 147 |
|
---|
| 148 | $this->eidentifier = 'identifier';
|
---|
| 149 | $this->efeedurl = 'feed_url';
|
---|
| 150 | $this->etime = 'when_it_happened';
|
---|
| 151 | $this->etext = 'error_text';
|
---|
| 152 |
|
---|
| 153 | // --- memory status table
|
---|
| 154 | $this->mtablestatus = $table_prefix.'pba_m_tablestatus';
|
---|
| 155 | $this->memtable = 'memtable';
|
---|
| 156 | $this->mdatetime = 'datetime';
|
---|
| 157 | $this->mstatus = 'status';
|
---|
| 158 | $this->mnotice = 'notice';
|
---|
| 159 |
|
---|
| 160 | // --- site table in memory - probably obsolete - it is a small table and has to be a copy of sitetable on disk
|
---|
| 161 | $this->msitetable = $table_prefix.'pba_m_sites';
|
---|
| 162 | $this->midentifier = 'identifier'; // primary key
|
---|
| 163 | $this->mfeedurl = 'feed_url'; // indexed
|
---|
| 164 | $this->msitename = 'site_name';
|
---|
| 165 | $this->msitenameoverride = 'site_name_overriden'; // manual override for site feed names
|
---|
| 166 | $this->mdescription = 'description';
|
---|
| 167 | $this->msitelicense = 'site_license';
|
---|
| 168 | $this->msiteurl = 'site_url';
|
---|
| 169 | $this->mlastpolltime = 'last_poll_time'; // time last polled
|
---|
| 170 | $this->mnextpolltime = 'next_poll_time'; // next scheduked poll
|
---|
| 171 | $this->mpollingfreqmins = 'polling_freq_in_mins'; // adjustable polling frequency
|
---|
| 172 | $this->mupdatetime = 'site_update_time'; // time last updated
|
---|
| 173 | $this->mgmtadjust = 'gmt_adjustment'; // GMT adjustment to pubDate
|
---|
| 174 |
|
---|
| 175 | // --- index item table in memory
|
---|
| 176 | $this->mitemtable = $table_prefix.'pba_m_items';
|
---|
| 177 | $this->miid = 'identifier'; // primary key
|
---|
| 178 | $this->misiteid = 'site_id'; // / index
|
---|
| 179 | $this->miitemtime = 'item_time'; // | index
|
---|
| 180 | $this->miitemdate = 'item_date'; // \ index
|
---|
| 181 |
|
---|
| 182 | //initialize values to check serverstatus at class construction
|
---|
| 183 | $this->serverstatus=array();
|
---|
| 184 | $this->memtables_were_ok = 1;
|
---|
| 185 | //debug begin
|
---|
| 186 | //$this->create();
|
---|
| 187 | //$this->prefill_table($this->pbaoutputtable);
|
---|
| 188 | //debug end
|
---|
| 189 | $this->memtablesok=$this->get_memtable_status($this->serverstatus);
|
---|
| 190 | if($this->memtablesok == 0){
|
---|
| 191 | $this->memtables_were_ok = 0;
|
---|
| 192 | $this->create();
|
---|
| 193 | $this->prefill_memtables();
|
---|
| 194 | $this->memtablesok=$this->get_memtable_status($this->serverstatus);
|
---|
| 195 | }
|
---|
| 196 | $this->highserverload=false;
|
---|
| 197 | if(isset($this->serverstatus['highloadthreshold']['notice']) && isset($this->serverstatus['pbaload']['notice'])){
|
---|
| 198 | if($this->serverstatus['highloadthreshold']['notice'] < $this->serverstatus['pbaload']['notice']) $this->highserverload=true;
|
---|
| 199 | }
|
---|
| 200 | } // function BDPRSS_DB
|
---|
| 201 |
|
---|
| 202 | /* --- create --- */
|
---|
| 203 | function jobaction($injobname="", $action="insert"){
|
---|
| 204 | //what parameter to take here?
|
---|
| 205 | //1. if injobname!="" we limit the processed jobs by parameter injobname
|
---|
| 206 |
|
---|
| 207 | //what to do here with the result?
|
---|
| 208 | //1. action="insert" - we INSERT IGNORE new waiting jobs without replacing jobs and try to restore backup from optionstable before
|
---|
| 209 | //2. action="kill" - we REPLACE a job/all jobs to become waiting
|
---|
| 210 | //3. action="start" - we REPLACE a job to become running
|
---|
| 211 |
|
---|
| 212 | global $wpdb;
|
---|
| 213 |
|
---|
| 214 | $injobname=preg_replace('/[^a-zA_Z0-9_-]/','',$injobname);
|
---|
| 215 |
|
---|
| 216 | //uploading jobs from options table to memtable we will just do on startup
|
---|
| 217 | if($action=="insert"){
|
---|
| 218 | $sql="INSERT IGNORE into $this->mtablestatus ( memtable , datetime , status , notice )
|
---|
| 219 | SELECT name as memtable, last_change as datetime, concat(type, value) as status,
|
---|
| 220 | notice as notice FROM $this->optionstable WHERE type = 'job'";
|
---|
| 221 | if($injobname != "") $sql .= " AND name = '".$injobname."'";
|
---|
| 222 | $result=$wpdb->query($sql);
|
---|
| 223 | }
|
---|
| 224 |
|
---|
| 225 | $sql="SELECT name, value FROM $this->optionstable WHERE type = 'jobdefinition' ";
|
---|
| 226 | if($injobname != "") $sql .= " AND name = '".$injobname."_jobdefinition'";
|
---|
| 227 | $raw_job_defintions=$wpdb->get_results($sql);
|
---|
| 228 |
|
---|
| 229 | if(!$raw_job_defintions) return false;
|
---|
| 230 |
|
---|
| 231 | //build up an array with jobs
|
---|
| 232 | foreach($raw_job_defintions as $gotrow => $raw_job_defintion){
|
---|
| 233 | $jobname=str_replace('_jobdefinition','',$raw_job_defintion->name);
|
---|
| 234 | $valuepairs=explode(',',$raw_job_defintion->value); //a value of a raw_job_defintion to explode looks like: startpoint=a10,\r\nmaxexecutiontime=1000
|
---|
| 235 | foreach($valuepairs as $valuenumber => $valuepair){
|
---|
| 236 | $rawvalues=explode('=',$valuepair); // a valuepair to explode looks like \r\nmaxexecutiontime=1000\r\n
|
---|
| 237 | $jobrow[$jobname][trim($rawvalues[0])]=trim($rawvalues[1]);
|
---|
| 238 | }
|
---|
| 239 | //fine - we have got parsed a jobdefinition - so let us now build the values for the job row to insert into db
|
---|
| 240 | if(!isset($jobrow[$jobname]['startpoint'])){
|
---|
| 241 | $jobrow[$jobname]['startpoint']='a10';
|
---|
| 242 | }else{
|
---|
| 243 | if(substr($jobrow[$jobname]['startpoint'],0,1)=='a'){
|
---|
| 244 | $jobrow[$jobname]['nextstarttimestamp']=time() + abs(intval(substr($jobrow[$jobname]['startpoint'],1)));
|
---|
| 245 | }elseif(substr($jobrow[$jobname]['startpoint'],0,1)=='d'){
|
---|
| 246 | //we need to find out the timepoint of next start, we have pairs like startpoint=d00-03:00h
|
---|
| 247 | //how can we specify, that a job shall be run each hour or each minute?
|
---|
| 248 | //we need in the config a cron like syntax with placeholders?
|
---|
| 249 | $daytmp=substr($jobrow[$jobname]['startpoint'],1,2);
|
---|
| 250 | $shour=substr($jobrow[$jobname]['startpoint'],4,2);
|
---|
| 251 | $sminute=substr($jobrow[$jobname]['startpoint'],7,2);
|
---|
| 252 | //compare the time
|
---|
| 253 | $later = 0;
|
---|
| 254 | if((date("H") . date("i")) >= ($shour . $sminute)) $later = 1;
|
---|
| 255 | if(intval($daytmp) == 0) {
|
---|
| 256 | $sday = date("d") + $later;
|
---|
| 257 | $smonth = date("m");
|
---|
| 258 | }else{
|
---|
| 259 | $nextmonth = 0;
|
---|
| 260 | if((date("d") . date("H") . date("i")) >= ($daytmp . $shour . $sminute)) $nextmonth = 1;
|
---|
| 261 | $sday = $daytmp;
|
---|
| 262 | $smonth = date("m") + $nextmonth;
|
---|
| 263 | }
|
---|
| 264 | $jobrow[$jobname]['nextstarttimestamp'] = mktime($shour, $sminute, 0, $smonth, $sday, date("Y"));
|
---|
| 265 | }//end if startpoint 0,1 ==
|
---|
| 266 | $jobrow[$jobname]['nextstart']=date("Y-m-d H:i:s", $jobrow[$jobname]['nextstarttimestamp']);
|
---|
| 267 | if(!isset($jobrow[$jobname]['maxexecutiontime']))$jobrow[$jobname]['maxexecutiontime'] = 10;
|
---|
| 268 | $jobrow[$jobname]['killtimestamp']= time() + $jobrow[$jobname]['maxexecutiontime'];
|
---|
| 269 | $jobrow[$jobname]['killtime']=date("Y-m-d H:i:s", $jobrow[$jobname]['killtimestamp']);
|
---|
| 270 | }//end if isset startpoint
|
---|
| 271 |
|
---|
| 272 | //we have now the values for this jobdefinition
|
---|
| 273 | $insert="REPLACE";
|
---|
| 274 | if($action=="insert"){
|
---|
| 275 | $insert="INSERT IGNORE";
|
---|
| 276 | }
|
---|
| 277 | $sqlbase=$insert . " INTO $this->mtablestatus ( memtable , datetime , status , notice ) VALUES ";
|
---|
| 278 | $sqlvalues =" ( '".$jobname."', '".$jobrow[$jobname]['nextstart']."', 'jobwaiting', 'Created at: ".date("Y-m-d H:i:s")."')";
|
---|
| 279 | if($action=="start") $sqlvalues ="( '".$jobname."', '".$jobrow[$jobname]['killtime']."', 'jobrunning', 'Started at: ".date("Y-m-d H:i:s")."')";
|
---|
| 280 | $result=$wpdb->query($sqlbase . $sqlvalues);
|
---|
| 281 | //echo "sql was: " . $sqlbase . $sqlvalues;
|
---|
| 282 |
|
---|
| 283 | //the optionstable shall be just read when memtables are crashed to reconstruct memtables,anyway we have to write
|
---|
| 284 | $sqlbase=$insert . " INTO $this->optionstable ( name , last_change , type , value , notice ) VALUES ";
|
---|
| 285 | $sqlvalues =" ( '".$jobname."', '".$jobrow[$jobname]['nextstart']."', 'job', 'waiting', 'Created at: ".date("Y-m-d H:i:s")."')";
|
---|
| 286 | if($action=="start") $sqlvalues = " ( '".$jobname."', '".$jobrow[$jobname]['killtime']."', 'job', 'running', 'Started at: ".date("Y-m-d H:i:s")."')";
|
---|
| 287 | $result=$wpdb->query($sqlbase . $sqlvalues);
|
---|
| 288 | //echo "Query was: " . $sqlbase . $sqlvalues;
|
---|
| 289 |
|
---|
| 290 | }// end foreach raw job definitions
|
---|
| 291 | //print_r($jobrow);
|
---|
| 292 | return $jobrow;
|
---|
| 293 | }
|
---|
| 294 |
|
---|
| 295 | function change_jobstatus($jobname, $newstatus){
|
---|
| 296 | global $wpdb;
|
---|
| 297 |
|
---|
| 298 | $jobname=preg_replace('/[^a-zA_Z0-9_-]/','',$jobname);
|
---|
| 299 | $killtime=date("Y-m-d H:i:s",time()+10);
|
---|
| 300 | $sql="REPLACE INTO $this->mtablestatus ( memtable , datetime , status , notice ) VALUES ";
|
---|
| 301 | $sql .=" ( '".$jobname."', '".$killtime."', 'job".$newstatus."', 'Advertized at: ".date("Y-m-d H:i:s")."')";
|
---|
| 302 | $result=$wpdb->query($sql);
|
---|
| 303 |
|
---|
| 304 | return $result;
|
---|
| 305 | }
|
---|
| 306 |
|
---|
| 307 | function table_exists($tablename)
|
---|
| 308 | {
|
---|
| 309 | global $wpdb;
|
---|
| 310 | return ($wpdb->get_var("show tables like '$tablename'") == $tablename);
|
---|
| 311 | }
|
---|
| 312 |
|
---|
| 313 |
|
---|
| 314 | function create($try_memtable_creation=true)
|
---|
| 315 | {
|
---|
| 316 | /* create() - create the database tables if they do not already exist */
|
---|
| 317 |
|
---|
| 318 | global $wpdb;
|
---|
| 319 |
|
---|
| 320 | $blog_name=get_option('blogname');
|
---|
| 321 |
|
---|
| 322 | $engine="MYISAM";
|
---|
| 323 | $btree="";
|
---|
| 324 | if($try_memtable_creation) $engine="memory";
|
---|
| 325 | if($try_memtable_creation) $btree =" USING BTREE ";
|
---|
| 326 |
|
---|
| 327 | if(!$this->table_exists($this->optionstable)){
|
---|
| 328 | $sql = "CREATE TABLE IF NOT EXISTS $this->optionstable (
|
---|
| 329 | id INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'an autoincrement id',
|
---|
| 330 | name VARCHAR( 255 ) NOT NULL COMMENT 'a unique name for the option',
|
---|
| 331 | last_change TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Just automatic timestamp of last update',
|
---|
| 332 | type VARCHAR( 255 ) NOT NULL COMMENT 'array, string, bool etc',
|
---|
| 333 | value TEXT NOT NULL COMMENT 'Binary safe value of the pba option',
|
---|
| 334 | notice TEXT NOT NULL COMMENT 'A notice for the option',
|
---|
| 335 | UNIQUE ( name )
|
---|
| 336 | ) ENGINE = MYISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT = 'globals options for pba'";
|
---|
| 337 | $result = $wpdb->query($sql);
|
---|
| 338 | $this->prefill_table($this->optionstable);
|
---|
| 339 | }
|
---|
| 340 |
|
---|
| 341 | if(!$this->table_exists($this->pbaoutputtable)){
|
---|
| 342 | $sql = "CREATE TABLE IF NOT EXISTS $this->pbaoutputtable (
|
---|
| 343 | identifier int(10) NOT NULL auto_increment,
|
---|
| 344 | name varchar(255) NOT NULL default '-',
|
---|
| 345 | page2hookin int(11) NOT NULL default '0' COMMENT 'The wordpress page to hook in this output',
|
---|
| 346 | default_list int(11) NOT NULL default '0' COMMENT 'The Default List Filter for the Output format',
|
---|
| 347 | items_per_site int(4) NOT NULL default '10',
|
---|
| 348 | type enum('countrecentitem','daterecentitem','sitealpha','siteupdate') NOT NULL default 'countrecentitem',
|
---|
| 349 | template_ticker text COMMENT 'template for ticker',
|
---|
| 350 | append_extra_link enum('Y','N') NOT NULL default 'Y',
|
---|
| 351 | append_cache_link enum('Y','N') NOT NULL default 'Y',
|
---|
| 352 | add_social_bookmarks enum('Y','N') NOT NULL default 'Y',
|
---|
| 353 | template_sidebarwidget text COMMENT 'template for sidebar widgets',
|
---|
| 354 | max_words_in_synposis int(4) NOT NULL default '10',
|
---|
| 355 | max_word_length int(4) NOT NULL default '35',
|
---|
| 356 | item_date_format varchar(30) default 'd.m.Y \\\u\\\m H:i\\\h',
|
---|
| 357 | allowable_xhtml_tags varchar(150) default '',
|
---|
| 358 | enable_caching enum('Y','N') NOT NULL default 'Y',
|
---|
| 359 | template_cache text NOT NULL COMMENT 'template for the cache page',
|
---|
| 360 | cache_view_page varchar(200) default NULL,
|
---|
| 361 | channel_title varchar(100) default 'Feedmix von ".$blog_name."',
|
---|
| 362 | channel_link varchar(100) default '',
|
---|
| 363 | channel_description varchar(200) default 'Feedmix generiert mit dem Parteibuch Aggregator)',
|
---|
| 364 | channel_language varchar(10) default 'de',
|
---|
| 365 | channel_copyright varchar(100) default 'Verschiedene (Details Siehe Autorenlinks)',
|
---|
| 366 | template_kalender text NOT NULL,
|
---|
| 367 | archive_date_format varchar(255) NOT NULL default 'Y-m-d',
|
---|
| 368 | kalendermonthslist varchar(255) NOT NULL default 'Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember',
|
---|
| 369 | kalenderboxtablecaption varchar(255) NOT NULL default ' id=\"kalendertable\"',
|
---|
| 370 | kalender_last varchar(255) NOT NULL default 'Früher',
|
---|
| 371 | kalender_next varchar(255) NOT NULL default 'Später',
|
---|
| 372 | kalenderboxdaysofweeklist varchar(255) NOT NULL default 'Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag',
|
---|
| 373 | superparameter text NOT NULL COMMENT 'free style paras',
|
---|
| 374 | PRIMARY KEY (identifier)
|
---|
| 375 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci AUTO_INCREMENT=1";
|
---|
| 376 | $result = $wpdb->query($sql);
|
---|
| 377 | $this->prefill_table($this->pbaoutputtable);
|
---|
| 378 | }
|
---|
| 379 |
|
---|
| 380 | if(!$this->table_exists($this->listtable)){
|
---|
| 381 | $sql = "CREATE TABLE IF NOT EXISTS $this->listtable (".
|
---|
| 382 | // about the list
|
---|
| 383 | "$this->lidentifier int(10) NOT NULL auto_increment, " .
|
---|
| 384 | "$this->lname varchar(255) NOT NULL default '-', ".
|
---|
| 385 | "$this->lurls text, ".
|
---|
| 386 | "$this->llistall enum('Y','N') NOT NULL default 'N', " .
|
---|
| 387 | "PRIMARY KEY ($this->lidentifier) ) CHARSET=latin1";
|
---|
| 388 | $result = $wpdb->query($sql);
|
---|
| 389 | $this->prefill_table($this->listtable);
|
---|
| 390 | }
|
---|
| 391 |
|
---|
| 392 | $sql = "CREATE TABLE IF NOT EXISTS $this->errortable (".
|
---|
| 393 | /* changed */ "$this->eidentifier int(10) NOT NULL auto_increment, ".
|
---|
| 394 | "$this->efeedurl varchar(240) NOT NULL, ".
|
---|
| 395 | "$this->etime int(15) NOT NULL, ".
|
---|
| 396 | "$this->etext text NOT NULL, ".
|
---|
| 397 | "PRIMARY KEY ($this->eidentifier), ".
|
---|
| 398 | /* changed */ "INDEX ($this->efeedurl) ) DEFAULT CHARSET=utf8 COLLATE utf8_general_ci ";
|
---|
| 399 | $result = $wpdb->query($sql);
|
---|
| 400 |
|
---|
| 401 | if(!$this->table_exists($this->sitetable)){
|
---|
| 402 | $sql = "CREATE TABLE IF NOT EXISTS $this->sitetable (".
|
---|
| 403 | "$this->cidentifier int(10) NOT NULL auto_increment, " .
|
---|
| 404 | "$this->cfeedurl varchar(240) NOT NULL, ".
|
---|
| 405 | "$this->csitename varchar(255), ".
|
---|
| 406 | "$this->csitenameoverride enum('Y','N') NOT NULL default 'N', " .
|
---|
| 407 | "$this->cdescription varchar(255), ".
|
---|
| 408 | "$this->csitelicense varchar(255), ".
|
---|
| 409 | "$this->csiteurl varchar(255), ".
|
---|
| 410 | "$this->clastpolltime int(15) NOT NULL DEFAULT 1, " .
|
---|
| 411 | "$this->cnextpolltime int(15) NOT NULL DEFAULT 1, " .
|
---|
| 412 | "$this->cupdatetime int(15) NOT NULL DEFAULT 1, " .
|
---|
| 413 | "$this->cgmtadjust float(4,1) NOT NULL DEFAULT 0.0, ".
|
---|
| 414 | "$this->cpollingfreqmins int(6) NOT NULL DEFAULT 0, ".
|
---|
| 415 | "PRIMARY KEY ($this->cidentifier), ".
|
---|
| 416 | "UNIQUE KEY ($this->cfeedurl), ".
|
---|
| 417 | "INDEX ($this->clastpolltime) ) DEFAULT CHARSET=utf8 COLLATE utf8_general_ci ";
|
---|
| 418 | $result = $wpdb->query($sql);
|
---|
| 419 | $this->prefill_table($this->sitetable);
|
---|
| 420 | }
|
---|
| 421 |
|
---|
| 422 | $sql = "CREATE TABLE IF NOT EXISTS $this->itemtable (".
|
---|
| 423 | "$this->iidentifier int(10) NOT NULL auto_increment, ".
|
---|
| 424 | "$this->ifeedurl varchar(240) NOT NULL, ".
|
---|
| 425 | "$this->iitemurl varchar(255) NOT NULL, ".
|
---|
| 426 | "$this->iitemname varchar(255) NOT NULL, ".
|
---|
| 427 | "$this->iitemsitename varchar(255) NOT NULL, ".
|
---|
| 428 | "$this->iitemsiteurl varchar(255) NOT NULL, ".
|
---|
| 429 | "$this->iitemlicense varchar(255) NOT NULL, ".
|
---|
| 430 | "$this->iitemtext text NOT NULL, ".
|
---|
| 431 | "$this->iitemtime int(15) NOT NULL, ".
|
---|
| 432 | "$this->iitemdate date NOT NULL, ".
|
---|
| 433 | "$this->iitemupdate int(15) NOT NULL, ".
|
---|
| 434 | "PRIMARY KEY ($this->iidentifier), " .
|
---|
| 435 | "UNIQUE KEY ($this->ifeedurl (200), $this->iitemurl (100)), ".
|
---|
| 436 | "INDEX ($this->iitemdate), ".
|
---|
| 437 | "INDEX ($this->ifeedurl), ".
|
---|
| 438 | "INDEX ($this->iitemtime) ) DEFAULT CHARSET=utf8 COLLATE utf8_general_ci ";
|
---|
| 439 | //echo $sql;
|
---|
| 440 | $result = $wpdb->query($sql);
|
---|
| 441 |
|
---|
| 442 | $sql= "CREATE TABLE IF NOT EXISTS $this->mtablestatus (
|
---|
| 443 | $this->memtable CHAR( 60 ) NOT NULL ,
|
---|
| 444 | $this->mdatetime DATETIME,
|
---|
| 445 | $this->mstatus CHAR( 10 ) NOT NULL ,
|
---|
| 446 | $this->mnotice CHAR( 50 ) NOT NULL ,
|
---|
| 447 | PRIMARY KEY ( $this->memtable )
|
---|
| 448 | ) ENGINE = " . $engine . " DEFAULT CHARSET=utf8 COLLATE utf8_general_ci ";
|
---|
| 449 | $result = $wpdb->query($sql);
|
---|
| 450 |
|
---|
| 451 | $sql = "CREATE TABLE IF NOT EXISTS $this->msitetable (".
|
---|
| 452 | "$this->midentifier int(10) NOT NULL auto_increment, " .
|
---|
| 453 | "$this->mfeedurl varchar(240) NOT NULL, ".
|
---|
| 454 | "$this->msitename varchar(255), ".
|
---|
| 455 | "$this->msitenameoverride enum('Y','N') NOT NULL default 'N', " .
|
---|
| 456 | "$this->mdescription varchar(255), ".
|
---|
| 457 | "$this->msitelicense varchar(255), ".
|
---|
| 458 | "$this->msiteurl varchar(255), ".
|
---|
| 459 | "$this->mlastpolltime int(15) NOT NULL DEFAULT 1, " .
|
---|
| 460 | "$this->mnextpolltime int(15) NOT NULL DEFAULT 1, " .
|
---|
| 461 | "$this->mupdatetime int(15) NOT NULL DEFAULT 1, " .
|
---|
| 462 | "$this->mgmtadjust float(4,1) NOT NULL DEFAULT 0.0, ".
|
---|
| 463 | "$this->mpollingfreqmins int(6) NOT NULL DEFAULT 0, ".
|
---|
| 464 | "PRIMARY KEY " . $btree . " ($this->midentifier), ".
|
---|
| 465 | "UNIQUE KEY ($this->mfeedurl), ".
|
---|
| 466 | "INDEX " . $btree . " ($this->mlastpolltime) ) ENGINE = " . $engine . " DEFAULT CHARSET=utf8 COLLATE utf8_general_ci ";
|
---|
| 467 | $result = $wpdb->query($sql);
|
---|
| 468 |
|
---|
| 469 | $sql= "CREATE TABLE IF NOT EXISTS $this->mitemtable (
|
---|
| 470 | $this->miid mediumint(8) unsigned NOT NULL,
|
---|
| 471 | $this->misiteid smallint(5) unsigned NOT NULL,
|
---|
| 472 | $this->miitemtime int(15) NOT NULL,
|
---|
| 473 | $this->miitemdate date NOT NULL,
|
---|
| 474 | PRIMARY KEY ($this->miid),
|
---|
| 475 | KEY `Memory_index` " . $btree . " ($this->misiteid,$this->miitemtime),
|
---|
| 476 | KEY `Memory_index_time_id` " . $btree . " ($this->miitemtime,$this->misiteid)
|
---|
| 477 | ) ENGINE = " . $engine . " DEFAULT CHARSET=utf8 COLLATE utf8_general_ci ";
|
---|
| 478 | $result = $wpdb->query($sql);
|
---|
| 479 |
|
---|
| 480 | if($try_memtable_creation){
|
---|
| 481 | $this->create(false);
|
---|
| 482 | }
|
---|
| 483 |
|
---|
| 484 | }
|
---|
| 485 |
|
---|
| 486 | function prefill_table($tablename){
|
---|
| 487 | global $wpdb;
|
---|
| 488 | if($tablename == $this->sitetable){
|
---|
| 489 | $feed_url=mysql_real_escape_string(get_pbadefaultsite('feed_url'));
|
---|
| 490 | $site_name=mysql_real_escape_string(get_pbadefaultsite('site_name'));
|
---|
| 491 | $description=mysql_real_escape_string(get_pbadefaultsite('description'));
|
---|
| 492 | $site_license=mysql_real_escape_string(get_pbadefaultsite('site_license'));
|
---|
| 493 | $site_url=mysql_real_escape_string(get_pbadefaultsite('site_url'));
|
---|
| 494 | $sql="INSERT INTO $this->sitetable (
|
---|
| 495 | feed_url , site_name , description , site_license , site_url
|
---|
| 496 | ) VALUES (
|
---|
| 497 | '".$feed_url."',
|
---|
| 498 | '".$site_name."', '".$description."',
|
---|
| 499 | '".$site_license."' , '".$site_url."'
|
---|
| 500 | )";
|
---|
| 501 | }
|
---|
| 502 | if($tablename == $this->listtable){
|
---|
| 503 | $sql="INSERT INTO $this->listtable (identifier, name, url_list, list_all)
|
---|
| 504 | VALUES (1, 'Full Text Ticker', '1', 'Y')";
|
---|
| 505 | }
|
---|
| 506 | if($tablename == $this->pbaoutputtable){
|
---|
| 507 | $outputname=mysql_real_escape_string(get_pbadefaultparameter('outputname'));
|
---|
| 508 | $template_ticker=mysql_real_escape_string(get_pbadefaultparameter('template_ticker'));
|
---|
| 509 | $template_sidebarwidget=mysql_real_escape_string(get_pbadefaultparameter('template_sidebarwidget'));
|
---|
| 510 |
|
---|
| 511 | $channel_language=mysql_real_escape_string(get_pbadefaultparameter('channel_language'));
|
---|
| 512 | $channel_copyright=mysql_real_escape_string(get_pbadefaultparameter('channel_copyright'));
|
---|
| 513 |
|
---|
| 514 | $template_cache=mysql_real_escape_string(get_pbadefaultparameter('template_cache'));
|
---|
| 515 | $template_kalender=mysql_real_escape_string(get_pbadefaultparameter('template_kalender'));
|
---|
| 516 | $kalendermonthslist=mysql_real_escape_string(get_pbadefaultparameter('kalendermonthslist'));
|
---|
| 517 | $kalender_last=mysql_real_escape_string(get_pbadefaultparameter('kalender_last'));
|
---|
| 518 | $kalender_next=mysql_real_escape_string(get_pbadefaultparameter('kalender_next'));
|
---|
| 519 | $kalenderboxdaysofweeklist=mysql_real_escape_string(get_pbadefaultparameter('kalenderboxdaysofweeklist'));
|
---|
| 520 |
|
---|
| 521 | $sql="INSERT INTO $this->pbaoutputtable
|
---|
| 522 | (name, page2hookin, default_list, items_per_site, type, template_ticker,
|
---|
| 523 | append_extra_link, append_cache_link, add_social_bookmarks, template_sidebarwidget,
|
---|
| 524 | max_words_in_synposis, max_word_length, item_date_format, allowable_xhtml_tags, enable_caching,
|
---|
| 525 | template_cache, cache_view_page, channel_title, channel_link,
|
---|
| 526 | channel_description, channel_language, channel_copyright, template_kalender, archive_date_format,
|
---|
| 527 | kalendermonthslist,
|
---|
| 528 | kalenderboxtablecaption, kalender_last, kalender_next,
|
---|
| 529 | kalenderboxdaysofweeklist, superparameter)
|
---|
| 530 | VALUES
|
---|
| 531 | ('".$outputname."', 0, 1, 25, 'countrecentitem', '".$template_ticker."',
|
---|
| 532 | 'Y', 'Y', 'Y', '".$template_sidebarwidget."',
|
---|
| 533 | 100, 40, 'd.m.Y H:i\\\h', '', 'Y',
|
---|
| 534 | '".$template_cache."', '', 'Parteibuch Aggregator Feed', '',
|
---|
| 535 | 'Parteibuch Aggregator Feedmix', '".$channel_language."', '".$channel_copyright."', '".$template_kalender."', 'Y-m-d',
|
---|
| 536 | '".$kalendermonthslist."',
|
---|
| 537 | ' style="text-align: center;" id="kalendertable"',
|
---|
| 538 | '".$kalender_last."', '".$kalender_next."', '".$kalenderboxdaysofweeklist."', '')
|
---|
| 539 | ";
|
---|
| 540 | }
|
---|
| 541 | if($tablename == $this->optionstable){
|
---|
| 542 | $sql="INSERT INTO $this->optionstable ( name , type , value , notice )
|
---|
| 543 | VALUES
|
---|
| 544 | ( 'enable_caching', 'string', 'auto', 'shall be one of Y, N, auto, if not set, default shall be auto' )
|
---|
| 545 | , ( 'enable_rewriting', 'string', 'Y', 'shall be one of Y, N, if not set, default shall be Y' )
|
---|
| 546 | , ( 'full_cache_time', 'int', '60', '0 shall disable this cache' )
|
---|
| 547 | , ( 'kalenderquery_cache_time', 'int', '3600', '0 shall disable this cache' )
|
---|
| 548 | , ( 'feedlistquery_cache_time', 'int', '7200', '0 shall disable this cache' )
|
---|
| 549 | , ( 'enable_memtables', 'string', 'auto', 'shall be one of Y, N, auto, if not set, default shall be auto' )
|
---|
| 550 | , ( 'enable_loaddetection', 'string', 'auto', 'shall be one of Y, N, auto, if not set, default shall be auto' )
|
---|
| 551 | , ( 'highloadthreshold', 'int', '10', '0 may disable housekeeping jobs' )
|
---|
| 552 | , ( 'update_oldest_jobdefinition', 'jobdefinition', 'startpoint=a10,\r\nmaxexecutiontime=100', 'shall be started not earlier than 10 seconds after the last time it finished')
|
---|
| 553 | , ( 'housekeeping_cache_jobdefinition', 'jobdefinition', 'startpoint=d00-03:00h,\r\nmaxexecutiontime=3600', 'Shall be executed each day one time the next time after a page was called after 3 oclock in the morning')
|
---|
| 554 | , ( 'process_updates_jobdefinition', 'jobdefinition', 'startpoint=a3600,\r\nmaxexecutiontime=100', 'shall be processed one hour - 3600 seconds - after this job ended the last time')
|
---|
| 555 | , ( 'process_new_jobdefinition', 'jobdefinition', 'startpoint=a3600, \r\nmaxexecutiontime=500', 'new entries to the search index shall be processed 3600 seconds after it run the last time, but only, if there were no unprocessed new records left')
|
---|
| 556 | , ( 'process_deletes_jobdefinition', 'jobdefinition', 'startpoint=a3600,\r\nmaxexecutiontime=100', 'deletions from the search index shall be done monthly at the first page call after day 3 04:17h.')
|
---|
| 557 | ";
|
---|
| 558 | }
|
---|
| 559 | $result = $wpdb->query($sql);
|
---|
| 560 | return mysql_insert_id();
|
---|
| 561 | } //end function
|
---|
| 562 |
|
---|
| 563 | function get_mysql_variables($varname=""){
|
---|
| 564 | global $wpdb;
|
---|
| 565 | $sql="SHOW VARIABLES ";
|
---|
| 566 | if(is_string($varname) && $varname != '') $sql .= " LIKE '".$varname."'";
|
---|
| 567 | $result = $wpdb->get_row($sql);
|
---|
| 568 | if(isset($result->Value)){
|
---|
| 569 | return $result->Value;
|
---|
| 570 | } else {
|
---|
| 571 | return "";
|
---|
| 572 | }
|
---|
| 573 | }
|
---|
| 574 |
|
---|
| 575 | function get_mysql_tablestatus($tablename=""){
|
---|
| 576 | global $wpdb;
|
---|
| 577 | $sql="SHOW TABLE STATUS ";
|
---|
| 578 | if(is_string($tablename) && $tablename != '') $sql .= " LIKE '".$tablename."'";
|
---|
| 579 | $result = $wpdb->get_row($sql);
|
---|
| 580 | if($result){
|
---|
| 581 | return $result;
|
---|
| 582 | } else {
|
---|
| 583 | return false;
|
---|
| 584 | }
|
---|
| 585 | }
|
---|
| 586 |
|
---|
| 587 |
|
---|
| 588 | function prefill_memtables(){
|
---|
| 589 | global $wpdb;
|
---|
| 590 |
|
---|
| 591 | // echo "<br>Filling memtables ... ";
|
---|
| 592 |
|
---|
| 593 | //set memory status value for all tables to start
|
---|
| 594 | $sql= "REPLACE INTO $this->mtablestatus (
|
---|
| 595 | $this->memtable , $this->mdatetime , $this->mstatus, $this->mnotice
|
---|
| 596 | ) VALUES ( 'sites', NOW( ) , 'start' , 'prefilling'),
|
---|
| 597 | ( 'items', NOW( ) , 'start' , 'prefilling')";
|
---|
| 598 | $result = $wpdb->query($sql);
|
---|
| 599 |
|
---|
| 600 | //fill site memory table
|
---|
| 601 | $sql= "TRUNCATE TABLE $this->msitetable ";
|
---|
| 602 | $result = $wpdb->query($sql);
|
---|
| 603 |
|
---|
| 604 | $sql= "INSERT INTO $this->msitetable
|
---|
| 605 | SELECT * FROM $this->sitetable";
|
---|
| 606 | $result = $wpdb->query($sql);
|
---|
| 607 |
|
---|
| 608 | //fill item index memory table
|
---|
| 609 | $sql= "TRUNCATE TABLE $this->mitemtable ";
|
---|
| 610 | $result = $wpdb->query($sql);
|
---|
| 611 |
|
---|
| 612 | $sql= "INSERT INTO $this->mitemtable
|
---|
| 613 | SELECT itemtable.$this->iidentifier as $this->miid, msitetable.$this->midentifier as $this->misiteid,
|
---|
| 614 | itemtable.$this->iitemtime as $this->miitemtime, itemtable.$this->iitemdate as $this->miitemdate
|
---|
| 615 | FROM $this->itemtable itemtable, $this->msitetable msitetable
|
---|
| 616 | WHERE itemtable.$this->ifeedurl = msitetable.$this->mfeedurl";
|
---|
| 617 | $result = $wpdb->query($sql);
|
---|
| 618 |
|
---|
| 619 | //prefill jobtable
|
---|
| 620 | $this->jobaction();
|
---|
| 621 |
|
---|
| 622 | //if all OK, set mem table status to OK
|
---|
| 623 | $sql= "REPLACE INTO $this->mtablestatus (
|
---|
| 624 | $this->memtable , $this->mdatetime , $this->mstatus, $this->mnotice
|
---|
| 625 | ) VALUES ( 'sites', NOW( ) , 'ok', 'prefilled' ),
|
---|
| 626 | ( 'items', NOW( ) , 'ok' , 'prefilled')";
|
---|
| 627 | $result = $wpdb->query($sql);
|
---|
| 628 |
|
---|
| 629 | // echo "Memtables filled";
|
---|
| 630 |
|
---|
| 631 | return true;
|
---|
| 632 | }
|
---|
| 633 |
|
---|
| 634 | function mark_entry_as_old_in_statustable($name){
|
---|
| 635 | //this will make some memtablerows to be recreated at next pagecall
|
---|
| 636 | global $wpdb;
|
---|
| 637 | $sql= "UPDATE $this->mtablestatus SET $this->mdatetime = FROM_UNIXTIME( '0' )
|
---|
| 638 | WHERE $this->memtable = '".$name."'";
|
---|
| 639 | $result = $wpdb->query($sql);
|
---|
| 640 | return $result;
|
---|
| 641 | }
|
---|
| 642 |
|
---|
| 643 |
|
---|
| 644 | //Check the status of the memory tables
|
---|
| 645 | //possible returns
|
---|
| 646 | // 0: not filled - need to be filled
|
---|
| 647 | // 1: ok - filled and fine
|
---|
| 648 | // 2: start - filling in progress going on - please wait
|
---|
| 649 | // 3: start - filling in progress hanging already too long - need to be refilled
|
---|
| 650 |
|
---|
| 651 |
|
---|
| 652 | function get_memtable_status(&$status)
|
---|
| 653 | {
|
---|
| 654 | global $wpdb;
|
---|
| 655 | $maxstartingtime="7200";
|
---|
| 656 | $memtablestatus=0;
|
---|
| 657 | $totalstatus=0;
|
---|
| 658 | $keycounter=0;
|
---|
| 659 | $status=array();
|
---|
| 660 | $status['memtablestatus']=0;
|
---|
| 661 |
|
---|
| 662 |
|
---|
| 663 | $sql= "SELECT $this->memtable, UNIX_TIMESTAMP() - UNIX_TIMESTAMP($this->mdatetime) as age, $this->mstatus, $this->mnotice FROM $this->mtablestatus";
|
---|
| 664 | $result=false;
|
---|
| 665 | $result = $wpdb->get_results($sql);
|
---|
| 666 | // echo "<br>Mem table status: ";
|
---|
| 667 | if(!$result) {
|
---|
| 668 | // echo "Mem tables not filled!";
|
---|
| 669 | } else {
|
---|
| 670 | $jobcounter=0;
|
---|
| 671 | $maxagejob['age']=0;
|
---|
| 672 | foreach($result as $key => $r)
|
---|
| 673 | {
|
---|
| 674 | $keycounter++;
|
---|
| 675 | if($r->{$this->mstatus}=="ok" || $r->{$this->mstatus} == "unusable"
|
---|
| 676 | || $r->{$this->mstatus} == "disabled" || $r->{$this->mstatus} == "value"
|
---|
| 677 | || substr($r->{$this->mstatus},0,3) == "job"
|
---|
| 678 | ) $totalstatus++;
|
---|
| 679 | //$totalstatus.=$r->{$this->mstatus};
|
---|
| 680 | if($r->{$this->mstatus}=="start"){
|
---|
| 681 | $memtablestatus=2;
|
---|
| 682 | if($r->age > $maxstartingtime) $memtablestatus=3;
|
---|
| 683 | }
|
---|
| 684 | //copy the detailed status into the overloaded array
|
---|
| 685 | $status[$r->{$this->memtable}]['status'] = $r->{$this->mstatus};
|
---|
| 686 | $status[$r->{$this->memtable}]['age'] = $r->age;
|
---|
| 687 | $status[$r->{$this->memtable}]['notice'] = $r->{$this->mnotice};
|
---|
| 688 | if(substr($r->{$this->mstatus}, 0,3) == "job") $jobcounter++;
|
---|
| 689 | if(substr($r->{$this->mstatus}, 0,3) == "job" && $r->age > 0) {
|
---|
| 690 | //we shall look if we shall do something with a joba job should be run or running
|
---|
| 691 | if(substr($r->{$this->mstatus}, 3) == "running" ){
|
---|
| 692 | $status['job2kill']=$r->{$this->memtable};
|
---|
| 693 | }elseif(substr($r->{$this->mstatus}, 3) == "tostart"){
|
---|
| 694 | $status['job2restart']=$r->{$this->memtable};
|
---|
| 695 | }elseif(substr($r->{$this->mstatus}, 3) == "waiting"){
|
---|
| 696 | if($r->age > $maxagejob['age']){
|
---|
| 697 | $maxagejob['name']=$r->{$this->memtable};
|
---|
| 698 | $maxagejob['age']=$r->age;
|
---|
| 699 | $maxagejob['status']= $r->{$this->mstatus};
|
---|
| 700 | }
|
---|
| 701 | }
|
---|
| 702 | }
|
---|
| 703 | }
|
---|
| 704 | }
|
---|
| 705 |
|
---|
| 706 | //now let's find out a mechanism to bring the whole status into one value
|
---|
| 707 | if ($totalstatus > 0 && $keycounter == $totalstatus ) {
|
---|
| 708 | $memtablestatus = 1;
|
---|
| 709 | $status['memtablestatus']=1;
|
---|
| 710 |
|
---|
| 711 | //not really elegant to have the number of available jobs here hardcoded, but who cares
|
---|
| 712 | if($jobcounter == 5){
|
---|
| 713 | if(isset($status['job2kill'])){
|
---|
| 714 | //job is running too long - kill this job - this fallback should just be hit in case of a job crash
|
---|
| 715 | $this->change_jobstatus($status['job2kill'], 'waiting');
|
---|
| 716 | }elseif(isset($status['job2restart'])){
|
---|
| 717 | $this->change_jobstatus($status['job2restart'], 'tostart');
|
---|
| 718 | $status['job2start']['name']=$status['job2restart'];
|
---|
| 719 | $status['job2start']['time']=time();
|
---|
| 720 | }elseif(isset($maxagejob['name'])){
|
---|
| 721 | //announce a new job
|
---|
| 722 | $this->change_jobstatus($maxagejob['name'], 'tostart');
|
---|
| 723 | $status['job2start']['name']=$maxagejob['name'];
|
---|
| 724 | $status['job2start']['time']=time();
|
---|
| 725 | }
|
---|
| 726 | }else{
|
---|
| 727 | $this->jobaction();
|
---|
| 728 | }
|
---|
| 729 | }
|
---|
| 730 |
|
---|
| 731 | $this->check_load($status);
|
---|
| 732 |
|
---|
| 733 | if(!isset($status['pbacache']) || $status['pbacache']['age'] > 10800) {
|
---|
| 734 | //check cache
|
---|
| 735 | $this->check_cache($status);
|
---|
| 736 | }
|
---|
| 737 |
|
---|
| 738 | //echo "Wea re here: status_pbacache is " . $status['pbacache'];
|
---|
| 739 | if(isset($status['pbacache']['status']) && $status['pbacache']['status'] == 'ok') {
|
---|
| 740 | if(!isset($status['full_cache_time']) || !isset($status['kalenderquery_cache_time']) || !isset($status['feedlistquery_cache_time'])){
|
---|
| 741 | $this->check_options($status);
|
---|
| 742 | }
|
---|
| 743 | }
|
---|
| 744 |
|
---|
| 745 | if(!isset($status['rewriting']) || $status['rewriting']['age'] > 86400) {
|
---|
| 746 | //check rewriting
|
---|
| 747 | $this->check_rewriting($status);
|
---|
| 748 | }
|
---|
| 749 |
|
---|
| 750 | //print_r($status);
|
---|
| 751 |
|
---|
| 752 | return $memtablestatus;
|
---|
| 753 | }
|
---|
| 754 |
|
---|
| 755 | function check_rewriting(&$status){
|
---|
| 756 | global $wpdb;
|
---|
| 757 | $pbadefault=$this->pbaoption('enable_rewriting');
|
---|
| 758 | if($pbadefault != 'Y') {
|
---|
| 759 | $status['rewriting']['status'] = 'disabled';
|
---|
| 760 | $status['rewriting']['notice'] = 'N00003: Rewriting option disabled';
|
---|
| 761 | $return = false;
|
---|
| 762 | }elseif($pbadefault == 'Y'){
|
---|
| 763 | $rewrite_array=get_option('rewrite_rules');
|
---|
| 764 | if(is_array($rewrite_array)){
|
---|
| 765 | $rulematch=false;
|
---|
| 766 | foreach($rewrite_array as $key => $value){
|
---|
| 767 | if(strstr($key,'ticker-feed')) $rulematch=true;
|
---|
| 768 | }
|
---|
| 769 | if($rulematch){
|
---|
| 770 | $status['rewriting']['status'] = 'ok';
|
---|
| 771 | $status['rewriting']['notice'] = 'N00004: Permalinks in effect';
|
---|
| 772 | $return = true;
|
---|
| 773 | }
|
---|
| 774 | }
|
---|
| 775 | if(!isset($return)){
|
---|
| 776 | $status['rewriting']['status'] = 'unusable';
|
---|
| 777 | $status['rewriting']['notice'] = 'W00002: Wordpress has not enabled rewrite';
|
---|
| 778 | $return = false;
|
---|
| 779 | }
|
---|
| 780 | }
|
---|
| 781 | $sql= "REPLACE INTO $this->mtablestatus (
|
---|
| 782 | $this->memtable , $this->mdatetime , $this->mstatus, $this->mnotice
|
---|
| 783 | ) VALUES ( 'rewriting', NOW( ) , '".$status['rewriting']['status']."' , '".$status['rewriting']['notice']."')";
|
---|
| 784 | $result = $wpdb->query($sql);
|
---|
| 785 | return $return;
|
---|
| 786 | }
|
---|
| 787 |
|
---|
| 788 | function check_options(&$status){
|
---|
| 789 | global $wpdb;
|
---|
| 790 | //initialisation
|
---|
| 791 | $newstatus=array();
|
---|
| 792 | $result = $this->get_all_options();
|
---|
| 793 |
|
---|
| 794 | if(!$result){
|
---|
| 795 | return false;
|
---|
| 796 | } else {
|
---|
| 797 | foreach($result as $key => $r){
|
---|
| 798 | if($r->name == 'full_cache_time') $newstatus['full_cache_time']=array('status' => 'value', 'notice' => $r->value);
|
---|
| 799 | if($r->name == 'kalenderquery_cache_time') $newstatus['kalenderquery_cache_time']=array('status' => 'value', 'notice' => $r->value);
|
---|
| 800 | if($r->name == 'feedlistquery_cache_time') $newstatus['feedlistquery_cache_time']=array('status' => 'value', 'notice' => $r->value);
|
---|
| 801 | if($r->name == 'highloadthreshold') $newstatus['highloadthreshold']=array('status' => 'value', 'notice' => $r->value);
|
---|
| 802 | if($r->name == 'enable_loaddetection') $newstatus['loaddetection']=array('status' => 'value', 'notice' => $r->value);
|
---|
| 803 | }
|
---|
| 804 |
|
---|
| 805 | if(count($newstatus)>0){
|
---|
| 806 | $sql= "REPLACE INTO $this->mtablestatus (
|
---|
| 807 | $this->memtable , $this->mdatetime , $this->mstatus, $this->mnotice
|
---|
| 808 | ) VALUES ";
|
---|
| 809 |
|
---|
| 810 | foreach($newstatus as $fieldname => $values){
|
---|
| 811 | $sql .= "\n( '".$fieldname."', NOW( ) , '".$values['status']."' , '".$values['notice']."'), ";
|
---|
| 812 | }
|
---|
| 813 | $sql = preg_replace('/, $/','', $sql);
|
---|
| 814 | $result = $wpdb->query($sql);
|
---|
| 815 | $status=array_merge($status, $newstatus); //advertising
|
---|
| 816 | return $result;
|
---|
| 817 | }
|
---|
| 818 | }
|
---|
| 819 | return false;
|
---|
| 820 | }
|
---|
| 821 |
|
---|
| 822 | function pba_loaddetection(){
|
---|
| 823 | if(function_exists('sys_getloadavg')) {
|
---|
| 824 | $load=sys_getloadavg();
|
---|
| 825 | $load[1]=$load[0];
|
---|
| 826 | }elseif(ini_get('safe_mode')){
|
---|
| 827 | if(ini_get('safe_mode_exec_dir') == ""){
|
---|
| 828 | $serverload = "0";
|
---|
| 829 | } else {
|
---|
| 830 | preg_match("/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/",@exec(ini_get('safe_mode_exec_dir') . 'uptime_wrapper.sh'),$load);
|
---|
| 831 | }
|
---|
| 832 | }else{
|
---|
| 833 | //no safe mode, so directly call system command
|
---|
| 834 | preg_match("/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/",@exec('uptime'),$load);
|
---|
| 835 | if(!isset($load[1])) preg_match("/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/",@exec(dirname(__FILE__) . '/wrapper/uptime_wrapper.sh'),$load);
|
---|
| 836 | }
|
---|
| 837 | if(!isset($load[1])) {
|
---|
| 838 | $serverload = 0;
|
---|
| 839 | }else{
|
---|
| 840 | $serverload = abs($load[1]);
|
---|
| 841 | }
|
---|
| 842 | return $serverload;
|
---|
| 843 | }
|
---|
| 844 |
|
---|
| 845 | function check_load(&$status){
|
---|
| 846 | global $wpdb;
|
---|
| 847 | $detectedload=0;
|
---|
| 848 | //is load detection enabled?
|
---|
| 849 |
|
---|
| 850 | if(isset($status['loaddetection']['notice'])
|
---|
| 851 | && isset($status['pbaload']['notice'])
|
---|
| 852 | && isset($status['pbaload']['age'])
|
---|
| 853 | ){
|
---|
| 854 | //option disabled and load set to zero, nothing to do here
|
---|
| 855 | if($status['loaddetection']['notice'] == 'N' && $status['pbaload']['notice'] == '0') return true;
|
---|
| 856 |
|
---|
| 857 | //call uptime just every three seconds
|
---|
| 858 | if($status['loaddetection']['notice'] == 'Y' && $status['pbaload']['age'] < 3) return true;
|
---|
| 859 |
|
---|
| 860 | //retry once per hour
|
---|
| 861 | if($status['loaddetection']['notice'] == 'retry' && $status['pbaload']['age'] < 3600) return true;
|
---|
| 862 |
|
---|
| 863 | if($status['loaddetection']['notice'] == 'Y'
|
---|
| 864 | || $status['loaddetection']['notice'] == 'auto'
|
---|
| 865 | || $status['loaddetection']['notice'] == 'retry'
|
---|
| 866 | ){
|
---|
| 867 | $detectedload=$this->pba_loaddetection();
|
---|
| 868 | if($status['loaddetection']['notice'] == 'auto' || $status['loaddetection']['notice'] == 'retry'){
|
---|
| 869 | $newstatus['loaddetection']['status']='value';
|
---|
| 870 | if($detectedload > 0){
|
---|
| 871 | $newstatus['loaddetection']['notice']='Y';
|
---|
| 872 | }else{
|
---|
| 873 | $newstatus['loaddetection']['notice']='retry';
|
---|
| 874 | }
|
---|
| 875 | $sql= "REPLACE INTO $this->mtablestatus (
|
---|
| 876 | $this->memtable , $this->mdatetime , $this->mstatus, $this->mnotice
|
---|
| 877 | ) VALUES ( 'loaddetection', NOW( ) , '".$newstatus['loaddetection']['status']."' , '".$newstatus['loaddetection']['notice']."')";
|
---|
| 878 | $result = $wpdb->query($sql);
|
---|
| 879 | }
|
---|
| 880 | }
|
---|
| 881 | } //end if isset status load detection
|
---|
| 882 | $newstatus['pbaload']=array('status' => 'value', 'notice' => abs($detectedload));
|
---|
| 883 | $sql= "REPLACE INTO $this->mtablestatus (
|
---|
| 884 | $this->memtable , $this->mdatetime , $this->mstatus, $this->mnotice
|
---|
| 885 | ) VALUES ( 'pbaload', NOW( ) , '".$newstatus['pbaload']['status']."' , '".$newstatus['pbaload']['notice']."')";
|
---|
| 886 | $result = $wpdb->query($sql);
|
---|
| 887 | $status=array_merge($status, $newstatus); //advertising
|
---|
| 888 | return $result;
|
---|
| 889 | }
|
---|
| 890 |
|
---|
| 891 | function check_cache(&$status){
|
---|
| 892 | global $wpdb;
|
---|
| 893 | //run on class construction, PBALIB not yet loaded here!!!
|
---|
| 894 | $cache_status=true;
|
---|
| 895 | //$cache_path=dirname(__FILE__)."/pbacache/";
|
---|
| 896 | $cache_path=PBA_CACHE_PATH;
|
---|
| 897 | $cache_file_handle = @fopen($cache_path."cachetest__t", 'w+');
|
---|
| 898 | $content=rand() . 'test';
|
---|
| 899 | if(!@fwrite($cache_file_handle, $content)) $cache_status=false;
|
---|
| 900 | @fclose($cache_file_handle);
|
---|
| 901 | if(!$get_cache=@file_get_contents($cache_path."cachetest__t")) $cache_status=false;
|
---|
| 902 | if(!$get_cache == $content) $cache_status=false;
|
---|
| 903 | //echo "cache_status " . $cache_status;
|
---|
| 904 | //exit;
|
---|
| 905 | @unlink($cache_path."cachetest__t");
|
---|
| 906 | $pbadefault=$this->pbaoption('enable_caching');
|
---|
| 907 | if($cache_status==false) {
|
---|
| 908 | $status['pbacache']['status'] = 'unusable';
|
---|
| 909 | $status['pbacache']['notice'] = 'W00001: Cachepath not writeable';
|
---|
| 910 | $return = false;
|
---|
| 911 | }elseif($pbadefault != 'Y' && $pbadefault != 'auto'){
|
---|
| 912 | $status['pbacache']['status'] = 'disabled';
|
---|
| 913 | $status['pbacache']['notice'] = 'N00005: Cachepath is writable';
|
---|
| 914 | $return = true;
|
---|
| 915 | }else{
|
---|
| 916 | $status['pbacache']['status'] = 'ok';
|
---|
| 917 | $status['pbacache']['notice'] = 'N00002: Checked';
|
---|
| 918 | $return = true;
|
---|
| 919 | }
|
---|
| 920 |
|
---|
| 921 | $sql= "REPLACE INTO $this->mtablestatus (
|
---|
| 922 | $this->memtable , $this->mdatetime , $this->mstatus, $this->mnotice
|
---|
| 923 | ) VALUES ( 'pbacache', NOW( ) , '".$status['pbacache']['status']."' , '".$status['pbacache']['notice']."')";
|
---|
| 924 | $result = $wpdb->query($sql);
|
---|
| 925 | return $return;
|
---|
| 926 | }
|
---|
| 927 |
|
---|
| 928 | /* --- insert --- */
|
---|
| 929 | function recordError($url, $text)
|
---|
| 930 | {
|
---|
| 931 | global $wpdb;
|
---|
| 932 |
|
---|
| 933 | if(!$url) return;
|
---|
| 934 |
|
---|
| 935 | // some SQL insertion protection using HTML entities
|
---|
| 936 | $text = preg_replace("/'/", ''', $text);
|
---|
| 937 | $text = preg_replace('/"/', '"', $text);
|
---|
| 938 |
|
---|
| 939 | if(!$text) $text = 'Unknown';
|
---|
| 940 |
|
---|
| 941 | $sql = "INSERT INTO $this->errortable ($this->efeedurl, $this->etime, $this->etext) ".
|
---|
| 942 | "VALUES ('$url', '$this->now', '$text')";
|
---|
| 943 | $result = $wpdb->query($sql);
|
---|
| 944 | }
|
---|
| 945 |
|
---|
| 946 | function update_feedurl($feed_id, $pba_change_feed_to) {
|
---|
| 947 | global $wpdb;
|
---|
| 948 | //function will return false, if there shall no update of feed url in site tables made
|
---|
| 949 | //check input values
|
---|
| 950 | if($feed_id != abs(intval($feed_id)) || $feed_id == 0) return false;
|
---|
| 951 | if(preg_match('/[\'"]/',$pba_change_feed_to)) return false;
|
---|
| 952 |
|
---|
| 953 | //return false if the feed url already exists, logic to merge feeds is not implemented
|
---|
| 954 | $sql="SELECT count(*) + 1 as numberoffeeds from $this->msitetable WHERE $this->mfeedurl = '".$pba_change_feed_to."'";
|
---|
| 955 | if( $wpdb->get_var($sql) != 1) return false;
|
---|
| 956 | //OK, so now get the feed url to update
|
---|
| 957 | $sql="SELECT $this->mfeedurl from $this->msitetable WHERE $this->midentifier = '".$feed_id."'";
|
---|
| 958 | $oldfeedurl=$wpdb->get_var($sql);
|
---|
| 959 | if(!$oldfeedurl) return false;
|
---|
| 960 | $sql="UPDATE $this->itemtable set item_feed_url = '".$pba_change_feed_to."'
|
---|
| 961 | WHERE item_feed_url = '".$oldfeedurl."'";
|
---|
| 962 | $result = $wpdb->query($sql);
|
---|
| 963 | if($result === false) return false;
|
---|
| 964 | return true;
|
---|
| 965 | }
|
---|
| 966 |
|
---|
| 967 | function createpbaoutput($as_copy_from=false)
|
---|
| 968 | {
|
---|
| 969 | /* createoutput() -- inserts an empty output format into the output table
|
---|
| 970 | or copies one with ID as_copy from false*/
|
---|
| 971 |
|
---|
| 972 | global $wpdb;
|
---|
| 973 |
|
---|
| 974 | if($as_copy_from===false){
|
---|
| 975 | return $this->prefill_table($this->pbaoutputtable);
|
---|
| 976 | } else {
|
---|
| 977 | $sql = "SELECT * FROM $this->pbaoutputtable WHERE $this->pbaoidentifier = '$as_copy_from'";
|
---|
| 978 | $row_to_copy = $wpdb->get_row($sql);
|
---|
| 979 | if($row_to_copy){
|
---|
| 980 | $fieldnames = $this->pbaoname . ", " . $this->pbaopage2hookin;
|
---|
| 981 | $values = "'Copy of " . $row_to_copy->{$this->pbaoname} . "', 0";
|
---|
| 982 | foreach($row_to_copy as $fieldname => $fieldvalue){
|
---|
| 983 | if($fieldname != $this->pbaoidentifier
|
---|
| 984 | && $fieldname != $this->pbaoname
|
---|
| 985 | && $fieldname != $this->pbaopage2hookin
|
---|
| 986 | ){
|
---|
| 987 | $fieldnames .= ", " . $fieldname;
|
---|
| 988 | $fieldvalue = mysql_real_escape_string($fieldvalue);
|
---|
| 989 | $values .= ", '" . $fieldvalue . "'";
|
---|
| 990 | }
|
---|
| 991 | }
|
---|
| 992 | $sql="INSERT INTO $this->pbaoutputtable ($fieldnames) ".
|
---|
| 993 | "VALUES ($values)";
|
---|
| 994 | $result = $wpdb->query($sql);
|
---|
| 995 | return mysql_insert_id();
|
---|
| 996 | }
|
---|
| 997 | }
|
---|
| 998 | }
|
---|
| 999 |
|
---|
| 1000 |
|
---|
| 1001 |
|
---|
| 1002 | function createlist($as_copy_from=false)
|
---|
| 1003 | {
|
---|
| 1004 | /* createlist() -- inserts an empty output format into the list table
|
---|
| 1005 | or copies one with ID as_copy from false*/
|
---|
| 1006 |
|
---|
| 1007 | global $wpdb;
|
---|
| 1008 |
|
---|
| 1009 | if($as_copy_from===false){
|
---|
| 1010 | $sql = "INSERT INTO $this->listtable ($this->lname) ".
|
---|
| 1011 | "VALUES ('New list: please give it a meaningful name')";
|
---|
| 1012 | $result = $wpdb->query($sql);
|
---|
| 1013 | return mysql_insert_id();
|
---|
| 1014 | } else {
|
---|
| 1015 | $sql = "SELECT * FROM $this->listtable WHERE $this->lidentifier = '$as_copy_from'";
|
---|
| 1016 | $row_to_copy = $wpdb->get_row($sql);
|
---|
| 1017 | if($row_to_copy){
|
---|
| 1018 | $fieldnames = "$this->lname";
|
---|
| 1019 | $values = "'Copy of " . $row_to_copy->{$this->lname} . "'";
|
---|
| 1020 | foreach($row_to_copy as $fieldname => $fieldvalue){
|
---|
| 1021 | if($fieldname != $this->lidentifier && $fieldname != $this->lname){
|
---|
| 1022 | $fieldnames .= ", " . $fieldname;
|
---|
| 1023 | $fieldvalue = mysql_real_escape_string($fieldvalue);
|
---|
| 1024 | $values .= ", '" . $fieldvalue . "'";
|
---|
| 1025 | }
|
---|
| 1026 | }
|
---|
| 1027 | $sql="INSERT INTO $this->listtable ($fieldnames) ".
|
---|
| 1028 | "VALUES ($values)";
|
---|
| 1029 | $result = $wpdb->query($sql);
|
---|
| 1030 | return mysql_insert_id();
|
---|
| 1031 | }
|
---|
| 1032 | }
|
---|
| 1033 | }
|
---|
| 1034 |
|
---|
| 1035 | function insert_in_sitetable($url, $polltime)
|
---|
| 1036 | {
|
---|
| 1037 | global $wpdb;
|
---|
| 1038 |
|
---|
| 1039 | $sql = "INSERT INTO $this->sitetable ".
|
---|
| 1040 | "($this->cfeedurl, $this->clastpolltime) ".
|
---|
| 1041 | "VALUES ('$url', '$polltime')";
|
---|
| 1042 | $result = $wpdb->query($sql);
|
---|
| 1043 |
|
---|
| 1044 | //mem table
|
---|
| 1045 | $sql = "INSERT INTO $this->msitetable ".
|
---|
| 1046 | "($this->mfeedurl, $this->mlastpolltime) ".
|
---|
| 1047 | "VALUES ('$url', '$polltime')";
|
---|
| 1048 | $result = $wpdb->query($sql);
|
---|
| 1049 |
|
---|
| 1050 | }
|
---|
| 1051 |
|
---|
| 1052 |
|
---|
| 1053 | /* --- insert or modify --- */
|
---|
| 1054 |
|
---|
| 1055 | function updateItem($url, $title, $counter, $text, $link, $ticks, $itemsitename="", $itemsiteurl="", $itemlicense="")
|
---|
| 1056 | {
|
---|
| 1057 | /* updateItem($url, $title, $counter, $text, $link, $ticks)
|
---|
| 1058 | * -- this function either inserts or updates the item into the itemtable
|
---|
| 1059 | * -- only enters the time ($ticks) into the database for an insert - we ignore $ticks for updates
|
---|
| 1060 | * -- returns false on update and true on insert
|
---|
| 1061 | */
|
---|
| 1062 |
|
---|
| 1063 | global $wpdb, $bdprss_search;
|
---|
| 1064 |
|
---|
| 1065 | $sql = "SELECT $this->iidentifier as id, $this->iitemsitename as sitename, $this->iitemname as itemname, $this->iitemtext as itemtext,
|
---|
| 1066 | md5(concat($this->iitemsitename, ' ', $this->iitemname, ' ', $this->iitemtext)) as md5
|
---|
| 1067 | FROM $this->itemtable ".
|
---|
| 1068 | "WHERE $this->ifeedurl='$url' AND $this->iitemurl='$link'";
|
---|
| 1069 | $hid = $wpdb->get_row($sql);
|
---|
| 1070 |
|
---|
| 1071 | $md5tocompare=md5($itemsitename . ' ' . $title . ' ' . $text);
|
---|
| 1072 | if($hid) $hidfromdb2compare = md5($hid->sitename . ' ' . $hid->itemname . ' ' . $hid->itemtext);
|
---|
| 1073 | $hidid=0;
|
---|
| 1074 | if($hid) $hidid = $hid->id;
|
---|
| 1075 |
|
---|
| 1076 | if($hidid > 0 && (!isset($this->bdprss_prevent_dupe_updates[$hidid]) || (isset($this->bdprss_prevent_dupe_updates[$hidid]) && $this->bdprss_prevent_dupe_updates[$hidid]."" !="Done")))
|
---|
| 1077 | {
|
---|
| 1078 | if($md5tocompare != $hid->md5 && $md5tocompare != $hidfromdb2compare && rand(1,10) > 0){
|
---|
| 1079 |
|
---|
| 1080 | $md5debug="MD5 Debug on Update: MD5 in DB: " . $hid->md5 .
|
---|
| 1081 | " md5compare: " . $md5tocompare .
|
---|
| 1082 | " md5direct: " . md5($itemsitename . ' ' . $title . ' ' . $text) .
|
---|
| 1083 | " mysql_real_escaped: " . md5(mysql_real_escape_string($itemsitename . ' ' . $title . ' ' . $text)) .
|
---|
| 1084 | " mysql_stripped_escaped: " . md5(mysql_real_escape_string(stripslashes($itemsitename . ' ' . $title . ' ' . $text))) .
|
---|
| 1085 | " hidfromdb2compare: " . $hidfromdb2compare;
|
---|
| 1086 |
|
---|
| 1087 | $sql = "UPDATE $this->itemtable ".
|
---|
| 1088 | "SET $this->iitemupdate='".$this->now."', ".
|
---|
| 1089 | "$this->iitemtext='".mysql_real_escape_string($text)."', ".
|
---|
| 1090 | "$this->iitemname='".mysql_real_escape_string(htmlentities($title))."', ".
|
---|
| 1091 | "$this->iitemsitename='".mysql_real_escape_string($itemsitename)."', ".
|
---|
| 1092 | "$this->iitemsiteurl='".mysql_real_escape_string($itemsiteurl)."', ".
|
---|
| 1093 | "$this->iitemlicense='".mysql_real_escape_string($itemlicense)."' ".
|
---|
| 1094 | "WHERE $this->ifeedurl='".mysql_real_escape_string($url)."' " .
|
---|
| 1095 | "AND $this->iitemurl='".mysql_real_escape_string($link)."' ";
|
---|
| 1096 | $result = $wpdb->query($sql);
|
---|
| 1097 |
|
---|
| 1098 | if(class_exists('BDPRSS_SEARCH')){
|
---|
| 1099 | $result = $bdprss_search->markitem4update($hid->id, $md5tocompare);
|
---|
| 1100 | if(!$result) $this->recordError($url, "Updated ID: " . $hid->id . " result: " .$result. " md5debug: " . $md5debug);
|
---|
| 1101 | }
|
---|
| 1102 |
|
---|
| 1103 | }
|
---|
| 1104 | $this->bdprss_prevent_dupe_updates[$hid->id]="Done";
|
---|
| 1105 | return FALSE;
|
---|
| 1106 | }
|
---|
| 1107 |
|
---|
| 1108 | $dateStamp = date('Y-m-d', $ticks);
|
---|
| 1109 | //echo "<br />Title is: " . $title;
|
---|
| 1110 | $sql = "INSERT IGNORE INTO $this->itemtable ($this->ifeedurl, $this->iitemurl, $this->iitemname, ".
|
---|
| 1111 | "$this->iitemsitename, $this->iitemsiteurl, $this->iitemlicense, ".
|
---|
| 1112 | "$this->iitemtext, $this->iitemupdate, $this->iitemtime, $this->iitemdate)".
|
---|
| 1113 | " VALUES ('".mysql_real_escape_string($url)."',
|
---|
| 1114 | '".mysql_real_escape_string($link)."',
|
---|
| 1115 | '".mysql_real_escape_string($title)."',
|
---|
| 1116 | '".mysql_real_escape_string($itemsitename)."',
|
---|
| 1117 | '".mysql_real_escape_string($itemsiteurl)."',
|
---|
| 1118 | '".mysql_real_escape_string($itemlicense)."', ".
|
---|
| 1119 | "'".mysql_real_escape_string($text)."', '$this->now', '$ticks', '$dateStamp') ";
|
---|
| 1120 | $result = $wpdb->query($sql);
|
---|
| 1121 |
|
---|
| 1122 | //updating the memtable
|
---|
| 1123 | $inserted_row_id=mysql_insert_id();
|
---|
| 1124 | if ($inserted_row_id>0){
|
---|
| 1125 | //mem table preop - shall be replaced later by parameter
|
---|
| 1126 | $sql = "SELECT $this->midentifier FROM $this->msitetable ".
|
---|
| 1127 | "WHERE $this->mfeedurl='$url'";
|
---|
| 1128 | $site_id = $wpdb->get_var($sql);
|
---|
| 1129 |
|
---|
| 1130 | //mem table update
|
---|
| 1131 | $sql = "INSERT INTO $this->mitemtable
|
---|
| 1132 | ($this->miid, $this->misiteid, $this->miitemtime, $this->miitemdate)".
|
---|
| 1133 | " VALUES ('$inserted_row_id', '$site_id', '$ticks', '$dateStamp') ";
|
---|
| 1134 | $result = $wpdb->query($sql);
|
---|
| 1135 |
|
---|
| 1136 | } //inserted row id > 0
|
---|
| 1137 | $this->bdprss_prevent_dupe_updates[$inserted_row_id]="Done";
|
---|
| 1138 | return TRUE;
|
---|
| 1139 | }
|
---|
| 1140 |
|
---|
| 1141 | /* --- modify --- */
|
---|
| 1142 |
|
---|
| 1143 | function updateTable($tableName, &$valueArray, $identifier, $specialCase=FALSE)
|
---|
| 1144 | {
|
---|
| 1145 | global $wpdb;
|
---|
| 1146 |
|
---|
| 1147 | if(!isset($valueArray[$identifier]) || !$valueArray[$identifier])
|
---|
| 1148 | {
|
---|
| 1149 | $this->recordError('SNARK',
|
---|
| 1150 | "BDPRSS_DB::updateTable() missing identifier ($identifier)".
|
---|
| 1151 | "in valueArray for $tableName -- this should never happen");
|
---|
| 1152 | return FALSE;
|
---|
| 1153 | }
|
---|
| 1154 |
|
---|
| 1155 | if($specialCase && $tableName==$this->sitetable)
|
---|
| 1156 | {
|
---|
| 1157 | if(isset($valueArray['csitename'])) unset($valueArray['csitename']);
|
---|
| 1158 | if(isset($valueArray['csiteurl'])) unset($valueArray['csiteurl']);
|
---|
| 1159 | if(isset($valueArray['cdescription'])) unset($valueArray['cdescription']);
|
---|
| 1160 | /*new*/ if(isset($valueArray['csitelicense'])) unset($valueArray['csitelicense']);
|
---|
| 1161 | }
|
---|
| 1162 |
|
---|
| 1163 | $sql = "UPDATE $tableName SET ";
|
---|
| 1164 | foreach($valueArray as $key => $value)
|
---|
| 1165 | {
|
---|
| 1166 | if($key==$identifier) continue;
|
---|
| 1167 | $value = preg_replace('/"/', '"', $value);
|
---|
| 1168 | $value = preg_replace("/'/", ''', $value);
|
---|
| 1169 | $sql .= $this->{$key}."='$value', ";
|
---|
| 1170 | }
|
---|
| 1171 | //$sql = preg_replace('/^(.*), $/', '\\1', $sql);
|
---|
| 1172 | $sql = preg_replace('/, $/', '', $sql);
|
---|
| 1173 | $sql .= " WHERE ".$this->{$identifier}."='".$valueArray[$identifier]."' ";
|
---|
| 1174 | $result = $wpdb->query($sql);
|
---|
| 1175 | return $result;
|
---|
| 1176 | }
|
---|
| 1177 |
|
---|
| 1178 | function process_new(){
|
---|
| 1179 | //echo "we hit process_new";
|
---|
| 1180 | global $bdprss_search;
|
---|
| 1181 | $pba_search_config['addheap']=500;
|
---|
| 1182 | $pba_search_config['heapmode']='bulk';
|
---|
| 1183 | $pba_search_config['bdprss_getidmode']='notinstatus';
|
---|
| 1184 | $pba_search_config['bdprss_debug_list_id']=0;
|
---|
| 1185 | $pba_search_config['get_ids4heap2add_max_item_updatetimeage']=100000000;
|
---|
| 1186 | $pba_search_config['get_ids4heap2add_min_updatetimeage']=0;
|
---|
| 1187 |
|
---|
| 1188 | //syntax for calling the search index processing:
|
---|
| 1189 | // $bdprss_search->add_heap2search_index($pba_search_config['addheap'], $pba_search_config['heapmode'], false, $insertfromtemptable,
|
---|
| 1190 | // $bdprss_getidmode, $bdprss_debug_list_id,
|
---|
| 1191 | // $get_ids4heap2add_max_item_updatetimeage, $get_ids4heap2add_min_updatetimeage);
|
---|
| 1192 |
|
---|
| 1193 | $return = $bdprss_search->add_heap2search_index($pba_search_config['addheap'], $pba_search_config['heapmode'], false, true,
|
---|
| 1194 | $pba_search_config['bdprss_getidmode'], $pba_search_config['bdprss_debug_list_id'],
|
---|
| 1195 | $pba_search_config['get_ids4heap2add_max_item_updatetimeage'],
|
---|
| 1196 | $pba_search_config['get_ids4heap2add_min_updatetimeage']);
|
---|
| 1197 |
|
---|
| 1198 | return $return;
|
---|
| 1199 | }
|
---|
| 1200 |
|
---|
| 1201 | function process_updates(){
|
---|
| 1202 | //echo "we hit process_new";
|
---|
| 1203 | global $bdprss_search;
|
---|
| 1204 |
|
---|
| 1205 | $pba_search_config['addheap']=20;
|
---|
| 1206 | $pba_search_config['heapmode']='bulk';
|
---|
| 1207 | $pba_search_config['bdprss_getidmode']='processupdates';
|
---|
| 1208 | $pba_search_config['bdprss_debug_list_id']=0;
|
---|
| 1209 | $pba_search_config['get_ids4heap2add_max_item_updatetimeage']=100000000;
|
---|
| 1210 | $pba_search_config['get_ids4heap2add_min_updatetimeage']=1800;
|
---|
| 1211 |
|
---|
| 1212 | $return = $bdprss_search->add_heap2search_index($pba_search_config['addheap'], $pba_search_config['heapmode'], false, true,
|
---|
| 1213 | $pba_search_config['bdprss_getidmode'], $pba_search_config['bdprss_debug_list_id'],
|
---|
| 1214 | $pba_search_config['get_ids4heap2add_max_item_updatetimeage'],
|
---|
| 1215 | $pba_search_config['get_ids4heap2add_min_updatetimeage']);
|
---|
| 1216 | return $return;
|
---|
| 1217 | }
|
---|
| 1218 |
|
---|
| 1219 | function process_deletes(){
|
---|
| 1220 | //echo "we hit process_new";
|
---|
| 1221 | global $bdprss_search;
|
---|
| 1222 |
|
---|
| 1223 | $pba_search_config['addheap']=10;
|
---|
| 1224 | $pba_search_config['heapmode']='bulk';
|
---|
| 1225 | $pba_search_config['bdprss_getidmode']='processdeletes';
|
---|
| 1226 | $pba_search_config['bdprss_debug_list_id']=0;
|
---|
| 1227 | $pba_search_config['get_ids4heap2add_max_item_updatetimeage']=100000000;
|
---|
| 1228 | $pba_search_config['get_ids4heap2add_min_updatetimeage']=1800;
|
---|
| 1229 |
|
---|
| 1230 | $return = $bdprss_search->add_heap2search_index($pba_search_config['addheap'], $pba_search_config['heapmode'], false, true,
|
---|
| 1231 | $pba_search_config['bdprss_getidmode'], $pba_search_config['bdprss_debug_list_id'],
|
---|
| 1232 | $pba_search_config['get_ids4heap2add_max_item_updatetimeage'],
|
---|
| 1233 | $pba_search_config['get_ids4heap2add_min_updatetimeage']);
|
---|
| 1234 | return $return;
|
---|
| 1235 | }
|
---|
| 1236 |
|
---|
| 1237 |
|
---|
| 1238 | function housekeeping_cache(){
|
---|
| 1239 | $dummy1="";
|
---|
| 1240 | $dummy2="";
|
---|
| 1241 | $cachedeletecounter=PBALIB::pba_cache($dummy1, $dummy2, 'housekeeping', '', 'mixed', 86400, 'OK');
|
---|
| 1242 | return $cachedeletecounter;
|
---|
| 1243 | }
|
---|
| 1244 |
|
---|
| 1245 | function update_oldest()
|
---|
| 1246 | {
|
---|
| 1247 | global $wpdb;
|
---|
| 1248 | // at most we only want to impose the burden of updating one feed on this site user
|
---|
| 1249 |
|
---|
| 1250 | //mem tables present
|
---|
| 1251 | $sql ="SELECT * FROM $this->msitetable order by $this->mnextpolltime asc limit 1";
|
---|
| 1252 |
|
---|
| 1253 | //no mem tables present
|
---|
| 1254 | $sql ="SELECT * FROM $this->sitetable order by $this->cnextpolltime asc limit 1";
|
---|
| 1255 | $site = $wpdb->get_row($sql);
|
---|
| 1256 |
|
---|
| 1257 | // echo "DEBUG update oldest: the site is: ";
|
---|
| 1258 | // print_r($site);
|
---|
| 1259 |
|
---|
| 1260 |
|
---|
| 1261 | if(!$site) return;
|
---|
| 1262 | if($site->{$this->mnextpolltime} > $this->now) return;
|
---|
| 1263 |
|
---|
| 1264 | BDPRSS2::update($site);
|
---|
| 1265 | }
|
---|
| 1266 |
|
---|
| 1267 | function updateAll()
|
---|
| 1268 | {
|
---|
| 1269 | global $wpdb;
|
---|
| 1270 |
|
---|
| 1271 | $sql = "SELECT * FROM $this->sitetable order by next_poll_time LIMIT 5";
|
---|
| 1272 | $sites = $wpdb->get_results($sql);
|
---|
| 1273 |
|
---|
| 1274 | if($sites)
|
---|
| 1275 | foreach($sites as $site)
|
---|
| 1276 | BDPRSS2::update($site);
|
---|
| 1277 | }
|
---|
| 1278 |
|
---|
| 1279 |
|
---|
| 1280 | /* --- retrieve --- */
|
---|
| 1281 |
|
---|
| 1282 | function get_mysql_version()
|
---|
| 1283 | {
|
---|
| 1284 | global $wpdb;
|
---|
| 1285 |
|
---|
| 1286 | $sql = "SELECT version()";
|
---|
| 1287 | $result = $wpdb->get_var($sql);
|
---|
| 1288 |
|
---|
| 1289 | return $result;
|
---|
| 1290 | }
|
---|
| 1291 |
|
---|
| 1292 | function is_in_sitetable($url)
|
---|
| 1293 | {
|
---|
| 1294 | global $wpdb;
|
---|
| 1295 |
|
---|
| 1296 | $sql = "SELECT * FROM $this->sitetable ".
|
---|
| 1297 | "WHERE $this->cfeedurl='$url' LIMIT 1";
|
---|
| 1298 | $result = $wpdb->get_row($sql);
|
---|
| 1299 |
|
---|
| 1300 | if($result && $result->{$this->cfeedurl} == $url) return TRUE;
|
---|
| 1301 | return FALSE;
|
---|
| 1302 | }
|
---|
| 1303 |
|
---|
| 1304 | function count_in_sitetable()
|
---|
| 1305 | {
|
---|
| 1306 | global $wpdb;
|
---|
| 1307 |
|
---|
| 1308 | $sql = "SELECT COUNT(*) FROM $this->sitetable ";
|
---|
| 1309 |
|
---|
| 1310 | $result = $wpdb->get_var($sql);
|
---|
| 1311 |
|
---|
| 1312 | return $result;
|
---|
| 1313 | }
|
---|
| 1314 |
|
---|
| 1315 | function countErrors($url='')
|
---|
| 1316 | {
|
---|
| 1317 | global $wpdb;
|
---|
| 1318 |
|
---|
| 1319 | $sql = "SELECT COUNT(*) FROM $this->errortable";
|
---|
| 1320 | if($url) $sql .= " WHERE $this->efeedurl='$url'";
|
---|
| 1321 | $result = $wpdb->get_var($sql);
|
---|
| 1322 |
|
---|
| 1323 | return $result;
|
---|
| 1324 | }
|
---|
| 1325 |
|
---|
| 1326 | function getErrors($url='')
|
---|
| 1327 | {
|
---|
| 1328 | global $wpdb;
|
---|
| 1329 |
|
---|
| 1330 | $sql = "SELECT * FROM $this->errortable";
|
---|
| 1331 | if($url) $sql .= " WHERE $this->efeedurl='$url'";
|
---|
| 1332 | $sql .= " ORDER BY $this->efeedurl, $this->eidentifier";
|
---|
| 1333 | $result = $wpdb->get_results($sql);
|
---|
| 1334 |
|
---|
| 1335 | return $result;
|
---|
| 1336 | }
|
---|
| 1337 |
|
---|
| 1338 | function count_in_listtable()
|
---|
| 1339 | {
|
---|
| 1340 | global $wpdb;
|
---|
| 1341 |
|
---|
| 1342 | $sql = "SELECT COUNT(*) FROM $this->listtable ";
|
---|
| 1343 |
|
---|
| 1344 | $result = $wpdb->get_var($sql);
|
---|
| 1345 |
|
---|
| 1346 | return $result;
|
---|
| 1347 | }
|
---|
| 1348 |
|
---|
| 1349 | function is_in_itemtable($url)
|
---|
| 1350 | {
|
---|
| 1351 | global $wpdb;
|
---|
| 1352 |
|
---|
| 1353 | $sql = "SELECT * FROM $this->itemtable ".
|
---|
| 1354 | "WHERE $this->ifeedurl='$url' LIMIT 1";
|
---|
| 1355 | $result = $wpdb->get_row($sql);
|
---|
| 1356 |
|
---|
| 1357 | if($result && $result->{$this->ifeedurl} == $url) return TRUE;
|
---|
| 1358 | return FALSE;
|
---|
| 1359 | }
|
---|
| 1360 |
|
---|
| 1361 | function get_all_lists()
|
---|
| 1362 | {
|
---|
| 1363 | global $wpdb;
|
---|
| 1364 | $sql = "SELECT * FROM $this->listtable ".
|
---|
| 1365 | "ORDER BY $this->lidentifier ";
|
---|
| 1366 | $result = $wpdb->get_results($sql);
|
---|
| 1367 | return $result;
|
---|
| 1368 | }
|
---|
| 1369 |
|
---|
| 1370 | function setoptions($optionsarray){
|
---|
| 1371 | global $wpdb;
|
---|
| 1372 | $sql = "REPLACE INTO $this->optionstable ( name , type , value , notice
|
---|
| 1373 | ) VALUES ";
|
---|
| 1374 | foreach($optionsarray as $fieldname => $values){
|
---|
| 1375 | $sql .= "\n( '".$fieldname."', '".$values['type']."', '".$values['value']."', '".$values['notice']."'), ";
|
---|
| 1376 | }
|
---|
| 1377 | if(count($optionsarray)>0){
|
---|
| 1378 | $sql = preg_replace('/, $/','', $sql);
|
---|
| 1379 | $result = $wpdb->query($sql);
|
---|
| 1380 | }
|
---|
| 1381 | return $result;
|
---|
| 1382 | }
|
---|
| 1383 |
|
---|
| 1384 | function get_all_options()
|
---|
| 1385 | {
|
---|
| 1386 | global $wpdb;
|
---|
| 1387 | $sql = "SELECT * FROM $this->optionstable ".
|
---|
| 1388 | "ORDER BY name ";
|
---|
| 1389 | $result = $wpdb->get_results($sql);
|
---|
| 1390 | return $result;
|
---|
| 1391 | }
|
---|
| 1392 |
|
---|
| 1393 | function detect_memtable($table){
|
---|
| 1394 | global $wpdb;
|
---|
| 1395 | $sql = "SHOW CREATE TABLE " . $table;
|
---|
| 1396 | $show = $wpdb->get_row($sql);
|
---|
| 1397 | if(stristr($show->{'Create Table'}, 'ENGINE=MEMORY')) return true;
|
---|
| 1398 | return false;
|
---|
| 1399 | }
|
---|
| 1400 |
|
---|
| 1401 | function pbaoption($name){
|
---|
| 1402 | global $wpdb;
|
---|
| 1403 | $sql = "SELECT * FROM $this->optionstable ".
|
---|
| 1404 | "WHERE name = '".$name."' LIMIT 0,1";
|
---|
| 1405 | $result = $wpdb->get_row($sql);
|
---|
| 1406 | if($result){
|
---|
| 1407 | if($result->type == 'string') {
|
---|
| 1408 | //special string handling needed to be binary safe?
|
---|
| 1409 | return $result->value;
|
---|
| 1410 | } elseif($result->type == 'int'){
|
---|
| 1411 | return abs(intval($result->value));
|
---|
| 1412 | }
|
---|
| 1413 | }
|
---|
| 1414 | return $result;
|
---|
| 1415 | }
|
---|
| 1416 |
|
---|
| 1417 | function get_all_pbaoutputs()
|
---|
| 1418 | {
|
---|
| 1419 | global $wpdb;
|
---|
| 1420 | $sql = "SELECT * FROM $this->pbaoutputtable ".
|
---|
| 1421 | "ORDER BY $this->pbaoidentifier ";
|
---|
| 1422 | $result = $wpdb->get_results($sql);
|
---|
| 1423 | return $result;
|
---|
| 1424 | }
|
---|
| 1425 |
|
---|
| 1426 | function get_all_sites($ltype='sitealpha')
|
---|
| 1427 | {
|
---|
| 1428 | global $wpdb;
|
---|
| 1429 | $sql = "SELECT * FROM $this->sitetable ";
|
---|
| 1430 |
|
---|
| 1431 | if($ltype == 'sitealpha')
|
---|
| 1432 | $sql .= "ORDER BY $this->csitename ";
|
---|
| 1433 | elseif($ltype == 'siteupdate')
|
---|
| 1434 | $sql .= "ORDER BY $this->cupdatetime DESC";
|
---|
| 1435 |
|
---|
| 1436 | $result = $wpdb->get_results($sql);
|
---|
| 1437 | return $result;
|
---|
| 1438 | }
|
---|
| 1439 |
|
---|
| 1440 | function get_site($url)
|
---|
| 1441 | {
|
---|
| 1442 | global $wpdb;
|
---|
| 1443 | $sql = "SELECT * FROM $this->sitetable WHERE $this->cfeedurl='$url' ";
|
---|
| 1444 | $result = $wpdb->get_row($sql);
|
---|
| 1445 | return $result;
|
---|
| 1446 | }
|
---|
| 1447 |
|
---|
| 1448 | function get_site_by_id($id)
|
---|
| 1449 | {
|
---|
| 1450 | global $wpdb;
|
---|
| 1451 | $sql = "SELECT * FROM $this->sitetable WHERE $this->cidentifier='$id' ";
|
---|
| 1452 | $result = $wpdb->get_row($sql);
|
---|
| 1453 | return $result;
|
---|
| 1454 | }
|
---|
| 1455 |
|
---|
| 1456 | //function will give back a numeric array of feeds when given in a numeric array of ids
|
---|
| 1457 | function get_feedlist_by_ids($ids)
|
---|
| 1458 | {
|
---|
| 1459 | global $wpdb;
|
---|
| 1460 | // echo "Overload: ";
|
---|
| 1461 | // print_r($ids);
|
---|
| 1462 | $return=false;
|
---|
| 1463 | if($ids){
|
---|
| 1464 | if($this->memtablesok==1){
|
---|
| 1465 | $use_site_table=$this->msitetable;
|
---|
| 1466 | $use_identifier=$this->midentifier;
|
---|
| 1467 | $use_feed_url_column_name=$this->mfeedurl;
|
---|
| 1468 | }else{
|
---|
| 1469 | $use_site_table=$this->sitetable;
|
---|
| 1470 | $use_identifier=$this->cidentifier;
|
---|
| 1471 | $use_feed_url_column_name=$this->cfeedurl;
|
---|
| 1472 | }
|
---|
| 1473 | $sql = "SELECT $use_feed_url_column_name as feedurl
|
---|
| 1474 | FROM $use_site_table WHERE $use_identifier in (";
|
---|
| 1475 | $virgin = true;
|
---|
| 1476 | foreach($ids as $id) {
|
---|
| 1477 | if($virgin){
|
---|
| 1478 | $sql .= " $id";
|
---|
| 1479 | }else{
|
---|
| 1480 | $sql .= ", $id";
|
---|
| 1481 | }
|
---|
| 1482 | $virgin = false;
|
---|
| 1483 | }
|
---|
| 1484 | $sql .= " ) ";
|
---|
| 1485 | // print_r($sql);
|
---|
| 1486 | $result = $wpdb->get_results($sql);
|
---|
| 1487 | foreach($result as $r) {
|
---|
| 1488 | $return[]=$r->feedurl;
|
---|
| 1489 | }
|
---|
| 1490 | }//if ids
|
---|
| 1491 | return $return;
|
---|
| 1492 | }
|
---|
| 1493 |
|
---|
| 1494 | function get_feedurl_from_site_id($id)
|
---|
| 1495 | {
|
---|
| 1496 | global $wpdb;
|
---|
| 1497 | $sql = "SELECT $this->cfeedurl FROM $this->sitetable WHERE $this->cidentifier='$id' ";
|
---|
| 1498 | $result = $wpdb->get_row($sql);
|
---|
| 1499 | if(!$result) return FALSE;
|
---|
| 1500 | return $result->{$this->cfeedurl};
|
---|
| 1501 | }
|
---|
| 1502 |
|
---|
| 1503 | function get_siteurl_from_site_id($id)
|
---|
| 1504 | {
|
---|
| 1505 | global $wpdb;
|
---|
| 1506 | $sql = "SELECT $this->csiteurl FROM $this->sitetable WHERE $this->cidentifier='$id' ";
|
---|
| 1507 | $result = $wpdb->get_row($sql);
|
---|
| 1508 | if(!$result) return FALSE;
|
---|
| 1509 | return $result->{$this->csiteurl};
|
---|
| 1510 | }
|
---|
| 1511 |
|
---|
| 1512 | function get_list($list_id)
|
---|
| 1513 | {
|
---|
| 1514 | global $wpdb;
|
---|
| 1515 | $sql = "SELECT * FROM $this->listtable WHERE $this->lidentifier='$list_id' ";
|
---|
| 1516 | $result = $wpdb->get_row($sql);
|
---|
| 1517 | return $result;
|
---|
| 1518 | }
|
---|
| 1519 |
|
---|
| 1520 | function get_pbaoutput_from_page_id($page_id){
|
---|
| 1521 | global $wpdb;
|
---|
| 1522 | $sql = "SELECT * FROM $this->pbaoutputtable WHERE page2hookin='$page_id' ORDER by identifier ASC LIMIT 0,1";
|
---|
| 1523 | $result = $wpdb->get_row($sql);
|
---|
| 1524 | return $result;
|
---|
| 1525 | }
|
---|
| 1526 |
|
---|
| 1527 | function get_pbaoutput($output_id)
|
---|
| 1528 | {
|
---|
| 1529 | global $wpdb;
|
---|
| 1530 | $sql = "SELECT * FROM $this->pbaoutputtable WHERE identifier='$output_id' ";
|
---|
| 1531 | $result = $wpdb->get_row($sql);
|
---|
| 1532 | return $result;
|
---|
| 1533 | }
|
---|
| 1534 |
|
---|
| 1535 | function get_item($feedurl, $itemurl)
|
---|
| 1536 | {
|
---|
| 1537 | global $wpdb;
|
---|
| 1538 | $sql = "SELECT * FROM $this->itemtable ".
|
---|
| 1539 | "WHERE $this->ifeedurl='$feedurl' AND $this->iitemurl='$itemurl' ";
|
---|
| 1540 | $result = $wpdb->get_row($sql);
|
---|
| 1541 | return $result;
|
---|
| 1542 | }
|
---|
| 1543 |
|
---|
| 1544 | function getItemByID($id)
|
---|
| 1545 | {
|
---|
| 1546 | global $wpdb;
|
---|
| 1547 | $sql = "SELECT * FROM $this->itemtable WHERE $this->iidentifier='$id' ";
|
---|
| 1548 | $result = $wpdb->get_row($sql);
|
---|
| 1549 | return $result;
|
---|
| 1550 | }
|
---|
| 1551 |
|
---|
| 1552 |
|
---|
| 1553 | function getsiteswithupdatetime($maxage=0, $list_id=0){
|
---|
| 1554 |
|
---|
| 1555 | global $wpdb;
|
---|
| 1556 |
|
---|
| 1557 | //check input values
|
---|
| 1558 | $list_id=abs(intval($list_id));
|
---|
| 1559 | $maxage=abs(intval($maxage)); //0 means filter disabled, age in seconds
|
---|
| 1560 |
|
---|
| 1561 | //initialisation
|
---|
| 1562 | $search_query_conditions_list=" ";
|
---|
| 1563 | $search_query_conditions_maxage=" ";
|
---|
| 1564 |
|
---|
| 1565 | if($list_id>0) $search_query_conditions_list =" AND r1.site_id in (select sites.identifier AS site_id from (" . $this->listtable . " lists join " . $this->sitetable . " sites) where ((concat(_latin1',',lists.url_list,_latin1',') like concat(_utf8'%,',sites.identifier,_utf8',%')) or (lists.list_all = _latin1'Y')) and lists.identifier = '" . $list_id . "') \n";
|
---|
| 1566 | if($maxage>0) $search_query_conditions_maxage =" AND r1.item_time > ( UNIX_TIMESTAMP() - '" . $maxage . "' ) ";
|
---|
| 1567 |
|
---|
| 1568 | $sql = "SELECT r1.site_id, max( r1.item_time ) AS lastupdate, msi.*
|
---|
| 1569 | FROM " . $this->mitemtable . " r1, " . $this->msitetable . " msi
|
---|
| 1570 | WHERE r1.site_id = msi.identifier
|
---|
| 1571 | " . $search_query_conditions_list . "
|
---|
| 1572 | " . $search_query_conditions_maxage . "
|
---|
| 1573 | GROUP BY r1.site_id
|
---|
| 1574 | ORDER BY msi.site_name";
|
---|
| 1575 |
|
---|
| 1576 | $result = $wpdb->get_results($sql);
|
---|
| 1577 | return $result;
|
---|
| 1578 | }
|
---|
| 1579 |
|
---|
| 1580 |
|
---|
| 1581 | function getmonthlyarchivedates($itemdate="", $list_id=0){
|
---|
| 1582 | global $wpdb;
|
---|
| 1583 |
|
---|
| 1584 | //protect input vaues
|
---|
| 1585 | $list_id=abs(intval($list_id));
|
---|
| 1586 | if (!ereg("[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]", $itemdate)) $itemdate = date('Y-m-d');
|
---|
| 1587 |
|
---|
| 1588 | /* let's get all date results for the month according to itemdate
|
---|
| 1589 | + the last hitting date before the month according to itemdate
|
---|
| 1590 | + the next hitting date after the month according to itemdate
|
---|
| 1591 | */
|
---|
| 1592 |
|
---|
| 1593 | $firstsecondthismonth=mktime(0, 0, 0, substr($itemdate,5,2), 1, substr($itemdate,0,4));
|
---|
| 1594 | $firstsecondnextmonth=mktime(0, 0, 0, ( substr($itemdate,5,2) +1 ), 1, substr($itemdate,0,4));
|
---|
| 1595 | if($list_id>0) $search_query_conditions_list="AND r1.site_id in (select sites.identifier AS site_id from (" . $this->listtable . " lists join " . $this->sitetable . " sites) where ((concat(_latin1',',lists.url_list,_latin1',') like concat(_utf8'%,',sites.identifier,_utf8',%')) or (lists.list_all = _latin1'Y')) and lists.identifier = '" . $list_id . "') \n";
|
---|
| 1596 |
|
---|
| 1597 | //let's try to build a quicker query - is it really quicker?
|
---|
| 1598 | if($list_id>0) {
|
---|
| 1599 | $search_table_addition_list=" , (select sites.identifier AS site_id from (" . $this->listtable . " lists join " . $this->msitetable . " sites) where ((concat(_latin1',',lists.url_list,_latin1',') like concat(_utf8'%,',sites.identifier,_utf8',%')) or (lists.list_all = _latin1'Y')) and lists.identifier = '" . $list_id . "') s \n";
|
---|
| 1600 | $search_query_conditions_list="AND r1.site_id = s.site_id \n";
|
---|
| 1601 | }
|
---|
| 1602 |
|
---|
| 1603 | /* //leave quicksql as comment, maybe it will be needed later, because for timezone conversions it is fine to use item_time instead of item_date
|
---|
| 1604 | $quicksql = "(SELECT IFNULL( FROM_UNIXTIME( min( r1.item_time ) , '%Y-%m-%d' ),'0') AS item_date, 'next' AS type
|
---|
| 1605 | FROM " . $this->mitemtable . " r1 " . $search_table_addition_list . "
|
---|
| 1606 | WHERE r1.item_time >= '".$firstsecondnextmonth."' " . $search_query_conditions_list . " )
|
---|
| 1607 | UNION DISTINCT
|
---|
| 1608 | (SELECT DISTINCT FROM_UNIXTIME( r1.item_time, '%Y-%m-%d' ) AS item_date, 'normal' AS type
|
---|
| 1609 | FROM " . $this->mitemtable . " r1 " . $search_table_addition_list . "
|
---|
| 1610 | WHERE r1.item_time >= '".$firstsecondthismonth."'
|
---|
| 1611 | AND r1.item_time < '".$firstsecondnextmonth."' " . $search_query_conditions_list . " )
|
---|
| 1612 | UNION DISTINCT
|
---|
| 1613 | ( SELECT IFNULL( FROM_UNIXTIME( max( r1.item_time ) , '%Y-%m-%d' ),'0') AS item_date, 'last' AS type
|
---|
| 1614 | FROM " . $this->mitemtable . " r1 " . $search_table_addition_list . "
|
---|
| 1615 | WHERE r1.item_time < '".$firstsecondthismonth."' " . $search_query_conditions_list . ") ";
|
---|
| 1616 | $quicksql .= " ORDER BY type, item_date ASC LIMIT 0,40 ";
|
---|
| 1617 | */ //just as demo how to use item_time fields instead of item_date
|
---|
| 1618 |
|
---|
| 1619 | $quickersql = "(SELECT IFNULL( FROM_UNIXTIME( min( r1.item_time ) , '%Y-%m-%d' ),'0') AS item_date, 'next' AS type
|
---|
| 1620 | FROM " . $this->mitemtable . " r1 " . $search_table_addition_list . "
|
---|
| 1621 | WHERE r1.item_time >= '".$firstsecondnextmonth."' " . $search_query_conditions_list . " )
|
---|
| 1622 | UNION DISTINCT
|
---|
| 1623 | (SELECT DISTINCT date_format( r1.item_date, '%Y-%m-%d' ) AS item_date, 'normal' AS type
|
---|
| 1624 | FROM " . $this->mitemtable . " r1 " . $search_table_addition_list . "
|
---|
| 1625 | WHERE r1.item_date >= FROM_UNIXTIME('".$firstsecondthismonth."','%Y-%m-%d')
|
---|
| 1626 | AND r1.item_date < FROM_UNIXTIME('".$firstsecondnextmonth."','%Y-%m-%d') " . $search_query_conditions_list . "
|
---|
| 1627 | group by r1.item_time )
|
---|
| 1628 | UNION DISTINCT
|
---|
| 1629 | ( SELECT IFNULL( FROM_UNIXTIME( max( r1.item_time ) , '%Y-%m-%d' ),'0') AS item_date, 'last' AS type
|
---|
| 1630 | FROM " . $this->mitemtable . " r1 " . $search_table_addition_list . "
|
---|
| 1631 | WHERE r1.item_time < '".$firstsecondthismonth."' " . $search_query_conditions_list . " ) ";
|
---|
| 1632 | $quickersql .= " ORDER BY type, item_date ASC LIMIT 0,40 ";
|
---|
| 1633 |
|
---|
| 1634 |
|
---|
| 1635 | //echo $quickersql . '<br />';
|
---|
| 1636 | $result = $wpdb->get_results($quickersql);
|
---|
| 1637 | return $result;
|
---|
| 1638 |
|
---|
| 1639 | }
|
---|
| 1640 |
|
---|
| 1641 |
|
---|
| 1642 | function get_most_recent_item_time($feedurl)
|
---|
| 1643 | {
|
---|
| 1644 | global $wpdb;
|
---|
| 1645 |
|
---|
| 1646 | if($this->memtablesok == 1){
|
---|
| 1647 | //if feedurl is numeric, we treat it as a site_id
|
---|
| 1648 | if(abs(intval($feedurl))."" == $feedurl.""){
|
---|
| 1649 | $sql = "SELECT MAX( $this->miitemtime ) as $this->iitemtime
|
---|
| 1650 | FROM $this->mitemtable
|
---|
| 1651 | WHERE $this->misiteid = '$feedurl'";
|
---|
| 1652 | }else{
|
---|
| 1653 | $sql = "SELECT MAX( $this->miitemtime ) as $this->iitemtime
|
---|
| 1654 | FROM $this->mitemtable
|
---|
| 1655 | WHERE $this->misiteid = (
|
---|
| 1656 | SELECT $this->midentifier
|
---|
| 1657 | FROM $this->msitetable
|
---|
| 1658 | WHERE $this->mfeedurl = '$feedurl' ) ";
|
---|
| 1659 | }
|
---|
| 1660 | }else{
|
---|
| 1661 | $sql = "SELECT MAX($this->iitemtime) FROM $this->itemtable ".
|
---|
| 1662 | "WHERE $this->ifeedurl='$feedurl' ";
|
---|
| 1663 | }
|
---|
| 1664 | $result = $wpdb->get_var($sql);
|
---|
| 1665 | return $result;
|
---|
| 1666 | }
|
---|
| 1667 |
|
---|
| 1668 | //new function to query items for output
|
---|
| 1669 | //input: object with ids - just to be overloaded, never to be changed, optional parameter order by site name
|
---|
| 1670 | //output: object with set of rows
|
---|
| 1671 | function getsitenitems(&$id_result, $orderbysitename=false){
|
---|
| 1672 | global $wpdb;
|
---|
| 1673 | if(!$id_result){
|
---|
| 1674 | return false;
|
---|
| 1675 | }
|
---|
| 1676 | $sql = "SELECT i.identifier as itemid, s.identifier as siteid, i.*, s.* FROM $this->itemtable i, $this->msitetable s ";
|
---|
| 1677 | $sql .= " WHERE i." . $this->ifeedurl . " = s." . $this->mfeedurl . " ";
|
---|
| 1678 | $virgin = true;
|
---|
| 1679 | foreach($id_result as $tr) {
|
---|
| 1680 | if(!$tr->{$this->miid}) continue;
|
---|
| 1681 | if($virgin)
|
---|
| 1682 | $sql .= "AND ( ";
|
---|
| 1683 | else
|
---|
| 1684 | $sql .= "OR";
|
---|
| 1685 | $sql .= " i." . $this->iidentifier . "='" . $tr->{$this->miid} . "' ";
|
---|
| 1686 | $virgin = false;
|
---|
| 1687 | }
|
---|
| 1688 | if(!$virgin) $sql .= ") ";
|
---|
| 1689 | if($orderbysitename){
|
---|
| 1690 | $sql .= " ORDER BY s." . $this->msitename . " ASC ";
|
---|
| 1691 | }else{
|
---|
| 1692 | $sql .= " ORDER BY i." . $this->iitemtime . " DESC ";
|
---|
| 1693 | }
|
---|
| 1694 |
|
---|
| 1695 | $itemset = $wpdb->get_results($sql);
|
---|
| 1696 | return $itemset;
|
---|
| 1697 | }
|
---|
| 1698 |
|
---|
| 1699 | /* --- delete --- */
|
---|
| 1700 |
|
---|
| 1701 | function deleteFeed($rss)
|
---|
| 1702 | {
|
---|
| 1703 | global $wpdb, $bdprss_search;
|
---|
| 1704 |
|
---|
| 1705 | $rss=trim($rss);
|
---|
| 1706 | $url = $this->get_feedurl_from_site_id($rss);
|
---|
| 1707 |
|
---|
| 1708 | if(!$url) return;
|
---|
| 1709 |
|
---|
| 1710 | $sql = "DELETE FROM $this->sitetable WHERE $this->cfeedurl='$url'";
|
---|
| 1711 | $result = $wpdb->query($sql);
|
---|
| 1712 |
|
---|
| 1713 | $sql = "DELETE FROM $this->itemtable WHERE $this->ifeedurl='$url'";
|
---|
| 1714 | $result = $wpdb->query($sql);
|
---|
| 1715 |
|
---|
| 1716 | $sql = "DELETE FROM $this->errortable WHERE $this->efeedurl='$url'";
|
---|
| 1717 | $result = $wpdb->query($sql);
|
---|
| 1718 |
|
---|
| 1719 | //delete from search tables
|
---|
| 1720 | if(class_exists('BDPRSS_SEARCH')){
|
---|
| 1721 | $result = $bdprss_search->markfeed4delete($rss);
|
---|
| 1722 | $this->recordError("Attention", "Deleted Feed ID: " . $rss);
|
---|
| 1723 | }
|
---|
| 1724 |
|
---|
| 1725 | //mem tables
|
---|
| 1726 | $sql = "DELETE FROM $this->msitetable WHERE $this->midentifier='$rss'";
|
---|
| 1727 | $result = $wpdb->query($sql);
|
---|
| 1728 |
|
---|
| 1729 | $sql = "DELETE FROM $this->mitemtable WHERE $this->misiteid='$rss'";
|
---|
| 1730 | $result = $wpdb->query($sql);
|
---|
| 1731 |
|
---|
| 1732 | }
|
---|
| 1733 |
|
---|
| 1734 | function deletelist($list)
|
---|
| 1735 | {
|
---|
| 1736 | global $wpdb;
|
---|
| 1737 |
|
---|
| 1738 | $sql = "DELETE FROM $this->listtable WHERE $this->lidentifier='$list'";
|
---|
| 1739 | $result = $wpdb->query($sql);
|
---|
| 1740 | }
|
---|
| 1741 |
|
---|
| 1742 | function deletepbaoutput($list)
|
---|
| 1743 | {
|
---|
| 1744 | global $wpdb;
|
---|
| 1745 |
|
---|
| 1746 | $sql = "DELETE FROM $this->pbaoutputtable WHERE $this->pbaoidentifier='$list'";
|
---|
| 1747 | $result = $wpdb->query($sql);
|
---|
| 1748 | }
|
---|
| 1749 |
|
---|
| 1750 | function deleteErrors($url)
|
---|
| 1751 | {
|
---|
| 1752 | global $wpdb;
|
---|
| 1753 |
|
---|
| 1754 | $sql = "DELETE FROM $this->errortable ".
|
---|
| 1755 | "WHERE $this->efeedurl='$url' ";
|
---|
| 1756 | $result = $wpdb->query($sql);
|
---|
| 1757 |
|
---|
| 1758 | return $result;
|
---|
| 1759 | }
|
---|
| 1760 |
|
---|
| 1761 | function droptable($tablename)
|
---|
| 1762 | {
|
---|
| 1763 | global $wpdb;
|
---|
| 1764 |
|
---|
| 1765 | $sql = "DROP TABLE IF EXISTS $tablename";
|
---|
| 1766 | $result = $wpdb->query($sql);
|
---|
| 1767 |
|
---|
| 1768 | return $result;
|
---|
| 1769 | }
|
---|
| 1770 |
|
---|
| 1771 | function deleteErrorTable()
|
---|
| 1772 | {
|
---|
| 1773 | global $wpdb;
|
---|
| 1774 |
|
---|
| 1775 | $sql = "DROP TABLE IF EXISTS $this->errortable";
|
---|
| 1776 | $result = $wpdb->query($sql);
|
---|
| 1777 |
|
---|
| 1778 | $this->create();
|
---|
| 1779 | }
|
---|
| 1780 |
|
---|
| 1781 | function delete_old_items($url)
|
---|
| 1782 | {
|
---|
| 1783 | /* delete_old_items($url)
|
---|
| 1784 | */
|
---|
| 1785 | global $wpdb, $bdprss_search;
|
---|
| 1786 |
|
---|
| 1787 | $oldDefined = (int) get_option('bdprss_keep_howlong');
|
---|
| 1788 | if(!$oldDefined) return;
|
---|
| 1789 | $oldDefined *= 60 * 60 * 24 * 31; // seconds in a month
|
---|
| 1790 | $oldDefined = $this->now - $oldDefined;
|
---|
| 1791 |
|
---|
| 1792 | $sql = "DELETE FROM $this->itemtable ".
|
---|
| 1793 | "WHERE $this->ifeedurl='$url' ".
|
---|
| 1794 | "AND ($this->iitemtime<'$oldDefined' OR $this->iitemtime='')";
|
---|
| 1795 | $result = $wpdb->query($sql);
|
---|
| 1796 |
|
---|
| 1797 | //delete from search tables
|
---|
| 1798 | if(class_exists('BDPRSS_SEARCH')){
|
---|
| 1799 | $result=$this->get_site($url);
|
---|
| 1800 | $result = $bdprss_search->markfeed4delete($result->{$this->cidentifier}, $oldDefined);
|
---|
| 1801 | $this->recordError($url, "Deleted Entries older as $oldDefined from this feed");
|
---|
| 1802 | }
|
---|
| 1803 |
|
---|
| 1804 | //mem table
|
---|
| 1805 | $sql = "DELETE FROM $this->mitemtable ".
|
---|
| 1806 | "WHERE $this->misiteid in (
|
---|
| 1807 | SELECT $this->midentifier FROM $this->msitetable
|
---|
| 1808 | where $this->mfeedurl ='$url') ".
|
---|
| 1809 | "AND ($this->miitemtime<'$oldDefined' OR $this->miitemtime='')";
|
---|
| 1810 | $result = $wpdb->query($sql);
|
---|
| 1811 |
|
---|
| 1812 | return $result;
|
---|
| 1813 | }
|
---|
| 1814 |
|
---|
| 1815 | function list_all_tables(){
|
---|
| 1816 | global $bdprss_search;
|
---|
| 1817 | $tables=$bdprss_search->pbasearch_list_tables();
|
---|
| 1818 | $tablenames = array(
|
---|
| 1819 | $this->errortable, $this->listtable, $this->itemtable, $this->sitetable,
|
---|
| 1820 | $this->mtablestatus, $this->msitetable, $this->mitemtable, $this->optionstable, $this->pbaoutputtable
|
---|
| 1821 | );
|
---|
| 1822 | foreach($tablenames as $tablename){
|
---|
| 1823 | $tables[$tablename]=true;
|
---|
| 1824 | }
|
---|
| 1825 | return $tables;
|
---|
| 1826 | }
|
---|
| 1827 |
|
---|
| 1828 | function reset()
|
---|
| 1829 | {
|
---|
| 1830 | /* reset() -- delete the database tables -
|
---|
| 1831 | * god knows why you would do this --
|
---|
| 1832 | * this is the button of death
|
---|
| 1833 | */
|
---|
| 1834 | global $wpdb;
|
---|
| 1835 |
|
---|
| 1836 | $tablenames = $this->list_all_tables();
|
---|
| 1837 | //print_r($tablenames);
|
---|
| 1838 | $dummy1="";
|
---|
| 1839 | $dummy2="";
|
---|
| 1840 | $cachedeletecounter=@PBALIB::pba_cache($dummy1, $dummy2, 'clear', '', 'mixed', 180, 'OK');
|
---|
| 1841 | //echo "<br>Uninstall outcommented in bdp-rssaggregator-db.php";
|
---|
| 1842 | //exit;
|
---|
| 1843 |
|
---|
| 1844 | delete_option('bdprss_update_frequency');
|
---|
| 1845 | delete_option('bdprss_keep_howlong');
|
---|
| 1846 | delete_option('widget_name_multi');
|
---|
| 1847 | foreach($tablenames as $t => $dummy)
|
---|
| 1848 | {
|
---|
| 1849 | $sql = "DROP TABLE IF EXISTS $t ";
|
---|
| 1850 | $result = $wpdb->query($sql);
|
---|
| 1851 | }
|
---|
| 1852 | return true;
|
---|
| 1853 | }
|
---|
| 1854 |
|
---|
| 1855 | function get_wp_published_pages(){
|
---|
| 1856 | global $wpdb, $table_prefix;
|
---|
| 1857 | $sql = "SELECT * FROM " . $table_prefix . "posts
|
---|
| 1858 | WHERE post_type = 'page' AND post_status = 'publish'
|
---|
| 1859 | ORDER BY ID";
|
---|
| 1860 | $result = $wpdb->get_results($sql);
|
---|
| 1861 | // return $sql;
|
---|
| 1862 | return $result;
|
---|
| 1863 | }
|
---|
| 1864 |
|
---|
| 1865 | } // class
|
---|
| 1866 | }//if
|
---|
| 1867 |
|
---|
| 1868 | // Make a single global instance.
|
---|
| 1869 | if ( !isset($bdprss_db) ) $bdprss_db = new BDPRSS_DB();
|
---|
| 1870 |
|
---|
| 1871 | ?> |
---|