/** * 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; }
/** * 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']; }
/** * Checks if a requested asset exists and sends it to the browser * * @param CakeEvent $event containing the request and response object * @return mixed The resulting response. * @throws NotFoundException When asset not found */ public function beforeDispatch(CakeEvent $event) { $url = urldecode($event->data['request']->url); if (strpos($url, '..') !== false || strpos($url, '.') === false) { return; } // CUSTOMIZE DELETE 2014/07/02 ryuring // >>> /*if ($result = $this->_filterAsset($event)) { $event->stopPropagation(); return $result; }*/ // <<< $assetFile = $this->_getAssetFile($url); if ($assetFile === null || !file_exists($assetFile)) { return null; } $response = $event->data['response']; $event->stopPropagation(); $response->modified(filemtime($assetFile)); if ($response->checkNotModified($event->data['request'])) { return $response; } $pathSegments = explode('.', $url); $ext = array_pop($pathSegments); $this->_deliverAsset($response, $assetFile, $ext); return $response; }
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))); }
/** * 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')); }
/** * 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']; }
/** * Checks whether the response was cached and set the body accordingly. * * @param CakeEvent $event containing the request and response object * @return CakeResponse with cached content if found, null otherwise */ public function beforeDispatch(CakeEvent $event) { if (Configure::read('Cache.check') !== true) { return; } $path = $event->data['request']->here(); if ($path === '/') { $path = 'home'; } $prefix = Configure::read('Cache.viewPrefix'); if ($prefix) { $path = $prefix . '_' . $path; } $path = strtolower(Inflector::slug($path)); $filename = CACHE . 'views' . DS . $path . '.php'; if (!file_exists($filename)) { $filename = CACHE . 'views' . DS . $path . '_index.php'; } if (file_exists($filename)) { $controller = null; $view = new View($controller); $result = $view->renderCache($filename, microtime(true)); if ($result !== false) { $event->stopPropagation(); $event->data['response']->body($result); return $event->data['response']; } } }
public function beforeDispatch(CakeEvent $event) { $MaintenanceMode = Configure::read('MaintenanceMode'); /* Not in maintenance mode*/ if (!$MaintenanceMode['enabled']) { return; } /* Allow access from following IPS*/ if (!empty($MaintenanceMode['ip_filters'])) { if (!is_array($MaintenanceMode['ip_filters'])) { $ips = array($MaintenanceMode['ip_filters']); } else { $ips = $MaintenanceMode['ip_filters']; } $userIP = $this->_getUserIpAddr(); foreach ($ips as $ip) { if ($this->_compareIp($userIP, $ip)) { return; } } } $statusCode = 503; $body = 'Currently undergoing maintenance'; if (!empty($MaintenanceMode['code'])) { $statusCode = $MaintenanceMode['code']; } if (!empty($MaintenanceMode['view']['template'])) { $View = $this->_getView(); $body = $View->render($MaintenanceMode['view']['template'], $MaintenanceMode['view']['layout']); } $event->data['response']->statusCode($statusCode); $event->data['response']->body($body); $event->stopPropagation(); return $event->data['response']; }
/** * Tests the event propagation stopping property * * @return void * @triggers fake.event */ public function testPropagation() { $event = new CakeEvent('fake.event'); $this->assertFalse($event->isStopped()); $event->stopPropagation(); $this->assertTrue($event->isStopped()); }
/** * After Render * * @param CakeEvent $event */ public function afterRender(CakeEvent $event) { if (BcUtil::isAdminSystem()) { return; } $View = $event->subject(); $this->_execShortCode($View); }
/** * 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; }
/** * 拡張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'; }
/** * 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']); } }
/** * 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 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(); } }
/** * ブログ記事検索直前イベント * * @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 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; }
/** * 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); } }
/** * 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']; } } }
/** * 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; }
/** * 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(); }); } }
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']; } } } }
/** * Checks if request is for a compiled asset, otherwise skip any operation * * @param CakeEvent $event containing the request and response object * @throws NotFoundException * @return CakeResponse if the client is requesting a recognized asset, null otherwise */ public function beforeDispatch(CakeEvent $event) { $url = $event->data['request']->url; $Config = $this->_getConfig(); $production = !Configure::read('debug'); if ($production && !$Config->general('alwaysEnableController')) { return; } $build = $this->_getBuild($url); if ($build === false) { return; } if (isset($event->data['request']->query['theme'])) { $Config->theme($event->data['request']->query['theme']); } // Dynamically defined build file. Disabled in production for // hopefully obvious reasons. if ($Config->files($build) === array()) { $files = array(); if (isset($event->data['request']->query['file'])) { $files = $event->data['request']->query['file']; } $Config->files($build, $files); } try { $Compiler = new AssetCompiler($Config); $mtime = $Compiler->getLastModified($build); $event->data['response']->modified($mtime); if ($event->data['response']->checkNotModified($event->data['request'])) { $event->stopPropagation(); return $event->data['response']; } $contents = $Compiler->generate($build); } catch (Exception $e) { throw new NotFoundException($e->getMessage()); } $event->data['response']->type($Config->getExt($build)); $event->data['response']->body($contents); $event->stopPropagation(); return $event->data['response']; }
/** * 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(); } }
public function beforeDispatch(CakeEvent $event) { if (!preg_match("/media\\/router\\/index\\//i", $event->data['request']->url)) { return; } $event->stopPropagation(); $requestData = $event->data['request']->params; list($type, $id, $size, $filename) = $requestData['pass']; App::uses('MediaPath', 'Media.Vendor'); $this->PHMedia = new MediaPath(); $fname = $this->PHMedia->getFileName($type, $id, $size, $filename); $aFName = $this->PHMedia->getFileInfo($filename); $response = $event->data['response']; if (!file_exists($fname)) { $this->_processMedia($requestData['pass'], $fname, $aFName); } $this->_deliverMedia($response, $fname, $aFName); return $response; }
/** * _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); }
/** * Handle OPTIONS requests * * If it's an options request, loop on the configured http verbs and add * an Access-Control-Allow-Methods header with the verbs the application * is configured to respond to. * * @param CakeEvent $event * @return CakeResponse|null */ public function beforeDispatch(CakeEvent $event) { $request = $event->data['request']; if (!$request->is('options')) { return; } $event->stopPropagation(); $url = $request->url; $verbs = Configure::read('Crud.HttpMethodFilter.verbs') ?: $this->defaultVerbs; $allowedMethods = array(); foreach ($verbs as $verb) { $_SERVER['REQUEST_METHOD'] = $verb; if (Router::parse('/' . $url)) { $allowedMethods[] = $verb; } } $_SERVER['REQUEST_METHOD'] = 'OPTIONS'; $response = $event->data['response']; $response->header('Access-Control-Allow-Methods', implode(', ', $allowedMethods)); return $response; }