| [ Index ] |
krapohl.info |
[Summary view] [Print] [Text view]
1 <?php 2 @define('__POSTCALENDAR__','PostCalendar'); 3 /** 4 * $Id: pnuser.php,v 1.4 2004/08/19 19:16:06 larsneo Exp $ 5 * 6 * PostCalendar::PostNuke Events Calendar Module 7 * Copyright (C) 2002 The PostCalendar Team 8 * http://postcalendar.tv 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 * 24 * To read the license please read the docs/license.txt or visit 25 * http://www.gnu.org/copyleft/gpl.html 26 * 27 */ 28 29 //========================================================================= 30 // Load the API Functions and Language defines 31 //========================================================================= 32 pnModAPILoad(__POSTCALENDAR__,'user'); 33 34 //========================================================================= 35 // start the main postcalendar application 36 //========================================================================= 37 function postcalendar_user_main() 38 { 39 // check the authorization 40 41 if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { return _POSTCALENDARNOAUTH; } 42 // get the date and go to the view function 43 $Date = postcalendar_getDate(); 44 return postcalendar_user_view(array('Date'=>$Date)); 45 } 46 47 48 /** 49 * view items 50 * This is a standard function to provide an overview of all of the items 51 * available from the module. 52 */ 53 function postcalendar_user_view() 54 { 55 if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { return _POSTCALENDARNOAUTH; } 56 57 // get the vars that were passed in 58 list($Date, 59 $print, 60 $viewtype, 61 $jumpday, 62 $jumpmonth, 63 $jumpyear) = pnVarCleanFromInput('Date', 64 'print', 65 'viewtype', 66 'jumpday', 67 'jumpmonth', 68 'jumpyear'); 69 70 $Date =& postcalendar_getDate(); 71 if(!isset($viewtype)) $viewtype = _SETTING_DEFAULT_VIEW; 72 return postcalendar_user_display(array('viewtype'=>$viewtype,'Date'=>$Date,'print'=>$print)) . postcalendar_footer(); 73 } 74 75 /** 76 * display item 77 * This is a standard function to provide detailed information on a single item 78 * available from the module. 79 */ 80 function postcalendar_user_display($args) 81 { 82 list($eid, $viewtype, $tplview, 83 $pc_username, $Date, $print, $category, $topic) = pnVarCleanFromInput('eid', 'viewtype', 'tplview', 84 'pc_username', 'Date', 'print', 'pc_category', 'pc_topic'); 85 86 extract($args); 87 if(empty($Date) && empty($viewtype)) { 88 return false; 89 } 90 if(empty($tplview)) $tplview = 'default'; 91 $uid = pnUserGetVar('uid'); 92 $theme = pnUserGetTheme(); 93 94 $cacheid = md5($Date.$viewtype.$tplview._SETTING_TEMPLATE.$eid.$print.$uid.'u'.$pc_username.$theme.'c'.$category.'t'.$topic); 95 96 switch ($viewtype) 97 { 98 case 'details': 99 if (!(bool)PC_ACCESS_READ) { 100 return _POSTCALENDARNOAUTH; 101 } 102 $event = pnModAPIFunc('PostCalendar','user','eventDetail',array('eid'=>$eid, 103 'Date'=>$Date, 104 'print'=>$print, 105 'cacheid'=>$cacheid)); 106 if($event === false) { 107 pnRedirect(pnModURL(__POSTCALENDAR__,'user')); 108 } 109 $out = "\n\n<!-- START user_display -->\n\n"; 110 $out .= $event; 111 $out .= "\n\n<!-- END user_display -->\n\n"; 112 break; 113 114 default : 115 if (!(bool)PC_ACCESS_OVERVIEW) { 116 return _POSTCALENDARNOAUTH; 117 } 118 $out = "\n\n<!-- START user_display -->\n\n"; 119 $out .= pnModAPIFunc('PostCalendar','user','buildView',array('Date'=>$Date, 120 'viewtype'=>$viewtype, 121 'cacheid'=>$cacheid)); 122 $out .= "\n\n<!-- END user_display -->\n\n"; 123 break; 124 } 125 // Return the output that has been generated by this function 126 return $out; 127 } 128 function postcalendar_user_delete() 129 { 130 if(!(bool)PC_ACCESS_ADD) { 131 return _POSTCALENDAR_NOAUTH; 132 } 133 134 $output =& new pnHTML(); 135 $output->SetInputMode(_PNH_VERBATIMINPUT); 136 137 $uname = pnUserGetVar('uname'); 138 list($action,$pc_event_id) = pnVarCleanFromInput('action','pc_event_id'); 139 $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id); 140 if($uname != $event['uname']) { 141 return _PC_CAN_NOT_DELETE; 142 } 143 unset($event); 144 145 // delete form fixed by --Roger Clermont 7/8/04 <roger_c_clermont@yahoo.com> 146 $output->FormStart(pnModUrl(__POSTCALENDAR__,'user','deleteevents')); 147 $output->FormHidden('pc_eid',$pc_event_id); 148 $output->Text(_PC_DELETE_ARE_YOU_SURE.' '); 149 $output->FormSubmit(_PC_ADMIN_YES); 150 $output->FormEnd(); 151 $output->Linebreak(2); 152 $output->Text(pnModAPIFunc(__POSTCALENDAR__,'user','eventDetail',array('eid'=>$pc_event_id,'cacheid'=>'','print'=>0,'Date'=>''))); 153 $output->Linebreak(2); 154 $output->FormStart(pnModUrl(__POSTCALENDAR__,'user','deleteevents')); 155 $output->FormHidden('pc_eid',$pc_event_id); 156 $output->Text(_PC_DELETE_ARE_YOU_SURE.' '); 157 $output->FormSubmit(_PC_ADMIN_YES); 158 $output->FormEnd(); 159 160 return $output->GetOutput(); 161 } 162 function postcalendar_user_deleteevents() 163 { 164 if(!(bool)PC_ACCESS_ADD) { 165 return _POSTCALENDAR_NOAUTH; 166 } 167 168 $uname = pnUserGetVar('uname'); 169 $pc_eid = pnVarCleanFromInput('pc_eid'); 170 $event =& postcalendar_userapi_pcGetEventDetails($pc_eid); 171 if($uname != $event['uname']) { 172 return _PC_CAN_NOT_DELETE; 173 } 174 unset($event); 175 176 $output =& new pnHTML(); 177 $output->SetInputMode(_PNH_VERBATIMINPUT); 178 list($dbconn) = pnDBGetConn(); 179 $pntable = pnDBGetTables(); 180 $events_table = $pntable['postcalendar_events']; 181 $events_column = &$pntable['postcalendar_events_column']; 182 183 $sql = "DELETE FROM $events_table WHERE $events_column[eid] = '".(int)pnVarPrepForStore($pc_eid)."'"; 184 185 $dbconn->Execute($sql); 186 if ($dbconn->ErrorNo() != 0) { 187 $output->Text(_PC_ADMIN_EVENT_ERROR); 188 } else { 189 $output->Text(_PC_ADMIN_EVENTS_DELETED); 190 } 191 192 // clear the template cache 193 $tpl =& new pcSmarty(); 194 $tpl->clear_all_cache(); 195 return $output->GetOutput(); 196 } 197 198 /** 199 * submit an event 200 */ 201 function postcalendar_user_edit($args) {return postcalendar_user_submit($args); } 202 function postcalendar_user_submit($args) 203 { 204 // We need at least ADD permission to submit an event 205 if (!(bool)PC_ACCESS_ADD) { 206 return _POSTCALENDARNOAUTH; 207 } 208 209 $output =& new pnHTML(); 210 $output->SetInputMode(_PNH_VERBATIMINPUT); 211 212 // get the theme globals :: is there a better way to do this? 213 pnThemeLoad(pnUserGetTheme()); 214 global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5, $textcolor1, $textcolor2; 215 216 extract($args); 217 218 $Date =& postcalendar_getDate(); 219 $year = substr($Date,0,4); 220 $month = substr($Date,4,2); 221 $day = substr($Date,6,2); 222 223 // basic event information 224 $event_subject = pnVarCleanFromInput('event_subject'); 225 $event_desc = pnVarCleanFromInput('event_desc'); 226 $event_sharing = pnVarCleanFromInput('event_sharing'); 227 $event_category = pnVarCleanFromInput('event_category'); 228 $event_topic = pnVarCleanFromInput('event_topic'); 229 230 // event start information 231 $event_startmonth = pnVarCleanFromInput('event_startmonth'); 232 $event_startday = pnVarCleanFromInput('event_startday'); 233 $event_startyear = pnVarCleanFromInput('event_startyear'); 234 $event_starttimeh = pnVarCleanFromInput('event_starttimeh'); 235 $event_starttimem = pnVarCleanFromInput('event_starttimem'); 236 $event_startampm = pnVarCleanFromInput('event_startampm'); 237 238 // event end information 239 $event_endmonth = pnVarCleanFromInput('event_endmonth'); 240 $event_endday = pnVarCleanFromInput('event_endday'); 241 $event_endyear = pnVarCleanFromInput('event_endyear'); 242 $event_endtype = pnVarCleanFromInput('event_endtype'); 243 $event_dur_hours = pnVarCleanFromInput('event_dur_hours'); 244 $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes'); 245 $event_duration = (60*60*$event_dur_hours) + (60*$event_dur_minutes); 246 $event_allday = pnVarCleanFromInput('event_allday'); 247 248 // location data 249 $event_location = pnVarCleanFromInput('event_location'); 250 $event_street1 = pnVarCleanFromInput('event_street1'); 251 $event_street2 = pnVarCleanFromInput('event_street2'); 252 $event_city = pnVarCleanFromInput('event_city'); 253 $event_state = pnVarCleanFromInput('event_state'); 254 $event_postal = pnVarCleanFromInput('event_postal'); 255 $event_location_info = serialize(compact('event_location', 'event_street1', 'event_street2', 256 'event_city', 'event_state', 'event_postal')); 257 // contact data 258 $event_contname = pnVarCleanFromInput('event_contname'); 259 $event_conttel = pnVarCleanFromInput('event_conttel'); 260 $event_contemail = pnVarCleanFromInput('event_contemail'); 261 $event_website = pnVarCleanFromInput('event_website'); 262 $event_fee = pnVarCleanFromInput('event_fee'); 263 264 // event repeating data 265 $event_repeat = pnVarCleanFromInput('event_repeat'); 266 $event_repeat_freq = pnVarCleanFromInput('event_repeat_freq'); 267 $event_repeat_freq_type = pnVarCleanFromInput('event_repeat_freq_type'); 268 $event_repeat_on_num = pnVarCleanFromInput('event_repeat_on_num'); 269 $event_repeat_on_day = pnVarCleanFromInput('event_repeat_on_day'); 270 $event_repeat_on_freq = pnVarCleanFromInput('event_repeat_on_freq'); 271 $event_recurrspec = serialize(compact('event_repeat_freq', 'event_repeat_freq_type', 'event_repeat_on_num', 272 'event_repeat_on_day', 'event_repeat_on_freq')); 273 274 $form_action = pnVarCleanFromInput('form_action'); 275 $pc_html_or_text = pnVarCleanFromInput('pc_html_or_text'); 276 $pc_event_id = pnVarCleanFromInput('pc_event_id'); 277 $data_loaded = pnVarCleanFromInput('data_loaded'); 278 $is_update = pnVarCleanFromInput('is_update'); 279 $authid = pnVarCleanFromInput('authid'); 280 281 if(pnUserLoggedIn()) { $uname = pnUserGetVar('uname'); } 282 else { $uname = pnConfigGetVar('anonymous'); } 283 if(!isset($event_repeat)) { $event_repeat = 0; } 284 285 if(!isset($pc_event_id) || empty($pc_event_id) || $data_loaded) { 286 // lets wrap all the data into array for passing to submit and preview functions 287 $eventdata = compact('event_subject','event_desc','event_sharing','event_category','event_topic', 288 'event_startmonth','event_startday','event_startyear','event_starttimeh','event_starttimem','event_startampm', 289 'event_endmonth','event_endday','event_endyear','event_endtype','event_dur_hours','event_dur_minutes', 290 'event_duration','event_allday','event_location','event_street1','event_street2','event_city','event_state', 291 'event_postal','event_location_info','event_contname','event_conttel','event_contemail', 292 'event_website','event_fee','event_repeat','event_repeat_freq','event_repeat_freq_type', 293 'event_repeat_on_num','event_repeat_on_day','event_repeat_on_freq','event_recurrspec','uname', 294 'Date','year','month','day','pc_html_or_text'); 295 $eventdata['is_update'] = $is_update; 296 $eventdata['pc_event_id'] = $pc_event_id; 297 $eventdata['data_loaded'] = true; 298 } else { 299 $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id); 300 if($uname != $event['uname']) { 301 return _PC_CAN_NOT_EDIT; 302 } 303 $eventdata['event_subject'] = $event['title']; 304 $eventdata['event_desc'] = $event['hometext']; 305 $eventdata['event_sharing'] = $event['sharing']; 306 $eventdata['event_category'] = $event['catid']; 307 $eventdata['event_topic'] = $event['topic']; 308 $eventdata['event_startmonth'] = substr($event['eventDate'],5,2); 309 $eventdata['event_startday'] = substr($event['eventDate'],8,2); 310 $eventdata['event_startyear'] = substr($event['eventDate'],0,4); 311 $eventdata['event_starttimeh'] = substr($event['startTime'],0,2); 312 $eventdata['event_starttimem'] = substr($event['startTime'],3,2); 313 $eventdata['event_startampm'] = $eventdata['event_starttimeh'] < 12 ? _PC_AM : _PC_PM ; 314 $eventdata['event_endmonth'] = substr($event['endDate'],5,2); 315 $eventdata['event_endday'] = substr($event['endDate'],8,2); 316 $eventdata['event_endyear'] = substr($event['endDate'],0,4); 317 $eventdata['event_endtype'] = $event['endDate'] == '0000-00-00' ? '0' : '1' ; 318 $eventdata['event_dur_hours'] = $event['duration_hours']; 319 $eventdata['event_dur_minutes'] = $event['duration_minutes']; 320 $eventdata['event_duration'] = $event['duration']; 321 $eventdata['event_allday'] = $event['alldayevent']; 322 $loc_data = unserialize($event['location']); 323 $eventdata['event_location'] = $loc_data['event_location']; 324 $eventdata['event_street1'] = $loc_data['event_street1']; 325 $eventdata['event_street2'] = $loc_data['event_street2']; 326 $eventdata['event_city'] = $loc_data['event_city']; 327 $eventdata['event_state'] = $loc_data['event_state']; 328 $eventdata['event_postal'] = $loc_data['event_postal']; 329 $eventdata['event_location_info'] = $loc_data; 330 $eventdata['event_contname'] = $event['contname']; 331 $eventdata['event_conttel'] = $event['conttel']; 332 $eventdata['event_contemail'] = $event['contemail']; 333 $eventdata['event_website'] = $event['website']; 334 $eventdata['event_fee'] = $event['fee']; 335 $eventdata['event_repeat'] = $event['recurrtype']; 336 $rspecs = unserialize($event['recurrspec']); 337 $eventdata['event_repeat_freq'] = $rspecs['event_repeat_freq']; 338 $eventdata['event_repeat_freq_type'] = $rspecs['event_repeat_freq_type']; 339 $eventdata['event_repeat_on_num'] = $rspecs['event_repeat_on_num']; 340 $eventdata['event_repeat_on_day'] = $rspecs['event_repeat_on_day']; 341 $eventdata['event_repeat_on_freq'] = $rspecs['event_repeat_on_freq']; 342 $eventdata['event_recurrspec'] = $rspecs; 343 $eventdata['uname'] = $uname; 344 $eventdata['Date'] = $Date; 345 $eventdata['year'] = $year; 346 $eventdata['month'] = $month; 347 $eventdata['day'] = $day; 348 $eventdata['is_update'] = true; 349 $eventdata['pc_event_id'] = $pc_event_id; 350 $eventdata['data_loaded'] = true; 351 $eventdata['pc_html_or_text'] = $pc_html_or_text; 352 } 353 354 // lets get the module's information 355 //$modinfo = pnModGetInfo(pnModGetIDFromName(__POSTCALENDAR__)); 356 $categories = pnModAPIFunc(__POSTCALENDAR__,'user','getCategories'); 357 $output->tabindex=1; 358 359 360 //================================================================ 361 // ERROR CHECKING 362 //================================================================ 363 $required_vars = array('event_subject','event_desc'); 364 $required_name = array(_PC_EVENT_TITLE,_PC_EVENT_DESC); 365 $error_msg = ''; 366 $output->SetOutputMode(_PNH_RETURNOUTPUT); 367 $reqCount = count($required_vars); 368 for ($r=0; $r<$reqCount; $r++) { 369 if(empty($$required_vars[$r]) || !preg_match('/\S/i',$$required_vars[$r])) { 370 $error_msg .= $output->Text('<b>'.$required_name[$r].'</b> '._PC_SUBMIT_ERROR4); 371 $error_msg .= $output->Linebreak(); 372 } 373 } 374 unset($reqCount); 375 // check repeating frequencies 376 if($event_repeat == REPEAT) { 377 if(!isset($event_repeat_freq) || $event_repeat_freq < 1 || empty($event_repeat_freq)) { 378 $error_msg .= $output->Text(_PC_SUBMIT_ERROR5); 379 $error_msg .= $output->Linebreak(); 380 } elseif(!is_numeric($event_repeat_freq)) { 381 $error_msg .= $output->Text(_PC_SUBMIT_ERROR6); 382 $error_msg .= $output->Linebreak(); 383 } 384 } elseif($event_repeat == REPEAT_ON) { 385 if(!isset($event_repeat_on_freq) || $event_repeat_on_freq < 1 || empty($event_repeat_on_freq)) { 386 $error_msg .= $output->Text(_PC_SUBMIT_ERROR5); 387 $error_msg .= $output->Linebreak(); 388 } elseif(!is_numeric($event_repeat_on_freq)) { 389 $error_msg .= $output->Text(_PC_SUBMIT_ERROR6); 390 $error_msg .= $output->Linebreak(); 391 } 392 } 393 // check date validity 394 if(_SETTING_TIME_24HOUR) { 395 $startTime = $event_starttimeh.':'.$event_starttimem; 396 $endTime = $event_endtimeh.':'.$event_endtimem; 397 } else { 398 if($event_startampm == _AM_VAL) { 399 $event_starttimeh = $event_starttimeh == 12 ? '00' : $event_starttimeh; 400 } else { 401 $event_starttimeh = $event_starttimeh != 12 ? $event_starttimeh+=12 : $event_starttimeh; 402 } 403 $startTime = $event_starttimeh.':'.$event_starttimem; 404 } 405 $sdate = strtotime($event_startyear.'-'.$event_startmonth.'-'.$event_startday); 406 $edate = strtotime($event_endyear.'-'.$event_endmonth.'-'.$event_endday); 407 $tdate = strtotime(date('Y-m-d')); 408 if($edate < $sdate && $event_endtype == 1) { 409 $error_msg .= $output->Text(_PC_SUBMIT_ERROR1); 410 $error_msg .= $output->Linebreak(); 411 } 412 if(!checkdate($event_startmonth,$event_startday,$event_startyear)) { 413 $error_msg .= $output->Text(_PC_SUBMIT_ERROR2); 414 $error_msg .= $output->Linebreak(); 415 } 416 if(!checkdate($event_endmonth,$event_endday,$event_endyear)) { 417 $error_msg .= $output->Text(_PC_SUBMIT_ERROR3); 418 $error_msg .= $output->Linebreak(); 419 } 420 $output->SetOutputMode(_PNH_KEEPOUTPUT); 421 422 if($form_action == 'preview') { 423 //================================================================ 424 // Preview the event 425 //================================================================ 426 // check authid 427 if (!pnSecConfirmAuthKey()) { return(_NO_DIRECT_ACCESS); } 428 if(!empty($error_msg)) { 429 $preview = false; 430 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">'); 431 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">'); 432 $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>'); 433 $output->Linebreak(); 434 $output->Text($error_msg); 435 $output->Text('</td></td></table>'); 436 $output->Text('</td></td></table>'); 437 $output->Linebreak(2); 438 } else { 439 $output->Text(pnModAPIFunc(__POSTCALENDAR__,'user','eventPreview',$eventdata)); 440 $output->Linebreak(); 441 } 442 } elseif($form_action == 'commit') { 443 //================================================================ 444 // Enter the event into the DB 445 //================================================================ 446 if (!pnSecConfirmAuthKey()) { return(_NO_DIRECT_ACCESS); } 447 if(!empty($error_msg)) { 448 $preview = false; 449 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">'); 450 $output->Text('<table border="0" width="100%" cellpadd