Annotation of FreeBSD/tinderbox/webui/module/moduleBuildPorts.php, revision 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/moduleBuildPorts.php,v 1.14 2007/10/07 00:58:56 ade Exp $
        !            28: #
        !            29: 
        !            30: require_once 'module/module.php';
        !            31: require_once 'module/modulePorts.php';
        !            32: 
        !            33: class moduleBuildPorts extends module {
        !            34: 
        !            35:        function moduleBuildPorts() {
        !            36:                $this->module();
        !            37:                $this->modulePorts = new modulePorts();
        !            38:        }
        !            39: 
        !            40:        function display_list_buildports( $build_name, $sort ) {
        !            41: 
        !            42:                $build = $this->TinderboxDS->getBuildByName( $build_name );
        !            43:                $ports = $this->TinderboxDS->getPortsForBuild( $build, $sort );
        !            44:                $ports_tree = $this->TinderboxDS->getPortsTreeById( $build->getPortsTreeId() );
        !            45:                $jail = $this->TinderboxDS->getJailById( $build->getJailId() );
        !            46: 
        !            47:                if( is_array( $ports ) && count( $ports ) > 0 ) {
        !            48:                        $this->template_assign( 'data', $this->modulePorts->get_list_data( $build_name, $ports ) );
        !            49:                        $this->template_assign( 'no_list', false );
        !            50:                } else {
        !            51:                        $this->template_assign( 'no_list', true );
        !            52:                }
        !            53: 
        !            54:                foreach( $this->TinderboxDS->getAllPortFailReasons() as $reason ) {
        !            55:                        $port_fail_reasons[$reason->getTag()]['tag']   = htmlentities($reason->getTag());
        !            56:                        $port_fail_reasons[$reason->getTag()]['descr'] = $reason->getDescr();
        !            57:                        $port_fail_reasons[$reason->getTag()]['type']  = $reason->getType();
        !            58:                        $port_fail_reasons[$reason->getTag()]['link']  = true;
        !            59:                }
        !            60: 
        !            61:                foreach ( $ports as $port ) {
        !            62:                        if ( $port->getLastFailedDep() != "" ) {
        !            63:                                $depreason = $port->getLastFailedDep();
        !            64:                                $port_fail_reasons[$depreason]['tag']   = htmlentities( $depreason );
        !            65:                                $port_fail_reasons[$depreason]['descr'] = htmlentities( "Port was not built since dependency $depreason failed." );
        !            66:                                $port_fail_reasons[$depreason]['type']  = 'COMMON';
        !            67:                                $port_fail_reasons[$depreason]['link']  = false;
        !            68: 
        !            69:                        }
        !            70:                }
        !            71: 
        !            72:                $qs = array();
        !            73:                $qkvs = explode('&', $_SERVER['QUERY_STRING']);
        !            74:                foreach ($qkvs as $qkv) {
        !            75:                        $kv = explode('=', $qkv);
        !            76:                        $qs[$kv[0]] = $kv[1];
        !            77:                }
        !            78: 
        !            79:                $this->template_assign( 'port_fail_reasons',      $port_fail_reasons );
        !            80:                $this->template_assign( 'maintainers',            $this->TinderboxDS->getAllMaintainers() );
        !            81:                $this->template_assign( 'build_description',      $build->getDescription() );
        !            82:                $this->template_assign( 'build_name',             $build_name );
        !            83:                $this->template_assign( 'jail_name',              $jail->getName() );
        !            84:                $this->template_assign( 'jail_tag',               $jail->getTag() );
        !            85:                $this->template_assign( 'jail_lastbuilt',         prettyDatetime( $jail->getLastBuilt() ) );
        !            86:                $this->template_assign( 'ports_tree_description', $ports_tree->getDescription() );
        !            87:                $this->template_assign( 'ports_tree_lastbuilt',   prettyDatetime( $ports_tree->getLastBuilt() ) );
        !            88:                $this->template_assign( 'local_time',             prettyDatetime( date( 'Y-m-d H:i:s' ) ) );
        !            89:                $this->template_assign( 'querystring',            $qs);
        !            90: 
        !            91:                return $this->template_parse( 'list_buildports.tpl' );
        !            92:        }
        !            93: 
        !            94:        function display_failed_buildports( $build_name, $maintainer, $all ) {
        !            95: 
        !            96:                if( $build_name ) {
        !            97:                        $build = $this->TinderboxDS->getBuildByName( $build_name );
        !            98:                        $build_id = $build->getId();
        !            99:                } else {
        !           100:                        $build_id = false;
        !           101:                }
        !           102: 
        !           103:                if ($all) {
        !           104:                        $ports = $this->TinderboxDS->getPortsByStatus( $build_id, $maintainer, '', 'SUCCESS' );
        !           105:                } else {
        !           106:                        $ports = $this->TinderboxDS->getPortsByStatus( $build_id, $maintainer, 'FAIL', '' );
        !           107:                }
        !           108: 
        !           109:                if( is_array( $ports ) && count( $ports ) > 0 ) {
        !           110:                        $this->template_assign( 'data', $this->modulePorts->get_list_data( $build_name, $ports ) );
        !           111:                        $this->template_assign( 'no_list', false );
        !           112:                } else {
        !           113:                        $this->template_assign( 'no_list', true );
        !           114:                }
        !           115: 
        !           116:                foreach( $this->TinderboxDS->getAllPortFailReasons() as $reason ) {
        !           117:                        $port_fail_reasons[$reason->getTag()]['tag']   = htmlentities($reason->getTag());
        !           118:                        $port_fail_reasons[$reason->getTag()]['descr'] = $reason->getDescr();
        !           119:                        $port_fail_reasons[$reason->getTag()]['type']  = $reason->getType();
        !           120:                        $port_fail_reasons[$reason->getTag()]['link']  = true;
        !           121:                }
        !           122: 
        !           123:                foreach ( $ports as $port ) {
        !           124:                        if ( $port->getLastFailedDep() != "" ) {
        !           125:                                $depreason = $port->getLastFailedDep();
        !           126:                                $port_fail_reasons[$depreason]['tag']   = htmlentities( $depreason );
        !           127:                                $port_fail_reasons[$depreason]['descr'] = htmlentities( "Port was not built since dependency $depreason failed." );
        !           128:                                $port_fail_reasons[$depreason]['type']  = 'COMMON';
        !           129:                                $port_fail_reasons[$depreason]['link']  = false;
        !           130:                        }
        !           131:                }
        !           132: 
        !           133:                $this->template_assign( 'port_fail_reasons',      $port_fail_reasons );
        !           134:                $this->template_assign( 'build_name', $build_name );
        !           135:                $this->template_assign( 'maintainer', $maintainer );
        !           136:                $this->template_assign( 'local_time', prettyDatetime( date( 'Y-m-d H:i:s' ) ) );
        !           137: 
        !           138:                return $this->template_parse( 'failed_buildports.tpl' );
        !           139:        }
        !           140: 
        !           141:        function display_latest_buildports( $build_name ) {
        !           142: 
        !           143:                $current_builds = $this->display_current_buildports( $build_name );
        !           144: 
        !           145:                if( $build_name ) {
        !           146:                        $build = $this->TinderboxDS->getBuildByName( $build_name );
        !           147:                        $build_id = $build->getId();
        !           148:                } else {
        !           149:                        $build_id = false;
        !           150:                }
        !           151: 
        !           152:                $ports = $this->TinderboxDS->getLatestPorts( $build_id, 20 );
        !           153: 
        !           154:                if( is_array( $ports ) && count( $ports ) > 0 ) {
        !           155:                        $this->template_assign( 'data', $this->modulePorts->get_list_data( $build_name, $ports ) );
        !           156:                        $this->template_assign( 'no_list', false );
        !           157:                } else {
        !           158:                        $this->template_assign( 'no_list', true );
        !           159:                }
        !           160: 
        !           161:                foreach( $this->TinderboxDS->getAllPortFailReasons() as $reason ) {
        !           162:                        $port_fail_reasons[$reason->getTag()]['tag']   = htmlentities($reason->getTag());
        !           163:                        $port_fail_reasons[$reason->getTag()]['descr'] = $reason->getDescr();
        !           164:                        $port_fail_reasons[$reason->getTag()]['type']  = $reason->getType();
        !           165:                        $port_fail_reasons[$reason->getTag()]['link']  = true;
        !           166:                }
        !           167: 
        !           168:                foreach ( $ports as $port ) {
        !           169:                        if ( $port->getLastFailedDep() != "" ) {
        !           170:                                $depreason = $port->getLastFailedDep();
        !           171:                                $port_fail_reasons[$depreason]['tag']   = htmlentities( $depreason );
        !           172:                                $port_fail_reasons[$depreason]['descr'] = htmlentities( "Port was not built since dependency $depreason failed." );
        !           173:                                $port_fail_reasons[$depreason]['type']  = 'COMMON';
        !           174:                                $port_fail_reasons[$depreason]['link']  = false;
        !           175:                        }
        !           176:                }
        !           177: 
        !           178:                $this->template_assign( 'port_fail_reasons',      $port_fail_reasons );
        !           179:                $this->template_assign( 'current_builds',         $current_builds );
        !           180:                $this->template_assign( 'build_name',             $build_name );
        !           181:                $this->template_assign( 'local_time',             prettyDatetime( date( 'Y-m-d H:i:s' ) ) );
        !           182: 
        !           183:                return $this->template_parse( 'latest_buildports.tpl' );
        !           184:        }
        !           185: 
        !           186:        function display_current_buildports( $showbuild ) {
        !           187:                $activeBuilds = array();
        !           188:                $builds = $this->TinderboxDS->getBuilds();
        !           189:                if( $builds ) {
        !           190:                        foreach( $builds as $build ) {
        !           191:                                if( empty( $showbuild ) || $build->getName() == $showbuild ) {
        !           192:                                        if( $build->getBuildStatus() == 'PORTBUILD' ) {
        !           193:                                                $activeBuilds[] = $build;
        !           194:                                        }
        !           195:                                }
        !           196:                        }
        !           197:                }
        !           198: 
        !           199:                if( sizeof( $activeBuilds ) > 0 ) {
        !           200:                        $i = 0;
        !           201:                        foreach( $activeBuilds as $build ) {
        !           202:                                if( $build->getBuildCurrentPort() )
        !           203:                                        $data[$i]['port_current_version'] = $build->getBuildCurrentPort();
        !           204:                                else
        !           205:                                        $data[$i]['port_current_version'] = preparing_next_build;
        !           206: 
        !           207:                                $data[$i]['build_name'] = $build->getName();
        !           208:                                $data[$i]['build_last_updated'] = $build->getBuildLastUpdated();
        !           209:                                $data[$i]['build_eta'] = 'N/A';
        !           210:                                $currport = $this->TinderboxDS->getCurrentPortForBuild($build->getId());
        !           211:                                if (!is_null($currport)) {
        !           212:                                        $bp = $this->TinderboxDS->getBuildPorts($currport->getId(), $build->getId());
        !           213:                                        $as = explode(" ", $build->getBuildLastUpdated());
        !           214:                                        $ymd = explode("-", $as[0]);
        !           215:                                        $hms = explode(":", $as[1]);
        !           216:                                        $then = mktime($hms[0], $hms[1], $hms[2], $ymd[1], $ymd[2], $ymd[0]);
        !           217:                                        $diff = time() - $then;
        !           218:                                        if ($bp->getLastRunDuration() - $diff >= 0)
        !           219:                                                $data[$i]['build_eta'] = $bp->getLastRunDuration() - $diff;
        !           220:                                }
        !           221:                                $i++;
        !           222:                        }
        !           223:                        $this->template_assign( 'data', $data );
        !           224:                        $this->template_assign( 'no_list', false );
        !           225:                } else {
        !           226:                        $this->template_assign( 'no_list', true );
        !           227:                }
        !           228: 
        !           229:                $this->template_assign( 'build_name', $showbuild );
        !           230: 
        !           231:                return $this->template_parse( 'current_buildports.tpl' );
        !           232:        }
        !           233: }
        !           234: ?>