private static function get_pids() { $pids = array(); $files = File::ls(work_path()); foreach ($files as $file) { if ($file->ext() == '.pid') { $pids[] = intval($file->oname()); } } return $pids; }
public function create() { try { Subversion::cmd('import', array(OpenpearConfig::svn_skeleton(work_path('skeleton')), File::absolute(OpenpearConfig::svn_root(), $this->package()->name())), array('message' => sprintf('[New Package] %s (@%s)', $this->package()->name(), $this->maintainer()->name()), 'username' => OpenpearConfig::system_user('openpear'))); // $message = new OpenpearMessage(); // $message->subject('New Package is ready for your commit!'); $this->delete(); C($this)->commit(); } catch (Exception $e) { Log::error($e->getMessage()); $this->trial_count += 1; $this->save(); C($this)->commit(); } }
public static function login(Request &$request) { Pea::begin_loose_syntax(); require_once 'Auth/OpenID/Consumer.php'; require_once 'Auth/OpenID/FileStore.php'; require_once 'Auth/OpenID/SReg.php'; require_once 'Auth/OpenID/PAPE.php'; if ($request->in_vars('openid_url') != "" || $request->in_vars('openid_verify')) { Log::debug("begin openid auth: " . $request->in_vars('openid_url')); // OpenID Auth $consumer = new Auth_OpenID_Consumer(new Auth_OpenID_FileStore(work_path('openid'))); if ($request->is_vars('openid_verify')) { $response = $consumer->complete($request->request_url()); if ($response->status == Auth_OpenID_SUCCESS) { return $response->getDisplayIdentifier(); } } else { $auth_request = $consumer->begin($request->in_vars('openid_url')); if (!$auth_request) { throw new RuntimeException('invalid openid url'); } $sreg_request = Auth_OpenID_SRegRequest::build(array('nickname'), array('fullname', 'email')); if ($sreg_request) { $auth_request->addExtension($sreg_request); } if ($auth_request->shouldSendRedirect()) { $redirect_url = $auth_request->redirectURL(url(), $request->request_url(false) . '?openid_verify=true'); if (Auth_OpenID::isFailure($redirect_url)) { throw new RuntimeException("Could not redirect to server: {$redirect_url->message}"); } else { $request->redirect($redirect_url); } } else { $form_html = $auth_request->htmlMarkup(url(), $request->request_url(false) . '?openid_verify=true', false, array('id' => 'openid_message')); if (Auth_OpenID::isFailure($form_html)) { throw new RuntimeException("Could not redirect to server: {$form_html->message}"); } else { echo $form_html; exit; } } } } Pea::end_loose_syntax(); return null; }
public function current_image() { $current = $this->get_current(); $cache_key = 'api_image_' . $current . '.png'; if (!file_exists(work_path('cache/' . $cache_key))) { $image = imagecreatefrompng(path('resources/media/images/ex_api.png')); $color = imagecolorallocate($image, 51, 51, 51); $tb = imagettfbbox(36, 0, def('image_api_font'), $this->get_current()); imagettftext($image, 36, 0, ceil((160 - $tb[2]) / 2), 60, $color, def('image_api_font'), $this->get_current()); imagepng($image, work_path('cache/' . $cache_key)); imagedestroy($image); } $interval = 180; header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $interval) . ' GMT'); header('Cache-Control: max-age=' . $interval); header('Pragma: cache'); header('Content-Type: image/png'); readfile(work_path('cache/' . $cache_key)); exit; }
/** * @see vendors/org/rhaco/storage/db/Dao/Dao#__after_save__() * @const string $svn_passwd_file リポジトリにアクセスするパスワード */ protected function __after_save__($commit) { $template = new Template(); $template->vars('maintainers', C(OpenpearMaintainer)->find_all()); File::write(OpenpearConfig::svn_passwd_file(work_path('openpear.passwd')), $template->read('files/passwd.txt')); Store::delete(self::cache_key($this->id)); }
/** * ファイルアップロードからリリース * @param string $package_name パッケージ名 **/ public function package_release_by_upload($package_name) { $package = C(OpenpearPackage)->find_get(Q::eq('name', $package_name)); $package->permission($this->user()); if ($this->is_post() && $this->is_files('package_file') && $this->verify()) { try { $package_file = $this->in_files('package_file'); $package_file->generate(work_path('upload/' . $package_name . '-' . date('YmdHis') . '.tgz')); if ($package_xml = simplexml_load_file(sprintf('phar://%s/package.xml', $package_file->fullname()))) { if ($package_xml->name != $package->name()) { throw new OpenpearException(Gettext::trans('incorrect package name')); } if ($package_xml->channel != OpenpearConfig::pear_domain('openpear.org')) { $package_xml->channel = OpenpearConfig::pear_domain('openpear.org'); $pd = new PharData($package_file->fullname()); $pd->addFromString('package.xml', $package_xml->asXML()); unset($pd); } $upload_queue = new stdClass(); $upload_queue->package_id = $package->id(); $upload_queue->package_file = $package_file->fullname(); $upload_queue->maintainer_id = $this->user()->id(); $queue = new OpenpearQueue('type=upload_release'); $queue->data(serialize($upload_queue)); $queue->save(); $message = new OpenpearMessage('type=system_notice,mail=false'); $message->maintainer_to_id($this->user()->id()); $message->subject(trans('リリースキューに追加されました')); $message->description(trans('{1}のリリースを受け付けました。リリースの完了後,メールでお知らせします。', $package->name())); $message->save(); $this->redirect_by_map('dashboard'); } } catch (Exception $e) { Log::debug($e); Exceptions::add($e); } } $this->vars('package', $package); $this->vars('package_id', $package->id()); }
public static function remove_pid() { unlink(work_path(sprintf('%d.pid', self::$pid))); }
/** * Subversion リポジトリの基本ディレクトリ構成を生成する */ public static function __setup_generate_skeleton__(Request $req) { $base_dir = $req->in_vars('path', OpenpearConfig::svn_skeleton(work_path('skeleton'))); File::mkdir($base_dir); File::mkdir(File::path($base_dir, 'doc')); File::mkdir(File::path($base_dir, 'doc/en')); File::mkdir(File::path($base_dir, 'doc/ja')); File::mkdir(File::path($base_dir, 'trunk')); File::mkdir(File::path($base_dir, 'tags')); File::mkdir(File::path($base_dir, 'branches')); File::write(File::path($base_dir, 'doc/ja/README'), text(' * Documentation このパッケージにはまだドキュメントが存在しません ')); File::write(File::path($base_dir, 'doc/en/README'), text(' * Documentation This package does not have any documents. ')); }
/** * パッケージのビルドとリリースを行う * @return void **/ public function build() { $package = C(OpenpearPackage)->find_get(Q::eq('id', $this->package_id)); $maintainer = C(OpenpearMaintainer)->find_get(Q::eq('id', $this->maintainer_id)); $this->init_build_dir(work_path('build/' . $package->name() . '.' . date('YmdHis'))); foreach (array('desc.txt', 'notes.txt', 'summary.txt') as $filename) { File::write($this->build_dir($filename), $package->description()); } if ($package->is_external_repository()) { switch ($package->external_repository_type()) { case 'Git': $cmd = 'git clone'; break; case 'Mercurial': $cmd = 'hg clone'; break; case 'Subversion': $cmd = 'svn export'; break; default: throw new RuntimeException('unknown repository type'); } $command = new Command(sprintf('%s %s %s', $cmd, escapeshellarg($package->external_repository()), escapeshellarg($this->build_dir('tmp')))); } else { // Openpear Repository $revision = is_numeric($this->revision) && $this->revision > 0 ? intval($this->revision) : 'HEAD'; $repository_path = sprintf('%s/%s/trunk', OpenpearConfig::svn_root(), $package->name()); $command = new Command(sprintf('svn export -r %s %s %s', $revision, escapeshellarg($repository_path), escapeshellarg($this->build_dir('tmp')))); } if ($command->end_code()) { throw new RuntimeException($command->stderr()); } $build_path = $this->build_dir(implode('/', array('tmp', $this->build_path))); if (!File::exist($build_path)) { throw new RuntimeException(sprintf('build path is not found: %s', $build_path)); } $mv = new Command(sprintf('mv %s %s', escapeshellarg($build_path), escapeshellarg($this->build_dir('src')))); if ($mv->stderr() || !is_dir($this->build_dir('src'))) { throw new RuntimeException('src dir is not found'); } // ビルドする chdir($this->build_dir()); $project = PEAR_PackageProjector::singleton()->load($this->build_dir()); $project->configure($this->build_dir('build.conf')); $project->make(); // リリースしたファイルはどこ? chdir($this->build_dir('release')); foreach (glob('*.tgz') as $filename) { $package_file = $this->build_dir('release') . '/' . $filename; break; } if (!file_exists($package_file)) { throw new RuntimeException('package file is not exists: ' . $package_file); } // サーバーに追加する $cfg = (include path('channel.config.php')); $server = new PEAR_Server2($cfg); $server->addPackage($package_file); // svn tag $build_conf = parse_ini_string($this->build_conf, true); $svn = new Command(sprintf('svn copy' . ' %s/%s/trunk/%s' . ' %s/%s/tags/%s-%s-%s' . ' -m "%s (%s-%s) (@%s)"' . ' --username openpear', OpenpearConfig::svn_root(), $package->name(), $this->build_path, OpenpearConfig::svn_root(), $package->name(), $build_conf['version']['release_ver'], $build_conf['version']['release_stab'], date('YmdHis'), 'package released', $build_conf['version']['release_ver'], $build_conf['version']['release_stab'], $maintainer->name())); // これ以降はエラーが起きてもドンマイ try { $release = new OpenpearRelease(); $release->package_id($package->id()); $release->maintainer_id($maintainer->id()); $release->version($build_conf['version']['release_ver']); $release->version_stab($build_conf['version']['release_stab']); $release->notes($this->notes); $release->settings($this->build_conf); $release->save(); $package->latest_release_id($release->id()); $package->released_at(time()); $package->save(); $message_template = new Template(); $message_template->vars('t', new Templf()); $message_template->vars('package', $package); $message_template->vars('maintainer', $maintainer); $message = new OpenpearMessage('type=system'); $message->maintainer_to_id($maintainer->id()); $message->subject(trans('{1} package have been released.', $package->name())); $message->description($message_template->read('messages/released.txt')); $message->save(); } catch (Exception $e) { Log::error($e); } }
<?php /** * 更新を監視してmxmlcする */ include_once dirname(__FILE__) . "/__settings__.php"; import("core.Command"); import("core.File"); import("core.Request"); $req = new Request(); $cmd = new Command(); $cmd->open(File::absolute(def("mxmlc@flex_bin"), "fcsh"), null, work_path("mxmlc_error")); $src = new File(path("flex/src/" . $req->inVars("f", "index.mxml"))); $bin = path("flex/bin/" . $src->oname() . ".swf"); $lib = path("flex/lib/"); $rsl = path("flex/rsl/"); while (true) { $lib_last_update = $src_last_update = $rsl_last_update = $id = 0; $mxmlc = sprintf("mxmlc -output %s --file-specs %s ", $bin, $src); if ($lib_last_update < ($lib_update = File::last_update($lib, true))) { $lib_last_update = $lib_update; $files = array(); foreach (File::ls($lib) as $f) { $files[] = $f->fullname(); } $mxmlc .= "-library-path+=" . implode(",", $files) . " "; } if ($rsl_last_update < ($rsl_update = File::last_update($rsl, true))) { $rsl_last_update = $rsl; $files = array(); foreach (File::ls($rsl) as $f) {