示例#1
0
 public function __construct(Project_Build $build)
 {
     parent::__construct();
     $this->_ptrProjectBuild = $build;
     $this->_buildId = $build->getId();
     $this->_date = null;
     $this->_version = '';
 }
示例#2
0
 /**
  *
  */
 public static function project_history()
 {
     SystemEvent::raise(SystemEvent::DEBUG, "Called.", __METHOD__);
     if (empty($GLOBALS['project']) || !$GLOBALS['project'] instanceof Project || empty($_GET['bid'])) {
         $msg = 'Invalid request';
         SystemEvent::raise(SystemEvent::INFO, $msg, __METHOD__);
         echo json_encode(array('success' => false, 'error' => $msg));
         exit;
     }
     //
     // Viewing project build details
     //
     $build = null;
     // It's possible that no build was triggered yet.
     if (isset($_GET['bid']) && !empty($_GET['bid'])) {
         $build = Project_Build::getById($_GET['bid'], $GLOBALS['project'], $GLOBALS['user']);
     }
     if (!$build instanceof Project_Build) {
         $msg = 'Invalid request';
         SystemEvent::raise(SystemEvent::INFO, $msg, __METHOD__);
         echo json_encode(array('success' => false, 'error' => $msg));
         exit;
     }
     //
     // We need to process a Smarty file...
     // TODO: Centralize this
     //
     require_once CINTIENT_SMARTY_INCLUDE;
     $smarty = new Smarty();
     $smarty->setAllowPhpTag(true);
     $smarty->setCacheLifetime(0);
     $smarty->setDebugging(SMARTY_DEBUG);
     $smarty->setForceCompile(SMARTY_FORCE_COMPILE);
     $smarty->setCompileCheck(SMARTY_COMPILE_CHECK);
     $smarty->setTemplateDir(SMARTY_TEMPLATE_DIR);
     $smarty->setCompileDir(SMARTY_COMPILE_DIR);
     $smarty->error_reporting = error_reporting();
     Framework_SmartyPlugin::init($smarty);
     //
     // Special tasks. This is post build, so we're fetching an existing special task (never creating it)
     //
     $specialTasks = $build->getSpecialTasks();
     $smarty->assign('project_specialTasks', $specialTasks);
     if (!empty($specialTasks)) {
         foreach ($specialTasks as $task) {
             if (!class_exists($task)) {
                 SystemEvent::raise(SystemEvent::ERROR, "Unexisting special task. [PID={$GLOBALS['project']->getId()}] [BUILD={$build->getId()}] [TASK={$task}]", __METHOD__);
                 continue;
             }
             $o = $task::getById($build, $GLOBALS['user'], Access::READ);
             //$smarty->assign($task, $o); // Register for s
             if (!$o instanceof Build_SpecialTaskInterface) {
                 SystemEvent::raise(SystemEvent::ERROR, "Unexisting special task ID. [PID={$GLOBALS['project']->getId()}] [BUILD={$build->getId()}] [TASK={$task}] [TASKID={$build->getId()}]", __METHOD__);
                 continue;
             }
             $viewData = $o->getViewData();
             if (is_array($viewData)) {
                 foreach ($viewData as $key => $value) {
                     $smarty->assign($key, $value);
                 }
             }
             $o = null;
             unset($o);
         }
     }
     // Last assignments
     $smarty->assign('project_build', $build);
     $smarty->display('includes/buildHistoryRev.inc.tpl');
 }
示例#3
0
 public static function project_history()
 {
     if (!isset($GLOBALS['project']) || !$GLOBALS['project'] instanceof Project) {
         SystemEvent::raise(SystemEvent::ERROR, "Problems fetching requested project.", __METHOD__);
         //
         // TODO: Notification
         //
         //
         // TODO: this should really be a redirect to the previous page.
         //
         return false;
     }
     //
     // Viewing project build details
     //
     $build = null;
     // It's possible that no build was triggered yet.
     if (isset($_GET['bid']) && !empty($_GET['bid'])) {
         $build = Project_Build::getById($_GET['bid'], $GLOBALS['project'], $GLOBALS['user']);
     } else {
         $build = Project_Build::getLatest($GLOBALS['project'], $GLOBALS['user']);
     }
     //
     // TODO: don't let user access the build history of a still unfinished build!
     //
     if ($build instanceof Project_Build) {
         //
         // Special tasks. This is post build, so we're fetching an existing special task (never creating it)
         //
         $specialTasks = $build->getSpecialTasks();
         $GLOBALS['smarty']->assign('project_specialTasks', $specialTasks);
         if (!empty($specialTasks)) {
             foreach ($specialTasks as $task) {
                 if (!class_exists($task)) {
                     SystemEvent::raise(SystemEvent::ERROR, "Unexisting special task. [PID={$GLOBALS['project']->getId()}] [BUILD={$build->getId()}] [TASK={$task}]", __METHOD__);
                     continue;
                 }
                 $o = $task::getById($build, $GLOBALS['user'], Access::READ);
                 //$GLOBALS['smarty']->assign($task, $o); // Register for s
                 if (!$o instanceof Build_SpecialTaskInterface) {
                     SystemEvent::raise(SystemEvent::ERROR, "Unexisting special task ID. [PID={$GLOBALS['project']->getId()}] [BUILD={$build->getId()}] [TASK={$task}] [TASKID={$build->getId()}]", __METHOD__);
                     continue;
                 }
                 $viewData = $o->getViewData();
                 if (is_array($viewData)) {
                     foreach ($viewData as $key => $value) {
                         $GLOBALS['smarty']->assign($key, $value);
                     }
                 }
                 $o = null;
                 unset($o);
             }
         }
     }
     // Last assignments
     $GLOBALS['smarty']->assign('project_buildList', Project_Build::getList($GLOBALS['project'], $GLOBALS['user']));
     $GLOBALS['smarty']->assign('project_build', $build);
 }
示例#4
0
 public static function getById(Project_Build $build, User $user, $access = Access::READ, array $options = array())
 {
     $ret = false;
     $access = (int) $access;
     // Unfortunately, no enums, no type hinting, no cry.
     $sql = 'SELECT pd.*' . ' FROM phpdepend' . $build->getProjectId() . ' pd, projectuser pu' . ' WHERE pu.projectid=?' . ' AND pu.userid=?' . ' AND pu.access & ?' . ' AND pd.buildid=?';
     $val = array($build->getProjectId(), $user->getId(), $access, $build->getId());
     if ($rs = Database::query($sql, $val)) {
         if ($rs->nextRow()) {
             $ret = self::_getObject($rs, $build);
         }
     }
     return $ret;
 }
示例#5
0
    public static function install()
    {
        SystemEvent::raise(SystemEvent::INFO, "Creating project related tables...", __METHOD__);
        $tableName = 'project';
        $sql = <<<EOT
DROP TABLE IF EXISTS {$tableName}NEW;
CREATE TABLE IF NOT EXISTS {$tableName}NEW (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  releaselabel TEXT NOT NULL DEFAULT '',
  datecreation DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  datecheckedforchanges DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  deploymentbuilder TEXT NOT NULL DEFAULT '',
  description TEXT DEFAULT '',
  integrationbuilder TEXT NOT NULL DEFAULT '',
  optionreleasepackage TINYINT UNSIGNED NOT NULL DEFAULT 0,
  scmcheckchangestimeout MEDIUMINT UNSIGNED NOT NULL DEFAULT 30,
  scmconnectortype VARCHAR(20) NOT NULL DEFAULT '',
  scmpassword VARCHAR(255) NOT NULL DEFAULT '',
  scmremoterepository VARCHAR(255) NOT NULL DEFAULT '',
  scmusername VARCHAR(255) NOT NULL DEFAULT '',
  scmenvvars VARCHAR(255) NOT NULL DEFAULT '',
  specialtasks TEXT NOT NULL DEFAULT '',
  statsnumbuilds INTEGER UNSIGNED NOT NULL DEFAULT 0,
  status TINYINT UNSIGNED NOT NULL DEFAULT 0,
  title VARCHAR(255) NOT NULL DEFAULT '',
  visits INTEGER UNSIGNED NOT NULL DEFAULT 0,
  workdir VARCHAR(255) NOT NULL DEFAULT '',
  avatar VARCHAR(255) NOT NULL DEFAULT ''
);
EOT;
        if (!Database::setupTable($tableName, $sql)) {
            SystemEvent::raise(SystemEvent::ERROR, "Problems setting up project table.", __METHOD__);
            return false;
        }
        if (!Project_User::install()) {
            return false;
        }
        //
        // Upgrade Project_Build tables
        //
        $tables = Database::getTables();
        $dummyProject = new Project();
        $dummyProject->setAutoSave(false);
        // Never save this dummy project
        foreach ($tables as $table) {
            if (preg_match('/^(projectbuild)(\\d+)$/', $table, $matches)) {
                $dummyProject->setId($matches[2]);
                if (!Project_Build::install($dummyProject)) {
                    return false;
                }
            } elseif (preg_match('/^(projectlog)(\\d+)$/', $table, $matches)) {
                $dummyProject->setId($matches[2]);
                if (!Project_Log::install($dummyProject)) {
                    return false;
                }
            }
        }
        $dummyProject = null;
        unset($dummyProject);
        SystemEvent::raise(SystemEvent::INFO, "All project related tables created.", __METHOD__);
        return true;
    }
示例#6
0
 private static function _getObject(Resultset $rs, Project $project)
 {
     $ret = new Project_Build($project);
     $ret->setId($rs->getId());
     $ret->setDate($rs->getDate());
     $ret->setDuration($rs->getDuration());
     $ret->setLabel($rs->getLabel());
     $ret->setDescription($rs->getDescription());
     $ret->setOutput($rs->getOutput());
     $ret->setReleaseFile($rs->getReleaseFile());
     $specialTasks = @unserialize($rs->getSpecialTasks());
     if ($specialTasks === false) {
         $specialTasks = array();
     }
     $ret->setSpecialTasks($specialTasks);
     $ret->setStatus($rs->getStatus());
     $ret->setScmRevision($rs->getScmRevision());
     //
     // Get all extras related to this build
     //
     //$ret->setPtrPhpDepend(PhpDepend::getById($ret, $GLOBALS['user'], Access::READ));
     $ret->resetSignature();
     return $ret;
 }
示例#7
0
 public static function getForProjectBuildView(Project_Build $build, Project $project = null)
 {
     return CINTIENT_BASE_URL . "/project/history/?bid={$build->getId()}" . ($project instanceof Project ? '&pid=' . $project->getId() : '');
 }