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 | ?>
|
---|