[ Index ]

krapohl.info

title

Body

[close]

/ -> pnuser.php (source)

   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