Assembla home | Assembla project page
 

Changeset 98

Show
Ignore:
Timestamp:
10/24/06 22:21:07 (2 years ago)
Author:
moensch
Message:

add some files

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/com_mls_seatmap/eventTimes/mls_seatmap.class.php

    r62 r98  
    193193        } 
    194194         
     195        function getStatusTime($seatid = 0) { 
     196                global $database, $mosConfig_offset, $my; 
     197                if($this) { 
     198                        $seatid = @$this->id ? $this->id : $seatid; 
     199                } 
     200                $database->setQuery( "SELECT * FROM `#__mls_seatmap_room_elements_users` WHERE `seatid`='".$seatid."'" ); 
     201                $rows = $database->loadObjectList(); 
     202                foreach($rows as $row) { 
     203                        if($row->userid == $my->id && $row->status == 1) { 
     204                                //I am on this seat 
     205                                $return = 1; 
     206                                break; 
     207                        } elseif($row->userid != $my->id && $row->status == 1) { 
     208                                echo "hihi"; 
     209                        } 
     210                } 
     211        } 
     212         
     213        /** 
     214         * This function simply checks, whether I can occupy a seat or not 
     215         * I can occupy a seat, if I havent already occupied it or somebody occupied it for the whole event 
     216         */ 
     217        function canioccupy($seatid = 0) { 
     218                global $database, $mosConfig_offset, $my; 
     219                if($this) { 
     220                        $seatid = @$this->id ? $this->id : $seatid; 
     221                } 
     222                $database->setQuery( "SELECT `id`" 
     223                                                ."\n FROM `#__mls_seatmap_room_elements_users`" 
     224                                                ."\n WHERE" 
     225                                                ."\n `seatid`='".$seatid."'" 
     226                                                ."\n AND ((`userid`='".$my->id."' AND `status`='1')" 
     227                                                ."\n OR (`whole_event`='1' AND `status`='1'))" ); 
     228                $database->query(); 
     229                 
     230                if($database->getnumrows()) { 
     231                        return 0; 
     232                } else { 
     233                        return 1; 
     234                } 
     235        } 
     236         
     237        /** 
     238         * This function simply checks, whether I can release a seat or not 
     239         * I can release a seat, when I occupy it or if it has been reserved for me 
     240         */ 
     241        function canirelease($seatid = 0) { 
     242                global $database, $mosConfig_offset, $my; 
     243                if($this) { 
     244                        $seatid = @$this->id ? $this->id : $seatid; 
     245                } 
     246                $now = date( "Y-m-d H:i:s", time()+$mosConfig_offset*60*60 ); 
     247                $database->setQuery( "SELECT `id`" 
     248                                                ."\n FROM `#__mls_seatmap_room_elements_users`" 
     249                                                ."\n WHERE" 
     250                                                ."\n `seatid`='".$seatid."'" 
     251                                                ."\n AND ((`userid`='".$my->id."' AND `status`='1')" 
     252                                                ."\n OR (`res_userid`='".$my->id."' AND `status`='2'))" ); 
     253                $database->query(); 
     254                 
     255                if($database->getnumrows()) { 
     256                        return 1; 
     257                } else { 
     258                        return 0; 
     259                } 
     260        } 
     261         
     262         
    195263        function getStatus($seatid = 0) { 
    196264                global $database, $mosConfig_offset, $my; 
    197                 $seatid = @$this->id ? $this->id : $seatid; 
     265                if($this) { 
     266                        $seatid = @$this->id ? $this->id : $seatid; 
     267                } 
    198268                $database->setQuery( "SELECT * FROM `#__mls_seatmap_room_elements` WHERE `id`='".$seatid."'" ); 
    199269                $seat = $database->loadObjectList(); 
     
    224294                return $return; 
    225295        } 
     296         
     297        function getOccupiedTimes() { 
     298                global $database; 
     299                $database->setQuery( "SELECT people.*, time.name AS `timename`, u.name, u.username, u.email," 
     300                                                ."\n IF(people.whole_event = 1,event.start,time.start) AS `start`," 
     301                                                ."\n IF(people.whole_event = 1,event.end,time.end) AS `end`" 
     302                                                ."\n FROM `#__mls_seatmap_room_elements_users` AS `people`" 
     303                                                ."\n INNER JOIN `#__users` AS `u` ON u.id=people.userid" 
     304                                                ."\n INNER JOIN `#__mls_seatmap_room_elements` AS `seat` ON seat.id=people.seatid" 
     305                                                ."\n INNER JOIN `#__mls_seatmap_rooms` AS `room` ON room.id=seat.roomid" 
     306                                                ."\n INNER JOIN `#__mls_events` AS `event` ON event.id=room.eventid" 
     307                                                ."\n LEFT JOIN `#__mls_events_times` AS `time` ON time.id=people.timeid" 
     308                                                ."\n WHERE people.seatid='".$this->id."' AND people.status='1'" ); 
     309                 
     310                $rows = $database->loadObjectList(); 
     311                 
     312                return $rows; 
     313        } 
     314         
     315        function getReservedTimes() { 
     316                global $database, $mosConfig_offset; 
     317                $now = date( "Y-m-d H:i:s", time()+$mosConfig_offset*60*60 ); 
     318                $database->setQuery( "SELECT people.*, time.name AS `timename`, u.name, u.username, u.email,people.res_userid," 
     319                                                ."\n IF(people.whole_event = 1,event.start,time.start) AS `start`," 
     320                                                ."\n IF(people.whole_event = 1,event.end,time.end) AS `end`" 
     321                                                ."\n FROM `#__mls_seatmap_room_elements_users` AS `people`" 
     322                                                ."\n INNER JOIN `#__users` AS `u` ON u.id=people.userid" 
     323                                                ."\n INNER JOIN `#__mls_seatmap_room_elements` AS `seat` ON seat.id=people.seatid" 
     324                                                ."\n INNER JOIN `#__mls_seatmap_rooms` AS `room` ON room.id=seat.roomid" 
     325                                                ."\n INNER JOIN `#__mls_events` AS `event` ON event.id=room.eventid" 
     326                                                ."\n LEFT JOIN `#__mls_events_times` AS `time` ON time.id=people.timeid" 
     327                                                ."\n WHERE people.seatid='".$this->id."' AND people.status='2' AND people.res_end_time > '".$now."'" ); 
     328                 
     329                $rows = $database->loadObjectList(); 
     330                 
     331                return $rows; 
     332        } 
     333         
     334        /** 
     335         * Checks, at which times a seat is free and return them in an array of objects 
     336         * if the second argument $userid is given, reserved times for the given userid will be treated as 'free' times 
     337         */ 
     338        function getFreeTimes($occupied = 0, $userid = 0) { 
     339                global $database, $mosConfig_offset; 
     340                //if we do not already know which times are occupied, fetch them now 
     341                if(!$occupied) { 
     342                        $occupied = $this->getOccupiedTimes(); 
     343                        $reserved = $this->getReservedTimes(); 
     344                        foreach($reserved as $res) { 
     345                                if($userid && $res->res_userid != $userid) { 
     346                                        array_push($occupied, $res); 
     347                                } 
     348                        } 
     349                } 
     350                 
     351                //now, get the times available 
     352                $database->setQuery( "SELECT time.id,time.name," 
     353                                                ."\n IF(time.id IS NULL,event.start,time.start) AS `start`," 
     354                                                ."\n IF(time.id IS NULL,event.end,time.end) AS `end`" 
     355                                                ."\n FROM `#__mls_seatmap_room_elements` AS `seat`" 
     356                                                ."\n INNER JOIN `#__mls_seatmap_rooms` AS `room` ON room.id=seat.roomid" 
     357                                                ."\n INNER JOIN `#__mls_events` AS `event` ON event.id=room.eventid" 
     358                                                ."\n LEFT JOIN `#__mls_events_times` AS `time` ON time.eventid=room.eventid" 
     359                                                ."\n WHERE seat.id='".$this->id."'" ); 
     360                 
     361                $rows = $database->loadObjectList(); 
     362                $freetimes = array(); 
     363                 
     364                //and here comes the buggy stuff. Match them agains each other 
     365                foreach($rows as $row) { 
     366                        $free = 1; 
     367                        foreach($occupied as $occ) { 
     368                                if(($occ->start < $row->start) && ($occ->end > $row->start && $occ->end < $row->end)) { 
     369                                        //starts before, ends in the middle 
     370                                        $free = 0; 
     371                                } elseif(($occ->start > $row->start && $occ->start < $row->end) && ($occ->end > $row->end)) { 
     372                                        //starts in the middle, ends after 
     373                                        $free = 0; 
     374                                } elseif(($occ->start > $row->start && $occ->start < $row->end) && ($occ->end > $row->start && $occ->end < $row->end)) { 
     375                                        //starts in the middle, ends in the middle 
     376                                        $free = 0; 
     377                                } elseif($occ->start < $row->start && $occ->end > $row->end) { 
     378                                        //starts before, ends after 
     379                                        $free = 0; 
     380                                } elseif($occ->start == $row->start && ($occ->end > $row->start && $occ->end < $row->end)) { 
     381                                        //starts same time, ends in the middle 
     382                                        $free = 0; 
     383                                } elseif(($occ->start > $row->start && $occ->start < $row->end) && $occ->end == $row->end) { 
     384                                        //starts in the middle, ends same time 
     385                                        $free = 0; 
     386                                } elseif($occ->start < $row->start && $occ->end == $row->end) { 
     387                                        //starts before, ends same time 
     388                                        $free = 0; 
     389                                } elseif($occ->start == $row->start && $occ->end > $row->end) { 
     390                                        //starts same time, ends after 
     391                                        $free = 0; 
     392                                } elseif($occ->start == $row->start && $occ->end == $row->end) { 
     393                                        //starts same time, ends same time 
     394                                        $free = 0; 
     395                                } 
     396                        } 
     397                        if($free) { 
     398                                $freetimes[] = $row; 
     399                        } 
     400                } 
     401                 
     402                return $freetimes; 
     403        } 
    226404}; 
    227405 
     406/** 
     407* MLS Seatmap Seat-User table class 
     408*/ 
     409class mosMLS_seatmap_seat_user extends mosDBTable { 
     410        /** @var int Primary key */ 
     411        var $id=null; 
     412        /** @var int */ 
     413        var $seatid=null; 
     414        /** @var int */ 
     415        var $userid=null; 
     416        /** @var int */ 
     417        var $res_userid=null; 
     418        /** @var int */ 
     419        var $status=null; 
     420        /** @var date */ 
     421        var $res_start_time=null; 
     422        /** @var date */ 
     423        var $res_end_time=null; 
     424        /** @var int */ 
     425        var $timeid=null; 
     426         
     427        /** 
     428        * @param database A database connector object 
     429        */ 
     430        function mosMLS_seatmap_seat_user( &$db ) { 
     431                $this->mosDBTable( '#__mls_seatmap_room_elements_users', 'id', $db ); 
     432        } 
     433}; 
    228434?> 
  • branches/com_mls_seatmap/eventTimes/mls_seatmap.html.php

    r66 r98  
    220220        } 
    221221         
    222         function showSeatDetails($seat, $option, $Itemid) { 
    223                 global $my, $l, $task, $database, $mosConfig_live_site
     222        function showSeatDetails($seat, $users, $option, $Itemid) { 
     223                global $my, $l, $task, $database, $mosConfig_live_site, $mosConfig_offset
    224224                $l->setBlock("rooms"); 
    225                 switch($seat->status) { 
    226                         case "0": 
    227                                 $status = $l->m("status_free"); 
    228                                 break; 
    229                         case "1": 
    230                                 $status = $l->m("status_occupied"); 
    231                                 break; 
    232                         case "2": 
    233                                 $status = $l->m("status_reserved"); 
    234                                 break; 
    235                 } 
    236                  
    237225                ?> 
    238226                <div align="center"> 
     
    247235                <table border="0" cellspacing="1" cellpadding="3" width="100%"> 
    248236                        <tr> 
    249                                 <td class="sectiontableheader" align="right" width="150"><?=$l->m("status");?>:</td> 
    250                                 <td class="sectiontableentry2"><?=$status;?></td> 
    251                         </tr> 
    252                         <tr> 
    253237                                <td class="sectiontableheader" align="right" width="150"><?=$l->m("name");?>:</td> 
    254238                                <td class="sectiontableentry2"><?=$seat->name;?></td> 
     
    258242                                <td class="sectiontableentry2"><?=$seat->ip;?></td> 
    259243                        </tr> 
    260                         <?php 
    261                         $check = mosMLS_seatmap_seat::getStatus($seat->id); 
    262                         if($check == 3 OR $check == 4 OR $check == 5) { 
    263                                 //this seat is reserved 
    264                                 ?> 
    265                                 <tr> 
    266                                         <td class="sectiontableheader" align="right" width="150"><?=$l->m("reserved_by");?>:</td> 
    267                                         <td class="sectiontableentry2"><?=$seat->username;?></td> 
    268                                 </tr> 
    269                                 <tr> 
    270                                         <td class="sectiontableheader" align="right" width="150"><?=$l->m("reserved_for");?>:</td> 
    271                                         <td class="sectiontableentry2"><?=$seat->res_username;?></td> 
    272                                 </tr> 
    273                                 <tr> 
    274                                         <td class="sectiontableheader" align="right" width="150"><?=$l->m("reserved_at");?>:</td> 
    275                                         <td class="sectiontableentry2"><?=$seat->res_start_time;?></td> 
    276                                 </tr> 
    277                                 <tr> 
    278                                         <td class="sectiontableheader" align="right" width="150"><?=$l->m("reserved_until");?>:</td> 
    279                                         <td class="sectiontableentry2"><?=$seat->res_end_time;?></td> 
    280                                 </tr> 
    281                                 <?php 
    282                         } 
    283                         if($check == 1 OR $check == 2) { 
    284                                 //this seat is occupied, either by me or someone else 
    285                                 ?> 
    286                                 <tr> 
    287                                         <td class="sectiontableheader" align="right" width="150"><?=$l->m("occupied_by");?>:</td> 
    288                                         <td class="sectiontableentry2"><?=$seat->username;?></td> 
    289                                 </tr> 
    290                                 <?php 
    291                         } 
     244                </table> 
     245                         
     246                        <h3><?=$l->m("users_on_seat");?></h3> 
     247                        <table border="0" cellspacing="1" cellpadding="3" width="100%"> 
     248                                <tr> 
     249                                        <td class="sectiontableheader"><?=$l->m("user");?>:</td> 
     250                                        <td class="sectiontableheader"><?=$l->m("time");?>:</td> 
     251                                        <td class="sectiontableheader"><?=$l->m("status");?>:</td> 
     252                                        <td class="sectiontableheader"><?=$l->m("reservation");?>:</td> 
     253                                </tr> 
     254                        <?php 
     255                        $k = 0; 
     256                        for($i = 0; $i < count($users); $i++) { 
     257                                $row = $users[$i]; 
     258                                $class = $k ? "sectiontableentry2" : "sectiontableentry1"; 
     259                                $user = $row->res_username ? $row->res_username : $row->username; 
     260                                if($row->timeid) { 
     261                                        $time = $row->timename."<br />"; 
     262                                        $time .= "<nobr>" . $row->timestart . "</nobr> - <nobr>" . $row->timeend . "</nobr>"; 
     263                                } else { 
     264                                        $time = $l->m("whole_event")."<br />"; 
     265                                        $time .= "<nobr>" . $row->eventstart . "</nobr> - <nobr>" . $row->eventend . "</nobr>"; 
     266                                } 
     267                                $now = date( "Y-m-d H:i:s", time()+$mosConfig_offset*60*60 ); 
     268                                if($row->status == 1) { 
     269                                        $status = $l->m("status_occupied"); 
     270                                } elseif($row->status == 2 AND $row->res_end_time > $now) { 
     271                                        $status = $l->m("status_reserved"); 
     272                                } elseif($row->status == 2 AND $row->res_end_time < $now) { 
     273                                        $status = $l->m("status_reservation_ended"); 
     274                                } 
     275                                if($row->status == 2) { 
     276                                        $reservation = "<nobr>" . $row->res_start_time . "</nobr> - <nobr>" . $row->res_end_time . "</nobr>"; 
     277                                } else { 
     278                                        $reservation = "&nbsp;"; 
     279                                } 
     280                                ?> 
     281                                <tr> 
     282                                        <td class="<?=$class;?>" valign="top"><?=$user;?></td> 
     283                                        <td class="<?=$class;?>" valign="top"><?=$time;?></td> 
     284                                        <td class="<?=$class;?>" valign="top"><?=$status;?></td> 
     285                                        <td class="<?=$class;?>" valign="top"><?=$reservation; ?></td> 
     286                                </tr> 
     287                                <?php 
     288                        } 
     289                        ?> 
     290                        <table border="0" cellspacing="1" cellpadding="3" width="100%"> 
     291                        <?php 
    292292                        //print administrative links 
    293                         if($check == 0) { 
     293                        if($seat->can_occupy) { 
    294294                                //seat is free 
    295295                                //I can occupy or reserve 
     
    306306                        } 
    307307                         
    308                         if($check == 1 OR $check == 5) { 
     308                        if($seat->can_release) { 
    309309                                //I am on this seat or it is reserved for me 
    310310                                //I can release 
     
    313313                                        <td></td> 
    314314                                        <td class="td_mark"><a href="?option=<?=$option;?>&amp;Itemid=<?=$Itemid;?>&amp;task=release_seat&amp;seatid=<?=$seat->id;?>"><?= $l->m("release"); ?></a></td> 
    315                                 </tr> 
    316                                 <?php 
    317                         } 
    318                         if($check == 5) { 
    319                                 //this seat is reserved for me 
    320                                 //I can occupy 
    321                                 ?> 
    322                                 <tr> 
    323                                         <td></td> 
    324                                         <td class="td_mark"><a href="?option=<?=$option;?>&amp;Itemid=<?=$Itemid;?>&amp;task=occupy_seat&amp;seatid=<?=$seat->id;?>"><?= $l->m("occupy"); ?></a></td> 
    325315                                </tr> 
    326316                                <?php 
  • branches/com_mls_seatmap/eventTimes/mls_seatmap.php

    r62 r98  
    1414//we need the events class 
    1515require_once( $mainframe->getPath( 'class', 'com_mls_events' ) ); 
     16//get config 
     17require_once( $mosConfig_absolute_path."/components/com_mls_seatmap/mls_seatmap.config.php" ); 
    1618 
    1719$Itemid = mosGetParam($_REQUEST,'Itemid'); 
     
    2527                occupySeat( $seatid, $option, $Itemid ); 
    2628                break; 
     29        case "save_occupy_seat": 
     30                saveOccupySeat( $seatid, $option, $Itemid ); 
     31                break; 
    2732        case "reserve_seat": 
    2833                reserveSeat( $seatid, $option, $Itemid ); 
     
    5964                mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$room->eventid."&mosmsg=".urlencode($l->m("err_not_paid","general")) ); 
    6065        } 
    61         $check = mosMLS_seatmap_seat::getStatus($id); 
     66        if(mosMLS_seatmap_seat::canirelease($id)) { 
     67                $database->setQuery( "DELETE FROM `#__mls_seatmap_room_elements_users` WHERE `seatid`='".$id."' AND ((`userid`='".$my->id."' AND `status`='1') OR (`res_userid`='".$my->id."' AND `status`='2'))" ); 
     68                $database->query(); 
     69                mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("msg_seat_released")) ); 
     70        } 
     71        /** $check = mosMLS_seatmap_seat::getStatus($id); 
    6272        if($check == 2) { 
    6373                mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("err_occupied")) ); 
     
    6575        if($check == 3) { 
    6676                mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("err_reserved")) ); 
    67         } 
    68         if($check == 1 OR $check == 5) { 
    69                 $database->setQuery( "UPDATE `#__mls_seatmap_room_elements` SET `status`='0', `userid`='', `res_userid`='', `res_start_time`='', `res_end_time`='' WHERE `id`='".$id."'" ); 
    70                 $database->query(); 
    71                 mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("msg_seat_released")) ); 
    72         } 
     77        } */ 
    7378        mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid ); 
    7479} 
     
    7883        $l->setBlock("general"); 
    7984         
     85        /** get some data (seat, room, event) */ 
    8086        $row = new mosMLS_seatmap_seat( $database ); 
    8187        $row->load( $id ); 
     
    8793        $event->load($room->eventid); 
    8894         
     95        /** check, whether the user has paid or not */ 
    8996        if(!mosMLS_events_participant::checkPaid($my->id, $room->eventid)) { 
    9097                mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$room->eventid."&mosmsg=".urlencode($l->m("err_not_paid","general")) ); 
     
    99106        } 
    100107        if($check == 0) { 
    101                 //show a select list of users which have paid for this event and which don't occupy another seat 
     108                /** show a select list of users which have paid for this event and which don't occupy another seat */ 
    102109                $now = date( "Y-m-d H:i:s", time()+$mosConfig_offset*60*60 ); 
    103110                $database->setQuery( "SELECT u.id,u.username" 
     
    123130 
    124131function saveReserveSeat( $option, $Itemid ) { 
    125         global $database, $my, $mainframe, $l
     132        global $database, $my, $mainframe, $l, $cnf_mls_sm
    126133        $l->setBlock("general"); 
    127134        $row = new mosMLS_seatmap_seat( $database ); 
     
    131138        } 
    132139        $row->res_start_time = $now = date( "Y-m-d H:i:s", time()+$mosConfig_offset*60*60 ); 
    133         $row->res_end_time = $now = date( "Y-m-d H:i:s", time()+86400*3+$mosConfig_offset*60*60 ); 
     140        $row->res_end_time = $now = date( "Y-m-d H:i:s", time()+86400*$cnf_mls_sm["reservation_time"]+$mosConfig_offset*60*60 ); 
    134141        $row->status = 2; 
    135142        $row->userid = $my->id; 
     
    148155 
    149156function occupySeat( $id, $option, $Itemid) { 
     157        global $database, $my, $l, $mosConfig_offset, $gid; 
     158        $l->setBlock("general"); 
     159         
     160        /** First, load some data */ 
     161        $database->setQuery( "SELECT s.*,e.access, r.eventid" 
     162                                        ."\n FROM `#__mls_seatmap_room_elements` AS `s`" 
     163                                        ."\n INNER JOIN `#__mls_seatmap_elements` AS `e` ON e.id=s.elementid" 
     164                                        ."\n INNER JOIN `#__mls_seatmap_elements_categories` AS `c` ON c.id=e.categoryid" 
     165                                        ."\n INNER JOIN `#__mls_seatmap_rooms` AS `r` ON r.id=s.roomid" 
     166                                        ."\n WHERE s.id='".$id."'"); 
     167        $seat = $database->loadObjectList(); 
     168        $seat = $seat[0]; 
     169        $room = new mosMLS_seatmap_room( $database ); 
     170        $room->load($seat->roomid); 
     171         
     172        /** check, whether the person has paid or not */ 
     173        if(!mosMLS_events_participant::checkPaid($my->id, $room->eventid)) { 
     174                mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("err_not_paid","general")) ); 
     175        } 
     176         
     177        /** check, whether the person already occupies another seat for this event */ 
     178        $database->setQuery( "SELECT COUNT(*) FROM `#__mls_seatmap_room_elements_users` AS `people`" 
     179                                        ."\n INNER JOIN `#__mls_seatmap_room_elements` AS `seat` ON seat.id=people.seatid" 
     180                                        ."\n INNER JOIN `#__mls_seatmap_rooms` AS `room` ON room.id=seat.roomid" 
     181                                        ."\n WHERE room.eventid='".$room->eventid."' AND people.status='1' AND people.userid='".$my->id."'" ); 
     182        if($database->loadResult()) { 
     183                mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("err_occupy_seat")) ); 
     184        } 
     185         
     186        /** now get the free times */ 
     187        $myseat = new mosMLS_seatmap_seat( $database ); 
     188        $myseat->load($seat->id); 
     189        $free = $myseat->getFreeTimes(0,$my->id); 
     190         
     191        /** check, which times the user has paid for */ 
     192        $database->setQuery( "SELECT * FROM `#__mls_events_participants` WHERE `userid`='".$my->id."' AND `eventid`='".$room->eventid."'" ); 
     193        $participant = array(); 
     194        $database->loadObject($participant); 
     195        if($participant->id && $participant->timeid) { 
     196                /** the user has paid for a specific time. Lets see if this one is free */ 
     197                foreach($free as $time) { 
     198                        if($time->id == $participant->timeid) { 
     199                                $valid_time = $time; 
     200                        } 
     201                } 
     202                if(!$valid_time) { 
     203                        /** the time, the user has paid for is not free anymore */ 
     204                        mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("err_not_free_for_your_time","general")) ); 
     205                } else { 
     206                        /** the time the user paid for is free, occupy it (but first delete any existing reservations) */ 
     207                        $database->setQuery( "DELETE FROM `#__mls_seatmap_room_elements_users` WHERE `seatid`='".$seat->id."' AND `res_userid`='".$my->id."' AND `status`='2'" ); 
     208                        $database->query(); 
     209                        $database->setQuery( "INSERT INTO `#__mls_seatmap_room_elements_users` (`id`,`seatid`,`userid`,`status`,`timeid`) VALUES ('','".$seat->id."','".$my->id."','1','".$valid_time->id."')" ); 
     210                        $database->query(); 
     211                        mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("msg_seat_occupied")) ); 
     212                } 
     213        } elseif($participant->id) { 
     214                /** There is no defined time, therefore user has paid for the whole event */ 
     215                $database->setQuery( "DELETE FROM `#__mls_seatmap_room_elements_users` WHERE `seatid`='".$seat->id."' AND `res_userid`='".$my->id."' AND `status`='2'" ); 
     216                $database->query(); 
     217                $database->setQuery( "INSERT INTO `#__mls_seatmap_room_elements_users` (`id`,`seatid`,`userid`,`status`,`whole_event`) VALUES ('','".$seat->id."','".$my->id."','1','1')" ); 
     218                $database->query(); 
     219                mosRedirect( "index.php?option=$option&Itemid=$Itemid&eventid=".$seat->eventid."&mosmsg=".urlencode($l->m("msg_seat_occupied")) ); 
     220        } 
     221        HTML_MLS_seatmap_front::occupyForm($row, $event, $room, $user_select, $option, $Itemid); 
     222} 
     223 
     224function occupySeat2( $id, $option, $Itemid) { 
    150225        global $database, $my, $l, $mosConfig_offset, $gid; 
    151226        $l->setBlock("general"); 
     
    220295                $search_result = $database->loadObjectList(); 
    221296                $search_result = $search_result[0]; 
     297        } else { 
     298                $search_result = 0; 
    222299        } 
    223300         
     
    339416 
    340417function showSeatDetails( $seatid, $option, $Itemid ) { 
    341         global $database, $my
     418        global $database, $my, $cnf_mls_sm, $mosConfig_offset
    342419         
    343420        $database->setQuery( "SELECT s.*," 
    344                                         ."\n u1.id AS `userid`, u1.username, u2.id AS `res_userid`," 
    345                                         ."\n u2.username AS `res_username`," 
    346                                         ."\n e.name AS `eventname`," 
     421                                        ."\n e.id AS `eventid`, e.name AS `eventname`," 
    347422                                        ."\n r.name AS `roomname`" 
    348423                                        ."\n FROM `#__mls_seatmap_room_elements` AS `s`" 
    349                                         ."\n LEFT JOIN `#__users` AS `u1` ON u1.id=s.userid" 
    350                                         ."\n LEFT JOIN `#__users` AS `u2` ON u2.id=s.res_userid" 
    351424                                        ."\n INNER JOIN `#__mls_seatmap_rooms` AS `r` ON r.id=s.roomid" 
    352425                                        ."\n INNER JOIN `#__mls_events` AS `e` ON e.id=r.eventid" 
     
    355428        $seat = $seat[0]; 
    356429         
    357         HTML_MLS_seatmap_front::showSeatDetails($seat, $option, $Itemid); 
     430        //users on this seat 
     431        $database->setQuery( "SELECT su.*, u1.username, u2.username AS `res_username`," 
     432                                        ."\n e.name AS `eventname`,DATE_FORMAT(e.start,'%a %D %H:%i') AS `eventstart`,DATE_FORMAT(e.end,'%a %D %H:%i') AS `eventend`," 
     433                                        ."\n t.name AS `timename`,DATE_FORMAT(t.start,'%a %D %H:%i') AS `timestart`,DATE_FORMAT(t.end,'%a %D %H:%i') AS `timeend`" 
     434                                        ."\n FROM `#__mls_seatmap_room_elements_users`AS `su`" 
     435                                        ."\n LEFT JOIN `#__users` AS `u1` ON u1.id=su.userid" 
     436                                        ."\n LEFT JOIN `#__users` AS `u2` ON u2.id=su.res_userid" 
     437                                        ."\n LEFT JOIN `#__mls_events_times` AS `t` ON t.id=su.timeid" 
     438                                        ."\n INNER JOIN `#__mls_seatmap_room_elements` AS `s` ON s.id=su.seatid" 
     439                                        ."\n INNER JOIN `#__mls_seatmap_rooms` AS `r` ON r.id=s.roomid" 
     440                                        ."\n INNER JOIN `#__mls_events` AS `e` ON e.id=r.eventid" 
     441                                        ."\n WHERE su.seatid='".$seatid."'" ); 
     442        $users = $database->loadObjectList(); 
     443         
     444        $myseat = new mosMLS_seatmap_seat( $database ); 
     445        $myseat->load($seat->id); 
     446        $occupied = $myseat->getOccupiedTimes(); 
     447        $reserved = $myseat->getReservedTimes(); 
     448        foreach($reserved as $res) { 
     449                array_push($occupied, $res); 
     450        } 
     451        $seat->can_occupy = $myseat->canioccupy(); 
     452        $seat->can_release = $myseat->canirelease(); 
     453        $free = $myseat->getFreeTimes($occupied); 
     454         
     455        HTML_MLS_seatmap_front::showSeatDetails($seat, $users, $option, $Itemid); 
    358456} 
    359457?> 
  • branches/com_mls_seatmap/eventTimes/mls_seatmap.xml

    r66 r98  
    190190) TYPE=MyISAM; 
    191191</query> 
     192                        <query>CREATE TABLE `mos_mls_seatmap_room_elements_users` ( 
     193  `id` int(11) NOT NULL auto_increment, 
     194  `seatid` int(11) NOT NULL default '0', 
     195  `userid` int(11) NOT NULL default '0', 
     196  `res_userid` int(11) NOT NULL default '0', 
     197  `status` tinyint(1) NOT NULL default '0', 
     198  `res_start_time` datetime NOT NULL default '0000-00-00 00:00:00', 
     199  `res_end_time` datetime NOT NULL default '0000-00-00 00:00:00', 
     200  `timeid` int(11) NOT NULL default '0', 
     201  `whole_event` tinyint(1) NOT NULL default '0', 
     202  PRIMARY KEY  (`id`) 
     203) TYPE=MyISAM;</query> 
    192204                        <query>INSERT INTO `#__mls_seatmap_elements` (`id`, `categoryid`, `name`, `access`, `is_free`, `is_reserved`, `is_occupied`) VALUES (3, 1, 'Seat Free', 1, 1, 0, 0);</query> 
    193205                        <query>INSERT INTO `#__mls_seatmap_elements` (`id`, `categoryid`, `name`, `access`, `is_free`, `is_reserved`, `is_occupied`) VALUES (4, 1, 'Seat Reserved', 1, 0, 1, 0);</query>