/**
  * AuthController onLogin
  * @param CakeEvent $event
  */
 public function onLogin($event)
 {
     $this->log(__("User '%s' just logged in", $event->data['username']), 'auth');
     //Write LastLogin Date
     $event->subject()->BackendUser->id = $event->data['id'];
     $event->subject()->BackendUser->saveField('last_login', date("Y-m-d H:i:s"));
     //return $redirectUri;
 }
Ejemplo n.º 2
0
 /**
  * Start the keep alive timer when the first client subscribes
  *
  * @param CakeEvent $event
  */
 public function onSubscribeNewTopic(CakeEvent $event)
 {
     if (Configure::read('Ratchet.Connection.keepaliveInterval') > 0) {
         $this->__timer = $this->__loop->addPeriodicTimer(Configure::read('Ratchet.Connection.keepaliveInterval'), function () use($event) {
             $event->subject()->broadcast('Rachet.connection.keepAlive', ['ping']);
         });
         $event->subject()->broadcast('Rachet.connection.keepAlive', ['ping']);
     }
 }
Ejemplo n.º 3
0
 /**
  * formAfterInput
  * 
  * @param CakeEvent $event
  * @return string
  */
 public function formAfterInput(CakeEvent $event)
 {
     if (!BcUtil::isAdminSystem()) {
         return $event->data['out'];
     }
     $View = $event->subject();
     if (!in_array($View->request->params['controller'], $this->targetController)) {
         return $event->data['out'];
     }
     if (!in_array($View->request->params['action'], $this->targetAction)) {
         return $event->data['out'];
     }
     if (!isset($View->request->data['KeywordConfig'])) {
         return $event->data['out'];
     }
     if (!$View->request->data['KeywordConfig']['status']) {
         return $event->data['out'];
     }
     // 固定ページ:入力欄の下にキーワード入力欄を表示する
     if ($event->data['fieldName'] == 'Page.description') {
         $event->data['out'] = $event->data['out'] . $View->element('Keyword.keyword_form');
     }
     // ブログ記事:記事タイトル入力欄の下にキーワード入力欄を表示する
     if ($event->data['fieldName'] == 'BlogPost.name') {
         $event->data['out'] = $event->data['out'] . $View->element('Keyword.keyword_form');
     }
     return $event->data['out'];
 }
Ejemplo n.º 4
0
 public function modelConstruct(CakeEvent $Event)
 {
     $Model = $Event->subject();
     // Because, by default, the SQL is only logged and displayed if debug > 2; using the `DebugKit`
     // new 'autoRun' and/or 'forceEnable' still doesn't help in profiling SQL calls in production.
     // This will force the current model's datasource to log all SQL calls ONLY when in production
     // mode and DebugKit is used with either 'autoRun' or 'forceEnable'.
     if (Reveal::is('DebugKit.running') && !Reveal::is('Page.test')) {
         $Model->getDatasource()->fullDebug = true;
     }
     if (!isset($Model->belongsToForeignModels)) {
         return;
     }
     // Get all foreign models used if not defined by current model.
     if (empty($Model->belongsToForeignModels)) {
         $foreignModels = $Model->find('all', array('fields' => array('DISTINCT' => 'foreign_model'), 'recursive' => -1, 'callbacks' => false));
         foreach ($foreignModels as $foreignModel) {
             // Rarely, some tokens are not associated with any other model.
             if (empty($foreignModel[$Model->alias]['foreign_model'])) {
                 continue;
             }
             list($plugin, $name) = pluginSplit($foreignModel[$Model->alias]['foreign_model']);
             $Model->belongsToForeignModels[$name] = array('className' => $foreignModel[$Model->alias]['foreign_model'], 'foreignKey' => 'foreign_key', 'conditions' => null, 'fields' => null, 'order' => null, 'counterCache' => false);
         }
     }
     // Associate foreign `belongsTo` models.
     $Event->result = Hash::merge((array) $Event->result, array('belongsTo' => array_merge($Model->belongsTo, $Model->belongsToForeignModels)));
 }
 /**
  * formAfterCreate
  * 
  * @param CakeEvent $event
  * @return array
  */
 public function formAfterEnd(CakeEvent $event)
 {
     $Form = $event->subject();
     if ($Form->request->params['controller'] == 'blog_posts') {
         if (!empty($Form->request->data['PetitBlogCustomFieldConfig']['status'])) {
             // ブログ記事追加画面にプチ・カスタムフィールド編集欄を追加する
             if ($Form->request->action == 'admin_add') {
                 if ($event->data['id'] == 'BlogPostForm') {
                     $event->data['out'] = $event->data['out'] . $Form->element('PetitBlogCustomField.petit_blog_custom_field_form');
                 }
             }
             // ブログ記事編集画面にプチ・カスタムフィールド編集欄を追加する
             if ($Form->request->action == 'admin_edit') {
                 if ($event->data['id'] == 'BlogPostForm') {
                     $event->data['out'] = $event->data['out'] . $Form->element('PetitBlogCustomField.petit_blog_custom_field_form');
                 }
             }
         }
     }
     if ($Form->request->params['controller'] == 'blog_contents') {
         // ブログ設定編集画面にプチ・カスタムフィールド設定欄を表示する
         if ($Form->request->action == 'admin_edit') {
             if ($event->data['id'] == 'BlogContentAdminEditForm') {
                 $event->data['out'] = $event->data['out'] . $Form->element('PetitBlogCustomField.petit_blog_custom_field_config_form');
             }
         }
         // ブログ追加画面にプチ・カスタムフィールド設定欄を表示する
         if ($Form->request->action == 'admin_add') {
             if ($event->data['id'] == 'BlogContentAdminAddForm') {
                 $event->data['out'] = $event->data['out'] . $Form->element('PetitBlogCustomField.petit_blog_custom_field_config_form');
             }
         }
     }
     return $event->data['out'];
 }
Ejemplo n.º 6
0
 /**
  * Tests the subject() method
  *
  * @return void
  * @triggers fake.event $this
  * @triggers fake.event
  */
 public function testSubject()
 {
     $event = new CakeEvent('fake.event', $this);
     $this->assertSame($this, $event->subject());
     $event = new CakeEvent('fake.event');
     $this->assertNull($event->subject());
 }
Ejemplo n.º 7
0
 /**
  * onAdminLoginSuccessful
  *
  * @param CakeEvent $event
  * @return void
  */
 public function onAdminLoginSuccessful($event)
 {
     $Controller = $event->subject();
     $message = __('Welcome %s.  Have a nice day', $Controller->Auth->user('name'));
     $Controller->Session->setFlash($message);
     $Controller->redirect(array('admin' => true, 'plugin' => 'example', 'controller' => 'example', 'action' => 'index'));
 }
Ejemplo n.º 8
0
 /**
  * References the ReactPHP eventloop for later use
  *
  * @param CakeEvent $event
  */
 public function construct(CakeEvent $event)
 {
     if (!function_exists('pcntl_signal')) {
         $event->subject()->getShell()->out('<warning>Your configuration doesn\'t seem to support \'ext-pcntl\'. It is highly recomended that you install and configure it as it provides OS signaling support!</warning>');
     } elseif (!class_exists('MKraemer\\ReactPCNTL\\PCNTL')) {
         $event->subject()->getShell()->out('<warning>PCNTL support found but you didn\'t install mkraemer/react-pcntl!</warning>');
     } else {
         $pcntl = new MKraemer\ReactPCNTL\PCNTL($event->data['loop']);
         $pcntl->on(SIGTERM, function () use($event) {
             $event->data['loop']->stop();
         });
         $pcntl->on(SIGINT, function () use($event) {
             $event->data['loop']->stop();
         });
     }
 }
 /**
  * Form After Submit
  *
  * フォームの保存ボタンの前後に、一覧、プレビュー、削除ボタンを配置する
  * プレビューを配置する場合は、設定にて、preview を true にする
  *
  * @param CakeEvent $event
  * @return string
  */
 public function formAfterSubmit(CakeEvent $event)
 {
     if (!BcUtil::isAdminSystem()) {
         return;
     }
     $View = $event->subject();
     $data = $View->request->data;
     if (!preg_match('/(AdminEditForm|AdminEditAliasForm)$/', $event->data['id'])) {
         return;
     }
     $output = $View->BcHtml->link('一覧に戻る', array('plugin' => '', 'admin' => true, 'controller' => 'contents', 'action' => 'index'), array('class' => 'button'));
     $setting = Configure::read('BcContents.items.' . $data['Content']['plugin'] . '.' . $data['Content']['type']);
     if (!empty($setting['preview']) && $data['Content']['type'] != 'ContentFolder') {
         $output .= "\n" . $View->BcForm->button('プレビュー', array('class' => 'button', 'id' => 'BtnPreview'));
     }
     $output .= $event->data['out'];
     if (empty($data['Content']['site_root'])) {
         if ($data['Content']['alias_id']) {
             $deleteText = '削除';
         } else {
             $deleteText = 'ゴミ箱へ移動';
         }
         $output .= $View->BcForm->button($deleteText, array('class' => 'button', 'id' => 'BtnDelete'));
     }
     return $output;
 }
 /**
  * 拡張BlogHelperを呼び出しに追加
  *
  */
 public function blogBlogBeforeRender(CakeEvent $event)
 {
     $path = App::pluginPath('ExHelper');
     // ヘルパーのパスを追加
     App::build(array('View/Helper' => array($path . 'View' . DS . 'Helper' . DS)), APP::APPEND);
     $Controller = $event->subject();
     $Controller->helpers[] = 'ExBlog';
 }
 /**
  * After Render
  * 
  * @param CakeEvent $event
  */
 public function afterRender(CakeEvent $event)
 {
     if (BcUtil::isAdminSystem()) {
         return;
     }
     $View = $event->subject();
     $this->_execShortCode($View);
 }
Ejemplo n.º 12
0
 /**
  * Test event listener for before create comment
  *
  * @param CakeEvent $event
  * @return mixed
  */
 public function handleAfterCreateComment(CakeEvent $event)
 {
     $data = $event->data;
     $model = $event->subject();
     $comment = $model->Comment->read(null, $data['Comment']['id']);
     $comment['Comment']['body'] = 'Changed in afterComment!';
     $model->Comment->save($comment);
     return $data;
 }
 function blogBlogStartup(CakeEvent $event)
 {
     $Controller = $event->subject();
     if (!isset($Controller->contentId) || $Controller->contentId != Configure::read('BlogShare.contentId')) {
         return;
     }
     $dbConfigName = Configure::read('BlogShare.dbConfigName');
     $Controller->BlogPost->setDataSource($dbConfigName);
     $Controller->BlogPost->BlogCategory->setDataSource($dbConfigName);
     $Controller->BlogPost->BlogTag->setDataSource($dbConfigName);
 }
 public function pageBeforeSave(CakeEvent $event)
 {
     $Page = $event->subject();
     $tmhkConverter = new TmhkConverter();
     $targetColums = array('title', 'contents', 'draft');
     foreach ($Page->data['Page'] as $k => $v) {
         if (in_array($k, $targetColums) && is_string($v)) {
             $Page->data['Page'][$k] = $tmhkConverter->convert($v);
         }
     }
     return true;
 }
 public function calculateTotals(CakeEvent $Event)
 {
     $Model = $Event->subject();
     $cartData = $Event->data['cartData'];
     $cartData[$Model->alias]['total'] = 0.0;
     if (!empty($cartData['CartsItem'])) {
         foreach ($cartData['CartsItem'] as $key => $item) {
             $cartData['CartsItem'][$key]['total'] = (double) $item['quantity'] * (double) $item['price'];
             $cartData[$Model->alias]['total'] += (double) $cartData['CartsItem'][$key]['total'];
         }
     }
     return $cartData;
 }
 /**
  * ブログ記事検索直前イベント
  * 
  * @param CakeEvent $event
  * @return boolean
  */
 public function blogBlogPostBeforeFind(CakeEvent $event)
 {
     $query = $event->data[0];
     $BlogPost = $event->subject();
     if (!isset($query['conditions']['BlogPost.blog_content_id']) || $query['conditions']['BlogPost.blog_content_id'] != Configure::read('BlogShare.contentId')) {
         return true;
     }
     $dbConfigName = Configure::read('BlogShare.dbConfigName');
     $BlogPost->setDataSource($dbConfigName);
     $BlogPost->BlogCategory->setDataSource($dbConfigName);
     $BlogPost->BlogTag->setDataSource($dbConfigName);
     return true;
 }
Ejemplo n.º 17
0
 public function sendResetPasswordEmail(CakeEvent $event)
 {
     $setting = ClassRegistry::init('Setting');
     $settings = $setting->find('first', array('fields' => array('Setting.enable_mail_notification')));
     $mail_notifications_enabled = $settings['Setting']['enable_mail_notification'];
     if ($mail_notifications_enabled) {
         $event_data = $event->subject();
         $user_email = $event_data['email'];
         $token = $event_data['token'];
         $email = new CakeEmail('default');
         $email->to($user_email)->subject(__('Forgot your password?'))->emailFormat('html')->template('sendToken')->viewVars(compact('token'))->send();
     }
 }
Ejemplo n.º 18
0
 /**
  * blogBlogPostBeforeRender
  * 
  * @param CakeEvent $event
  */
 public function blogBlogPostsBeforeRender(CakeEvent $event)
 {
     if (!BcUtil::isAdminSystem()) {
         return;
     }
     $View = $event->subject();
     if (in_array($View->request->params['action'], $this->targetAction)) {
         $this->setUpModel();
         $data = $this->KeywordConfigModel->find('first', array('conditions' => array('KeywordConfig.model' => 'BlogContent', 'KeywordConfig.content_id' => $View->viewVars['blogContent']['BlogContent']['id'])));
         if ($data) {
             $View->request->data['KeywordConfig'] = $data['KeywordConfig'];
         }
     }
 }
Ejemplo n.º 19
0
 /**
  * Put webmaster tools config on header
  *
  * @param CakeEvent $event Represents the transport class of events across the system.
  *
  * @return string
  */
 public function putWebmasterToolsConfigOnHeader(CakeEvent $event)
 {
     $router = Router::getParams();
     if ($router['controller'] == 'posts' && $router['action'] == 'index') {
         $meta = [];
         if (Configure::check('HuradSeo')) {
             $verification = Configure::read('HuradSeo.google_webmaster_verification');
             if (Configure::check('HuradSeo.google_webmaster_verification') && !empty($verification)) {
                 $meta[] = $event->subject()->Html->meta(['name' => 'google-site-verification', 'content' => $verification]);
             }
         }
         echo implode("\n", $meta);
     }
 }
 /**
  * Contents After Move
  * 
  * テンプレートの移動が目的
  * 
  * @param CakeEvent $event
  */
 public function contentsAfterMove(CakeEvent $event)
 {
     if ($event->data['data']['Content']['type'] != 'Page') {
         return;
     }
     if (empty($event->data['data']['Content']['entity_id'])) {
         $Controller = $event->subject();
         $entityId = $Controller->Content->field('entity_id', ['Content.id' => $event->data['data']['Content']['id']]);
     } else {
         $entityId = $event->data['data']['Content']['entity_id'];
     }
     $data = $this->Page->find('first', ['conditions' => ['Page.id' => $entityId], 'recursive' => 0]);
     $this->Page->oldPath = $this->oldPath;
     $this->Page->createPageTemplate($data);
 }
Ejemplo n.º 21
0
 /**
  * afterLogin
  *
  * @return bool
  */
 public function afterLogin(CakeEvent $event)
 {
     if (!$this->Auth->user('confirm_email')) {
         return false;
     }
     $request = $event->subject()->request;
     $settings = $this->settings;
     if (!empty($request->data[$settings['userModel']][$settings['field']])) {
         unset($request->data[$settings['userModel']][$settings['field']]);
         if (!$this->Cookie->check($settings['key'])) {
             $this->Cookie->write($settings['key'], $request->data, true, $settings['expire']);
         }
     }
     return true;
 }
 public function mailMailBeforeRender(CakeEvent $event)
 {
     $Controller = $event->subject();
     App::uses('AuthComponent', 'Controller/Component');
     $user = AuthComponent::user();
     if ($user) {
         foreach ($Controller->viewVars['mailFields'] as $key => $field) {
             if ($field['MailField']['field_name'] == 'name') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['name'];
             }
             if ($field['MailField']['field_name'] == 'name_1') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['name_1'];
             }
             if ($field['MailField']['field_name'] == 'name_2') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['name_2'];
             }
             if ($field['MailField']['field_name'] == 'name_kana_1') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['name_kana_1'];
             }
             if ($field['MailField']['field_name'] == 'name_kana_2') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['name_kana_2'];
             }
             if ($field['MailField']['field_name'] == 'sex') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['sex'];
             }
             if ($field['MailField']['field_name'] == 'email_1') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['email'];
             }
             if ($field['MailField']['field_name'] == 'email_2') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['email'];
             }
             if ($field['MailField']['field_name'] == 'tel') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['tel'];
             }
             if ($field['MailField']['field_name'] == 'tel_1') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['tel_1'];
             }
             if ($field['MailField']['field_name'] == 'tel_2') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['tel_2'];
             }
             if ($field['MailField']['field_name'] == 'tel_3') {
                 $Controller->viewVars['mailFields'][$key]['MailField']['options'] = 'value|' . $user['tel_3'];
             }
         }
     }
 }
 /**
  * startup
  *
  * @param CakeEvent $event
  * @return void
  * @access public
  */
 public function contentsStartup(CakeEvent $event)
 {
     $Controller = $event->subject();
     if ($Controller->request->action != 'search') {
         return;
     }
     $SuggestConfig = ClassRegistry::init('Suggest.SuggestConfig');
     $suggestConfigs = $SuggestConfig->findExpanded();
     $excludeKeywords = array();
     if ($suggestConfigs['exclude_keywords']) {
         $excludeKeywords = explode(',', $suggestConfigs['exclude_keywords']);
     }
     // 検索キーワードを複合キーワードとして3つまで保存する
     $query = mb_convert_kana(strtolower($Controller->params['url']['q']), 'a', Configure::read('App.encoding'));
     $keyword = str_replace(' ', ' ', $query);
     $keyword = explode(' ', $keyword);
     $save = true;
     $_keyword = array();
     foreach ($keyword as $key => $value) {
         if (in_array($value, $excludeKeywords)) {
             $save = false;
             break;
         } elseif ($key < 3) {
             $_keyword[$key] = $keyword[$key];
         } else {
             break;
         }
     }
     if ($save) {
         $keyword = implode(' ', $_keyword);
         $conditions = array('SuggestKeyword.name' => $keyword);
         $SuggestKeyword = ClassRegistry::init('Suggest.SuggestKeyword');
         $data = $SuggestKeyword->find('first', array('fields' => array('SuggestKeyword.id', 'SuggestKeyword.views'), 'conditions' => $conditions));
         if (!$data) {
             $data['SuggestKeyword']['name'] = $keyword;
             $data['SuggestKeyword']['views'] = 1;
             $SuggestKeyword->create($data);
         } else {
             $data['SuggestKeyword']['views']++;
             $SuggestKeyword->set($data);
         }
         $SuggestKeyword->save();
     }
 }
 /**
  * _buildPath
  *
  * @param CakeEvent $Event
  * @return array
  */
 protected function _buildPath(CakeEvent $Event)
 {
     $Model = $Event->subject();
     $record = $Model->data[$Model->alias];
     $adapterConfig = $this->getAdapterconfig($record['adapter']);
     $id = $record[$Model->primaryKey];
     $path = $Model->fsPath('files' . DS . $record['model'], $id);
     $path = '/' . str_replace('\\', '/', $path);
     if ($this->options['preserveFilename'] === false) {
         $filename = $Model->stripUuid($id);
         if ($this->options['preserveExtension'] === true && !empty($record['extension'])) {
             $filename .= '.' . $record['extension'];
         }
     } else {
         $filename = $record['filename'];
     }
     $combined = $path . $filename;
     $url = 'https://' . $adapterConfig['adapterOptions'][1] . '.s3.amazonaws.com' . $combined;
     return array('filename' => $filename, 'path' => $path, 'combined' => $path . $filename, 'url' => $url);
 }
 public function afterLayout(CakeEvent $event)
 {
     $View = $event->subject();
     if (!BcUtil::isAdminSystem() || $View->name == 'CakeError') {
         return;
     }
     $this->BcHtml = $View->BcHtml;
     if (isset($View->BcCkeditor)) {
         if (preg_match_all("/(editor_[a-z0-9_]*?)\\s*?=\\s*?CKEDITOR\\.replace/s", $View->output, $matches)) {
             /* ckeditor_uploader.js を読み込む */
             $jscode = $this->BcHtml->scriptBlock("var baseUrl ='" . $View->request->base . "/';");
             $jscode .= $this->BcHtml->scriptBlock("var adminPrefix ='" . Configure::read('Routing.prefixes.0') . "';");
             $jscode .= $this->BcHtml->script('Uploader.admin/libs/ckeditor_uploader');
             $View->output = str_replace('</head>', $jscode . '</head>', $View->output);
             /* CSSを読み込む */
             // 適用の優先順位の問題があるので、bodyタグの直後に読み込む
             $css = $this->BcHtml->css('Uploader.uploader');
             $View->output = str_replace('</body>', $css . '</body>', $View->output);
             /* VIEWのCKEDITOR読込部分のコードを書き換える */
             foreach ($matches[1] as $match) {
                 $jscode = $this->__getCkeditorUploaderScript($match);
                 $pattern = "/<script type=\"text\\/javascript\">[\\s\n]*?\\/\\/<\\!\\[CDATA\\[[\\s\n]*?([\$]\\(window\\)\\.load.+?" . $match . "\\s=\\sCKEDITOR\\.replace.*?)\\/\\/\\]\\]>\n*?<\\/script>/s";
                 $output = preg_replace($pattern, $this->BcHtml->scriptBlock("\$1" . $jscode), $View->output);
                 if (!is_null($output)) {
                     $View->output = $output;
                 }
             }
             /* 通常の画像貼り付けダイアログを画像アップローダーダイアログに変換する */
             $pattern = "/(CKEDITOR\\.replace.*?\"toolbar\".*?)\"Image\"(.*?);/is";
             $View->output = preg_replace($pattern, "\$1" . '"BaserUploader"' . "\$2;", $View->output);
         }
     }
     if (!empty($View->request->params['prefix']) && $View->request->params['prefix'] == 'mobile') {
         /* モバイル画像に差し替える */
         $aMatch = "/<array([^>]*?)href=\"([^>]*?)\"([^>]*?)><img([^>]*?)\\/><\\/a>/is";
         $imgMatch = "/<img([^>]*?)src=\"([^>]*?)\"([^>]*?)\\/>/is";
         $View->output = preg_replace_callback($aMatch, array($this, "__mobileImageAnchorReplace"), $View->output);
         $View->output = preg_replace_callback($imgMatch, array($this, "__mobileImageReplace"), $View->output);
     }
 }
 public function startup(CakeEvent $event)
 {
     $Controller = $event->subject();
     $IpLimitterConfig = ClassRegistry::init('IpLimitter.IpLimitterConfig');
     $datas = $IpLimitterConfig->findExpanded();
     if ($datas) {
         if (empty($datas['allowed_ip'])) {
             return;
         }
         $allowedIp = preg_quote($datas['allowed_ip']);
         $patterns = str_replace("\\*", '.+?', $allowedIp);
         $patterns = explode(',', $patterns);
         foreach ($patterns as $pattern) {
             if (preg_match('/' . $pattern . '/', $Controller->RequestHandler->getClientIp())) {
                 return;
             }
         }
         if (empty($datas['limit_folders'])) {
             if (empty($Controller->request->params['requested'])) {
                 $Controller->notFound();
             }
         } elseif (!empty($Controller->request->url)) {
             $limitFolders = explode(',', $datas['limit_folders']);
             $folder = explode('/', $Controller->request->url);
             if (!empty($folder[0])) {
                 $folder = $folder[0];
                 if (in_array($folder, $limitFolders)) {
                     if (empty($datas['redirect_url'])) {
                         if (empty($Controller->request->params['requested'])) {
                             $Controller->notFound();
                         }
                     } else {
                         $Controller->redirect($datas['redirect_url']);
                     }
                 }
             }
         }
     }
 }
    /**
     * 
     */
    public function beforeRender(CakeEvent $event)
    {
        if (BcUtil::isAdminSystem()) {
            return;
        }
        $View = $event->subject();
        if (!empty($View->BcBaser)) {
            $View->BcBaser->js('Suggest.jquery.autocomplete', false);
            $View->BcBaser->css('Suggest.jquery.autocomplete', array('inline' => false));
            $url = $View->BcBaser->getUrl('/suggest/suggest/ajax_keyword');
            $script = <<<DOC_END
\$(document).ready(function(){
    \$('#ContentQ').autocomplete('{$url}',{
\t\tscroll:false,
\t\tonItemSelect:function(){
\t\t\t\$("#ContentSearchForm").submit();
\t\t}
\t});
});
DOC_END;
            $View->BcHtml->scriptBlock($script, array('inline' => false));
        }
    }
 /**
  * _buildPath
  *
  * @param CakeEvent $Event
  * @return array
  */
 protected function _buildPath(CakeEvent $Event)
 {
     $Model = $Event->subject();
     $record = $Model->data[$Model->alias];
     $adapterConfig = $this->getAdapterconfig($record['adapter']);
     $id = $record[$Model->primaryKey];
     $path = $Model->fsPath();
     $path = '/' . str_replace('sites/', '', SITE_DIR) . '/' . str_replace('\\', '/', $path);
     $path = str_replace('//', '/', $path);
     if ($this->options['preserveFilename'] === false) {
         $filename = $Model->stripUuid($id);
         if ($this->options['preserveExtension'] === true && !empty($record['extension'])) {
             $filename .= '.' . $record['extension'];
         }
     } else {
         $filename = $record['filename'];
     }
     $combined = $path . $filename;
     // not sure why it was this, and working on mathnasium??? rk
     $url = 'https://' . $adapterConfig['adapterOptions'][1] . '.s3.amazonaws.com' . $combined;
     //$url = 'https://s3.amazonaws.com' . $adapterConfig['adapterOptions'][1] . $combined;
     return array('filename' => $filename, 'path' => $path, 'combined' => $path . $filename, 'url' => $url);
 }
Ejemplo n.º 29
0
 /**
  * afterDelete
  * 
  * @param CakeEvent $event
  */
 public function afterDelete(CakeEvent $event)
 {
     if (!method_exists($event->subject(), 'dispatchEvent')) {
         return;
     }
     $event->subject->dispatchEvent('afterDelete', $event->data);
 }
 /**
  * 承認選択フォーム出力
  * 承認設定がある場合に必要なメッセージを出力する。
  *
  * @return  void
  * @access  public
  */
 public function formAfterForm(CakeEvent $event)
 {
     //ブログ&固定ページ共通で、申し送り事項の表示処理を差し込む。
     //差し戻し、承認の時のみ、申し送り入力欄を表示する。
     $approval_comment_toggle = $this->_getHiddenCommentFormCode();
     //処理を実行するのは、ブログと固定ページ
     //---------------------------------
     // ブログ投稿フォーム
     //---------------------------------
     if ($event->data['id'] == 'BlogPostForm') {
         // BcFormHelperを利用する為、Viewを取得
         $View = $event->subject();
         //ブログのコンテンツIDを取得する。
         $blogContentId = $View->request->params['pass'][0];
         //承認レベル設定モデルを取得する。
         App::import('Model', 'Approval.ApprovalLevelSetting');
         $approvalLevelSetting = new ApprovalLevelSetting();
         //カテゴリの設定を優先する
         if (!empty($View->data['BlogPost']['blog_category_id'])) {
             $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.category_id' => $View->data['BlogPost']['blog_category_id'], 'ApprovalLevelSetting.type' => 'blog', 'ApprovalLevelSetting.publish' => 1)));
         }
         if (empty($settingData)) {
             $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.blog_content_id' => $blogContentId, 'ApprovalLevelSetting.type' => 'blog', 'ApprovalLevelSetting.publish' => 1)));
         }
         //セッション情報からログイン中のユーザー情報を取得する。
         App::uses('CakeSession', 'Model/Datasource');
         $Session = new CakeSession();
         $user = $Session->read('Auth.User');
         //設定情報を確認する。
         if (!empty($settingData)) {
             //新規作成の場合は、保留か承認申請かに内容を変更する。
             if ($View->request->params['action'] == 'admin_add') {
                 $options = array(0 => '保留', 3 => '承認を申請する');
                 //承認設定のある新規作成は誰でも書けるので、常に表示する。
                 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                 //申送入力欄
                 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                 //編集(edit)の場合
             } else {
                 //現在の承認済段階を確認する。
                 //承認情報・承認待ちモデルを取得する。
                 App::import('Model', 'Approval.ApprovalPost');
                 $approvalPost = new ApprovalPost();
                 //承認情報・承認待ちモデルからデータを探す
                 $approvalPostData = $approvalPost->find('first', array('conditions' => array('ApprovalPost.post_id' => $View->request->params['pass'][1])));
                 //データがある場合
                 if (!empty($approvalPostData)) {
                     //通過済みの承認ステージ
                     $pass_stage = $approvalPostData['ApprovalPost']['pass_stage'];
                     if (empty($pass_stage)) {
                         $pass_stage = 0;
                     }
                     //現在のステージを確認する(最終承認後はそれ以上ない)
                     if ($approvalPostData['ApprovalPost']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) {
                         $nowStage = $approvalPostData['ApprovalPost']['pass_stage'];
                     } else {
                         $nowStage = $approvalPostData['ApprovalPost']['pass_stage'] + 1;
                     }
                     //現在の承認権限者タイプ
                     $nowApprovalType = $settingData['ApprovalLevelSetting']['level' . $nowStage . '_type'];
                     //編集モードの場合でも、next_approver_idが0の時は、却下で戻ってきたもの。
                     if ($pass_stage == 0) {
                         //権限者の確認
                         switch ($nowApprovalType) {
                             case 'user':
                                 if ($approvalPostData['ApprovalPost']['next_approver_id'] == $user['id']) {
                                     //承認権限があるかどうかを判定する。
                                     $now_stage = $pass_stage + 1;
                                     //ユーザー情報を確認する。
                                     $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す');
                                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                     //申送入力欄(最終承認の時は無視する)
                                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                 } else {
                                     //自分が権限者でない場合
                                     //却下で戻ってきたものの場合は、改めて申請できるので表示する。
                                     if ($approvalPostData['ApprovalPost']['next_approver_id'] == 0) {
                                         $options = array(0 => '保留', 3 => '承認を申請する');
                                         //最初の段階まで戻っていれば、誰もが申請できる。
                                         $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                         //申送入力欄
                                         $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                     }
                                 }
                                 break;
                             case 'group':
                                 if ($approvalPostData['ApprovalPost']['next_approver_id'] == $user['UserGroup']['id']) {
                                     //承認権限があるかどうかを判定する。
                                     $now_stage = $pass_stage + 1;
                                     //ユーザー情報を確認する。
                                     $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す');
                                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                     //申送入力欄
                                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                 } else {
                                     //自分が権限者でない場合
                                     //却下で戻ってきたものの場合は、改めて申請できるので表示する。
                                     if ($approvalPostData['ApprovalPost']['next_approver_id'] == 0) {
                                         $options = array(0 => '保留', 3 => '承認を申請する');
                                         //最初の段階まで戻っていれば、誰もが申請できる。
                                         $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                         //申送入力欄
                                         $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                     }
                                 }
                                 break;
                             default:
                                 break;
                         }
                         //却下または第1段階ではなく、承認待ちの状態の場合
                     } else {
                         $now_stage = $pass_stage + 1;
                         //権限者の確認
                         switch ($nowApprovalType) {
                             case 'user':
                                 //権限者の確認
                                 if ($approvalPostData['ApprovalPost']['next_approver_id'] == $user['id']) {
                                     //もしも最終段階まで来ていれば「承認する」はいらない。
                                     if ($approvalPostData['ApprovalPost']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) {
                                         $options = array(0 => '承認状態を維持', 2 => '差し戻す');
                                     } else {
                                         $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す');
                                     }
                                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                     //申送入力欄
                                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                 }
                                 break;
                             case 'group':
                                 //権限者の確認
                                 if ($approvalPostData['ApprovalPost']['next_approver_id'] == $user['UserGroup']['id']) {
                                     //もしも最終段階まで来ていれば「承認する」はいらない。
                                     if ($approvalPostData['ApprovalPost']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) {
                                         $options = array(0 => '承認状態を維持', 2 => '差し戻す');
                                     } else {
                                         $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す');
                                     }
                                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                     //申送入力欄
                                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                 }
                                 break;
                         }
                     }
                     //データがない場合は、新規作成後に承認機能を付与した場合。
                 } else {
                     $options = array(0 => '保留', 3 => '承認を申請する');
                     //データがないため新規作成と同じく、だれにでも表示する。
                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                     //申送入力欄
                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                 }
             }
         }
         //---------------------------------
         // 固定ページ投稿フォーム
         //---------------------------------
     } elseif ($event->data['id'] == 'PageForm') {
         // BcFormHelperを利用する為、Viewを取得
         $View = $event->subject();
         //承認レベル設定モデルを取得する。
         App::import('Model', 'Approval.ApprovalLevelSetting');
         $approvalLevelSetting = new ApprovalLevelSetting();
         //カテゴリの設定を優先する
         if (!empty($View->data['Page']['page_category_id'])) {
             $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.category_id' => $View->data['Page']['page_category_id'], 'ApprovalLevelSetting.type' => 'page', 'ApprovalLevelSetting.publish' => 1)));
         }
         if (empty($settingData)) {
             $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.category_id' => 0, 'ApprovalLevelSetting.type' => 'page', 'ApprovalLevelSetting.publish' => 1)));
         }
         //セッション情報からログイン中のユーザー情報を取得する。
         App::uses('CakeSession', 'Model/Datasource');
         $Session = new CakeSession();
         $user = $Session->read('Auth.User');
         //設定情報を確認する。
         if (!empty($settingData)) {
             //新規作成の場合は、保留か承認申請かに内容を変更する。
             if ($View->request->params['action'] == 'admin_add') {
                 $options = array(0 => '保留', 3 => '承認を申請する');
                 //承認設定のある新規作成は誰でも書けるので、常に表示する。
                 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                 //申送入力欄
                 $event->data['fields'][] = array('title' => '申し送り事項', 'id' => 'test', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                 //編集(edit)の場合
             } else {
                 //現在の承認済段階を確認する。
                 //承認情報・承認待ちモデルを取得する。
                 App::import('Model', 'Approval.ApprovalPage');
                 $approvalPage = new ApprovalPage();
                 //承認情報・承認待ちモデルからデータを探す
                 $approvalPageData = $approvalPage->find('first', array('conditions' => array('ApprovalPage.page_id' => $View->request->params['pass'][0])));
                 //データがある場合
                 if (!empty($approvalPageData)) {
                     //通過済みの承認ステージ
                     $pass_stage = $approvalPageData['ApprovalPage']['pass_stage'];
                     if (empty($pass_stage)) {
                         $pass_stage = 0;
                     }
                     //現在のステージを確認する(最終承認後はそれ以上ない)
                     if ($approvalPageData['ApprovalPage']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) {
                         $nowStage = $approvalPageData['ApprovalPage']['pass_stage'];
                     } else {
                         $nowStage = $approvalPageData['ApprovalPage']['pass_stage'] + 1;
                     }
                     //現在の承認権限者タイプ
                     $nowApprovalType = $settingData['ApprovalLevelSetting']['level' . $nowStage . '_type'];
                     //編集モードの場合でも、next_approver_idが0の時は、却下で戻ってきたもの。
                     if ($pass_stage == 0) {
                         //権限者の確認
                         switch ($nowApprovalType) {
                             case 'user':
                                 if ($approvalPageData['ApprovalPage']['next_approver_id'] == $user['id']) {
                                     //承認権限があるかどうかを判定する。
                                     $now_stage = $pass_stage + 1;
                                     //ユーザー情報を確認する。
                                     $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す');
                                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                     //申送入力欄
                                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                 } else {
                                     //自分が権限者でない場合
                                     //却下で戻ってきたものの場合は、改めて申請できるので表示する。
                                     if ($approvalPageData['ApprovalPage']['next_approver_id'] == 0) {
                                         $options = array(0 => '保留', 3 => '承認を申請する');
                                         //最初の段階まで戻っていれば、誰もが申請できる。
                                         $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                         //申送入力欄
                                         $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                     }
                                 }
                                 break;
                             case 'group':
                                 if ($approvalPageData['ApprovalPage']['next_approver_id'] == $user['UserGroup']['id']) {
                                     //承認権限があるかどうかを判定する。
                                     $now_stage = $pass_stage + 1;
                                     //ユーザー情報を確認する。
                                     $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す');
                                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                     //申送入力欄
                                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                 } else {
                                     //自分が権限者でない場合
                                     //却下で戻ってきたものの場合は、改めて申請できるので表示する。
                                     if ($approvalPageData['ApprovalPage']['next_approver_id'] == 0) {
                                         $options = array(0 => '保留', 3 => '承認を申請する');
                                         //最初の段階まで戻っていれば、誰もが申請できる。
                                         $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                         //申送入力欄
                                         $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                     }
                                 }
                                 break;
                             default:
                                 break;
                         }
                         //却下または第1段階ではなく、承認待ちの状態の場合
                     } else {
                         $now_stage = $pass_stage + 1;
                         //権限者の確認
                         switch ($nowApprovalType) {
                             case 'user':
                                 //権限者の確認
                                 if ($approvalPageData['ApprovalPage']['next_approver_id'] == $user['id']) {
                                     //もしも最終段階まで来ていれば「承認する」はいらない。
                                     if ($approvalPageData['ApprovalPage']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) {
                                         $options = array(0 => '承認状態を維持', 2 => '差し戻す');
                                     } else {
                                         $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す');
                                     }
                                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                     //申送入力欄
                                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                 }
                                 break;
                             case 'group':
                                 //権限者の確認
                                 if ($approvalPageData['ApprovalPage']['next_approver_id'] == $user['UserGroup']['id']) {
                                     //もしも最終段階まで来ていれば「承認する」はいらない。
                                     if ($approvalPageData['ApprovalPage']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) {
                                         $options = array(0 => '承認状態を維持', 2 => '差し戻す');
                                     } else {
                                         $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す');
                                     }
                                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                                     //申送入力欄
                                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                                 }
                                 break;
                         }
                     }
                     //データがない場合は、新規作成後に承認機能を付与した場合。
                 } else {
                     $options = array(0 => '保留', 3 => '承認を申請する');
                     //データがないため新規作成と同じく、だれにでも表示する。
                     $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options)));
                     //申送入力欄
                     $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle);
                 }
             }
         }
     }
     return true;
 }