/** * 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; }
/** * 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']); } }
/** * 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']; }
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']; }
/** * 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()); }
/** * 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')); }
/** * 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); }
/** * 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; }
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(); } }
/** * 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']; } } }
/** * 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); }
/** * 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); }
/** * 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; }