Annotation of FreeBSD/tinderbox/webui/module/moduleTinderd.php, revision 1.1.1.1

1.1       as          1: <?php
                      2: #-
                      3: # Copyright (c) 2005 Oliver Lehmann <oliver@FreeBSD.org>
                      4: # All rights reserved.
                      5: #
                      6: # Redistribution and use in source and binary forms, with or without
                      7: # modification, are permitted provided that the following conditions
                      8: # are met:
                      9: # 1. Redistributions of source code must retain the above copyright
                     10: #      notice, this list of conditions and the following disclaimer
                     11: # 2. Redistributions in binary form must reproduce the above copyright
                     12: #      notice, this list of conditions and the following disclaimer in the
                     13: #      documentation and/or other materials provided with the distribution.
                     14: #
                     15: # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     16: # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     17: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     18: # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     19: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     20: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     21: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     22: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     23: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     24: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     25: # SUCH DAMAGE.
                     26: #
                     27: # $MCom: portstools/tinderbox/webui/module/moduleTinderd.php,v 1.9 2007/10/13 02:28:48 ade Exp $
                     28: #
                     29: 
                     30: require_once 'module/module.php';
                     31: require_once 'module/moduleBuilds.php';
                     32: require_once 'module/moduleUsers.php';
                     33: 
                     34: class moduleTinderd extends module {
                     35: 
                     36:        function moduleTinderd() {
                     37:                $this->module();
                     38:                $this->moduleBuilds = new moduleBuilds();
                     39:                $this->moduleUsers  = new moduleUsers();
                     40:        }
                     41: 
                     42:        function checkQueueEntryAccess( $entry, $mode ) {
                     43: 
                     44:                if( $this->moduleUsers->checkWwwAdmin() ) {
                     45:                        return true;
                     46:                }
                     47: 
                     48:                switch ( $mode ) {
                     49:                        case 'list':            return true;
                     50:                                                break;
                     51:                        case 'add':             if(  $this->moduleUsers->checkPermAddQueue( 'builds', $this->build_id ) ) {
                     52:                                                        return true;
                     53:                                                } else {
                     54:                                                        return false;
                     55:                                                }
                     56:                                                break;
                     57:                        case 'modify':          if( $entry->getUserId() == $this->moduleUsers->get_id() &&
                     58:                                                    $this->moduleUsers->checkPermModifyOwnQueue( 'builds', $this->build_id ) ) {
                     59:                                                        return true;
                     60:                                                } elseif( $entry->getUserId() != $this->moduleUsers->get_id() &&
                     61:                                                          $this->moduleUsers->checkPermModifyOtherQueue( 'builds', $this->build_id ) ) {
                     62:                                                        return true;
                     63:                                                } else {
                     64:                                                        return false;
                     65:                                                }
                     66:                                                break;
                     67:                        case 'delete':          if( $entry->getUserId() == $this->moduleUsers->get_id() &&
                     68:                                                    $this->moduleUsers->checkPermDeleteOwnQueue( 'builds', $this->build_id ) ) {
                     69:                                                        return true;
                     70:                                                } elseif( $entry->getUserId() != $this->moduleUsers->get_id() &&
                     71:                                                          $this->moduleUsers->checkPermDeleteOtherQueue( 'builds', $this->build_id ) ) {
                     72:                                                        return true;
                     73:                                                } else {
                     74:                                                        return false;
                     75:                                                }
                     76:                                                break;
                     77:                        case 'priolower5':      if( $this->moduleUsers->checkPermPrioLower5( 'builds', $this->build_id ) ) {
                     78:                                                        return true;
                     79:                                                } else {
                     80:                                                        return false;
                     81:                                                }
                     82:                                                break;
                     83:                        default:
                     84:                                        return false;
                     85:                }
                     86: 
                     87:        }
                     88: 
                     89:        function create_prio_array( $entry ) {
                     90:                if( $this->checkQueueEntryAccess( $entry, 'priolower5' ) ) {
                     91:                        $i = 1;
                     92:                } else {
                     93:                        if( $entry->getPriority() < 5 ) {
                     94:                                $prio[] = $entry->getPriority();
                     95:                        }
                     96:                        $i = 5;
                     97:                }
                     98: 
                     99:                for( ; $i <= 10; $i++ ) {
                    100:                        $prio[] = $i;
                    101:                }
                    102: 
                    103:                return $prio;
                    104:        }
                    105: 
                    106:        function list_tinderd_queue( $build_id ) {
                    107: 
                    108:                if( !$this->moduleUsers->is_logged_in() ) {
                    109:                        return $this->template_parse( 'please_login.tpl' );
                    110:                } else {
                    111:                        $this->template_assign( 'all_builds', $this->moduleBuilds->get_all_builds() );
                    112:                        $this->template_assign( 'build_id',   $build_id );
                    113:                        $this->template_assign( 'new_build_id', '' );
                    114:                        $this->template_assign( 'new_priority', '' );
                    115:                        $this->template_assign( 'new_port_directory', '' );
                    116:                        $this->template_assign( 'new_email_on_completion', '' );
                    117: 
                    118:                        if( !empty( $build_id ) ) {
                    119:                                $builds[0] = $this->TinderboxDS->getBuildById( $build_id );
                    120:                        } else {
                    121:                                $builds = $this->TinderboxDS->getAllBuilds();
                    122:                        }
                    123: 
                    124:                        $i = 0;
                    125:                                foreach( $builds as $build ) {
                    126: 
                    127:                                        $this->build_id = $build->getId();
                    128: 
                    129:                                        if( is_object( $build ) ) {
                    130:                                                $build_ports_queue_entries = $this->TinderboxDS->getBuildPortsQueueEntries( $this->build_id );
                    131:                                                if( is_array( $build_ports_queue_entries ) && count( $build_ports_queue_entries ) > 0 ) {
                    132:                                                        foreach( $build_ports_queue_entries as $build_ports_queue_entry ) {
                    133:                                                                if( $this->checkQueueEntryAccess( $build_ports_queue_entry, 'list' ) ) {
                    134:                                                                        switch( $build_ports_queue_entry->getStatus() ) {
                    135:                                                                                case 'ENQUEUED':
                    136:                                                                                        $status_field_class  = 'queue_entry_enqueued';
                    137:                                                                                        break;
                    138:                                                                                case 'PROCESSING':
                    139:                                                                                        $status_field_class  = 'queue_entry_processing';
                    140:                                                                                        break;
                    141:                                                                                case 'SUCCESS':
                    142:                                                                                        $status_field_class  = 'queue_entry_success';
                    143:                                                                                        break;
                    144:                                                                                case 'FAIL':
                    145:                                                                                        $status_field_class  = 'port_fail';
                    146:                                                                                        break;
                    147:                                                                        }
                    148:                                                                        $entries[$i] = array( 'entry_id'  => $build_ports_queue_entry->getBuildPortsQueueId(),
                    149:                                                                                              'directory' => $build_ports_queue_entry->getPortDirectory(),
                    150:                                                                                              'priority'  => $build_ports_queue_entry->getPriority(),
                    151:                                                                                              'build'     => $build_ports_queue_entry->getBuildName(),
                    152:                                                                                              'user'      => $build_ports_queue_entry->getUserName(),
                    153:                                                                                              'all_prio'  => $this->create_prio_array( $build_ports_queue_entry ),
                    154:                                                                                              'email_on_completion' => $build_ports_queue_entry->getEmailOnCompletion(),
                    155:                                                                                              'status_field_class'  => $status_field_class);
                    156: 
                    157:                                                                }
                    158:                                                                if( $this->checkQueueEntryAccess( $build_ports_queue_entry, 'modify' ) ) {
                    159:                                                                        $entries[$i]['modify'] = 1;
                    160:                                                                }
                    161:                                                                if( $this->checkQueueEntryAccess( $build_ports_queue_entry, 'delete' ) ) {
                    162:                                                                        $entries[$i]['delete'] = 1;
                    163:                                                                }
                    164:                                                                $i++;
                    165:                                                        }
                    166:                                                }
                    167:                                        }
                    168:                                }
                    169: 
                    170:                        if( !empty($entries) && is_array( $entries ) && count( $entries ) > 0 ) {
                    171:                                $this->template_assign( 'entries', $entries );
                    172:                                $this->template_assign( 'no_list', false );
                    173:                        } else {
                    174:                                $this->template_assign( 'no_list', true );
                    175:                        }
                    176: 
                    177:                        $this->template_assign( 'all_prio', array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ) );
                    178:                        $this->template_assign( 'new_priority', 10 );
                    179: 
                    180:                        return $this->template_parse( 'list_tinderd_queue.tpl' );
                    181:                }
                    182:        }
                    183: 
                    184:        function change_tinderd_queue( $action, $entry_id, $build_id, $priority, $email_on_completion ) {
                    185: 
                    186:                if( !$this->moduleUsers->is_logged_in() ) {
                    187:                        return $this->template_parse( 'please_login.tpl' );
                    188:                } else {
                    189:                        $build_ports_queue_entry = $this->TinderboxDS->getBuildPortsQueueEntryById( $entry_id );
                    190:                        $this->build_id = $build_ports_queue_entry->getBuildId();
                    191:                        if( $action == 'delete' ) {
                    192:                                if( $this->checkQueueEntryAccess( $build_ports_queue_entry, 'delete' ) ) {
                    193:                                        $this->TinderboxDS->deleteBuildPortsQueueEntry( $entry_id );
                    194:                                } else {
                    195:                                        $this->TinderboxDS->addError( build_ports_queue_not_allowed_to_delete );
                    196:                                }
                    197:                        } elseif( $action == 'reset status' ) {
                    198:                                if( $this->checkQueueEntryAccess( $build_ports_queue_entry, 'modify' ) ) {
                    199:                                        $build_ports_queue_entry->resetStatus();
                    200:                                        $this->TinderboxDS->updateBuildPortsQueueEntry( $build_ports_queue_entry );
                    201:                                } else {
                    202:                                        $this->TinderboxDS->addError( build_ports_queue_not_allowed_to_modify );
                    203:                                }
                    204:                        } elseif(  $action == 'save' ) {
                    205:                                if( $this->checkQueueEntryAccess( $build_ports_queue_entry, 'modify' ) ) {
                    206:                                        $this->build_id = $build_id;
                    207:                                        if( $this->checkQueueEntryAccess( $build_ports_queue_entry, 'modify' ) ) {
                    208:                                                if( $build_ports_queue_entry->getPriority() != $priority && $priority < 5 && !$this->checkQueueEntryAccess( $build_ports_queue_entry, 'priolower5' ) ) {
                    209:                                                        $this->TinderboxDS->addError( build_ports_queue_priority_to_low );
                    210:                                                } else {
                    211:                                                        $build_ports_queue_entry->setBuildId( $build_id );
                    212:                                                        $build_ports_queue_entry->setPriority( $priority );
                    213:                                                        $build_ports_queue_entry->setEmailOnCompletion( $email_on_completion );
                    214:                                                        $this->TinderboxDS->updateBuildPortsQueueEntry( $build_ports_queue_entry );;
                    215:                                                }
                    216:                                        } else {
                    217:                                                $this->TinderboxDS->addError( build_ports_queue_not_allowed_to_modify );
                    218:                                        }
                    219:                                } else {
                    220:                                        $this->TinderboxDS->addError( build_ports_queue_not_allowed_to_modify );
                    221:                                }
                    222:                        }
                    223:                }
                    224:                return;
                    225:        }
                    226: 
                    227:        function add_tinderd_queue( $action, $build_id, $priority, $port_directory, $email_on_completion ) {
                    228: 
                    229:                if( !$this->moduleUsers->is_logged_in() ) {
                    230:                        return $this->template_parse( 'please_login.tpl' );
                    231:                } else {
                    232:                        if( empty( $build_id ) || empty( $priority ) || empty( $port_directory ) ) {
                    233:                                $this->TinderboxDS->addError( mandatory_input_fields_are_empty );
                    234:                        } else {
                    235:                                $build_ports_queue_entry = $this->TinderboxDS->createBuildPortsQueueEntry( $build_id, $priority, $port_directory, $this->moduleUsers->get_id(), $email_on_completion );
                    236:                                $this->build_id = $build_id;
                    237:                                if( $action == 'add' ) {
                    238:                                        if( $this->checkQueueEntryAccess( $build_ports_queue_entry, 'add' ) ) {
                    239:                                                if( $priority < 5 && !$this->checkQueueEntryAccess( $entry, 'priolower5' ) ) {
                    240:                                                        $this->template_assign( 'new_build_id', $build_id );
                    241:                                                        $this->template_assign( 'new_priority', $priority );
                    242:                                                        $this->template_assign( 'new_port_directory', $port_directory );
                    243:                                                        $this->template_assign( 'new_email_on_completion', $email_on_completion );
                    244:                                                        $this->TinderboxDS->addError( build_ports_queue_priority_to_low );
                    245:                                                } else {
                    246:                                                        $this->TinderboxDS->addBuildPortsQueueEntry( $build_ports_queue_entry );
                    247:                                                }
                    248:                                        } else {
                    249:                                                $this->template_assign( 'new_build_id', $build_id );
                    250:                                                $this->template_assign( 'new_priority', $priority );
                    251:                                                $this->template_assign( 'new_port_directory', $port_directory );
                    252:                                                $this->TinderboxDS->addError( build_ports_queue_not_allowed_to_add );
                    253:                                        }
                    254:                                }
                    255:                        }
                    256:                }
                    257:                return;
                    258:        }
                    259: }
                    260: ?>