Exemplo n.º 1
0
/**
 * appinfo
 *
 * <pre>
 * appinfo(app.ymlの['core']['info'])の値を出力します。テンプレート生成時のみ動作します。
 * </pre>
 *
 * @category   BEAR
 * @package    BEAR_Smarty
 * @subpackage Plugin
 * @author     Akihito Koriyama <*****@*****.**>
 * @copyright  2008-2011 Akihito Koriyama  All rights reserved.
 * @license    http://opensource.org/licenses/bsd-license.php BSD
 * @version    SVN: Release: @package_version@ $Id:$
 * @link       http://www.bear-project.net/
 *
 * @param string $tagArg
 * @param Smarty &$smarty Smarty object
 *
 * @return string
 */
function smarty_compiler_appinfo($tagArg, &$smarty)
{
    static $app = array();
    if (!$app) {
        $app = BEAR::get('app');
    }
    return 'echo \'' . "{$app['core']['info'][$tagArg]}" . '\';';
}
Exemplo n.º 2
0
 /**
  * Constructor
  *
  * @param array $config
  *
  * @see http://jp.php.net/manual/ja/function.Apc-addserver.php
  * @throws BEAR_Cache_Exception
  */
 public function __construct(array $config)
 {
     parent::__construct($config);
     $app = BEAR::get('app');
     $this->_config['info'] = $config['info'];
     if (!extension_loaded('apc') || !ini_get('apc.enabled') || !function_exists('apc_sma_info')) {
         throw new BEAR_Cache_Exception('APC extention is not loaded');
     } else {
         if ($this->_config['debug']) {
             $apcSmaInfo = apc_sma_info();
             BEAR::dependency('BEAR_Log')->log('APC', $apcSmaInfo);
         }
     }
 }
Exemplo n.º 3
0
 public static function onAutoload($class)
 {
     static $growlApp;
     BEAR::onAutoload($class);
     $ref = new ReflectionClass($class);
     $file = $ref->getFileName();
     if (!$growlApp) {
         $growlApp = new Net_Growl_Application(__CLASS__, array("Growl_Notify"));
     }
     $growl = Net_Growl::singleton($growlApp, null, null);
     $growl->setNotificationLimit(16);
     if (BEAR::exists($class)) {
         $config = BEAR::get($class)->getConfig();
     }
     $growl->notify("Growl_Notify", $class, $class);
 }
Exemplo n.º 4
0
/**
 * Pullリソース
 *
 * <pre>
 *
 * Example
 * </pre>
 * <code>
 * {resource uri='Entry' params=$entryParams tepmplate="resource/entry"}
 * </code>
 *
 * @category   BEAR
 * @package    BEAR_Smarty
 * @subpackage Plugin
 * @author     Akihito Koriyama <*****@*****.**>
 * @copyright  2008-2011 Akihito Koriyama  All rights reserved.
 * @license    http://opensource.org/licenses/bsd-license.php BSD
 * @version    SVN: Release: @package_version@ $Id:$
 * @link       http://www.bear-project.net/
 *
 * @param mixed $params
 * @param Smarty &$smarty
 *
 * @return mixed $resource
 */
function smarty_function_resource($params, &$smarty)
{
    $config = (array) BEAR::loadValues($params['params']) + array('method' => 'read', 'uri' => $params['uri'], 'values' => array(), 'options' => array());
    if (isset($params['template'])) {
        $config['options']['template'] = $params['template'];
    }
    if (isset($params['cache_life'])) {
        $config['options']['cache']['life'] = $params['cache_life'];
    }
    if (isset($params['cache_key'])) {
        $config['options']['cache']['key'] = $params['cache_key'];
    }
    $app = BEAR::get('app');
    $string = BEAR::factory('BEAR_Ro_Prototype', array('request' => $config, 'path' => $app['BEAR_View']['path']))->request()->toString();
    return $string;
}
Exemplo n.º 5
0
 /**
  * Inject
  *
  * 操作によってDBオブジェクトを変更します
  * read操作はdsnをslaveに、DBページャーを利用可能に。
  * その他操作はdsnをdefaultに、トランザクション可能にしExtendedモジュール読み込みます
  *
  * @return void
  */
 public function onInject()
 {
     $app = BEAR::get('app');
     $options['default_table_type'] = 'INNODB';
     if ($this->_config['method'] === 'read') {
         $dsn = $app['App_Db']['dsn']['slave'];
         $config = array('dsn' => $dsn, 'options' => $options);
         $this->_db = BEAR::factory('BEAR_Mdb2', $config);
         $this->_queryConfig = array('db' => $this->_db, 'ro' => $this, 'table' => $this->_table, 'pager' => 0, 'options' => array('accesskey' => true));
     } else {
         $dsn = $app['App_Db']['dsn']['default'];
         $options['use_transactions'] = true;
         $config = array('dsn' => $dsn, 'options' => $options);
         $this->_db = BEAR::factory('BEAR_Mdb2', $config);
         $this->_db->loadModule('Extended');
         $this->_queryConfig = array('db' => $this->_db, 'ro' => $this, 'table' => $this->_table);
     }
 }
Exemplo n.º 6
0
 /**
  * プロファイリングストップ
  *
  * プロファイラーリンクの表示します
  *
  * @return void
  */
 public static function stop()
 {
     static $done = false;
     if ($done !== false) {
         return;
     }
     $done = true;
     $xhprofData = xhprof_disable();
     $app = BEAR::get('app');
     $appName = $app['core']['info']['id'];
     // アプリ名とか識別する名前
     include_once _BEAR_BEAR_HOME . '/BEAR/vendors/xhprof_lib/utils/xhprof_lib.php';
     include_once _BEAR_BEAR_HOME . '/BEAR/vendors/xhprof_lib/utils/xhprof_runs.php';
     $xhprofRuns = new XHProfRuns_Default();
     $runId = $xhprofRuns->save_run($xhprofData, $appName);
     $href = "/__bear/prof/index.php?run={$runId}&source={$appName}";
     echo '<a style="padding: 3px; background-color: red; color: white; font-family: Verdana; font-style: normal; font-variant: normal; font-weight: bold; font-size: 8pt; " name="" target="_blank"' . $appName . '" href="' . $href . '"">PROFILE</a>';
 }
Exemplo n.º 7
0
/**
 * JSON出力
 *
 * @param array $values  値
 * @param array $options オプション
 *
 * @return BEAR_Ro
 */
function outputAjax($values, array $options)
{
    $ajax = BEAR::get('BEAR_Page_Ajax');
    $values = $ajax->getAjaxValues();
    //    $body = json_encode($values);
    // Services_JSONの方が信頼性が高いため採用
    $json = new Services_JSON();
    $body = $json->encode($values);
    $log = BEAR::dependency('BEAR_Log');
    /* @var $log BEAR_Log */
    $log->log('AJAX', $values);
    $headers = array('X-BEAR-Output: AJAX' => 'Content-Type: text/javascript+json; charset=utf-8');
    $ro = BEAR::factory('BEAR_Ro');
    /* @var $ro BEAR_Ro */
    $ro->setBody($body);
    $ro->setHeaders($headers);
    return $ro;
}
Exemplo n.º 8
0
 /**
  * サブミット処理
  *
  * エージェントの設定に応じてサブミットされた$_POSTまたは$_GETの文字列を
  * 絵文字エンティティや文字コード変換をします。
  *
  * @return void
  * @internal グローバル変数を直接変更してるのはそれに依存してるHTML_Quickformなどのライブラリのためです
  */
 public function submit()
 {
     static $done = false;
     $hasSubmit = isset($_POST['_token']) || isset($_GET['_token']) ? true : false;
     if (!$hasSubmit && $done) {
         return;
     }
     if (isset($_POST['_token'])) {
         $input =& $_POST;
     } elseif (isset($_GET['_token'])) {
         $input =& $_GET;
     } else {
         return;
     }
     $done = true;
     $app = BEAR::get('app');
     $emojiSubmit = isset($app['BEAR_Emoji']['submit']) ? $app['BEAR_Emoji']['submit'] : 'pass';
     switch ($emojiSubmit) {
         // 何もしない
         case 'pass':
             break;
         case 'entity':
             // 絵文字をエンティティに変換
             // 3GCsエンコード変換必須
             if ($this->_config['is_mobile']) {
                 array_walk_recursive($input, array('BEAR_Emoji', 'onEntityEmoji'), BEAR::dependency('BEAR_Emoji'));
             }
             break;
             // 絵文字除去
         // 絵文字除去
         case 'remove':
             array_walk_recursive($input, array('BEAR_Emoji', 'removeEmoji'), BEAR::dependency('BEAR_Emoji'));
             break;
         default:
             trigger_error('Illigal $this->_config[\'agent\'] error', E_USER_WARNING);
             break;
     }
     // UTF8に文字コード変換
     if (isset($this->_config['input_encode'])) {
         array_walk_recursive($input, array(__CLASS__, 'onUTF8'), $this->_config['input_encode']);
     }
 }
Exemplo n.º 9
0
    /**
     * 初期化
     *
     * @return void
     */
    public function onInit(array $args)
    {
        $q = $args['q'];
        $argv = explode(' ', $q);
        switch (true) {
            case $q == 'help':
                $help = <<<END
Commands:
  clear        clear screen
  config       show application configulation.
  info         show server info.
  bear         bear command, type bear -h for more info.
END;
                $this->_ajax->addAjax('js', array('shell' => "<pre>{$help}</pre>"));
                break;
            case $q == 'clear':
                $this->_ajax->addAjax('js', array('clear' => ''));
                break;
            case $q == 'config':
                $app = BEAR::get('app');
                $info = '<strong>app<strong><br />' . print_a($app, 'return:1');
                $this->_ajax->addAjax('js', array('shell' => $info));
                break;
            case $q == 'info':
                $info = '<strong>$_SERVER<strong><br />';
                $info .= print_a($_SERVER, 'return:1');
                $info .= '<strong>$_ENV<strong><br />';
                $info .= print_a($_ENV, 'return:1');
                $info .= '<strong>$_COOKIE<strong><br />';
                $info .= print_a($_COOKIE, 'return:1');
                $this->_ajax->addAjax('js', array('shell' => $info));
                break;
            case isset($argv[0]) && $argv[0] === 'bear':
                //bearコマンド
                $this->_shell($argv);
                break;
            default:
                $this->_ajax->addAjax('js', array('shell' => "BEAR: {$argv[0]}: Command not found<br/>"));
                break;
        }
    }
Exemplo n.º 10
0
 /**
  * プロファイリングストップ
  *
  * プロファイラーリンクの表示します
  *
  * @param int $type 0:xhprof 1:xh gui
  *
  * @return void
  */
 public static function stop($type = 0)
 {
     $xhprof_data = xhprof_disable();
     $isAjax = BEAR::dependency('BEAR_Page_Ajax')->isAjaxRequest();
     if ($isAjax === true || PHP_SAPI === 'cli') {
         return;
     }
     $xhprofRuns = new XHProfRuns_Default();
     if (BEAR::exists('app')) {
         $app = BEAR::get('app');
         $appName = $app['core']['info']['id'];
     } else {
         $appName = 'bear.app';
     }
     $baseHref = self::$_profilerInfo[$type]['href'];
     $runId = $xhprofRuns->save_run($xhprof_data, $appName);
     $href = "{$baseHref}/index.php?run={$runId}&source={$appName}";
     $link = '<br><a style="padding: 3px; background-color: red; color: white; font-family:';
     $link .= 'Verdana; font-style: normal; font-variant: normal; font-weight: bold; font-size: 8pt;';
     $link .= ' " name="" target="_blank" href="' . $href . '"">' . self::$_profilerInfo[$type]['label'] . '</a>';
     echo $link;
 }
Exemplo n.º 11
0
 /**
  * インジェクタ
  *
  * <pre>
  * 操作によってDBオブジェクトを変更します
  *
  * read操作はdsnをslaveに、DBページャーを利用可能に。
  * その他操作はdsnをdefaultに、トランザクション可能にしExtendedモジュール読み込みます
  * </pre>
  */
 public function onInject()
 {
     $app = BEAR::get('app');
     assert(is_string($app['App_Db']['dsn']['default']));
     assert(is_string($app['App_Db']['dsn']['slave']));
     assert(isset($this->_config['method']));
     $options['default_table_type'] = 'INNODB';
     if ($this->_config['method'] === 'read') {
         $dsn = $app['App_Db']['dsn']['slave'];
         $config = array('dsn' => $dsn, 'options' => $options);
         $this->_db = BEAR::factory('BEAR_Mdb2', $config);
         $this->_queryConfig = array('db' => &$this->_db, 'ro' => &$this, 'table' => $this->_table, 'pager' => 0, 'perPage' => 10, 'options' => array('accesskey' => true));
     } else {
         $dsn = $app['App_Db']['dsn']['default'];
         $options['use_transactions'] = true;
         $config = array('dsn' => $dsn, 'options' => $options);
         $this->_db = BEAR::factory('BEAR_Mdb2', $config);
         $this->_db->loadModule('Extended');
         $this->_queryConfig = array('db' => &$this->_db, 'ro' => &$this, 'table' => $this->_table);
     }
     // すべてのフィールド識別子が SQL 文中で自動的にクォート
     $this->_db->setOption('quote_identifier', true);
 }
Exemplo n.º 12
0
 /**
  * リソーステンプレートをRoにセット
  *
  * リクエストにテンプレートオプションが指定されているとHTML等文字列化してRoに保持します。
  *
  * @return void
  * @todo リソースボディのキャッシュはUA共通に
  */
 protected function _setHtml($isLinked)
 {
     // キャッシュ?
     $isLinkCache = isset($this->_config['request']['options']['cache']['link']) && $this->_config['request']['options']['cache']['link'];
     if ($isLinked && $isLinkCache === true) {
         $life = $this->_config['request']['options']['cache']['life'];
     } elseif (!$isLinked && isset($this->_config['request']['options']['cache']['life']) && isset($this->_config['request']['options']['template'])) {
         $life = $this->_config['request']['options']['cache']['life'];
     } else {
         $life = false;
     }
     if ($life !== false) {
         // キャッシュ読み込み
         $cache = BEAR::dependency('BEAR_Cache')->setLife($life);
         $pagerKey = isset($_GET['_start']) ? $_GET['_start'] : '';
         $ua = BEAR::get('page')->getConfig('ua');
         $cacheKey = $ua . md5(serialize($this->_config['request']) . "-{$pagerKey}");
         $saved = $cache->get($cacheKey);
         if ($saved) {
             $this->_ro = $saved;
             return;
         } else {
             $useCache = true;
         }
     }
     //実リクエスト
     $body = $isLinked !== true ? $this->_ro->getBody() : $this->getLinkedBody();
     $this->_ro->setBody($body);
     if ($isLinked === true) {
         $this->_ro->setHeader('_linked', $this->_chainLink);
     }
     // テンプレート適用
     $html = isset($this->_config['request']['options']['template']) ? $this->_getHtml($body) : false;
     if ($html !== false) {
         $this->_ro->setHtml($html);
     }
     // キャッシュ書き込み
     if (isset($useCache)) {
         $roContainer = new BEAR_Ro_Container($this->_ro);
         $cache->set($cacheKey, $roContainer);
     }
 }
Exemplo n.º 13
0
 /**
  * ステータスを表示
  *
  * @param string $msg   メッセージ
  * @param string $color カラー
  *
  * @return void
  */
 public static function printStatus($msg, $color = '#dddddd"')
 {
     $app = BEAR::get('app');
     if ($app['core']['debug'] !== true) {
         return;
     }
     static $y = 0;
     echo '<div name="name!" style="font-size: 9px; position: absolute;';
     echo " top: {$y}px; left: 0px; text-align: left padding:";
     echo '5px 3px 3px 3px;background-color:orange;color:white;';
     echo "border: 1px solid {$color}\">{$msg}</div>";
     $y += 20;
 }
Exemplo n.º 14
0
 /**
  * Constructor
  *
  * @param array $config
  */
 public function __construct(array $config)
 {
     $app = BEAR::get('app');
     $class = get_class($this);
     if (isset($app[$class])) {
         $config = array_merge($app[$class], $config);
     }
     $this->_config = (array) $config;
 }
Exemplo n.º 15
0
 /**
  * セッションスタート
  *
  * @return void
  */
 protected function _sessionStart()
 {
     $app = BEAR::get('app');
     // セッションスタート
     if ($this->_config['enable_ua_sniffing'] === true) {
         $adapterConfig = $this->_agent->adapter->getConfig();
         if ($adapterConfig['enable_session'] && $app['BEAR_Session']['adapter'] != 0) {
             BEAR::dependency('BEAR_Session')->start();
         }
     } elseif ($app['BEAR_Session']['adapter'] != 0) {
         BEAR::dependency('BEAR_Session')->start();
     }
 }
Exemplo n.º 16
0
 /**
  * HTML表示
  *
  * onInit()でセットされたリソース結果をHTML出力します。
  *
  * @param string $tplName テンプレート名
  * @param array  $options オプション
  *
  * @return void
  * @internal  $this->_config['mode']がself::CONFIG_MODE_HTMLでないときはunit test用にHTTP出力されません。
  */
 public function display($tplName = null, array $options = array())
 {
     if (BEAR::exists('pager')) {
         $pager = (array) BEAR::get('pager');
         $this->set('pager', $pager);
     }
     $this->_pageRo = $this->_viewAdapter()->display($tplName, $options);
     // add page BEAR_Page_Hedaers header
     $pageHeaders = (array) BEAR::dependency('BEAR_Page_Header')->getHeaders();
     $roHeaders = $this->_pageRo->getHeaders();
     $headers = array_merge($roHeaders, $pageHeaders);
     $this->_pageRo->setHeaders($headers);
     $this->_outputHttp($this->_pageRo);
 }
Exemplo n.º 17
0
 /**
  * リソースリクエスト
  *
  * @return BEAR_Ro
  * @throws Exception Ro内部で発生した例外
  */
 public function request()
 {
     $uri = $this->_config['uri'];
     $values = $this->_config['values'];
     $options = $this->_config['options'];
     // URIのクエリーと$valuesをmerge
     $parse = parse_url($uri);
     if (!isset($parse['scheme'])) {
         $this->_mergeQuery($uri, $values);
     }
     $isNotRead = $this->_config['method'] !== BEAR_Resource::METHOD_READ;
     if (!$isNotRead) {
         $hasCsrfOption = false;
     } elseif (isset($options[BEAR_Resource::OPTION_CSRF]) && $options[BEAR_Resource::OPTION_CSRF] === true) {
         // リソースリクエストオプション
         $hasCsrfOption = true;
     } elseif ($this->_config[BEAR_Resource::OPTION_CSRF] === true) {
         // yaml
         $hasCsrfOption = true;
     } else {
         $hasCsrfOption = false;
     }
     if (!$isNotRead) {
         $hasPoeOption = false;
     } elseif (isset($options[BEAR_Resource::OPTION_POE]) && $options[BEAR_Resource::OPTION_POE] === true) {
         // リソースリクエストオプション
         $hasPoeOption = true;
     } elseif ($this->_config[BEAR_Resource::OPTION_POE] === true) {
         // yaml
         $hasPoeOption = true;
     } else {
         $hasPoeOption = false;
     }
     if ($hasCsrfOption || $hasPoeOption) {
         $formToken = BEAR::dependency('BEAR_Form_Token');
         /* @var $formToken BEAR_Form_Token */
         $isTokenCsrfValid = $hasCsrfOption ? $formToken->isTokenCsrfValid() : true;
         if ($isTokenCsrfValid !== true) {
             throw $this->_exception('CSRF');
         }
         $isTokenPoeValid = $hasPoeOption ? $formToken->isTokenPoeValid() : true;
         if ($isTokenPoeValid !== true) {
             $headers = array('request config' => $this->_config, 'msg' => 'invalid token');
             $code = BEAR::CODE_BAD_REQUEST;
             $config = compact('headers', 'code');
             $ro = BEAR::factory('BEAR_Ro', $config);
             $ro->setConfig('uri', $uri);
             $ro->setConfig('values', $values);
             $ro->setConfig('options', $options);
             return $ro;
         } else {
             $formToken->newSessionToken();
         }
     }
     $config = $this->_config;
     $config['uri'] = $uri;
     $config['values'] = $values;
     $resourceRequestCache = BEAR::factory('BEAR_Resource_Request_Cache', $config);
     try {
         $ro = $resourceRequestCache->request();
         // 中で例外が発生しなかったらPOEオプションで使ったトークンを使用済みにマークする
         // @todo staticコールを廃止
         //             BEAR_Form::finishTokens();
         /* @todo 下のifブロックを置き換える
             $isOkRo = ($ro instanceof BEAR_Ro && $ro->getCode() === BEAR::CODE_OK);
            $isNotRo = ($ro instanceof BEAR_Ro === false);
            if (!$isOkRo && $isNotRo) {
            $body = $ro;
            $ro = BEAR::factory('BEAR_Ro');
            $ro->setBody($body);
            }
            */
         if ($ro instanceof BEAR_Ro && $ro->getCode() === BEAR::CODE_OK) {
             // $options ポストプロセスクラス
         } elseif ($ro instanceof BEAR_Ro === false) {
             $body = $ro;
             $ro = BEAR::factory('BEAR_Ro');
             $ro->setBody($body);
         }
         $request = "{$this->_config['method']} {$uri}" . ($values ? '?' . http_build_query($values) : '');
         self::_actionPostProcess($ro);
     } catch (Exception $e) {
         if (get_class($e) === 'Panda_Exception') {
             // HTTPエラー画面
             Panda::onException($e);
             throw $e;
         }
         if (BEAR::exists('page')) {
             $page = BEAR::get('page');
             if (method_exists($page, 'onException')) {
                 $page->onException($e);
             }
         }
         if ($this->_config['debug']) {
             $info = method_exists($e, 'getInfo') ? $e->getInfo() : '';
             Panda::error(get_class($e), $e->getCode() . ' ' . $e->getMessage(), $info);
         }
         //エラー (400=bad requset, or 500=server error
         $trace = $e->getTrace();
         $refTrace =& $trace;
         $trace = array_shift($refTrace);
         if (isset($trace['args'])) {
             $args = $trace['args'];
         } else {
             $args = '';
         }
         $headers = array();
         $exception = array('class' => get_class($e), 'msg' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine());
         $headers['_exception'] = $exception;
         if (method_exists($e, 'getInfo')) {
             $headers['_info'] = $e->getInfo();
         }
         $ro = BEAR::factory('BEAR_Ro');
         $ro->setHeaders($headers)->setCode($e->getCode());
     }
     if ($this->_config['debug']) {
         BEAR::dependency('BEAR_Ro_Debug', $this->_config)->debugShowResource($ro);
     }
     return $ro;
 }
Exemplo n.º 18
0
 /**
  * BEARバッジ表示
  *
  * <pre>
  * エラー状態を表し、__bearページにリンクするデバック時に
  * 画面右上に現れる「BEARバッジ」を表示します。
  *
  * ページの状態によって色が変わります。
  * </pre>
  * <ur>
  * <li>赤 Fatal, PEARエラーなど</li>
  * <li>黄 Warningレベルのエラーはあり</li>
  * <li>青 noticeは出てる</li>
  * <li>緑 noticeも出てない</li>
  * </url>
  *
  * @return string
  */
 public static function onOutpuHtmlDebug($html)
 {
     $ua = BEAR::dependency('BEAR_Agent')->getUa();
     $hasResource = BEAR::factory('BEAR_Ro_Debug')->hasResourceDebug();
     $app = BEAR::get('app');
     if (!$app['core']['debug']) {
         return;
     }
     // エラー統計
     $errorFgColor = "white";
     $errors = Panda::getAllErrors();
     $errorStat = Panda::getErrorStat();
     $errorMsg = implode("\n", $errors);
     if ($errorStat & E_ERROR || $errorStat & E_USER_ERROR || $errorStat & E_RECOVERABLE_ERROR) {
         $errorBgColor = "red";
         $errorMsg = "Fatal Error: {$errorMsg}";
         $bear = "BEAR - Error";
     } elseif ($errorStat & E_WARNING || $errorStat & E_USER_WARNING) {
         $errorBgColor = "yellow";
         $errorFgColor = "black";
         $errorMsg = "WARNING: {$errorMsg}";
         $bear = "BEAR - Warning";
     } elseif ($errorStat & E_NOTICE || $errorStat & E_USER_NOTICE) {
         $errorBgColor = "#2D41D7";
         $errorMsg = "NOTICE: {$errorMsg}";
         $bear = "BEAR";
     } else {
         $errorBgColor = "green";
         $errorMsg = "{$errorMsg}";
         $bear = "BEAR";
     }
     // デバック情報表示HTML
     // bear.jsを使用する場合はbear_debuggingがtrueになる
     if (file_exists(_BEAR_APP_HOME . '/htdocs/__edit')) {
         $editHtml = '<a href="/__edit/?id=@@@log_id@@@"';
         $editHtml .= ' class="bear_page_edit" style="padding:5px 3px 3px 3px;background-color: gray';
         $editHtml .= ';color:white; font:bold 8pt Verdana;';
         $editHtml .= 'border: 1px solid #dddddd">EDIT</a>';
     } else {
         $editHtml = '';
     }
     // リソースBoxリンク
     $color = "blue";
     $res = array();
     if (!isset($_GET['_resource'])) {
         $mode = 'box';
         $title = "Resource Box";
         $color = "grey";
     } elseif ($_GET['_resource'] == 'box') {
         $mode = 'body';
         $title = "Resource Body";
     } elseif ($_GET['_resource'] == 'body') {
         $mode = 'html';
         $title = "Resource HTML";
     } else {
         $mode = false;
         $title = "No Resource Box";
     }
     $currentMode = isset($_GET['_resource']) ? $_GET['_resource'] : 'none';
     $res = $mode ? array('_resource' => $mode) : array();
     unset($_GET['_resource']);
     $resourceBoxUrl = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) . '?' . http_build_query(array_merge($_GET, $res));
     $budgeHtml = '<div id="bear_badge">';
     $budgeHtml .= $editHtml;
     if ($hasResource === true) {
         $budgeHtml .= '<a href="' . $resourceBoxUrl . '" class="bear_resource_' . $currentMode . '" title="' . $title . '">RES</a>';
     }
     $budgeHtml .= '<a href="/__bear/?id=@@@log_id@@@" class="bear_badge" title="';
     $budgeHtml .= $errorMsg . '" style="background-color:' . $errorBgColor;
     $budgeHtml .= ';color:' . $errorFgColor . ';';
     $budgeHtml .= '">' . $bear . '</a><a href="?_bearinfo" class="bear_info">i</a></div>';
     $budgeHtml = str_replace('</body>', "{$budgeHtml}" . '<link rel="stylesheet" href="/__bear/css/debug.css" type="text/css">' . "</body>", $html);
     return $budgeHtml;
 }
Exemplo n.º 19
0
 /**
  * フォームレンダリング
  *
  * @param Smarty &$smarty  Smartyオブジェクト
  * @param string $ua       UAコード
  * @param bool   $enableJs JS有効?
  *
  * @return string
  */
 public static function renderForms(Smarty &$smarty, $ua, $enableJs = false)
 {
     static $result = false;
     static $done = false;
     if ($done === true) {
         return $result;
     }
     $removeJs = !$enableJs;
     $done = true;
     $result = array();
     foreach (self::$formNames as $formName) {
         $renderConfig = self::$_renderConfig[$formName];
         $adapter = isset($renderConfig['adapter']) ? $renderConfig['adapter'] : self::RENDERER_APP;
         $form = BEAR::get('BEAR_Form_' . $formName);
         $formErrors = false;
         $callback = isset($renderConfig['callback']) && is_callable($renderConfig['callback'], false) ? $renderConfig['callback'] : false;
         switch ($adapter) {
             case self::RENDERER_APP:
                 // DHTMLRulesTablelessレンダラ
                 // 単数フォーム(App_Form_Renderer_優先)
                 try {
                     $renderer = BEAR::dependency('App_Form_Renderer_' . $ua);
                 } catch (BEAR_Exception $e) {
                     $renderer = BEAR::dependency('BEAR_Form_Renderer_' . $ua);
                 } catch (Excption $e) {
                     throw $e;
                 }
                 assert(is_object($renderer));
                 if ($callback) {
                     call_user_func($callback, $renderer);
                 }
                 $form->accept($renderer);
                 // 完全なXHTML1.1に
                 $form->removeAttribute('name');
                 $formValue = $renderer->toHtml();
                 $formErrors = $form->_errors;
                 break;
             case self::RENDERER_DHTML_TABLELESS:
                 // DHTMLRulesTablelessレンダラ
                 // 単数フォーム
                 $renderer = new HTML_QuickForm_Renderer_Tableless($form);
                 // onblur有効
                 $form->getValidationScript();
                 $form->accept($renderer);
                 // 完全なXHTML1.1に
                 $form->removeAttribute('name');
                 if ($callback) {
                     call_user_func($callback, $renderer);
                 }
                 $formValue = $renderer->toHtml();
                 $formErrors = $form->_errors;
                 break;
             case self::RENDERER_SMARTY_ARRAY:
             default:
                 // HTML_QuickForm_Renderer_ArraySmartyレンダラ
                 // フォーム描画
                 $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty);
                 $renderer->setRequiredTemplate(self::$requireTemplate);
                 $renderer->setErrorTemplate(self::$errorTemplate);
                 if ($callback) {
                     call_user_func($callback, $renderer);
                 }
                 $form->accept($renderer);
                 $formValue = $renderer->toArray();
                 break;
         }
         // エラーサマリー
         if (is_array($formErrors) && $formErrors && isset(self::$_renderConfig[$formName]['errors']) && self::$_renderConfig[$formName]['errors']) {
             $errorSummary = '<div class="form-errors"><ul><li>' . implode('</li><li>', $formErrors) . '</li></ul></div>';
             $smarty->assign(self::$_renderConfig[$formName]['errors'], $errorSummary);
         }
         // remove Javascript code if Docomo or AU
         if (is_array($formValue) && isset($formValue['javascript']) && $removeJs) {
             unset($formValue['javascript']);
         }
         $smarty->assign($formName, $formValue);
         $result[$formName] = $formValue;
     }
     return $result;
 }
Exemplo n.º 20
0
 /**
  * Inject
  *
  * @return void
  */
 public function onInject()
 {
     $app = BEAR::get('app');
     $this->_config['path'] = $app['BEAR_View']['path'];
 }
Exemplo n.º 21
0
<?php

if (!ereg("Firefox", getenv("HTTP_USER_AGENT"))) {
    // tweak for safari or ...
    echo '<html><head><script type="text/javascript" src="/__bear/bearshell/refresh.js"></script></head><body></body></html>';
}
require_once 'App.php';
$_SERVER['__bear'] = 1;
$app = BEAR::get('app');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>BEAR Shell</title>
<link rel="stylesheet" href="/__bear/css/bearshell.css" type="text/css"	media="screen">
<script type="text/javascript" src="/__bear/js/jquery.bear.min.js.php"></script>
<script type="text/javascript" src="/__bear/js/app.js"></script>
<script type="text/javascript" src="/__bear/bearshell/page.js"></script>
</head>
<body>
<div id="msg"></div>
<div id="output">BEAR Version <?php 
echo BEAR::VERSION . ' ' . date('r');
?>
<br /><br />
<div class="info">type 'help' for help</div>
<div class="example">ex) bear read http://www.excite.co.jp/News/xml/rss_excite_news_odd_index_utf_8.dcg</div>
<br />
</div>
<div id="input">
<form class='cmdline' action="/__bear/bearshell/shell.php" method="post" name="form" id="form">
Exemplo n.º 22
0
 /**
  * リダイレクト
  *
  * <pre>
  * Locationヘッダーを用いてページの移動を行います。
  * クッキーが対応してないエージェントの場合はクエリーに
  * セッションIDを付加します。
  *
  * $uriは絶対URIを指定しますが、ホスト名を付加しないで指定した場合内部で付加します。
  *
  * .(dot)を指定すると同一ページのリフレッシュになります。
  * ページが完全に移動した場合は$config['permanent']をtrueにすると
  * 301ヘッダーを付加してリダイレクトしボットなどに移転を知らせます。
  *
  * -----------------------------------------
  *
  * Example 1. リダイレクト
  * </pre>
  * <code>
  *  $header->redirect('http://www.example.co.jp/');
  * </code>
  * <pre>
  * Example 2. リダイレクト(301 パーマネント
  * </pre<
  * <code>
  * $header->redirect('/', array('permanent' => true));
  * </code>
  * <pre>
  * Example 3. 値を渡してリロード
  * </pre>
  * <code>
  * // onInit($args)の$argsに渡されます
  * $header->redirect('.', array('click' => 'delete', 'val' => $values);
  * </code>
  *
  * <b>$options</b>
  *
  * 'val'       string セッション利用して値を次ページのonInit($args)に変数を渡す値
  * 'click'     string コールするonClickハンドラ
  * 'permanent' bool   301ヘッダー(パーマネントムーブ)を出力するか
  *
  * @param string $uri     URL
  * @param array  $options オプション
  *
  * @return void
  */
 public function redirect($uri, array $options = array('val' => null, 'click' => null, 'permanent' => false))
 {
     // .なら現在のファイルでページキャッシュもクリアする
     if ($uri == '.' || $uri == './') {
         $uri = $_SERVER['PHP_SELF'];
         $page = BEAR::get('page');
         $page->clearPageCache();
     }
     // ホストがないならホストを付加
     $remoteAddr = $_SERVER["HTTP_HOST"];
     if (strpos($uri, "http") === false) {
         if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
             $uri = "https://{$remoteAddr}{$uri}";
         } else {
             $uri = "http://{$remoteAddr}{$uri}";
         }
     }
     // 携帯の場合などクッキーが使用できない環境ではセッションクエリーをURLに付加
     $sessionName = session_name();
     $sessionId = session_id();
     if (!isset($_COOKIE[$sessionName]) && $sessionId && isset($options['session']) && $options['session']) {
         // セッションクエリーが付いてれば消去
         //        $uri = preg_replace("/&*{$sessionName}=[^&]+/is", '', $uri);
         $uri = preg_replace("/([&\\?]){$sessionName}=[^&]?/is", '$1', $uri);
         $con = strpos($uri, "?") ? '&' : '?';
         $uri .= "{$con}{$sessionName}={$sessionId}";
         if (strlen($sessionId) != 32) {
             trigger_error('session key error' . $uri, E_USER_WARNING);
         }
     }
     //argsオプション
     if (isset($options['val'])) {
         $query = array('_cv' => $options['val']);
     } else {
         $query = '';
     }
     if (isset($options['click'])) {
         $click = array(BEAR_Page::KEY_CLICK_NAME => $options['click']);
         if (is_array($query)) {
             $query = array_merge($query, $click);
         } else {
             $query = array_merge(array('_sc' => $query), $click);
         }
     }
     if ($query) {
         $uri = $uri . '?' . http_build_query($query);
     }
     if (isset($options['sval'])) {
         $session = BEAR::dependency('BEAR_Session', 'session');
         /* @var $session BEAR_Session */
         $session->set('val', $options['sval']);
     }
     if (isset($options['permanent']) && $options['permanent']) {
         $this->setHeader("HTTP/1.1 301 Moved Permanently");
     }
     // ロケーションヘッダー出力
     $this->setHeader("Location: {$uri}");
     $this->_log->log('redirect', $uri);
     $this->flushHeader();
     exit;
 }
Exemplo n.º 23
0
 /**
  * AJAXコマンドを追加
  *
  *
  * <code>
  *  // リソースをアサイン
  *  $this->addAjax('resource', array('div_person1' => 'person'), array('effect' => 'slideup'));
  *  // 生のデータをアサイン
  *  $this->addAjax('html', array('msg' => '使用できます!'), array('effect' => 'splash'));
  *  // フォームの値を変更
  *  $this->addAjax('form', array('post' => '123', 'post2' => '4567'));
  *  // JSをコール
  *  $this->addAjax('js', array('callback1' => $_SERVER, 'callback2' => $_COOKIE));
  * // 出力
  *  $this->output('ajax');
  * </code>
  *
  * @param string $ajaxCommand AJAXコマンド 'html' | 'resource' |'form' | 'js'
  * @param array  $data        AJAXコマンド引数
  * @param array  $options     AJAXコマンドオプション
  *
  * @return void
  */
 public function addAjax($ajaxCommand, array $data, array $options = array())
 {
     switch ($ajaxCommand) {
         case 'resource':
         case 'init':
             foreach ($data as $div => $initValueKey) {
                 $page = BEAR::get('page');
                 $init = $page->get();
                 $ajaxDivBody[$div] = $init[$initValueKey];
             }
             $htmlData = array('body' => $ajaxDivBody, 'options' => $options);
             $this->_ajax['html'][] = $htmlData;
             break;
         case 'html':
             $htmlData = array('body' => $data, 'options' => $options);
             $this->_ajax['html'][] = $htmlData;
             break;
         default:
             $this->_ajax[$ajaxCommand][] = $data;
             break;
     }
 }