Example #1
0
 /**
  * 初期化
  *
  * @return void
  */
 public function onInit(array $args)
 {
     // Create our Application instance (replace this with your appId and secret).
     $facebook = BEAR::factory('App_Fb');
     // We may or may not have this data based on a $_GET or $_COOKIE based session.
     //
     // If we get a session here, it means we found a correctly signed session using
     // the Application Secret only Facebook and the Application know. We dont know
     // if it is still valid until we make an API call using the session. A session
     // can become invalid if it has already expired (should not be getting the
     // session back in this case) or if the user logged out of Facebook.
     $session = $facebook->getSession();
     $me = $uid = null;
     // Session based API call.
     if ($session) {
         $uid = $facebook->getUser();
         $me = $facebook->api('/me');
     }
     // login or logout url will be needed depending on current user state.
     $loginUrl = $logoutUrl = null;
     if ($me) {
         $logoutUrl = $facebook->getLogoutUrl();
     } else {
         $loginUrl = $facebook->getLoginUrl();
     }
     // This call will always work since we are fetching public data.
     $naitik = $facebook->api('/naitik');
     $appId = $facebook->getAppId();
     $encodedSession = json_encode($session);
     $this->set(compact('loginUrl', 'logoutUrl', 'appId', 'encodedSession', 'me', 'uid', 'naitik'));
 }
 public function setUp()
 {
     restore_error_handler();
     if (!BEAR::exists('BEAR_Session')) {
         BEAR::set('BEAR_Session', BEAR::factory('BEAR_Session', array('adapter' => 0, 'prefix' => '')));
     }
     $this->_token = new BEAR_Form_Token(array());
     $this->_token->onInject();
 }
Example #3
0
/**
 * 変数画面出力
 *
 * @param array $values  値
 * @param array $options オプション
 *
 * @return BEAR_Ro
 */
function outputPrint($values, array $options)
{
    $body = print_a($values, 'return:1');
    $headers = array('X-BEAR-Output: PRINT' => 'Content-Type: text/html; charset=utf-8');
    $ro = BEAR::factory('BEAR_Ro');
    $ro->setBody($body);
    $ro->setHeaders($headers);
    return $ro;
}
Example #4
0
/**
 * JSON出力
 *
 * @param array $values  値
 * @param array $options オプション
 *
 * @return BEAR_Ro
 */
function outputJson($values, array $options)
{
    $body = json_encode($values);
    $headers = array('X-BEAR-Output: JSON' => 'Content-Type: text/javascript+json; charset=utf-8');
    $ro = BEAR::factory('BEAR_Ro');
    $ro->setBody($body);
    $ro->setHeaders($headers);
    return $ro;
}
Example #5
0
/**
 * PHPシリアライズ変数出力
 *
 * @param array $values  値
 * @param array $options オプション
 *
 * @return BEAR_Ro
 */
function outputPhp($values, array $options)
{
    $body = serialize($values);
    $headers = array('X-BEAR-Output: PHP' => 'Content-Type: text/html; charset=utf-8');
    $ro = BEAR::factory('BEAR_Ro');
    $ro->setBody($body);
    $ro->setHeaders($headers);
    return $ro;
}
Example #6
0
 /**
  * Db factorys
  *
  * @return array MDB2_Driver_Datatype_mysqli
  */
 public function factory()
 {
     $options['default_table_type'] = 'INNODB';
     $options['use_transactions'] = true;
     $config = array('dsn' => $this->_config['dsn']);
     $config['options'] = $options;
     $db = BEAR::factory('BEAR_Mdb2', $config);
     $db->setOption('quote_identifier', true);
     $db->loadModule('Extended');
     return $db;
 }
Example #7
0
 /**
  * 全てのキャッシュをクリア
  *
  * @param bool $showMessage メッセージ表示?
  *
  * @return void
  */
 public static function clearAllCache($showMessage = false)
 {
     $app = BEAR::get('app');
     if ($app['core']['debug'] !== true) {
         return;
     }
     BEAR::factory('BEAR_Dev_Shell')->clearCache();
     if ($showMessage) {
         Panda::message('Cache Clear', '全てのキャッシュファイルとキャッシュメモリをクリアしました');
     }
 }
Example #8
0
 /**
  * キャッシュを取得
  *
  * キーを基にキャッシュデータを取得します
  *
  * @param string $key     キー
  * @param mixed  $default デフォルト
  *
  * @return mixed
  */
 public function get($key, $default = null)
 {
     $result = apc_fetch($this->_config['prefix'] . $key);
     if (!$result) {
         $result = $default;
     }
     if ($result instanceof BEAR_Ro_Container) {
         $ro = BEAR::factory('BEAR_Ro');
         $ro->setCode($result->code)->setHeaders((array) $result->header)->setBody($result->body)->setLinks($result->links)->setHtml($result->html);
         $result = $ro;
     }
     if ($result) {
         $this->_log->log('Apc[R]', $key);
     }
     return $result;
 }
/**
 * 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;
}
Example #10
0
 /**
  * キャッシュを取得
  *
  * キーを基にキャッシュデータを取得します
  *
  * @param string $key     キー
  * @param mixed  $options オプション
  *
  * @return mixed
  */
 public function get($key, $options = array('default' => null))
 {
     $result = $this->_adapter->get($this->_config['prefix'] . $key);
     // 結果がなくてデフォルトが用意されていればデフォルト
     if ($result === false && $options['default']) {
         $result = $options['default'];
     }
     if ($result instanceof BEAR_Ro_Container) {
         $ro = BEAR::factory('BEAR_Ro');
         $ro->setCode($result->code)->setHeaders((array) $result->header)->setBody($result->body)->setLinks($result->links)->setHtml($result->html);
         return $ro;
     }
     if ($result !== false) {
         $this->_log->log('Cache Lite[R]', $key);
     }
     return $result;
 }
Example #11
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);
     }
 }
Example #12
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;
}
Example #13
0
 /**
  * リソースリクエスト実行
  *
  * App/Ro下のROリソースのリクエストを行います。
  *
  * @return mixed
  */
 public function request()
 {
     // ROクラスDI
     $config = array('method' => $this->_config['method'], 'uri' => $this->_config['uri'], 'class' => $this->_config['class']);
     if (isset($this->_config['options']['config'])) {
         $roConfig = array_merge($this->_config, $this->_config['options']['config']);
     } else {
         $roConfig = $this->_config;
     }
     if (isset($this->_config['options']['injector'])) {
         $roOptions = array('injector' => $this->_config['options']['injector']);
     } else {
         // デフォルトインジェクト
         $roOptions = array();
     }
     $this->_config['obj'] = BEAR::factory($this->_config['class'], $roConfig, $roOptions);
     // アノテーションクラスDI
     $config['method'] = 'on' . $this->_config['method'];
     $annotation = BEAR::factory('BEAR_Annotation', $config);
     // requireアノテーション (引数のチェック)
     $annotation->required($this->_config['values']);
     // aspectアノテーション (アドバイスの織り込み)
     $method = $annotation->aspect();
     $result = $method->invoke($this->_config['obj'], $this->_config['values']);
     // 後処理
     if (PEAR::isError($result)) {
         $this->_config['obj']->setCode(BEAR::CODE_ERROR);
         $this->_config['obj']->setHeader('_error', $result->toString());
     } else {
         if ($result instanceof BEAR_Ro) {
             // return RO
             return $result;
         } else {
             $this->_config['obj']->setBody($result);
         }
     }
     return $this->_config['obj'];
 }
Example #14
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);
 }
Example #15
0
/**
 * XML出力
 *
 * XMLを出力します。
 *
 * @param array $values  値
 * @param array $options オプション
 *
 * @return BEAR_Ro
 */
function outputXml($values, array $options)
{
    $defaultOptions = array("mode" => "", "indent" => "    ", "linebreak" => "\n", "indentAttributes" => true, "typeHints" => false, "scalarAsAttributes" => true, "addDecl" => true, "encoding" => "UTF-8", "rootName" => "rdf:RDF", "rootAttributes" => array("xmlns" => "http://purl.org/rss/1.0/", "xmlns:rdf" => "http://www.e3.org/1999/02/22-rdf-syntax-ns#", "xmlns:dc" => "http://purl.org/dc/elements/1.1/", "xmlns:sy" => "http://purl.org/rss/1.0/modules/syndication/", "xmlns:admin" => "http://webns.net/mvcb/", "xmlns:content" => "http://purl.org/rss/1.0/modules/content/", "xml:lang" => "ja"), "defaultTagName" => "item", "attributesArray" => "_attributes");
    if (is_array($options)) {
        $options = $options + $defaultOptions;
    } else {
        $options = $defaultOptions;
    }
    $serializer = new XML_Serializer($options);
    $status = $serializer->serialize($values);
    // エラーチェック
    if (PEAR::isError($status)) {
        $xmlString = '';
    } else {
        $xmlString = $serializer->getSerializedData();
    }
    // return
    $body = $xmlString;
    $headers = array('X-BEAR-Output: XML' => 'Content-Type: application/xml');
    $ro = BEAR::factory('BEAR_Ro');
    $ro->setBody($body);
    $ro->setHeaders($headers);
    return $ro;
}
Example #16
0
 /**
  * リソースリクエスト送信
  *
  * @param string $method リクエストメソッド(CRUD)
  * @param string $uri    URI(クエリー付き)
  * @param array  $values 引数
  *
  * @return mixed BEAR_Ro | array
  */
 public function send($method, $uri, array $values = array())
 {
     $socket = new Net_Socket();
     // 接続を確立する
     $socket->connect($this->_ip, $this->_port, true, 30);
     $uriWithVal = self::_mergeQueryAndArray($uri, $values);
     // 改行を含むデータを送信する
     $request = "{$method} {$uriWithVal}";
     $socket->writeLine($request);
     // 改行が現れるまでデータを受信する
     $code = $socket->readLine();
     // アトリビュート
     $header = $socket->readLine();
     while ($header) {
         $headers[] = $header;
         $header = $socket->readLine();
     }
     $body = $socket->readLine();
     if ($this->_returnVo && class_exists('BEAR_Ro', false)) {
         $ro = BEAR::factory('BEAR_Ro');
         /* @var $ro BEAR_Ro */
         $ro->setBody($body);
         $ro->setHeaders($headers);
         $ro->setCode($code);
         $result = $ro;
     } else {
         $result = array('code' => $code, 'headers' => $headers, 'body' => $body);
     }
     return $result;
 }
Example #17
0
 /**
  * リソースオブジェクトに変換
  *
  * <pre>
  * $htmlを受け取りエージェント依存のヘッダーを付加してリソースオブジェクトにして返します。
  * 返されたリソースオブジェクトはoutputHttp()メソッドでHTTP出力ができます。
  * </pre>
  *
  * @param string $html HTML 文字列
  *
  * @return BEAR_ro
  */
 protected function _getRo($html)
 {
     // ヘッダーを出力
     $header = isset($this->_config['agent_config']['header']) ? $this->_config['agent_config']['header'] : array();
     // 絵文字&(&文字コード)フィルター
     if (isset($this->_config['agent_config']['agent_filter']) && $this->_config['agent_config']['agent_filter'] === true) {
         $html = $this->_agentFilter($html);
     }
     // ボディ出力
     $ro = BEAR::factory('BEAR_Ro')->setHeaders(array($header))->setBody($html);
     return $ro;
 }
Example #18
0
 /**
  * Constructor
  * @param array $config
  */
 public function __construct(array $config)
 {
     $this->_fb = BEAR::factory('App_Fb');
     parent::__construct($config);
 }
Example #19
0
 /**
  * リソースリクエスト実行
  *
  * リモートURLにアクセスしてRSSだったら配列に、
  * そうでなかったらHTTP Body文字列をリソースとして扱います。
  *
  * @return BEAR_Ro
  * @throws BEAR_Resource_Execute_Exception
  */
 public function request()
 {
     $reqMethod = array();
     $reqMethod[BEAR_Resource::METHOD_CREATE] = HTTP_Request2::METHOD_POST;
     $reqMethod[BEAR_Resource::METHOD_READ] = HTTP_Request2::METHOD_GET;
     $reqMethod[BEAR_Resource::METHOD_UPDATE] = HTTP_Request2::METHOD_PUT;
     $reqMethod[BEAR_Resource::METHOD_DELETE] = HTTP_Request2::METHOD_DELETE;
     assert(isset($reqMethod[$this->_config['method']]));
     try {
         // 引数以降省略可能  config で proxy とかも設定可能
         $request = new HTTP_Request2($this->_config['uri'], $reqMethod[$this->_config['method']]);
         $request->setHeader("user-agent", 'BEAR/' . BEAR::VERSION);
         $request->setConfig("follow_redirects", true);
         if ($this->_config['method'] === BEAR_Resource::METHOD_CREATE || $this->_config['method'] === BEAR_Resource::METHOD_UPDATE) {
             foreach ($this->_config['values'] as $key => $value) {
                 $request->addPostParameter($key, $value);
             }
         }
         $response = $request->send();
         $code = $response->getStatus();
         $headers = $response->getHeader();
         if ($code == 200) {
             $body = $response->getBody();
         } else {
             $info = array('code' => $code, 'headers' => $headers);
             throw $this->_exception($response->getBody(), $info);
         }
     } catch (HTTP_Request2_Exception $e) {
         throw $this->_exception($e->getMessage());
     } catch (Exception $e) {
         throw $this->_exception($e->getMessage());
     }
     $rss = new XML_RSS($body, 'utf-8', 'utf-8');
     PEAR::setErrorHandling(PEAR_ERROR_RETURN);
     // @todo Panda::setPearErrorHandling(仮称)に変更しエラーを画面化しないようにする
     $rss->parse();
     $items = $rss->getItems();
     if (is_array($items) && count($items) > 0) {
         $body = $items;
         $headers = $rss->getChannelInfo();
         $headers['type'] = 'rss';
     } else {
         $headers['type'] = 'string';
         $body = array($body);
     }
     // UTF-8に
     $encode = mb_convert_variables('UTF-8', 'auto', $body);
     $ro = BEAR::factory('BEAR_Ro')->setBody($body)->setHeaders($headers);
     /* @var $ro BEAR_Ro */
     PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('Panda', 'onPearError'));
     return $ro;
 }
Example #20
0
 /**
  * onInitコール
  *
  * @param array $args ページ引数
  *
  * @return void
  * @throws Panda_Exception
  */
 protected function _runInit(array $args)
 {
     $config['class'] = get_class($this->_page);
     $config['method'] = 'onInit';
     $annotation = BEAR::factory('BEAR_Annotation', $config);
     try {
         $annotation->required($args);
     } catch (BEAR_Annotation_Exception $e) {
         if (method_exists($this->_page, 'onException')) {
             $this->_page->onException($e);
         } else {
             throw new Panda_Exception('Bad Request', 400, array('info' => $e->getInfo()));
         }
     }
     $this->_page->onInit($args);
 }
Example #21
0
 /**
  * ローカルリソースの実行
  *
  * ローカルリソースファイル(Ro, Function, スタティックファイル等)を実行します。
  *
  * @param string $uri
  *
  * @return stdClass
  * @throws BEAR_Resource_Exception
  */
 private function _localResourceExecute($uri)
 {
     $file = _BEAR_APP_HOME . '/App/Ro/' . $uri . '.php';
     if (file_exists($file)) {
         include_once $file;
         $resourcePathName = 'App_Ro_' . str_replace('/', '_', $uri);
         switch (true) {
             case class_exists($resourcePathName, false):
                 $this->_config['class'] = $resourcePathName;
                 $format = 'Ro';
                 break;
             case function_exists($resourcePathName):
                 // @deprecated
                 $this->_config['function'] = $resourcePathName;
                 $format = 'Function';
                 break;
             default:
                 $msg = 'Mismatch resource class/function error.(ファイル名とクラス/関数名がミスマッチです。)';
                 $info = array('resource name' => $resourcePathName, 'resource file' => $file);
                 throw $this->_exception($msg, array('code' => BEAR::CODE_BAD_REQUEST, 'info' => $info));
                 $format = 'Mock';
         }
     } else {
         $file = _BEAR_APP_HOME . '/App/Ro/' . $uri;
         if (file_exists($file)) {
             $this->_config['file'] = $file;
             $format = self::FORMAT_FILE;
         } else {
             throw $this->_exception("Resource file[{$file}] is not exists.", array('info' => array('uri' => $uri, 'file' => $file)));
             $format = 'Null';
         }
     }
     $obj = BEAR::factory('BEAR_Resource_Execute_' . $format, $this->_config);
     return $obj;
 }
Example #22
0
 /**
  * キャッシュクリア
  *
  * @return void
  */
 public function clearCache()
 {
     clearstatcache();
     BEAR::factory('BEAR_Cache')->deleteAll();
     BEAR_Util::unlinkRecursive(_BEAR_APP_HOME . '/tmp/session/');
     BEAR_Util::unlinkRecursive(_BEAR_APP_HOME . '/tmp/cache_lite/');
     BEAR_Util::unlinkRecursive(_BEAR_APP_HOME . '/tmp/smarty_cache/');
     BEAR_Util::unlinkRecursive(_BEAR_APP_HOME . '/tmp/smarty_templates_c/');
     BEAR_Util::unlinkRecursive(_BEAR_APP_HOME . '/tmp/misc/');
     if (function_exists('apc_clear_cache')) {
         apc_clear_cache('user');
         apc_clear_cache();
     }
 }
Example #23
0
 /**
  * retruningアドバイスの実行
  *
  * @param object $obj
  * @param array  $values
  * @param string $adviceType
  * @param mixed  $inteface
  *
  * @return mixed
  */
 public function invokeRetruning($obj, array $values, $adviceType, $inteface)
 {
     //returnアドバイス
     $adviceClass = isset($this->_config['aspects'][self::ADVICE_AFTER_RETURNING][0]) ? $this->_config['aspects'][self::ADVICE_AFTER_RETURNING][0] : null;
     if (isset($adviceClass)) {
         $this->_adviceValidation($adviceClass, 'BEAR_Aspect_Returning_Interface');
         $advice = BEAR::factory($adviceClass, $this->_config);
         $result = $advice->returning($result, $joinPoint);
     }
     return $result;
 }
Example #24
0
 /**
  * リンクリソースを再帰で変更
  *
  * @param array  &$linked
  * @param string $linkFrom
  * @param string $linkTo
  *
  * @return void
  */
 private static function _changeRecursive(&$linked, $linkFrom, $linkTo)
 {
     $isLink = array_key_exists('_link', $linked);
     $isSet = isset($linked['_link'][$linkFrom]);
     if ($isLink && $isSet) {
         $valeus = $linked['_link'][$linkFrom]['values'];
         $class = $linked['_link'][$linkFrom]['class'];
         $onLinks = call_user_func(array($class, 'onLink'), $valeus);
         //            $params = $onLinks[$linkTo];
         $config = self::_makeRequestConfig($onLinks, $linkTo);
         $ro = BEAR::factory('BEAR_Resource_Request', $config)->request();
         //            $ro = BEAR::dependency('BEAR_Resource')->read($params)->getRo();
         $body = $ro->getBody();
         if (is_array($body)) {
             $refBody =& $body;
             self::_makeCollectionChain($refBody, $linkTo, $ro);
         }
         $linked[$linkTo] = $body;
     } else {
         foreach ($linked as &$val) {
             if (is_array($val)) {
                 self::_changeRecursive($val, $linkFrom, $linkTo);
             }
         }
     }
 }
Example #25
0
 /**
  * Viewアダプター
  *
  * <pre>
  * Viewにページバリューをアサインして、Viewを返します。
  * 受け取ったクラインとではfetchかdisplayが利用可能です。
  * UAスニッフィングがtrueならエージェント
  * </pre>
  *
  * @return BEAR_View_Adapter
  */
 protected function _viewAdapter()
 {
     $config = $this->_config;
     if (isset($this->_config['enable_ua_sniffing']) && $this->_config['enable_ua_sniffing'] === true) {
         $adapter = BEAR::dependency('BEAR_Agent_Adapter_' . $this->_config['ua'], array('ua' => $this->_config['ua']));
         $agentConfig = $adapter->getConfig();
         $config['agent_config'] = $agentConfig;
         $config['enable_ua_sniffing'] = true;
     } else {
         $config = array();
         $config['enable_ua_sniffing'] = false;
         $config['ua'] = 'Default';
     }
     $config['values'] = $this->_values;
     $config['ro'] = $this->_ro;
     $config['resource_id'] = $this->_config['resource_id'];
     $this->_view = BEAR::factory('BEAR_View', $config);
     return $this->_view;
 }
Example #26
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;
 }
Example #27
0
 /**
  * アスペクトアノテーション
  *
  * @return BEAR_Aspect_Weaver
  */
 public function aspect()
 {
     $match = array();
     $result = preg_match_all("/@aspect\\s+(\\w+)\\s+(\\w+)/is", $this->_config['doc']['method'], $match);
     $aspects = array();
     // <アドバイスタイプ> => <アドバイスクラス>の連想配列
     $max = count($match[0]);
     for ($i = 0; $i < $max; $i++) {
         $type = $match[1][$i];
         $class = $match[2][$i];
         $aspects[$type][] = $class;
     }
     if (!$aspects) {
         $method = new ReflectionMethod($this->_config['class'], $this->_config['method']);
         return $method;
     }
     $this->_config['aspects'] = $aspects;
     // weaver
     $weaver = BEAR::factory('BEAR_Aspect_Weaver', $this->_config);
     return $weaver;
 }
Example #28
0
 /**
  * リソース後処理
  *
  * <pre>
  * リソース取得の結果に対しての後処理を行います。
  * 後処理にはコールバック関数の適用や、DBページャーの
  * 結果取り出しなどがあります。
  * </pre>
  *
  * @param BEAR_Ro &$ro BEAR_Roオブジェクト
  *
  * @return mixed
  *
  * @throws BEAR_Resource_Execute_Exception
  */
 private function _actionPostProcess(BEAR_Ro &$ro)
 {
     $body = $ro->getBody();
     $Info = array();
     $info['totalItems'] = count($body);
     $options = $this->_config['options'];
     // ページャーリザルト処理
     if (PEAR::isError($body) || !$body) {
         return;
     }
     // ページャーオプション
     if (isset($options[BEAR_Resource::OPTION_PAGER])) {
         $pager = BEAR::factory('BEAR_Pager');
         $pagerOptions['perPage'] = $options[BEAR_Resource::OPTION_PAGER];
         $pager->setOptions($pagerOptions);
         $pager->makePager($body);
         $body = $pager->getResult();
         $info['page_numbers'] = array('current' => $pager->pager->getCurrentPageID(), 'total' => $pager->pager->numPages());
         list($info['from'], $info['to']) = $pager->pager->getOffsetByPageId();
         $links = $pager->getLinks();
         $ro->setLink(BEAR_Resource::LINK_PAGER, $links);
         $ro->setHeaders($info);
         $info['page_numbers'] = array('current' => $pager->pager->getCurrentPageID(), 'total' => $pager->pager->numPages());
         list($info['from'], $info['to']) = $pager->pager->getOffsetByPageId();
         $info['limit'] = $info['to'] - $info['from'] + 1;
         $pager->setPagerLinks($links, $info);
     }
     // コールバックオプション 1
     if (isset($options['callback'])) {
         if (is_callable($options['callback'])) {
             call_user_func($options['callback'], $body);
         } else {
             $msg = 'BEAR_Resource callback failed.';
             $info = array('callback' => $options['callback']);
             throw $this->_exception($msg, array('info' => $info));
         }
     }
     // コールバックオプション rec
     if (isset($options['callbackr'])) {
         if (is_callable($options['callbackr'])) {
             array_walk_recursive($body, $options['callbackr']);
         } else {
             $msg = 'BEAR_Resource callback_r failed.';
             $info = array('callbackr' => $options['callback_r']);
             throw $this->_exception($msg, array('info' => $info));
         }
     }
     $ro->setBody($body);
 }
Example #29
0
 /**
  * リソースリクエスト実行
  *
  * @return void
  */
 protected function _doRequest()
 {
     $this->_ro = BEAR::factory('BEAR_Resource_Request', $this->_config['request'])->request();
 }
Example #30
0
 /**
  * リソース操作
  *
  * リソースの操作情報を保持するオブジェクト(BEAR_Ro_Prototype)を取得します。
  * 同クラスのcreate(), read(), update(), delete()から呼ばれるリソース操作クラスです。
  *
  * <pre>
  * Example 1.リソース読み込み
  * </pre>
  * <code>
  * $params['uri'] = 'user/profile';
  * $params['values'] = array('id'=>1);
  * $resource = BEAR::dependency('BEAR_Resource');
  * $profileObject = $resource->read($params)->getRo();
  * $profileValues = $resource->read($params)->getBody();
  * // objectとしてテンプレートにset
  * $profileObject = $resource->read($params)->set('profile', 'object');
  * </code>
  *
  * @param string $method  メソッド(create | read | update | delete)
  * @param string $uri     URI
  * @param array  $values  引数
  * @param array  $options オプション
  *
  * @return BEAR_Ro_Prototype
  */
 public function request($method, $uri, array $values = array(), array $options = array())
 {
     $config = compact('method', 'uri', 'values', 'options');
     $ro = BEAR::factory('BEAR_Ro_Prototype', array('request' => $config, 'path' => $this->_config['path']));
     return $ro;
 }