/** * Action tutorial */ public function action_tutorial() { $file = 'tutorial' . $this->request->param('key', 1); /** * View */ // Get content file and Factory $content_file = Tpl::get_file($file, $this->settings->back_tpl_dir . '/home', $this->partials); $this->content = Tpl::factory($content_file); }
/** * Generate a Response for the 500 Exception. * * Internal * The user should be shown a nice 500 page. * * @return Response */ public function get_response() { // Lets log the Exception, Just in case it's important! Kohana_Exception::log($this); if (Kohana::$environment >= Kohana::DEVELOPMENT) { // Show the normal Kohana error page. return parent::get_response(); } else { // Get tpl directory $front_tpl_dir = Cms_Helper::settings('front_tpl_dir'); // Get file $content_file = Tpl::get_file($this->code, $front_tpl_dir . '/error'); // Set variable and render $content = Tpl::factory($content_file)->set('code', $this->getCode())->set('message', $this->getMessage())->set('request_url', URL::site(Request::current()->url(), "http"))->render(); // Factory response $response = Response::factory(); $response->body($content); return $response; } }
/** * Action index */ public function action_index() { /* * Build columns */ // <editor-fold defaultstate="collapsed" desc="Build columns"> // Get order $query = $this->request->query(); $order_column = Arr::get($query, 'order_column', 'created'); $order_direction = Arr::get($query, 'order_direction', 'DESC'); // Build columns $columns = array(array('name' => 'id', 'order_column' => 'id', 'order_direction' => 'ASC'), array('name' => 'item segment', 'order_column' => 'item_segment', 'order_direction' => 'ASC'), array('name' => 'item title', 'order_column' => 'item_title', 'order_direction' => 'ASC'), array('name' => 'item id', 'order_column' => 'item_id', 'order_direction' => 'ASC'), array('name' => 'user id', 'order_column' => 'user_id', 'order_direction' => 'ASC'), array('name' => 'replay id', 'order_column' => 'replay_id', 'order_direction' => 'ASC'), array('name' => 'display name', 'order_column' => 'display_name', 'order_direction' => 'ASC'), array('name' => 'subject', 'order_column' => 'subject', 'order_direction' => 'ASC'), array('name' => 'created', 'order_column' => 'created', 'order_direction' => 'ASC'), array('name' => 'is accept', 'order_column' => 'is_accept', 'order_direction' => 'ASC')); foreach ($columns as &$column) { if (isset($column['order_column'])) { if ($column['order_column'] == $order_column) { $column['current'] = TRUE; if ($order_direction == 'ASC') { $column['order_direction'] = 'DESC'; $column['current_asc'] = TRUE; } else { $column['order_direction'] = 'ASC'; $column['current_desc'] = TRUE; } } $column['url'] = URL::base(TRUE) . Request::current()->uri() . URL::query(array('order_column' => $column['order_column'], 'order_direction' => $column['order_direction']), FALSE); } } // </editor-fold> /* * If delete */ // <editor-fold defaultstate="collapsed" desc="If delete"> if ($this->request->post('delete')) { // Database transaction start Database::instance()->begin(); // Try try { // Get delete received comment ids $delete_received_comment_ids = Arr::get($this->request->post(), 'delete_received_comment_id', array()); // Iterate and chack and delete foreach ($delete_received_comment_ids as $delete_received_comment_id) { // Get received comment $received_comment = Tbl::factory('received_comments')->get($delete_received_comment_id); // Delete $received_comment->delete(); } // Database commit Database::instance()->commit(); // Add success notice if ($delete_received_comment_ids) { Notice::add(Notice::SUCCESS, Kohana::message('general', 'delete_success')); } else { Notice::add(Notice::SUCCESS, Kohana::message('general', 'no_delete'), array(':text' => 'emil')); } } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Warning_Exception $e) { // Database rollback Database::instance()->rollback(); // Add Notice::add(Notice::WARNING, $e->getMessage()); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage() . $e->getFile() . $e->getLine()); } } // </editor-fold> /* * Get received_comments */ // <editor-fold defaultstate="collapsed" desc="Get received_comments"> $all_received_comments = Tbl::factory('received_comments')->select('received_comments.*')->select(array('items.segment', 'item_segment'))->select(array('items.title', 'item_title'))->join('items')->on('received_comments.item_id', '=', 'items.id')->order_by($order_column, $order_direction)->read()->as_array(); $pagenate = Pgn::factory(array('total_items' => count($all_received_comments), 'items_per_page' => $this->settings->pagenate_items_per_page_for_received_comments, 'follow' => $this->settings->pagenate_items_follow_for_received_comments)); // Paginated items $received_comments = array_slice($all_received_comments, $pagenate->offset, $pagenate->items_per_page); foreach ($received_comments as $received_comment) { $received_comment->delete_url = URL::site("{$this->settings->backend_name}/received_comments/delete/{$received_comment->id}", 'http') . URL::query(); } // </editor-fold> /* * If update */ // <editor-fold defaultstate="collapsed" desc="If update"> if ($this->request->post('update')) { $post = $this->request->post(); // Set post to tag foreach ($received_comments as $received_comment) { $received_comment->is_accept = isset($post['is_accept'][$received_comment->id]) ? $post['is_accept'][$received_comment->id] : 0; } // Database transaction start Database::instance()->begin(); // Try try { // Update foreach ($received_comments as $received_comment) { Tbl::factory('received_comments')->get($received_comment->id)->update(array('is_accept' => isset($post['is_accept'][$received_comment->id]) ? $post['is_accept'][$received_comment->id] : 0)); } // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_success'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } // </editor-fold> /** * View */ // <editor-fold defaultstate="collapsed" desc="View"> $this->partials['pagenate'] = Tpl::get_file('pagenate', $this->settings->back_tpl_dir); $content_file = Tpl::get_file('index', $this->settings->back_tpl_dir . '/received_comments', $this->partials); $this->content = Tpl::factory($content_file)->set('columns', $columns)->set('received_comments', $received_comments)->set('pagenate', $pagenate)->set('post', $this->request->post()); // </editor-fold> }
/** * Action login */ public function action_login() { $post = $this->request->post(); $username = Arr::get($post, 'username'); $password = Arr::get($post, 'password'); $remember = Arr::get($post, 'remember') ?: 0; // If there is post login if ($this->request->post('login')) { // ログインチェック if (Auth::instance()->login($username, $password, $remember)) { // ロールチェック if (Auth::instance()->logged_in('direct') or Auth::instance()->logged_in('admin') or Auth::instance()->logged_in('edit')) { // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('auth', 'login_success'), array(':user' => $username)); // Redirect to home $this->redirect(URL::site($this->settings->backend_name, 'http')); } else { // Add error notice Notice::add(Notice::ERROR, Kohana::message('auth', 'login_refusal'), NULL, Kohana::message('auth', 'login_refusal_messages')); } } else { // Add error notice Notice::add(Notice::ERROR, Kohana::message('auth', 'login_failed'), NULL, Kohana::message('auth', 'login_failed_messages')); } } /** * View */ // Get content $content_file = Tpl::get_file('login', $this->settings->back_tpl_dir . '/auth'); $this->content = Tpl::factory($content_file)->set('post', $post); }
/** * Action index */ public function action_index() { // //---------------------------------------------------------------// // if (Kohana::$profiling === TRUE) // { // // Start a new benchmark // $benchmark = Profiler::start('check', __FUNCTION__); // } // //Do some stuff--------------------------------------------------// // try // { // // } // catch (Exception $e) // { // echo Debug::vars($e); // } // // // //Do some stuff--------------------------------------------------// // if (isset($benchmark)) // { // // Stop the benchmark // Profiler::stop($benchmark); // } // echo View::factory('profiler/stats'); // //---------------------------------------------------------------// /** * Get settings */ // <editor-fold defaultstate="collapsed" desc="Get settings"> $settings = Cms_Helper::settings(); // </editor-fold> /** * Lang */ // <editor-fold defaultstate="collapsed" desc="Lang"> I18n::lang($settings->lang); // </editor-fold> /** * Get item:セグメントからURLを取得 間はなんでもOK でもセグメントはユニーク */ // <editor-fold defaultstate="collapsed" desc="Get segment and item"> // Get item $item = Cms_Functions::get_item($this->request->param('segment'), TRUE, TRUE, FALSE); // Check issued if (Date::formatted_time($item->issued, 'U') > time()) { $item = FALSE; } // itemがないとき(false)は404へ飛ばす if (!$item) { throw HTTP_Exception::factory(404); } // </editor-fold> /** * If login */ // <editor-fold defaultstate="collapsed" desc="If login"> // If switch and post ログイン機能ONのときポストがあったら if ($settings->author_login_is_on and $this->request->post('login')) { $this->login_result = Cms_Item::login($this->request->post()); } // </editor-fold> /** * login check:ログインのチェック */ // <editor-fold defaultstate="collapsed" desc="login check"> // ログインのチェック if (Auth::instance()->logged_in()) { // Get user from auth $get_user = Auth::instance()->get_user(); // Build logged_in_user $this->logged_in_user = (object) array('id' => $get_user->id, 'email' => $get_user->email, 'username' => $get_user->username, 'logins' => $get_user->logins, 'last_login' => $get_user->last_login, 'ext' => $get_user->ext, 'avatar' => FALSE, 'detail' => FALSE, 'role' => FALSE); // Set logged in user avatar if (is_file('application/' . Cms_Helper::settings('image_dir') . '/user/' . $get_user->username . '/avatar' . $get_user->ext)) { $this->logged_in_user->avatar = (object) array('path' => URL::site("imagefly", 'http') . '/user/' . $get_user->username . '/', 'file' => '/' . 'avatar' . $get_user->ext); } // Set logged in user detail $this->logged_in_user->detail = Tbl::factory('users_details')->join('details')->on('users_details.detail_id', '=', 'details.id')->select('users_details.*')->select('details.name')->select('details.segment')->where('users_details.user_id', '=', $get_user->id)->read()->as_array('segment'); // Set logged in user role $this->logged_in_user->role = Tbl::factory('roles_users')->select('roles.*')->join('roles')->on('roles_users.role_id', '=', 'roles.id')->where('roles_users.user_id', '=', $get_user->id)->where('roles.name', '!=', 'login')->read('name'); } // </editor-fold> /** * Set global value */ // <editor-fold defaultstate="collapsed" desc="Set global value"> // Get site details $site = array(); $site_detail_string = explode("\n", $settings->site_details); if ($site_detail_string) { foreach ($site_detail_string as $value) { $array = explode(':', $value); $site[trim($array[0])] = trim($array[1]); } } // Build logged_in_user if ($this->logged_in_user) { $logged_in_user = clone $this->logged_in_user; unset($logged_in_user->password, $logged_in_user->reset_key); } else { $logged_in_user = $this->logged_in_user; } Tpl::set_global(array('host' => URL::base(true), 'media_dir' => URL::site('media', 'http') . '/', 'images_dir' => URL::site('media/images', 'http') . '/', 'imagefly' => URL::site('imagefly/item', 'http') . '/', 'css_dir' => URL::site('media/css', 'http') . '/', 'js_dir' => URL::site('media/js', 'http') . '/', 'icon_dir' => URL::site('media/icon', 'http') . '/', 'lang' => $settings->lang, 'logged_in_user' => $logged_in_user, 'time' => time(), 'return' => PHP_EOL, 'site_title' => $settings->site_title, 'site_email_address' => $settings->site_email_address, 'site' => $site)); // </editor-fold> /** * If logout */ // <editor-fold defaultstate="collapsed" desc="If logout"> // If query ここはログイン機能OFFでもログアウト if ($this->request->query('logout')) { Cms_Item::logout(); $this->redirect(); } // </editor-fold> /** * If post register */ // <editor-fold defaultstate="collapsed" desc="register"> // If switch and post レジスター機能ONのときポストがあったら if ($settings->author_register_is_on and $this->request->post('register')) { Cms_Item::register($this->request->post()); } // </editor-fold> /** * If get activate */ // <editor-fold defaultstate="collapsed" desc="activate"> // If switch and post レジスター機能ONでアクティベートONのときポストがあったら if ($settings->author_register_is_on and $settings->author_register_activate_is_on and $this->request->query('activate_key')) { Cms_Item::activate($this->request->query()); } // </editor-fold> /** * If post forgot */ // <editor-fold defaultstate="collapsed" desc="forgot"> // If switch and post フォーガット機能ONのときポストがあったら if ($settings->author_password_forgot_is_on and $this->request->post('forgot')) { Cms_Item::forgot($this->request->post()); } // </editor-fold> /** * If post reset */ // <editor-fold defaultstate="collapsed" desc="reset"> if ($settings->author_password_forgot_is_on and ($this->request->post('reset') or $this->request->query('reset_key'))) { Cms_Item::reset($this->request->post(), $this->request->query()); } // </editor-fold> /** * If post resign */ // <editor-fold defaultstate="collapsed" desc="resign"> // If switch and post レジスター機能ONでアクティベートONのときポストがあったら if ($settings->author_register_is_on and $settings->author_register_activate_is_on and $this->request->post('resign')) { Cms_Item::resign($this->request->post()); } // </editor-fold> /** * If post account */ // <editor-fold defaultstate="collapsed" desc="account"> if ($settings->author_account_is_on and $this->request->post('account') and $this->logged_in_user) { Cms_Item::account($this->request->post()); } // </editor-fold> /** * If post password */ // <editor-fold defaultstate="collapsed" desc="password"> if ($settings->author_password_is_on and $this->request->post('password') and $this->logged_in_user) { Cms_Item::password($this->request->post()); } // </editor-fold> /** * If post detail */ // <editor-fold defaultstate="collapsed" desc="detail"> if ($settings->author_detail_is_on and $this->request->post('detail') and $this->logged_in_user) { Cms_Item::detail($this->request->post()); } // </editor-fold> /** * If post send email */ // <editor-fold defaultstate="collapsed" desc="If post send email"> // If switch and post if ($settings->send_email_is_on and $this->request->post('send_email')) { Cms_Item::send_email($this->request->post()); } // </editor-fold> /** * If post send comment */ // <editor-fold defaultstate="collapsed" desc="If post send comment"> // settingsのsend_comment_is_onと、itemのsend_comment_is_onが両方オンでポストsend_commentがあるとき $this->send_comment_result = new stdClass(); if ($this->request->post('send_comment')) { if ($settings->send_comment_is_on and $item->send_comment_is_on) { // send comment is user only // ユーザーだけ送信できる場合 if ($settings->send_comment_is_user_only) { if ($this->logged_in_user) { $this->send_comment_result = Cms_Item::send_comment($item->id, $this->request->post()); } else { $this->send_comment_result->information = TRUE; $this->send_comment_result->errors[] = array('field' => 'Only a user can comment. Please register as a user.'); } } else { $this->send_comment_result = Cms_Item::send_comment($item->id, $this->request->post()); } } else { $this->send_comment_result->information = TRUE; $this->send_comment_result->errors[] = array('field' => 'The comment is not set up.'); } } // </editor-fold> /** * If get search */ // <editor-fold defaultstate="collapsed" desc="If get search"> if ($this->request->query('search')) { Cms_Item::search($this->request->query()); } // </editor-fold> /** * Set ticket * * postにワンタイムチケットを使うときは{{&ticket}}をフォームの中に入れる */ // <editor-fold defaultstate="collapsed" desc="Set ticket"> $ticket = Text::random('alnum', 8); Session::instance()->set('ticket', $ticket); Tpl::set_global(array('ticket' => '<input type="hidden" name="ticket" value="' . $ticket . '" />')); // </editor-fold> /** * First view render */ // <editor-fold defaultstate="collapsed" desc="First view render"> $first_html = Cms_Item::build_html($item); $first_view = Tpl::factory($first_html, array('item' => $item))->set('login_result', Session::instance()->get('login_result'))->set('logout_result', Session::instance()->get('logout_result'))->set('register_result', Session::instance()->get('register_result'))->set('activate_result', Session::instance()->get('activate_result'))->set('forgot_result', Session::instance()->get('forgot_result'))->set('reset_result', Session::instance()->get('reset_result'))->set('resign_result', Session::instance()->get('resign_result'))->set('detail_result', Session::instance()->get('detail_result'))->set('account_result', Session::instance()->get('account_result'))->set('password_result', Session::instance()->get('password_result'))->set('send_email_result', Session::instance()->get('send_email_result'))->set('send_comment_result', Session::instance()->get('send_comment_result'))->set('search_result', Session::instance()->get('search_result')); // </editor-fold> /** * Second view render */ // <editor-fold defaultstate="collapsed" desc="Second view render"> $second_html = $first_view->render(); $second_view = Tpl::factory($second_html, array('item' => $item)); $html = $second_view->render(); // delete result session 2階読み込むからget_onecじゃなくてここで消す。 Session::instance()->delete('login_result'); Session::instance()->delete('logout_result'); Session::instance()->delete('register_result'); Session::instance()->delete('activate_result'); Session::instance()->delete('forgot_result'); Session::instance()->delete('reset_result'); Session::instance()->delete('resign_result'); Session::instance()->delete('account_result'); Session::instance()->delete('password_result'); Session::instance()->delete('detail_result'); Session::instance()->delete('send_email_result'); Session::instance()->delete('send_comment_result'); Session::instance()->delete('search_result'); // </editor-fold> /** * Response */ // <editor-fold defaultstate="collapsed" desc="Response"> $this->response->headers('Content-Type', $item->wrapper->content_type); //Todo::1 ブラウザーキャッシュOK でもlogoutのときクリアできない! //// Browser cache //$this->response // ->headers('Cache-Control', 'max-age='.Date::HOUR.', public, must-revalidate') // ->headers('Expires', gmdate('D, d M Y H:i:s', time() + Date::HOUR).' GMT') // ->headers('ETag', $html); //// Tell browser to check the cache //$this->check_cache(sha1($html)); //for jakartaekidan if ($item->wrapper->content_type == 'application/octet-stream') { $html = mb_convert_encoding($html, "SJIS", "UTF-8"); } //for jakartaekidan $this->response->body($html); // </editor-fold> }
/** * Action edit */ public function action_edit() { // Get id from param, if there is nothing then throw to 404 $id = $this->request->param('key'); if (!$id) { throw HTTP_Exception::factory(404); } // Get wrapper, if there is nothing then throw to 404 $wrapper = Tbl::factory('wrappers')->where('id', '=', $id)->read(1); if (!$wrapper) { throw HTTP_Exception::factory(404); } // Get content from file and direct set to wrppaer $wrapper->content = Tpl::get_file($wrapper->segment, $this->settings->front_tpl_dir . '/wrapper'); $wrapper->delete_url = URL::site("{$this->settings->backend_name}/wrappers/delete/{$wrapper->id}", 'http'); // Save present segment $oldfile = "wrapper/{$wrapper->segment}"; // If there are post if ($this->request->post()) { // Set post to wrapper $wrapper->segment = $this->request->post('segment'); $wrapper->name = $this->request->post('name'); $wrapper->content_type = $this->request->post('content_type'); $wrapper->content = $this->request->post('content'); // Database transaction start Database::instance()->begin(); // Try try { // Update Tbl::factory('wrappers')->get($wrapper->id)->update(array('segment' => $this->request->post('segment'), 'name' => $this->request->post('name'), 'content_type' => $this->request->post('content_type'))); // New file $newfile = "wrapper/{$wrapper->segment}"; // rename file Cms_Helper::rename_file($oldfile, $newfile, $this->settings->front_tpl_dir); // Update file Cms_Helper::set_file($newfile, $this->settings->front_tpl_dir, $this->request->post('content')); // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } /** * View */ $content_file = Tpl::get_file('edit', $this->settings->back_tpl_dir . '/wrappers', $this->partials); $this->content = Tpl::factory($content_file)->set('wrapper', $wrapper); }
/** * Action details */ public function action_detail() { // Get id from param, if there is nothing then throw to 404 $id = $this->request->param('key'); if (!$id) { throw HTTP_Exception::factory(404); } // Get user, if there is nothing then throw to 404 $user = Tbl::factory('users')->get($id); if (!$user) { throw HTTP_Exception::factory(404); } /** * Get and build details */ // <editor-fold defaultstate="collapsed" desc="Get and build details"> $details = Tbl::factory('users_details')->select('users_details.*')->select(array('details.segment', 'segment'))->select(array('details.name', 'name'))->join('details')->on('users_details.detail_id', '=', 'details.id')->where('users_details.user_id', '=', $user->id)->order_by('order')->read()->as_array('segment'); // </editor-fold> /** * If there are post */ if ($this->request->post()) { // Database transaction start Database::instance()->begin(); // Try try { // Get rules $rules = Tbl::factory('detail_rules')->join('details')->on('detail_rules.detail_id', '=', 'details.id')->read()->as_array(); // Set post to details foreach ($this->request->post() as $key => $value) { if ($key != 'update') { $details[$key]->value = $value; } } /* * validation */ // <editor-fold defaultstate="collapsed" desc="validation"> // convert to array for validation $posts = array(); foreach ($details as $key => $detail) { $posts[$key] = $detail->value; } // Validation factory $validation = Validation::factory($posts); // Iterate post set rule and label foreach ($rules as $rule) { // if param is null or 0 or '' if (!$rule->param) { $rule->param = NULL; } elseif (strpos($rule->param, ',') === FALSE) { $rule->param = array(trim($rule->param)); } else { $rule->param = array($param[] = trim(substr($rule->param, 0, strpos($rule->param, ','))), $param[] = trim(substr($rule->param, strpos($rule->param, ',') + 1))); } $validation->rule($rule->segment, $rule->callback, $rule->param)->label($rule->segment, __($rule->name)); } // If validation check is false if (!$validation->check()) { throw new Validation_Exception($validation); } // </editor-fold> foreach ($details as $detail) { Tbl::factory('users_details')->get($detail->id)->update(array('value' => $detail->value)); } /** * Get and build details */ // <editor-fold defaultstate="collapsed" desc="Get and build details"> $details = Tbl::factory('users_details')->select('users_details.*')->select(array('details.segment', 'segment'))->select(array('details.name', 'name'))->join('details')->on('users_details.detail_id', '=', 'details.id')->where('users_details.user_id', '=', $user->id)->order_by('order')->read()->as_array('segment'); // </editor-fold> /** * Database commit */ Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage() . '/' . $e->getFile() . '/' . $e->getLine()); } } /** * View */ $content_file = Tpl::get_file('detail', $this->settings->back_tpl_dir . '/users', $this->partials); $this->content = Tpl::factory($content_file)->set('user', $user)->set('details', $details); }
/** * After */ public function after() { // Auto render if ($this->auto_render) { /** * build snippets -> snippetsようにつくるようにつくる! */ // <editor-fold defaultstate="collapsed" desc="build snippets"> // Get site details $sites = array(); $site_details = Tbl::factory('settings')->where('key', '=', 'site_details')->read('value'); $site_detail_strings = explode("\n", $site_details); if ($site_detail_strings) { foreach ($site_detail_strings as $site_detail_string) { $array = explode(':', $site_detail_string); $sites[trim($array[0])] = array('key' => trim($array[0]), 'value' => trim($array[1])); } } // Get items for snippets item. 下の$this->snippetsのitemに入れるように取得する $snippet_item = NULL; if ($this->request->param('key')) { $snippet_item_segment = Tbl::factory('items')->where('id', '=', $this->request->param('key'))->read('segment'); if ($snippet_item_segment) { $snippet_item = Cms_Functions::get_item($snippet_item_segment, TRUE, TRUE, TRUE); } } // Get parts for snippets part. 下の$this->snippetsのpartsに入れるように取得する $snippet_parts = Cms_Helper::get_dirfiles('part', $this->settings->front_tpl_dir); foreach ($snippet_parts as $snippet_part) { $snippet_part->content = Tpl::get_file($snippet_part->segment, $this->settings->front_tpl_dir . '/part'); } // Set snippets $this->snippets = array('host' => URL::base(true), 'media_dir' => URL::site('media', 'http') . '/', 'images_dir' => URL::site('media/images_dir', 'http') . '/', 'css_dir' => URL::site('media/css_dir', 'http') . '/', 'js_dir' => URL::site('media/js_dir', 'http') . '/', 'icon_dir' => URL::site('media/icon_dir', 'http') . '/', 'lang' => $this->settings->lang, 'logged_in_user' => array('id' => isset($this->logged_in_user->id) ? $this->logged_in_user->id : NULL, 'email' => isset($this->logged_in_user->email) ? $this->logged_in_user->email : NULL, 'username' => isset($this->logged_in_user->username) ? $this->logged_in_user->username : NULL, 'logins' => isset($this->logged_in_user->logins) ? $this->logged_in_user->logins : NULL, 'details' => isset($this->logged_in_user->details) ? $this->logged_in_user->details : NULL), 'sites' => $sites, 'timestamp' => time(), 'return' => 'PHP_EOL', 'item' => isset($snippet_item) ? (object) $snippet_item : NULL, 'parts' => isset($snippet_parts) ? (object) $snippet_parts : NULL); // </editor-fold> /** * View */ // <editor-fold defaultstate="collapsed" desc="View"> // Set global value -> Set to contentといっしょ Tpl::set_global(array('host' => URL::base(true), 'site_title' => $this->settings->site_title, 'site_email_address' => $this->settings->site_email_address, 'backend_host' => URL::base(true) . $this->settings->backend_name . '/', 'logged_in_user' => $this->logged_in_user, 'logout_url' => URL::site("{$this->settings->backend_name}/logout", 'http'), 'time' => time())); // Set to content $this->content->set('menus', $this->menus)->set('notice', Notice::render())->set('local_menus', $this->local_menus)->set('frontend_link', $this->frontend_link)->set('snippets', $this->snippets); // Get tamplate file $template = Tpl::get_file('template', $this->settings->back_tpl_dir); $backend_ucfirst = str_replace('_', ' ', Text::ucfirst($this->settings->backend_name, '_')); // Factory and set $this->template = Tpl::factory($template)->set('title', $backend_ucfirst)->set('keywords', $backend_ucfirst)->set('description', $backend_ucfirst)->set('content', $this->content->render()); // Render body $this->response->body($this->template->render()); // </editor-fold> } /** * after */ parent::after(); }
/** * Action index */ public function action_index() { /** * Build columns */ // <editor-fold defaultstate="collapsed" desc="Build columns"> // Get order $query = $this->request->query(); $order_column = Arr::get($query, 'order_column', 'order'); $order_direction = Arr::get($query, 'order_direction', 'ASC'); $columns = array('id' => array('name' => 'id', 'order_column' => 'id', 'order_direction' => 'ASC'), 'segment' => array('name' => 'segment', 'order_column' => 'segment', 'order_direction' => 'ASC'), 'name' => array('name' => 'name', 'order_column' => 'name', 'order_direction' => 'ASC'), 'order' => array('name' => 'order', 'order_column' => 'order', 'order_direction' => 'ASC'), 'delete' => array('name' => '')); foreach ($columns as &$column) { if (isset($column['order_column'])) { if ($column['order_column'] == $order_column) { $column['current'] = TRUE; if ($order_direction == 'ASC') { $column['order_direction'] = 'DESC'; $column['current_asc'] = TRUE; } else { $column['order_direction'] = 'ASC'; $column['current_desc'] = TRUE; } } $column['url'] = URL::base(TRUE) . Request::current()->uri() . URL::query(array('order_column' => $column['order_column'], 'order_direction' => $column['order_direction']), FALSE); } } // </editor-fold> /** * If post create */ // <editor-fold defaultstate="collapsed" desc="If post create"> $create = array(); // If there are post create if ($this->request->post('create')) { // Build data $create['segment'] = $this->request->post('create_segment'); $create['name'] = $this->request->post('create_name'); $create['order'] = $this->request->post('create_order'); // Database transaction start Database::instance()->begin(); // Try try { // Create Tbl::factory('tags')->create($create); // Database commit Database::instance()->commit(); // Clear create $create['segment'] = NULL; $create['name'] = NULL; $create['order'] = NULL; // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'create_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'create_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } // </editor-fold> /** * Get tags */ // <editor-fold defaultstate="collapsed" desc="Get tags"> $tags = Tbl::factory('tags')->order_by($order_column, $order_direction)->read()->as_array(); foreach ($tags as $tag) { $tag->delete_url = URL::site("{$this->settings->backend_name}/tags/delete/{$tag->id}", 'http'); } // </editor-fold> /** * If post update */ // <editor-fold defaultstate="collapsed" desc="If post update"> if ($this->request->post('update')) { $post = $this->request->post(); // Set post to tag foreach ($tags as $tag) { $tag->segment = $post['segment'][$tag->id]; $tag->name = $post['name'][$tag->id]; $tag->order = $post['order'][$tag->id]; } // Database transaction start Database::instance()->begin(); // Try try { // Update foreach ($tags as $tag) { Tbl::factory('tags')->get($tag->id)->update(array('segment' => $post['segment'][$tag->id], 'name' => $post['name'][$tag->id], 'order' => $post['order'][$tag->id])); } // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_success'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } // </editor-fold> /** * View */ // <editor-fold defaultstate="collapsed" desc="View"> $content_file = Tpl::get_file('index', $this->settings->back_tpl_dir . '/tags', $this->partials); $this->content = Tpl::factory($content_file)->set('columns', $columns)->set('tags', $tags)->set('create', $create); // </editor-fold> /** * Notice info */ Notice::add(Notice::WARNING, Kohana::message('general', 'relation_delete'), array(':text' => 'tag')); }
/** * Action edit */ public function action_edit() { // Get id from param, if there is nothing then throw to 404 $id = $this->request->param('key'); if (!$id) { throw HTTP_Exception::factory(404); } // Get division, if there is nothing then throw to 404 $division = Tbl::factory('divisions')->get($id); if (!$division) { throw HTTP_Exception::factory(404); } // Get wrapper $wrapper = Tbl::factory('wrappers')->where('id', '=', $division->wrapper_id)->read(1); // Direct set to division $division->wrapper_segment = $wrapper->segment; $division->wrapper_name = $wrapper->name; $division->wrapper_content_type = $wrapper->content_type; // Get content from file and direct set to division $division->content = Tpl::get_file($division->segment, $this->settings->front_tpl_dir . '/division'); $division->delete_url = URL::site("{$this->settings->backend_name}/divisions/delete/{$division->id}", 'http'); // Save old name $oldname = $division->segment; // Get wrappers $wrappers = Tbl::factory('wrappers')->read()->as_array(); // If there are post if ($this->request->post()) { // Set post to division $division->wrapper_id = $this->request->post('wrapper_id'); $division->segment = $this->request->post('segment'); $division->name = $this->request->post('name'); $division->content = $this->request->post('content'); // Database transaction start Database::instance()->begin(); // Try try { // Update Tbl::factory('divisions')->get($division->id)->update(array('wrapper_id' => $this->request->post('wrapper_id'), 'segment' => $this->request->post('segment'), 'name' => $this->request->post('name'))); // New name $newname = $division->segment; // Rename items/division/directory name Cms_Helper::rename_dir($oldname, $newname, $this->settings->item_dir); // Rename images/division/directory name Cms_Helper::rename_dir($oldname, $newname, $this->settings->image_dir . '/item'); // rename theme/.../division/division file Cms_Helper::rename_file($oldname, $newname, $this->settings->front_tpl_dir . '/division'); // Update file Cms_Helper::set_file($newname, $this->settings->front_tpl_dir . '/division', $this->request->post('content')); // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); // Redirect $this->redirect(URL::site("{$this->settings->backend_name}/divisions/edit/{$division->id}", 'http')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } /** * View */ $content_file = Tpl::get_file('edit', $this->settings->back_tpl_dir . '/divisions', $this->partials); $this->content = Tpl::factory($content_file)->set('division', $division)->set('wrappers', $wrappers); }
/** * Action edit */ public function action_edit() { // Get id from param, if there is nothing then throw to 404 $segment = strtolower($this->request->param('key')); if (!$segment) { throw HTTP_Exception::factory(404); } // Make part and get content from file and direct set to part $part = new stdClass(); $part->segment = strtolower($segment); $part->content = Tpl::get_file($segment, $this->settings->front_tpl_dir . '/part'); // If there is nothing then throw to 404 if ($part->content === FALSE) { throw HTTP_Exception::factory(404); } // Set delete url $part->delete_url = URL::site("{$this->settings->backend_name}/parts/delete/{$part->segment}", 'http'); // Save present segment $oldname = $part->segment; // If there are post if ($this->request->post()) { // Try try { // Validation $validation = Validation::factory($this->request->post())->rule('segment', 'not_empty')->rule('segment', 'max_length', array(':value', '200'))->rule('segment', 'regex', array(':value', '/^[a-z0-9_]+$/'))->rule('segment', function (Validation $array, $field, $value, $present_segment) { $segments = array_keys((array) Cms_Helper::get_dirfiles('part', $this->settings->front_tpl_dir)); if (in_array($value, $segments)) { if ($value !== $present_segment) { $array->error($field, 'uniquely'); } } }, array(':validation', ':field', ':value', $part->segment))->label('segment', __('Segment')); // Check validation if (!$validation->check()) { throw new Validation_Exception($validation); } // new name $newname = $this->request->post('segment'); // Update file これが先じゃないとダメ Cms_Helper::set_file($oldname, "{$this->settings->front_tpl_dir}/part", $this->request->post('content')); // rename file Cms_Helper::rename_file($oldname, $newname, "{$this->settings->front_tpl_dir}/part"); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); // Redirect $this->redirect("{$this->settings->backend_name}/parts/edit/{$newname}"); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Add error notice Notice::add(Notice::ERROR); } } /** * View */ $content_file = Tpl::get_file('edit', $this->settings->back_tpl_dir . '/parts', $this->partials); $this->content = Tpl::factory($content_file)->set('part', $part); }
/** * Frontend */ public function action_frontend() { $settings = array('frontend_theme' => basename($this->settings->front_tpl_dir), 'lang' => $this->settings->lang, 'home_page' => $this->settings->home_page, 'site_details' => $this->settings->site_details); // If there are post if ($this->request->post()) { // Set post to email $settings['frontend_theme'] = Arr::get($this->request->post(), 'frontend_theme'); $settings['lang'] = Arr::get($this->request->post(), 'lang'); $settings['home_page'] = Arr::get($this->request->post(), 'home_page'); $settings['site_details'] = Arr::get($this->request->post(), 'site_details'); // Database transaction start Database::instance()->begin(); // Try try { $validation = Validation::factory($settings)->rule('frontend_theme', 'not_empty')->rule('frontend_theme', 'alpha_numeric')->rule('lang', 'not_empty')->rule('home_page', 'not_empty')->label('front_theme', 'Front theme')->label('lang', 'Lang')->label('home_page', 'Home page'); // Check validation if (!$validation->check()) { throw new Validation_Exception($validation); } // Build frontend data $frontend_data = array('front_tpl_dir' => 'contents/frontend/' . Arr::get($settings, 'frontend_theme'), 'lang' => Arr::get($settings, 'lang'), 'home_page' => Arr::get($settings, 'home_page'), 'site_details' => Arr::get($settings, 'site_details')); foreach ($frontend_data as $key => $value) { Tbl::factory('settings')->where('key', '=', $key)->get()->update(array('value' => $value)); } // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } /** * View */ // Get content file $content_file = Tpl::get_file('frontend', $this->settings->back_tpl_dir . '/settings', $this->partials); $this->content = Tpl::factory($content_file)->set('settings', $settings); }
/** * Action rule */ public function action_rule() { // Get id from param, if there is nothing then throw to 404 $id = $this->request->param('key'); if (!$id) { throw HTTP_Exception::factory(404); } // Get email, if there is nothing then throw to 404 $email = Tbl::factory('emails')->get($id); if (!$email) { throw HTTP_Exception::factory(404); } // Get content from file and direct set to email $email->edit_url = URL::site("{$this->settings->backend_name}/emails/edit/{$email->id}", 'http'); $email->confirm_url = URL::site("{$this->settings->backend_name}/emails/confirm/{$email->id}", 'http'); $email->receive_url = URL::site("{$this->settings->backend_name}/emails/receive/{$email->id}", 'http'); $email->rule_url = NULL; $create = array(); // If there are post if ($this->request->post('create')) { // Build data $create['email_id'] = $email->id; $create['field'] = $this->request->post('create_field'); $create['callback'] = $this->request->post('create_callback'); $create['param'] = $this->request->post('create_param'); $create['label'] = $this->request->post('create_label'); // Database transaction start Database::instance()->begin(); // Try try { // Create Tbl::factory('email_rules')->create($create); // Database commit Database::instance()->commit(); // Clear create $create['field'] = NULL; $create['callback'] = NULL; $create['param'] = NULL; $create['label'] = NULL; // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'create_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'create_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } // Get email rules $rules = Tbl::factory('email_rules')->where('email_id', '=', $email->id)->read()->as_array(); foreach ($rules as $rule) { $rule->delete_url = URL::site("{$this->settings->backend_name}/emails/rule_delete/{$email->id}_{$rule->id}", 'http'); } // If there are post update if ($this->request->post('update')) { $post = $this->request->post(); // Set post to tag foreach ($rules as $rule) { $rule->field = $post['field'][$rule->id]; $rule->callback = $post['callback'][$rule->id]; $rule->param = $post['param'][$rule->id]; $rule->label = $post['label'][$rule->id]; } // Database transaction start Database::instance()->begin(); // Try try { // Update foreach ($rules as $rule) { Tbl::factory('email_rules')->get($rule->id)->update(array('field' => $post['field'][$rule->id], 'callback' => $post['callback'][$rule->id], 'param' => $post['param'][$rule->id], 'label' => $post['label'][$rule->id])); } // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_success'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } /** * View */ $this->partials['local_menu'] = Tpl::get_file('local_menu', $this->settings->back_tpl_dir); $content_file = Tpl::get_file('rule', $this->settings->back_tpl_dir . '/emails', $this->partials); $this->content = Tpl::factory($content_file)->set('local_menus', $this->local_menus)->set('email', $email)->set('rules', $rules)->set('create', $create); }
/** * Action index */ public function action_index() { /* * Get order */ $string = Arr::get($this->request->query(), 'string', ''); $and_or = Arr::get($this->request->query(), 'and_or', 'and'); $divisions = Arr::get($this->request->query(), 'divisions', array()); $categories = Arr::get($this->request->query(), 'categories', array()); $tags = Arr::get($this->request->query(), 'tags', array()); $order_column = Arr::get($this->request->query(), 'order_column', 'id'); $order_direction = Arr::get($this->request->query(), 'order_direction', 'ASC'); $get = array('string' => $string, 'and_or' => $and_or, 'divisions' => $divisions, 'categories' => $categories, 'tags' => $tags, 'order_column' => $order_column, 'order_direction' => $order_direction); /* * Get lists */ $division_list = Tbl::factory('divisions')->read()->as_array(); $category_list = Tbl::factory('categories')->read()->as_array(); $tag_list = Tbl::factory('tags')->read()->as_array(); /* * Build columns */ // <editor-fold defaultstate="collapsed" desc="Build columns"> $columns = array('id' => array('name' => 'id', 'order_column' => 'id', 'order_direction' => 'ASC'), 'title' => array('name' => 'title', 'order_column' => 'title', 'order_direction' => 'ASC'), 'segment' => array('name' => 'segment', 'order_column' => 'segment', 'order_direction' => 'ASC'), 'division' => array('name' => 'division', 'order_column' => 'division_name', 'order_direction' => 'ASC'), 'username' => array('name' => 'username', 'order_column' => 'username', 'order_direction' => 'ASC'), 'issued' => array('name' => 'issued', 'order_column' => 'issued', 'order_direction' => 'ASC'), 'created' => array('name' => 'created', 'order_column' => 'created', 'order_direction' => 'ASC'), 'order' => array('name' => 'order', 'order_column' => 'order', 'order_direction' => 'ASC'), 'activate' => array('name' => 'activate', 'order_column' => 'is_active', 'order_direction' => 'ASC')); foreach ($columns as &$column) { if (isset($column['order_column'])) { if ($column['order_column'] == $order_column) { $column['current'] = TRUE; if ($order_direction == 'ASC') { $column['order_direction'] = 'DESC'; $column['current_asc'] = TRUE; } else { $column['order_direction'] = 'ASC'; $column['current_desc'] = TRUE; } } $column['url'] = URL::base(TRUE) . Request::current()->uri() . URL::query(array('order_column' => $column['order_column'], 'order_direction' => $column['order_direction']), TRUE); } } // </editor-fold> /* * Search items */ // <editor-fold defaultstate="collapsed" desc="Get items"> $sql = DB::select('items.id', 'items.segment')->from('items')->select('items.*')->select('users.username')->select(array('divisions.segment', 'division_segment'))->select(array('divisions.name', 'division_name'))->join('users', 'LEFT')->on('items.user_id', '=', 'users.id')->join('divisions')->on('items.division_id', '=', 'divisions.id')->join('items_categories', 'LEFT')->on('items.id', '=', 'items_categories.item_id')->join('categories', 'LEFT')->on('items_categories.category_id', '=', 'categories.id')->join('items_tags', 'LEFT')->on('items.id', '=', 'items_tags.item_id')->join('tags', 'LEFT')->on('items_tags.tag_id', '=', 'tags.id'); // authority is edit if ($this->logged_in_user->role == 'edit') { $sql->where('users.id', '=', $this->logged_in_user->id); } // Divisionsがある場合 if ($divisions) { $sql->where_open(); foreach ($divisions as $division) { $sql->or_where('divisions.segment', '=', $division); } $sql->where_close(); } // Categoriesがある場合 if ($categories) { $sql->where_open(); foreach ($categories as $category) { $sql->or_where('categories.segment', '=', $category); } $sql->where_close(); } // Tagsがある場合 if ($tags) { $sql->where_open(); foreach ($tags as $tag) { $sql->or_where('tags.segment', '=', $tag); } $sql->where_close(); } // string タブスペースなんかを半角に置き換えてexplodeで分ける if ($string) { $strings = array_filter(explode(' ', preg_replace(array('/\\s+/', '/,/', '/、/'), array(' ', ' ', ' '), mb_convert_kana($string, "s")))); // AND検索のとき if ($and_or == 'and') { $sql->where_open(); foreach ($strings as $string) { $sql->and_where(DB::expr("concat(ifnull(items.segment, ''), ' ', ifnull(items.title, ''), ' ', ifnull(items.catch, ''), ' ', ifnull(items.keywords, ''), ' ', ifnull(items.description, ''), ' ', ifnull(items.summary, ''))"), 'like', "%{$string}%"); } $sql->where_close(); } else { $sql->where_open(); foreach ($strings as $string) { $sql->or_where(DB::expr("concat(items.segment, ' ', items.title, ' ', items.catch, ' ', items.keywords, ' ', items.description, ' ', items.summary)"), 'like', "%{$string}%"); } $sql->where_close(); } } $all_items = $sql->group_by('items.id')->order_by($order_column, $order_direction)->as_object()->execute()->as_array('segment'); // Pagenate $pagenate = Pgn::factory(array('total_items' => count($all_items), 'items_per_page' => $this->settings->pagenate_items_per_page_for_items, 'follow' => $this->settings->pagenate_items_follow_for_items)); // Paginated items $items = array_slice($all_items, $pagenate->offset, $pagenate->items_per_page); foreach ($items as $item) { // Get division $division = Tbl::factory('divisions')->where('id', '=', $item->division_id)->read(1); // Get main image $item->main_image = Tbl::factory('images')->where('id', '=', $item->image_id)->read(1); if ($item->main_image) { $item->main_image->path = URL::site("imagefly", 'http') . '/item/' . $division->segment . '/' . $item->segment . '/'; $item->main_image->file = '/' . $item->main_image->segment . $item->main_image->ext; } // Get categories $item->categories = Tbl::factory('categories')->select('categories.*')->join('items_categories')->on('categories.id', '=', 'items_categories.category_id')->where('items_categories.item_id', '=', $item->id)->read()->as_array(); // Get received comments $item->received_commnets_count = count(Tbl::factory('received_comments')->where('item_id', '=', $item->id)->read()->as_array(NULL, 'id')); // Set to item $item->issued = $item->issued ? Date::formatted_time($item->issued, 'Y-n-j h:i') : $item->issued; $item->created = $item->created ? Date::formatted_time($item->created, 'Y-n-j h:i') : $item->created; $item->summary = $item->summary; $item->edit_url = URL::site("{$this->settings->backend_name}/items/{$item->division_segment}/edit/{$item->id}", 'http'); } // </editor-fold> /** * View */ // <editor-fold defaultstate="collapsed" desc="View"> $this->partials['pagenate'] = Tpl::get_file('pagenate', $this->settings->back_tpl_dir); $content_file = Tpl::get_file('index', $this->settings->back_tpl_dir . '/item_search', $this->partials); $this->content = Tpl::factory($content_file)->set('columns', $columns)->set('division_list', $division_list)->set('category_list', $category_list)->set('tag_list', $tag_list)->set('items', $items)->set('pagenate', $pagenate)->set('get', $get); // </editor-fold> }
/** * Action detail */ public function action_detail() { // Get content from file and direct set to detail $detail = new stdClass(); $detail->content = Tpl::get_file('detail', $this->settings->front_tpl_dir . '/author'); // If there are post if ($this->request->post()) { // Set post to author $detail->content = $this->request->post('content'); // Database transaction start Database::instance()->begin(); // Try try { // Update file Cms_Helper::set_file('detail', $this->settings->front_tpl_dir . '/author', $this->request->post('content')); // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } // usable details $usable_details = Tbl::factory('details')->read()->as_array('segment'); /** * View */ $content_file = Tpl::get_file('detail', $this->settings->back_tpl_dir . '/author', $this->partials); $this->content = Tpl::factory($content_file)->set('usable_details', $usable_details)->set('detail', $detail); }
/** * Action index */ public function action_index() { // Get order $query = $this->request->query(); $order_column = Arr::get($query, 'order_column', 'created'); $order_direction = Arr::get($query, 'order_direction', 'DESC'); /* * Build columns */ // <editor-fold defaultstate="collapsed" desc="uild columns"> $columns = array(array('name' => 'id', 'order_column' => 'id', 'order_direction' => 'ASC'), array('name' => 'email segment', 'order_column' => 'email_segment', 'order_direction' => 'ASC'), array('name' => 'created', 'order_column' => 'created', 'order_direction' => 'ASC')); foreach ($columns as &$column) { if (isset($column['order_column'])) { if ($column['order_column'] == $order_column) { $column['current'] = TRUE; if ($order_direction == 'ASC') { $column['order_direction'] = 'DESC'; $column['current_asc'] = TRUE; } else { $column['order_direction'] = 'ASC'; $column['current_desc'] = TRUE; } } $column['url'] = URL::base(TRUE) . Request::current()->uri() . URL::query(array('order_column' => $column['order_column'], 'order_direction' => $column['order_direction']), FALSE); } } // </editor-fold> /* * If delete */ // <editor-fold defaultstate="collapsed" desc="If delete"> if ($this->request->post('delete')) { // Database transaction start Database::instance()->begin(); // Try try { // Get delete received email ids $delete_received_email_ids = Arr::get($this->request->post(), 'delete_received_email_id', array()); // Iterate and chack and delete foreach ($delete_received_email_ids as $delete_received_email_id) { // Get received email $received_email = Tbl::factory('received_emails')->get($delete_received_email_id); // Delete $received_email->delete(); } // Database commit Database::instance()->commit(); // Add success notice if ($delete_received_email_ids) { Notice::add(Notice::SUCCESS, Kohana::message('general', 'delete_success')); } else { Notice::add(Notice::SUCCESS, Kohana::message('general', 'no_delete'), array(':text' => 'emil')); } } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Warning_Exception $e) { // Database rollback Database::instance()->rollback(); // Add Notice::add(Notice::WARNING, $e->getMessage()); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage() . $e->getFile() . $e->getLine()); } } // </editor-fold> /* * Get received emails */ // <editor-fold defaultstate="collapsed" desc="Get received emails"> $all_received_emails = Tbl::factory('received_emails')->order_by($order_column, $order_direction)->read()->as_array(); $pagenate = Pgn::factory(array('total_items' => count($all_received_emails), 'items_per_page' => $this->settings->pagenate_items_per_page_for_received_emails, 'follow' => $this->settings->pagenate_items_follow_for_received_emails)); // Paginated items $received_emails = array_slice($all_received_emails, $pagenate->offset, $pagenate->items_per_page); foreach ($received_emails as $received_email) { $received_email->objects = array(); $json = json_decode($received_email->json); foreach ($json as $key => $value) { $received_email->objects[] = array('key' => str_replace('_', ' ', $key), 'value' => $value); } $email_name = Tbl::factory('emails')->select('name')->where('segment', '=', $received_email->email_segment)->read(TRUE)->name; $received_email->email_name = $email_name; $received_email->created = Date::formatted_time($received_email->created, 'Y-n-j h:i'); $received_email->delete_url = URL::site("{$this->settings->backend_name}/received_emails/delete/{$received_email->id}", 'http'); } // </editor-fold> /** * View */ // <editor-fold defaultstate="collapsed" desc="View"> $this->partials['pagenate'] = Tpl::get_file('pagenate', $this->settings->back_tpl_dir); $content_file = Tpl::get_file('index', $this->settings->back_tpl_dir . '/received_emails', $this->partials); $this->content = Tpl::factory($content_file)->set('columns', $columns)->set('received_emails', $received_emails)->set('pagenate', $pagenate)->set('post', $this->request->post()); // </editor-fold> }
/** * Action result */ public function action_result() { // Get result from file and direct set to search $result = new stdClass(); $result->content = Tpl::get_file('result', $this->settings->front_tpl_dir . '/search'); // If there are post if ($this->request->post()) { // Set post to author $result->content = $this->request->post('content'); // Database transaction start Database::instance()->begin(); // Try try { // Update file Cms_Helper::set_file("result", $this->settings->front_tpl_dir . '/search', $this->request->post('content')); // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('general', 'update_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } /** * View */ $content_file = Tpl::get_file('result', $this->settings->back_tpl_dir . '/search', $this->partials); $this->content = Tpl::factory($content_file)->set('result', $result); }
/** * Send email * * @return object * post * success * invalid * exception * errors * * <input type="hidden" name="send_email_segment" value="[emailsのsegment]"> * <button type="submit" name="send_email[固定]" value="1">send</button> * OR * <button type="submit" name="send_email[固定]" value="[emailsのsegment]">send</button> */ public static function send_email($post) { /* * Check onetime ticket */ // <editor-fold defaultstate="collapsed" desc="Check onetime ticket"> // $session_ticket = Session::instance()->get_once('ticket'); // $post_ticket = Arr::get($post, 'ticket'); // // if (!$session_ticket OR ! $post_ticket OR $session_ticket !== $post_ticket) // { // HTTP::redirect(Request::current()->referrer()); // } // </editor-fold> // // Get settings $settings = Cms_Helper::settings(); // post filter メールに含めるタグをフィルター $post = self::post_filter($post, $settings->send_email_allowable_tags); // Build result $result = new stdClass(); $result->post = $post; $result->success = FALSE; $result->invalid = FALSE; $result->exception = array(); $result->errors = array(); // Get email $segment = Arr::get($post, 'send_email_segment', Arr::get($post, 'send_email')); $email = Tbl::factory('emails')->where('segment', '=', $segment)->read(1); // Try try { // If there is not email if (!$email) { throw new Kohana_Exception('there is not :send_email in mails.', array(':send_email' => $post['send_email'])); } // Get rules $rules = Tbl::factory('email_rules')->where('email_id', '=', $email->id)->read()->as_array(); /* * validation */ // <editor-fold defaultstate="collapsed" desc="validation"> $validation = Validation::factory($post); // Iterate post set rule and label foreach ($rules as $rule) { // if param is null or 0 or '' if (!$rule->param) { $rule->param = NULL; } else { $rule->param = explode(',', $rule->param); foreach ($rule->param as &$param) { $param = trim($param); } } $validation->rule($rule->field, $rule->callback, $rule->param)->label($rule->field, __($rule->label)); } // If validation check is false if (!$validation->check()) { throw new Validation_Exception($validation); } // </editor-fold> /* * Send Receive */ // <editor-fold defaultstate="collapsed" desc="Receive"> // Get receive subject ここでpostの値をpost名で使えるようにする。 $receive_subject_factory = Tpl::factory($email->receive_subject); foreach ($post as $key => $value) { $receive_subject_factory->set($key, $value); } $receive_subject = $receive_subject_factory->render(); // Get confirm message and clean return 改行は{{return}}でコントロールするためリターンを削除 $receive_message_string = preg_replace('/(\\r\\n|\\n|\\r)/', '', Tpl::get_file($email->segment, $settings->front_tpl_dir . '/email/receive')); // Get receive content ここでpostの値をpost名で使えるようにする。 $receive_content_factory = Tpl::factory($receive_message_string); foreach ($post as $key => $value) { $receive_content_factory->set($key, $value); } $receive_message = $receive_content_factory->render(); $user_name = Arr::get($post, $email->user_name_field) ?: $settings->send_email_defult_user_name; $user_address = Arr::get($post, $email->user_address_field) ?: $settings->send_email_defult_user_address; // Set time limit to 5 minutes set_time_limit(360); // Todo:: これをコメントアウトして下のコメント解除 //echo '<meta charset="utf-8">'."<pre>from: [$user_name] $user_address<br />subject: $receive_subject<br />$receive_message</pre>"; // Todo:: 送信チェック! $receive_email = Email::factory($receive_subject, $receive_message, $email->receive_email_type)->set_config(array('driver' => 'smtp', 'options' => array('hostname' => $settings->smtp_hostname, 'username' => $settings->smtp_username, 'password' => $settings->smtp_password, 'port' => $settings->smtp_port)))->to($email->admin_address, $email->admin_name)->from($user_address, $user_name); $receive_email->send(); // </editor-fold> /* * Send Confirm */ // <editor-fold defaultstate="collapsed" desc="Confirm"> if ($settings->send_email_confirm_is_on and Arr::get($post, $email->user_address_field)) { // Get confirm subject ここでpostの値をpost名で使えるようにする。 $confirm_subject_factory = Tpl::factory($email->confirm_subject); foreach ($post as $key => $value) { $confirm_subject_factory->set($key, $value); } $confirm_subject = $confirm_subject_factory->render(); // Get confirm message and clean return $confirm_message_string = preg_replace('/(\\r\\n|\\n|\\r)/', '', Tpl::get_file($email->segment, $settings->front_tpl_dir . '/email/confirm')); // Get confirm content ここでpostの値をpost名で使えるようにする。 $confirm_content_factory = Tpl::factory($confirm_message_string); foreach ($post as $key => $value) { $confirm_content_factory->set($key, $value); } $confirm_message = $confirm_content_factory->render(); // Set time limit to 5 minutes set_time_limit(360); // Todo:: これをコメントアウトして下のコメント解除 //echo '<meta charset="utf-8">'."<pre>from: [$email->admin_name] $email->admin_address<br />subject: $confirm_subject<br />$confirm_message</pre>"; // Todo:: 送信チェック! Email::factory($confirm_subject, $confirm_message, $email->confirm_email_type)->set_config(array('driver' => 'smtp', 'options' => array('hostname' => $settings->smtp_hostname, 'username' => $settings->smtp_username, 'password' => $settings->smtp_password, 'port' => $settings->smtp_port)))->to($user_address, $user_name)->from($email->admin_address, $email->admin_name)->send(); } // </editor-fold> /* * create received email */ // <editor-fold defaultstate="collapsed" desc="create received email"> // データベースにメール内容を入れる if ($settings->send_email_save_is_on) { Tbl::factory('received_emails')->create(array('email_segment' => $email->name, 'json' => json_encode($post), 'created' => Date::formatted_time())); } // </editor-fold> /** * Set result */ $result->post = array(); $result->success = TRUE; } catch (Validation_Exception $e) { // Result $result->invalid = TRUE; // Separate errors field and message $errors = $e->errors('validation'); foreach ($errors as $key => $value) { $result->errors[] = array('field' => $key, 'message' => $value); } } catch (Exception $e) { // Result $result->exception = TRUE; // errors $result->errors = array('field' => 'system error', 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()); //echo Debug::vars($result->errors); } Session::instance()->set('send_email_result', $result); }