From: Roger R. <eps...@us...> - 2002-03-22 00:45:49
|
Update of /cvsroot/pn-modules/PN_PostCalendar/modules/PostCalendar In directory usw-pr-cvs1:/tmp/cvs-serv19014 Modified Files: pninit.php pntables.php pnuser.php pnuserapi.php Log Message: Changed the DB table names from events_ to postcalendar_events_ to avoid any confusion in the future Added utility directory and upgrade.php file Scripts in this directory will be used to help users upgrade from version before 2.6. Since the upgrade script in pninit.php will most likely be useless for version prior to 2.6, I decided to move them outside so they can be run by the user. By changing the DB table names, We should also be able to upgrade a user's PostCalendar install without them losing their content. This will also allow the user to remove their current PostCalendar directory and drop in the new one. --Roger Index: pninit.php =================================================================== RCS file: /cvsroot/pn-modules/PN_PostCalendar/modules/PostCalendar/pninit.php,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** pninit.php 21 Mar 2002 06:40:40 -0000 1.4 --- pninit.php 22 Mar 2002 00:45:45 -0000 1.5 *************** *** 33,38 **** $pntable = pnDBGetTables(); ! $events_table = $pntable['events']; ! $events_column = &$pntable['events_column']; $sql = "CREATE TABLE $events_table ( $events_column[eid] bigint(20) NOT NULL auto_increment, --- 33,39 ---- $pntable = pnDBGetTables(); ! $events_table = $pntable['postcalendar_events']; ! $events_column = &$pntable['postcalendar_events_column']; ! $sql = "CREATE TABLE $events_table ( $events_column[eid] bigint(20) NOT NULL auto_increment, *************** *** 66,71 **** } ! $events_queue_table = $pntable['events_queue']; ! $events_queue_column = &$pntable['events_queue_column']; $sql = "CREATE TABLE $events_queue_table ( $events_queue_column[qid] bigint(20) NOT NULL auto_increment, --- 67,73 ---- } ! $events_queue_table = $pntable['postcalendar_events_queue']; ! $events_queue_column = &$pntable['postcalendar_events_queue_column']; ! $sql = "CREATE TABLE $events_queue_table ( $events_queue_column[qid] bigint(20) NOT NULL auto_increment, *************** *** 151,270 **** switch($oldversion) { ! case '1.0': ! // Upgrade 1.0 to 2.1.x ! return PostCalendar_upgrade('2.1'); ! ! case '2.1': ! // Upgrade 2.1.x to 2.5 ! list($dbconn) = pnDBGetConn(); ! $pntable = pnDBGetTables(); ! $events_table = $pntable['events']; ! ! $sql = "ALTER TABLE $events_table ADD location varchar(50) AFTER barcolor; ! ALTER TABLE $events_table ADD conttel varchar(50) AFTER location; ! ALTER TABLE $events_table ADD contname varchar(50) AFTER conttel; ! ALTER TABLE $events_table ADD contemail varchar(50) AFTER contname; ! ALTER TABLE $events_table ADD website varchar(50) AFTER contemail; ! ALTER TABLE $events_table ADD fee varchar(50) AFTER website;"; ! $dbconn->Execute($sql); ! ! if ($dbconn->ErrorNo() != 0) { ! pnSessionSetVar('errormsg', _UPDATETABLEFAILED); ! return false; ! } ! ! $events_queue_table = $pntable['events_queue']; ! ! $sql = "ALTER TABLE $events_queue_table ADD location varchar(50) AFTER barcolor; ! ALTER TABLE $events_queue_table ADD conttel varchar(50) AFTER location; ! ALTER TABLE $events_queue_table ADD contname varchar(50) AFTER conttel; ! ALTER TABLE $events_queue_table ADD contemail varchar(50) AFTER contname; ! ALTER TABLE $events_queue_table ADD website varchar(50) AFTER contemail; ! ALTER TABLE $events_queue_table ADD fee varchar(50) AFTER website;"; ! $dbconn->Execute($sql); ! ! if ($dbconn->ErrorNo() != 0) { ! pnSessionSetVar('errormsg', _UPDATETABLEFAILED); ! return false; ! } ! ! return PostCalendar_upgrade('2.5'); ! ! case '2.5': ! // Upgrade 2.5.x to 2.6 ! list($dbconn) = pnDBGetConn(); ! $pntable = pnDBGetTables(); ! $events_table = $pntable['events']; ! $events_queue_table = $pntable['events_queue']; ! ! // we need to alter the tables to add the new column prefix 'pc_' ! // this will help in avoiding any of the code using reserved words ! // we should even consider renaming the tables to something more ! // convenient so that people using the code from which this project ! // was based, will not have conflicting results ! ! // TODO: rename tables and add postcalendar_ prefix ! // : perhaps for a future version ! // : $prefix_postcalendar_events ! // : $prefix_postcalendar_events_queue ! ! $sql = "ALTER TABLE $events_table CHANGE eid pc_eid bigint(20) NOT NULL auto_increment; ! ALTER TABLE $events_table CHANGE aid pc_aid varchar(30) NOT NULL default ''; ! ALTER TABLE $events_table CHANGE title pc_title varchar(150) default NULL; ! ALTER TABLE $events_table CHANGE time pc_time datetime default NULL; ! ALTER TABLE $events_table CHANGE hometext pc_hometext blob ! ALTER TABLE $events_table CHANGE comments pc_comments int(11) default '0'; ! ALTER TABLE $events_table CHANGE counter pc_counter mediumint(8) unsigned default NULL; ! ALTER TABLE $events_table CHANGE topic pc_topic int(3) NOT NULL default '1'; ! ALTER TABLE $events_table CHANGE informant pc_informant varchar(20) NOT NULL default ''; ! ALTER TABLE $events_table CHANGE eventDate pc_eventDate date NOT NULL default '0000-00-00' ! ALTER TABLE $events_table CHANGE endDate pc_endDate date NOT NULL default '0000-00-00'; ! ALTER TABLE $events_table CHANGE recurrtype pc_recurrtype int(1) NOT NULL default '0'; ! ALTER TABLE $events_table CHANGE recurrspec pc_recirrspec int(3) default NULL; ! ALTER TABLE $events_table CHANGE startTime pc_startTime time default NULL; ! ALTER TABLE $events_table CHANGE endTime pc_endTime time default NULL; ! ALTER TABLE $events_table CHANGE alldayevent pc_alldayevent int(1) NOT NULL default '0'; ! ALTER TABLE $events_table CHANGE barcolor pc_barcolor char(1) default NULL; ! ALTER TABLE $events_table CHANGE location pc_location varchar(50) default NULL; ! ALTER TABLE $events_table CHANGE conttel pc_conttel varchar(12) default NULL; ! ALTER TABLE $events_table CHANGE contname pc_contname varchar(50) default NULL; ! ALTER TABLE $events_table CHANGE contemail pc_contemail varchar(50) default NULL; ! ALTER TABLE $events_table CHANGE website pc_website varchar(50) default ''; ! ALTER TABLE $events_table CHANGE fee pc_fee varchar(50) default NULL;"; ! ! $dbconn->Execute($sql); ! if ($dbconn->ErrorNo() != 0) { ! pnSessionSetVar('errormsg', _UPDATETABLEFAILED); ! return false; ! } ! ! $sql = "ALTER TABLE $events_queue_table CHANGE qid pc_qid bigint(20) NOT NULL auto_increment; ! ALTER TABLE $events_queue_table CHANGE uid pc_uid mediumint(9) NOT NULL default '0'; ! ALTER TABLE $events_queue_table CHANGE uname pc_uname varchar(40) NOT NULL default ''; ! ALTER TABLE $events_queue_table CHANGE title pc_title varchar(150) NOT NULL default ''; ! ALTER TABLE $events_queue_table CHANGE story pc_story blob ! ALTER TABLE $events_queue_table CHANGE timestamp pc_timestamp datetime NOT NULL default '0000-00-00 00:00:00'; ! ALTER TABLE $events_queue_table CHANGE topic pc_topic varchar(20) NOT NULL default ''; ! ALTER TABLE $events_queue_table CHANGE eventDate pc_eventDate date NOT NULL default '0000-00-00' ! ALTER TABLE $events_queue_table CHANGE endDate pc_endDate date NOT NULL default '0000-00-00'; ! ALTER TABLE $events_queue_table CHANGE recurrtype pc_recurrtype int(1) NOT NULL default '0'; ! ALTER TABLE $events_queue_table CHANGE recurrspec pc_recirrspec int(3) default NULL; ! ALTER TABLE $events_queue_table CHANGE startTime pc_startTime time default NULL; ! ALTER TABLE $events_queue_table CHANGE endTime pc_endTime time default NULL; ! ALTER TABLE $events_queue_table CHANGE alldayevent pc_alldayevent int(1) NOT NULL default '0'; ! ALTER TABLE $events_queue_table CHANGE barcolor pc_barcolor char(1) default NULL; ! ALTER TABLE $events_queue_table CHANGE location pc_location varchar(50) default NULL; ! ALTER TABLE $events_queue_table CHANGE conttel pc_conttel varchar(12) default NULL; ! ALTER TABLE $events_queue_table CHANGE contname pc_contname varchar(50) default NULL; ! ALTER TABLE $events_queue_table CHANGE contemail pc_contemail varchar(50) default NULL; ! ALTER TABLE $events_queue_table CHANGE website pc_website varchar(50) default ''; ! ALTER TABLE $events_queue_table CHANGE fee pc_fee varchar(50) default NULL;"; ! ! $dbconn->Execute($sql); ! if ($dbconn->ErrorNo() != 0) { ! pnSessionSetVar('errormsg', _UPDATETABLEFAILED); ! return false; ! } ! break; } --- 153,158 ---- switch($oldversion) { ! case '2.6': ! // upgrade from verion 2.6 break; } *************** *** 284,288 **** $pntable = pnDBGetTables(); ! $sql = "DROP TABLE $pntable[events]"; $dbconn->Execute($sql); if ($dbconn->ErrorNo() != 0) { --- 172,176 ---- $pntable = pnDBGetTables(); ! $sql = "DROP TABLE $pntable[postcalendar_events]"; $dbconn->Execute($sql); if ($dbconn->ErrorNo() != 0) { *************** *** 290,294 **** return false; } ! $sql = "DROP TABLE $pntable[events_queue]"; $dbconn->Execute($sql); if ($dbconn->ErrorNo() != 0) { --- 178,182 ---- return false; } ! $sql = "DROP TABLE $pntable[postcalendar_events_queue]"; $dbconn->Execute($sql); if ($dbconn->ErrorNo() != 0) { Index: pntables.php =================================================================== RCS file: /cvsroot/pn-modules/PN_PostCalendar/modules/PostCalendar/pntables.php,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** pntables.php 20 Mar 2002 07:47:36 -0000 1.1 --- pntables.php 22 Mar 2002 00:45:45 -0000 1.2 *************** *** 39,91 **** // Get the name for the template item table. This is not necessary // but helps in the following statements and keeps them readable ! $events = pnConfigGetVar('prefix') . '_events'; ! $pntable['events'] = $events; ! $pntable['events_column'] = array('eid' => $events . '.pc_eid', ! 'aid' => $events . '.pc_aid', ! 'title' => $events . '.pc_title', ! 'time' => $events . '.pc_time', ! 'hometext' => $events . '.pc_hometext', ! 'comments' => $events . '.pc_comments', ! 'counter' => $events . '.pc_counter', ! 'topic' => $events . '.pc_topic', ! 'informant' => $events . '.pc_informant', ! 'eventDate' => $events . '.pc_eventDate', ! 'endDate' => $events . '.pc_endDate', ! 'recurrtype' => $events . '.pc_recurrtype', ! 'recurrspec' => $events . '.pc_recurrspec', ! 'startTime' => $events . '.pc_startTime', ! 'endTime' => $events . '.pc_endTime', ! 'alldayevent' => $events . '.pc_alldayevent', ! 'barcolor' => $events . '.pc_barcolor', ! 'location' => $events . '.pc_location', ! 'conttel' => $events . '.pc_conttel', ! 'contname' => $events . '.pc_contname', ! 'contemail' => $events . '.pc_contemail', ! 'website' => $events . '.pc_website', ! 'fee' => $events . '.pc_fee'); ! $events_queue = pnConfigGetVar('prefix') . '_events_queue'; ! $pntable['events_queue'] = $events_queue; ! $pntable['events_queue_column'] = array('qid' => $events_queue . '.pc_qid', ! 'uid' => $events_queue . '.pc_uid', ! 'uname' => $events_queue . '.pc_uname', ! 'title' => $events_queue . '.pc_title', ! 'story' => $events_queue . '.pc_story', ! 'timestamp' => $events_queue . '.pc_timestamp', ! 'topic' => $events_queue . '.pc_topic', ! 'eventDate' => $events_queue . '.pc_eventDate', ! 'endDate' => $events_queue . '.pc_endDate', ! 'recurrtype' => $events_queue . '.pc_recurrtype', ! 'recurrspec' => $events_queue . '.pc_recurrspec', ! 'startTime' => $events_queue . '.pc_startTime', ! 'endTime' => $events_queue . '.pc_endTime', ! 'alldayevent' => $events_queue . '.pc_alldayevent', ! 'barcolor' => $events_queue . '.pc_barcolor', ! 'location' => $events_queue . '.pc_location', ! 'conttel' => $events_queue . '.pc_conttel', ! 'contname' => $events_queue . '.pc_contname', ! 'contemail' => $events_queue . '.pc_contemail', ! 'website' => $events_queue . '.pc_website', ! 'fee' => $events_queue . '.pc_fee'); // Return the table information --- 39,91 ---- // Get the name for the template item table. This is not necessary // but helps in the following statements and keeps them readable ! $events = pnConfigGetVar('prefix') . '_postcalendar_events'; ! $pntable['postcalendar_events'] = $events; ! $pntable['postcalendar_events_column'] = array('eid' => $events . '.pc_eid', ! 'aid' => $events . '.pc_aid', ! 'title' => $events . '.pc_title', ! 'time' => $events . '.pc_time', ! 'hometext' => $events . '.pc_hometext', ! 'comments' => $events . '.pc_comments', ! 'counter' => $events . '.pc_counter', ! 'topic' => $events . '.pc_topic', ! 'informant' => $events . '.pc_informant', ! 'eventDate' => $events . '.pc_eventDate', ! 'endDate' => $events . '.pc_endDate', ! 'recurrtype' => $events . '.pc_recurrtype', ! 'recurrspec' => $events . '.pc_recurrspec', ! 'startTime' => $events . '.pc_startTime', ! 'endTime' => $events . '.pc_endTime', ! 'alldayevent' => $events . '.pc_alldayevent', ! 'barcolor' => $events . '.pc_barcolor', ! 'location' => $events . '.pc_location', ! 'conttel' => $events . '.pc_conttel', ! 'contname' => $events . '.pc_contname', ! 'contemail' => $events . '.pc_contemail', ! 'website' => $events . '.pc_website', ! 'fee' => $events . '.pc_fee'); ! $events_queue = pnConfigGetVar('prefix') . '_postcalendar_events_queue'; ! $pntable['postcalendar_events_queue'] = $events_queue; ! $pntable['postcalendar_events_queue_column'] = array('qid' => $events_queue . '.pc_qid', ! 'uid' => $events_queue . '.pc_uid', ! 'uname' => $events_queue . '.pc_uname', ! 'title' => $events_queue . '.pc_title', ! 'story' => $events_queue . '.pc_story', ! 'timestamp' => $events_queue . '.pc_timestamp', ! 'topic' => $events_queue . '.pc_topic', ! 'eventDate' => $events_queue . '.pc_eventDate', ! 'endDate' => $events_queue . '.pc_endDate', ! 'recurrtype' => $events_queue . '.pc_recurrtype', ! 'recurrspec' => $events_queue . '.pc_recurrspec', ! 'startTime' => $events_queue . '.pc_startTime', ! 'endTime' => $events_queue . '.pc_endTime', ! 'alldayevent' => $events_queue . '.pc_alldayevent', ! 'barcolor' => $events_queue . '.pc_barcolor', ! 'location' => $events_queue . '.pc_location', ! 'conttel' => $events_queue . '.pc_conttel', ! 'contname' => $events_queue . '.pc_contname', ! 'contemail' => $events_queue . '.pc_contemail', ! 'website' => $events_queue . '.pc_website', ! 'fee' => $events_queue . '.pc_fee'); // Return the table information Index: pnuser.php =================================================================== RCS file: /cvsroot/pn-modules/PN_PostCalendar/modules/PostCalendar/pnuser.php,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** pnuser.php 21 Mar 2002 19:36:53 -0000 1.5 --- pnuser.php 22 Mar 2002 00:45:45 -0000 1.6 *************** *** 47,57 **** function PostCalendar_user_view() { ! // get the vars that were passed in ! $Date = pnVarCleanFromInput('Date'); ! $viewtype = pnVarCleanFromInput('viewtype'); ! $jumpday = pnVarCleanFromInput('jumpday'); ! $jumpmonth = pnVarCleanFromInput('jumpmonth'); ! $jumpyear = pnVarCleanFromInput('jumpyear'); // set up defaults if(!isset($viewtype)) { --- 47,67 ---- function PostCalendar_user_view() { ! // Security check - important to do this as early as possible to avoid ! // potential security holes or just too much wasted processing ! if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { ! $output->Text(_POSTCALENDARNOAUTH); ! return $output->GetOutput(); ! } + // get the vars that were passed in + list($Date, + $viewtype, + $jumpday, + $jumpmonth, + $jumpyear) = pnVarCleanFromInput('Date', + 'viewtype', + 'jumpday', + 'jumpmonth', + 'jumpyear'); // set up defaults if(!isset($viewtype)) { *************** *** 74,98 **** $output = new pnHTML(); ! // add menu to output $output->SetInputMode(_PNH_VERBATIMINPUT); $output->Text(PostCalendar_usermenu()); $output->SetInputMode(_PNH_PARSEINPUT); - - // Security check - important to do this as early as possible to avoid - // potential security holes or just too much wasted processing - if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { - $output->Text(_POSTCALENDARNOAUTH); - return $output->GetOutput(); - } - - // Load API. All of the actual work for obtaining information on the items - // is done within the API, so we need to load that in before we can do - // anything. If the API fails to load an appropriate error message is - // posted and the function returns - if (!pnModAPILoad('PostCalendar', 'user')) { - $output->Text(_LOADFAILED); - return $output->GetOutput(); - } $output->Text($viewtype.' '.$Date); $output->Linebreak(); --- 84,96 ---- $output = new pnHTML(); ! $output->SetInputMode(_PNH_VERBATIMINPUT); $output->Text(PostCalendar_usermenu()); $output->SetInputMode(_PNH_PARSEINPUT); + $output->SetInputMode(_PNH_VERBATIMINPUT); + $output->Text(PostCalendar_user_display(array('viewtype'=>$viewtype,'Date'=>$Date))); + $output->SetInputMode(_PNH_PARSEINPUT); + $output->Text($viewtype.' '.$Date); $output->Linebreak(); *************** *** 102,204 **** /** * display item ! * This is a standard function to provide detailed informtion on a single item * available from the module. */ function PostCalendar_user_display($args) { ! // Get parameters from whatever input we need. All arguments to this ! // function should be obtained from pnVarCleanFromInput(), getting them ! // from other places such as the environment is not allowed, as that makes ! // assumptions that will not hold in future versions of PostNuke. ! list($tid, ! $objectid) = pnVarCleanFromInput('tid', ! 'objectid'); - // User functions of this type can be called by other modules. If this - // happens then the calling module will be able to pass in arguments to - // this function through the $args parameter. Hence we extract these - // arguments *after* we have obtained any form-based input through - // pnVarCleanFromInput(). extract($args); ! // At this stage we check to see if we have been passed $objectid, the ! // generic item identifier. This could have been passed in by a hook or ! // through some other function calling this as part of a larger module, but ! // if it exists it overrides $tid ! // ! // Note that this module couuld just use $objectid everywhere to avoid all ! // of this munging of variables, but then the resultant code is less ! // descriptive, especially where multiple objects are being used. The ! // decision of which of these ways to go is up to the module developer ! if (!empty($objectid)) { ! $tid = $objectid; } ! ! // Create output object - this object will store all of our output so that ! // we can return it easily when required ! $output = new pnHTML(); ! ! // Add menu to output - it helps if all of the module pages have a standard ! // menu at their head to aid in navigation ! $output->SetInputMode(_PNH_VERBATIMINPUT); ! $output->Text(PostCalendar_usermenu()); ! $output->SetInputMode(_PNH_PARSEINPUT); ! ! // Load API. All of the actual work for obtaining information on the items ! // is done within the API, so we need to load that in before we can do ! // anything. If the API fails to load an appropriate error message is ! // posted and the function returns if (!pnModAPILoad('PostCalendar', 'user')) { ! $output->Text(_LOADFAILED); ! return $output->GetOutput(); ! } ! ! // The API function is called. The arguments to the function are passed in ! // as their own arguments array ! $item = pnModAPIFunc('Template', ! 'user', ! 'get', ! array('tid' => $tid)); ! ! // The return value of the function is checked here, and if the function ! // suceeded then an appropriate message is posted. Note that if the ! // function did not succeed then the API function should have already ! // posted a failure message so no action is required ! if ($item == false) { ! $output->Text(_TEMPLATEITEMFAILED); ! return $output->GetOutput(); ! } ! ! // Display details of the item. Note the use of pnVarCensor() to remove ! // any words from the name that the administrator has deemed unsuitable for ! // the site. Also note that a module variable is used here to determine ! // whether not not parts of the item information should be displayed in ! // bold type or not ! $output->Text(_TEMPLATENAME . ': '); ! if (pnModGetVar('Template', 'bold')) { ! $output->BoldText(pnVarCensor($item['name'])); ! } else { ! $output->Text(pnVarCensor($item['name'])); } ! $output->Linebreak(2); ! $output->Text(_TEMPLATENUMBER . ': '); ! $output->Text($item['number']); ! $output->Linebreak(2); ! ! ! // Let any hooks know that we are displaying an item. As this is a display ! // hook we're passing a URL as the extra info, which is the URL that any ! // hooks will show after they have finished their own work. It is normal ! // for that URL to bring the user back to this function $output->SetInputMode(_PNH_VERBATIMINPUT); ! $output->Text(pnModCallHooks('item', ! 'display', ! $tid, ! pnModURL('Template', ! 'user', ! 'display', ! array('tid' => $tid)))); ! $output->SetInputMode(_PNH_PARSEINPUT); ! // Return the output that has been generated by this function return $output->GetOutput(); --- 100,139 ---- /** * display item ! * This is a standard function to provide detailed information on a single item * available from the module. */ function PostCalendar_user_display($args) { ! list($eid, ! $viewtype, ! $Date) = pnVarCleanFromInput('eid', ! 'viewtype', ! 'Date'); extract($args); ! if(empty($Date) && empty($viewtype)) { ! return false; } ! ! // Load the user API if (!pnModAPILoad('PostCalendar', 'user')) { ! die('Failed to load PostCalendar User API'); } ! ! $output = new pnHTML(); $output->SetInputMode(_PNH_VERBATIMINPUT); ! switch ($viewtype) { ! ! case 'day': ! $output->Text(pnModAPIFunc('PostCalendar','user','buildDay',array('Date'=>$Date))); ! break; ! ! case 'month': ! break; ! ! case 'year': ! break; ! } // Return the output that has been generated by this function return $output->GetOutput(); *************** *** 211,215 **** { $output = new pnHTML(); $output->SetInputMode(_PNH_VERBATIMINPUT); ! $output->Text(PostCalendar_user_view()); $output->SetInputMode(_PNH_PARSEINPUT); $output->Text('submit'); --- 146,150 ---- { $output = new pnHTML(); $output->SetInputMode(_PNH_VERBATIMINPUT); ! $output->Text(PostCalendar_usermenu()); $output->SetInputMode(_PNH_PARSEINPUT); $output->Text('submit'); *************** *** 223,227 **** { $output = new pnHTML(); $output->SetInputMode(_PNH_VERBATIMINPUT); ! $output->Text(PostCalendar_user_view()); $output->SetInputMode(_PNH_PARSEINPUT); $output->Text('search'); --- 158,162 ---- { $output = new pnHTML(); $output->SetInputMode(_PNH_VERBATIMINPUT); ! $output->Text(PostCalendar_usermenu()); $output->SetInputMode(_PNH_PARSEINPUT); $output->Text('search'); *************** *** 234,237 **** --- 169,176 ---- function PostCalendar_usermenu() { + // get the theme globals :: is there a better way to do this? + global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5; + global $textcolor1, $textcolor2; + // Create output object - this object will store all of our output so that // we can return it easily when required *************** *** 253,258 **** // here we build the contents of the main menu $output->FormStart(pnModUrl('PostCalendar','user','view')); ! $output->Text('<table border="0" cellpadding="1" cellspacing="0" width="100%" bgcolor="#000000"><tr><td>'); ! $output->Text('<table border="1" cellpadding="5" cellspacing="0" width="100%" bgcolor="#ffffff">'); $output->Text('<tr>'); $output->Text('<td rowspan="5" width="10" valign="top">'); --- 192,197 ---- // here we build the contents of the main menu $output->FormStart(pnModUrl('PostCalendar','user','view')); ! $output->Text('<table border="0" cellpadding="1" cellspacing="0" width="100%" bgcolor="'.$bgcolor2.'"><tr><td>'); ! $output->Text('<table border="0" cellpadding="5" cellspacing="0" width="100%" bgcolor="'.$bgcolor1.'">'); $output->Text('<tr>'); $output->Text('<td rowspan="5" width="10" valign="top">'); *************** *** 345,363 **** $output->FormEnd(); - /* - $output->SetOutputMode(_PNH_RETURNOUTPUT); - $columns = array(); - $columns[] = $output->URL(pnModURL('Template', - 'user', - 'view'), - _TEMPLATEVIEW); - $output->SetOutputMode(_PNH_KEEPOUTPUT); - $output->SetInputMode(_PNH_VERBATIMINPUT); - $output->TableAddRow($columns); - $output->SetInputMode(_PNH_PARSEINPUT); - // end of the menu contents - $output->TableEnd(); - */ - // Return the output that has been generated by this function return $output->GetOutput(); --- 284,287 ---- Index: pnuserapi.php =================================================================== RCS file: /cvsroot/pn-modules/PN_PostCalendar/modules/PostCalendar/pnuserapi.php,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** pnuserapi.php 21 Mar 2002 19:36:53 -0000 1.4 --- pnuserapi.php 22 Mar 2002 00:45:45 -0000 1.5 *************** *** 167,170 **** --- 167,174 ---- function PostCalendar_userapi_printAppt($args) { + // get the theme globals :: is there a better way to do this? + global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5; + global $textcolor1, $textcolor2; + extract($args); if(!isset($sql)){ *************** *** 181,188 **** $modinfo = pnModGetInfo($modid); ! $eventsopeninnewwindow = pnModGetVar('PostCalendar','eventsopeninnewwindow'); ! $time24Hour = pnModGetVar('PostCalendar','time24hour'); ! ! //pnModDBInfoLoad('PostCalendar'); list($dbconn) = pnDBGetConn(); $pntable = pnDBGetTables(); --- 185,189 ---- $modinfo = pnModGetInfo($modid); ! pnModDBInfoLoad('PostCalendar'); list($dbconn) = pnDBGetConn(); $pntable = pnDBGetTables(); *************** *** 190,197 **** $topics_column = &$pntable['topics_column']; - //$pntable - //$topics_array // <---- WHAT IS THIS??? - //$topics; - $result = $dbconn->Execute($sql); $result_topics = $dbconn->Execute("SELECT $topics_column[topicid], $topics_column[topictext] from $topics_table"); --- 191,194 ---- *************** *** 212,216 **** } ! if ($time24Hour) { $time_Array = explode(":",$startTime); $startTime = $time_Array[0].":".$time_Array[1]; --- 209,213 ---- } ! if (pnModGetVar('PostCalendar','time24hours')) { $time_Array = explode(":",$startTime); $startTime = $time_Array[0].":".$time_Array[1]; *************** *** 218,232 **** $endTime = $time_Array[0].":".$time_Array[1]; } else { ! $startTime = getTime($startTime); ! $endTime = getTime($endTime); } ! if ($eventsopeninnewwindow) { $link="\"javascript:opencal($eid);\""; } else { ! $link = pnModURL('PostCalendar',array('viewtype'=>'viewevent','eid'=>$eid)); } $output->Linebreak(); ! $output->Text("<img src=\"modules/$modinfo[directory]/images/ball$barcolorchar.gif\" border=0> "); ! $output->Text($startTime.'-'.$endTime); $output->Linebreak(); $output->Text(' '); --- 215,230 ---- $endTime = $time_Array[0].":".$time_Array[1]; } else { ! $startTime = pnModAPIFunc('PostCalendar','user','getTime',array('time'=>$startTime)); ! $endTime = pnModAPIFunc('PostCalendar','user','getTime',array('time'=>$endTime)); } ! ! if (pnModGetVar('PostCalendar','eventsopeninnewwindow')) { $link="\"javascript:opencal($eid);\""; } else { ! $link = pnModURL('PostCalendar','user','view',array('viewtype'=>'detail','eid'=>$eid)); } $output->Linebreak(); ! $output->Text("<img src=\"modules/$modinfo[directory]/pnimages/ball$barcolor.gif\" border=0> "); ! $output->Text($startTime.' - '.$endTime); $output->Linebreak(); $output->Text(' '); *************** *** 236,240 **** $output->Linebreak(); $output->Text(' '); ! $output->Text("<font class=\"pn-tiny\">". $topics_array[$topic] . "</font>"); $output->Linebreak(); $old_topic = $topic; --- 234,238 ---- $output->Linebreak(); $output->Text(' '); ! $output->Text("<font class=\"pn-tiny\">[ ". $topics_array[$topic] . " ]</font>"); $output->Linebreak(); $old_topic = $topic; *************** *** 245,252 **** $result_topics->Close(); ! $output->GetOutput(); ! $output->PrintPage(); ! // should we return this isntead - will have to wait and see ! // return $output; } --- 243,247 ---- $result_topics->Close(); ! return $output->GetOutput(); } *************** *** 288,308 **** } ! $month = Date("w",$Date); ! if ($month == "0") { ! $dayname = _CALLONGFIRSTDAY; ! } elseif ($month == "1") { ! $dayname = _CALLONGSECONDDAY; ! } elseif ($month == "2") { ! $dayname = _CALLONGTHIRDDAY; ! } elseif ($month == "3") { ! $dayname = _CALLONGFOURTHDAY; ! } elseif ($month == "4") { ! $dayname = _CALLONGFIFTHDAY; ! } elseif ($month == "5") { ! $dayname = _CALLONGSIXTHDAY; ! } elseif ($month == "6") { ! $dayname = _CALLONGSEVENTHDAY; ! } ! return $dayname; } --- 283,295 ---- } ! $pc_long_day = array(_CALLONGFIRSTDAY, ! _CALLONGSECONDDAY, ! _CALLONGTHIRDDAY, ! _CALLONGFOURTHDAY, ! _CALLONGFIFTHDAY, ! _CALLONGSIXTHDAY, ! _CALLONGSEVENTHDAY); ! ! return $pc_long_day[Date("w",$Date)]; } *************** *** 325,556 **** } ! // OLD TEMPLATE SHITE ! ! ! /** ! * get all example items ! * @returns array ! * @return array of items, or false on failure ! */ ! function PostCalendar_userapi_getall($args) ! { ! // ! extract($args); ! // Optional arguments. ! if (!isset($startnum)) { ! $startnum = 1; ! } ! if (!isset($numitems)) { ! $numitems = -1; ! } ! if ((!isset($startnum)) || ! (!isset($numitems))) { ! pnSessionSetVar('errormsg', _MODARGSERROR); ! return false; ! } ! $items = array(); ! // Security check - important to do this as early on as possible to ! // avoid potential security holes or just too much wasted processing ! if (!pnSecAuthAction(0, 'Template::', '::', ACCESS_READ)) { ! return $items; ! } ! // Get datbase setup - note that both pnDBGetConn() and pnDBGetTables() ! // return arrays but we handle them differently. For pnDBGetConn() we ! // currently just want the first item, which is the official database ! // handle. For pnDBGetTables() we want to keep the entire tables array ! // together for easy reference later on ! list($dbconn) = pnDBGetConn(); ! $pntable = pnDBGetTables(); ! // It's good practice to name the table and column definitions you are ! // getting - $table and $column don't cut it in more complex modules ! $templatetable = $pntable['template']; ! $templatecolumn = &$pntable['template_column']; - // Get items - the formatting here is not mandatory, but it does make the - // SQL statement relatively easy to read. Also, separating out the sql - // statement from the SelectLimit() command allows for simpler debug - // operation if it is ever needed - $sql = "SELECT $templatecolumn[tid], - $templatecolumn[name], - $templatecolumn[number] - FROM $templatetable - ORDER BY $templatecolumn[name]"; - $result = $dbconn->SelectLimit($sql, $numitems, $startnum-1); ! // Check for an error with the database code, and if so set an appropriate ! // error message and return ! if ($dbconn->ErrorNo() != 0) { ! pnSessionSetVar('errormsg', _GETFAILED); ! return false; ! } - // Put items into result array. Note that each item is checked - // individually to ensure that the user is allowed access to it before it - // is added to the results array - for (; !$result->EOF; $result->MoveNext()) { - list($tid, $name, $number) = $result->fields; - if (pnSecAuthAction(0, 'Template::', "$name::$tid", ACCESS_READ)) { - $items[] = array('tid' => $tid, - 'name' => $name, - 'number' => $number); } } ! ! // All successful database queries produce a result set, and that result ! // set should be closed when it has been finished with ! $result->Close(); ! ! // Return the items ! return $items; } ! /** ! * get a specific item ! * @param $args['tid'] id of example item to get ! * @returns array ! * @return item array, or false on failure ! */ ! function PostCalendar_userapi_get($args) { ! // Get arguments from argument array - all arguments to this function ! // should be obtained from the $args array, getting them from other places ! // such as the environment is not allowed, as that makes assumptions that ! // will not hold in future versions of PostNuke ! extract($args); ! // Argument check - make sure that all required arguments are present, if ! // not then set an appropriate error message and return ! if (!isset($tid)) { ! pnSessionSetVar('errormsg', _MODARGSERROR); ! return false; ! } ! // Get datbase setup - note that both pnDBGetConn() and pnDBGetTables() ! // return arrays but we handle them differently. For pnDBGetConn() we ! // currently just want the first item, which is the official database ! // handle. For pnDBGetTables() we want to keep the entire tables array ! // together for easy reference later on ! list($dbconn) = pnDBGetConn(); ! $pntable = pnDBGetTables(); ! // It's good practice to name the table and column definitions you are ! // getting - $table and $column don't cut it in more complex modules ! $templatetable = $pntable['template']; ! $templatecolumn = &$pntable['template_column']; - // Get item - the formatting here is not mandatory, but it does make the - // SQL statement relatively easy to read. Also, separating out the sql - // statement from the Execute() command allows for simpler debug operation - // if it is ever needed - $sql = "SELECT $templatecolumn[name], - $templatecolumn[number] - FROM $templatetable - WHERE $templatecolumn[tid] = " . pnVarPrepForStore($tid); - $result = $dbconn->Execute($sql); ! // Check for an error with the database code, and if so set an appropriate ! // error message and return ! if ($dbconn->ErrorNo() != 0) { ! return false; ! } ! // Check for no rows found, and if so return ! if ($result->EOF) { ! return false; ! } ! // Obtain the item information from the result set ! list($name, $number) = $result->fields; ! // All successful database queries produce a result set, and that result ! // set should be closed when it has been finished with ! $result->Close(); ! // Security check - important to do this as early on as possible to avoid ! // potential security holes or just too much wasted processing. Although ! // this one is a bit late in the function it is as early as we can do it as ! // this is the first time we have the relevant information ! if (!pnSecAuthAction(0, 'Template::', "$name::$tid", ACCESS_READ)) { ! return false; } ! // Create the item array ! $item = array('tid' => $tid, ! 'name' => $name, ! 'number' => $number); ! // Return the item array ! return $item; ! } ! /** ! * utility function to count the number of items held by this module ! * @returns integer ! * @return number of items held by this module ! */ ! function PostCalendar_userapi_countitems() ! { ! // Get datbase setup - note that both pnDBGetConn() and pnDBGetTables() ! // return arrays but we handle them differently. For pnDBGetConn() we ! // currently just want the first item, which is the official database ! // handle. For pnDBGetTables() we want to keep the entire tables array ! // together for easy reference later on ! list($dbconn) = pnDBGetConn(); ! $pntable = pnDBGetTables(); ! // It's good practice to name the table and column definitions you are ! // getting - $table and $column don't cut it in more complex modules ! $templatetable = $pntable['template']; ! $templatecolumn = &$pntable['template_column']; ! // Get item - the formatting here is not mandatory, but it does make the ! // SQL statement relatively easy to read. Also, separating out the sql ! // statement from the Execute() command allows for simpler debug operation ! // if it is ever needed ! $sql = "SELECT COUNT(1) ! FROM $templatetable"; ! $result = $dbconn->Execute($sql); ! // Check for an error with the database code, and if so set an appropriate ! // error message and return ! if ($dbconn->ErrorNo() != 0) { ! return false; ! } ! // Obtain the number of items ! list($numitems) = $result->fields; ! // All successful database queries produce a result set, and that result ! // set should be closed when it has been finished with ! $result->Close(); ! // Return the number of items ! return $numitems; } ?> --- 312,903 ---- } + //$startTime,$endTime,$year,$month,$day + function PostCalendar_userapi_addTimeRange($args) + { + // get the theme globals :: is there a better way to do this? + global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5; + global $textcolor1, $textcolor2; + + extract($args); + // make sure we've got everything we need + if(!isset($startTime) || + !isset($endTime) || + !isset($year) || + !isset($month) || + !isset($day)) { + return false; + } + + $output = new pnHTML(); + $output->SetInputMode(_PNH_VERBATIMINPUT); + $output->SetOutputMode(_PNH_KEEPOUTPUT); + + $dayhighlightcolor = pnModGetVar('PostCalendar','dayhighlightcolor'); + + pnModDBInfoLoad('PostCalendar'); + list($dbconn) = pnDBGetConn(); + $pntable = pnDBGetTables(); + $events_table = $pntable['postcalendar_events']; + $events_column = &$pntable['postcalendar_events_column']; + + if (pnModGetVar('PostCalendar','time24hours')) { + $tmpTime = substr($startTime,0,5); + $tmpTime2 = substr($endTime,0,5); + } else { + $tmpTime = getTime($startTime); + $tmpTime2 = getTime($endTime); + } + + $output->Linebreak(2); + $output->Text('<font class="pn-normal" color='.$textcolor1.'>'.$tmpTime - $tmpTime2.'</font>'); + + $sql = "SELECT $events_column[eid], + $events_column[title], + $events_column[startTime], + $events_column[endTime], + $events_column[barcolor], + $events_column[topic] + FROM $events_table + WHERE (recurrtype=0 + AND eventDate <= '$year-$month-$day' + AND endDate >= '$year-$month-$day' + AND alldayevent='0' + AND startTime >= '$startTime' + AND startTime < '$endTime') + OR (recurrtype=1 + AND eventDate <= '$year-$month-$day' + AND endDate >= '$year-$month-$day' + AND (DAYOFWEEK(eventDate)=DAYOFWEEK('$year-$month-$day')) + AND alldayevent='0' + AND startTime >= '$startTime' + AND startTime < '$endTime') + OR (recurrtype=2 + AND eventDate <= '$year-$month-$day' + AND endDate >= '$year-$month-$day' + AND (DAYOFMONTH(eventDate)=DAYOFMONTH('$year-$month-$day')) + AND alldayevent='0' + AND startTime >= '$startTime' + AND startTime < '$endTime') + OR (recurrtype=3 + AND eventDate <= '$year-$month-$day' + AND endDate >= '$year-$month-$day' + AND (DAYOFMONTH(eventDate)=DAYOFMONTH('$year-$month-$day')) + AND (MONTH(eventDate)=MONTH('$year-$month-$day')) + AND alldayevent='0' + AND startTime >= '$startTime' + AND startTime < '$endTime') + ORDER BY topic, title ASC"; + $output->Text(pnModAPIFunc('PostCalendar','user','printAppt',array('sql'=>$sql))); + return $output->GetOutput(); + } + /** + * BUILD DAY VIEW + */ + function PostCalendar_userapi_buildDay($args) + { + // get the theme globals :: is there a better way to do this? + global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5; + global $textcolor1, $textcolor2; + + extract($args); + if(!isset($Date)) { + $Date = Date("m/d/Y"); + } + // get DB information + pnModDBInfoLoad('PostCalendar'); + list($dbconn) = pnDBGetConn(); + $pntable = pnDBGetTables(); + + $events_table = $pntable['postcalendar_events']; + $events_column = &$pntable['postcalendar_events_column']; + + $topics_table = $pntable['topics']; + $topics_column = &$pntable['topics_column']; + + // lets get the module's information + $modid = pnModGetIDFromName('PostCalendar'); + $modinfo = pnModGetInfo($modid); + // start the output container + $output = new pnHTML(); + $output->SetInputMode(_PNH_VERBATIMINPUT); + $output->SetOutputMode(_PNH_KEEPOUTPUT); + + $output->TableStart(); + + $Date_Array = explode("/", $Date); + if ($Date_Array[2] < 1970) { + $output->Text("Sorry!<br> We can/'t interpret dates before 01/01/1970, If you've used a 2 digit year please use a 4 digit one."); + } else { + $Date = mktime("", "", "", $Date_Array[0], $Date_Array[1], $Date_Array[2]); + /**** Header */ + $Prev_Month = mktime("", "", "", $Date_Array[0], $Date_Array[1] - 1, $Date_Array[2]); + $Prev_Date = Date("m/d/Y",$Prev_Month); + $Next_Month = mktime("", "", "", $Date_Array[0], $Date_Array[1] + 1, $Date_Array[2]); + $Next_Date = Date("m/d/Y",$Next_Month); + $output->Text('<TABLE width="100%"><TR>'); + + /**** Print Previous Month Button */ + $output->Text("<td width=100 align=left>"); + $url = pnModURL('PostCalendar','user','view',array('Date'=>$Prev_Date,'viewtype'=>'day')); + $output->URL($url,'<< '._CALPREVIOUS); + $output->Text('</td>'); + //$output->Text("</tr></table>"); + /**** Print Month Name and Year */ + $pc_longDayName = pnModAPIFunc('PostCalendar','user','getLongDayName',array('Date'=>$Date)); + $pc_monthName = pnModAPIFunc('PostCalendar','user','getMonthName',array('Date'=>$Date)); + $output->Text('<td align="center">'); + if (pnModGetVar('PostCalendar','useinternationaldates')) { + $output->Text($pc_longDayName.", ".Date("d. ",$Date).$pc_monthName." ".Date("Y",$Date)); + } else { + $output->Text($pc_longDayName.", ".$pc_monthName." ".Date("d, Y",$Date)); + } + $output->Text('</td>'); + /**** Print Next Month Button */ + $output->Text("<td width=100 align=right>"); + $url = pnModURL('PostCalendar','user','view',array('Date'=>$Next_Date,'viewtype'=>'day')); + $output->URL($url,_CALNEXT.' >>'); + $output->Text('</td>'); + $output->Text("</tr></table>"); + $output->Text("<CENTER><TABLE border=0 cellspacing=5 cellpadding=1 width=100%><TR>"); + /**** Appointments */ + if(pnModGetVar('PostCalendar','doappointments')) { + $output->Text("<TD width=50% valign=top bgcolor=$bgcolor3>"); + $output->Text("<TABLE width=100% bgcolor=$bgcolor2 border=0 cellspacing=0><TR><TD><FONT class=\"boxtitle\" color=$textcolor1> "._CALAPPOINTMENTS."</font></TD></TR></TABLE>"); + $output->Text("<FONT class=\"pn-normal\" COLOR=$textcolor1>"._CALMORNING."</FONT>"); + $sql = "SELECT $events_column[eid], + $events_column[title], + $events_column[startTime], + $events_column[endTime], + $events_column[barcolor], + $events_column[topic] + + FROM $events_table + + WHERE ($events_column[recurrtype]=0 + AND $events_column[eventDate] <= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' + AND $events_column[endDate] >= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' + AND $events_column[alldayevent] ='0' + AND $events_column[startTime] < '$times[0]') + + OR + ($events_column[recurrtype]=1 + AND $events_column[eventDate] <= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' + AND $events_column[endDate] >= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' + AND (DAYOFWEEK($events_column[eventDate])=DAYOFWEEK('$Date_Array[2]-$Date_Array[0]-$Date_Array[1]')) + AND $events_column[alldayevent] ='0' + AND $events_column[startTime] < '$times[0]') + + OR + ($events_column[recurrtype]=2 + AND $events_column[eventDate] <= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' + AND $events_column[endDate] >= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' + AND (DAYOFMONTH($events_column[eventDate])=DAYOFMONTH('$Date_Array[2]-$Date_Array[0]-$Date_Array[1]')) + AND $events_column[alldayevent] = '0' + AND $events_column[startTime] < '$times[0]') + + OR + ($events_column[recurrtype]=3 + AND $events_column[eventDate] <= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' + AND $events_column[endDate] >= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' + AND (DAYOFMONTH($events_column[eventDate])=DAYOFMONTH('$Date_Array[2]-$Date_Array[0]-$Date_Array[1]')) + AND (MONTH($events_column[eventDate])=MONTH('$Date_Array[2]-$Date_Array[0]-$Date_Array[1]')) + AND $events_column[alldayevent] ='0' + AND $events_column[startTime] < '$times[0]') + ORDER BY $events_column[topic], $events_column[startTime], $events_column[endTime], $events_column[title] ASC"; + $output->Text(pnModAPIFunc('PostCalendar','user','printAppt',array('sql'=>$sql))); + $i = 0; + while ($times[$i]) { + $output->Text(pnModAPIFunc('PostCalendar','user','addTimeRange',array('startTime'=>$times[$i], + 'endTime'=>$times[$i+1], + 'year'=>$Date_Array[2], + 'month'=>$Date_Array[0], + 'day'=>$Date_Array[1]))); + $i++; + if (!($times[$i+1])) { + break; + } + } + $output->Linebreak(2); + $output->Text("<FONT class=\"pn-normal\" COLOR=$textcolor1>"._CALEVENING."</FONT>"); ! $sql = "SELECT $events_column[eid], ! $events_column[title], ! $events_column[startTime], ! $events_column[endTime], ! $events_column[barcolor], ! $events_column[topic] ! ! FROM $events_table ! ! WHERE ($events_column[recurrtype] = 0 ! AND $events_column[eventDate] <= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' ! AND $events_column[endDate] >= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' ! AND $events_column[alldayevent] ='0' ! AND $events_column[startTime] >= '$times[$i]') ! ! OR ($events_column[recurrtype] = 1 ! AND $events_column[eventDate] <= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' ! AND $events_column[endDate] >= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' ! AND (DAYOFWEEK($events_column[eventDate]) = DAYOFWEEK('$Date_Array[2]-$Date_Array[0]-$Date_Array[1]')) ! AND $events_column[alldayevent] = '0' ! AND $events_column[startTime] >= '$times[$i]') ! ! OR ($events_column[recurrtype] = 2 ! AND $events_column[eventDate] <= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' ! AND $events_column[endDate] >= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' ! AND (DAYOFMONTH($events_column[eventDate]) = DAYOFMONTH('$Date_Array[2]-$Date_Array[0]-$Date_Array[1]')) ! AND $events_column[alldayevent] = '0' ! AND $events_column[startTime] >= '$times[$i]') ! ! OR ($events_column[recurrtype] = 3 ! AND $events_column[eventDate] <= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' ! AND $events_column[endDate] >= '$Date_Array[2]-$Date_Array[0]-$Date_Array[1]' ! AND (DAYOFMONTH($events_column[eventDate]) = DAYOFMONTH('$Date_Array[2]-$Date... [truncated message content] |