/** * Action index */ public function action_index() { // If there are post if ($this->request->post()) { // Database transaction start Database::instance()->begin(); // Try try { // Create $division = Tbl::factory('divisions')->create($this->request->post()); // Check items division directory and create items division directory // これはitemを入れるとこを作る Cms_Helper::make_dir($division->segment, $this->settings->item_dir); // Check images division directory and create images division directory // これはimageを入れるとこを作る Cms_Helper::make_dir($division->segment, $this->settings->image_dir . '/item'); // Create division file これはディビジョンテンプレート Cms_Helper::set_file($division->segment, $this->settings->front_tpl_dir . '/division', '{{>shape_content}}'); // Database commit Database::instance()->commit(); // Clear post $this->request->post(array()); // 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 divisions $divisions = Tbl::factory('divisions')->select('divisions.*')->select(array('wrappers.segment', 'wrapper_segment'))->select(array('wrappers.name', 'wrapper_name'))->select(array('wrappers.content_type', 'wrapper_content_type'))->join('wrappers')->on('divisions.wrapper_id', '=', 'wrappers.id')->read()->as_array(); foreach ($divisions as $division) { $division->edit_url = URL::site("{$this->settings->backend_name}/divisions/edit/{$division->id}", 'http'); } // Get wrappers $wrappers = Tbl::factory('wrappers')->read()->as_array(); /** * View */ $content_file = Tpl::get_file('index', $this->settings->back_tpl_dir . '/divisions', $this->partials); $this->content = Tpl::factory($content_file)->set('divisions', $divisions)->set('wrappers', $wrappers)->set('post', $this->request->post()); }
/** * Actuion direct user * * http://.../.../[backend_name]/directuser?direct_key=[database direct_key] * g1072551 -> 876d93b12883451950f7577762279768fd8a38b6e197137cd43666298f3be4f5 */ public function action_directuser() { // if logged in if ($this->logged_in_user) { throw HTTP_Exception::factory(404); } // Get direct key from query string $direct_key = Cms_Helper::settings('direct_key'); // If key doesn't passed if ($this->request->query('direct_key') != $direct_key) { throw HTTP_Exception::factory(404); } if ($this->request->post()) { $data = array('username' => $this->request->post('username'), 'email' => $this->request->post('email'), 'password' => $this->request->post('password'), 'is_block' => 0); // Transaction start Database::instance()->begin(); // Try try { $direct = Tbl::factory('users')->create($data); $direct->add_roles('login')->add_roles('direct'); // Make user dir Cms_Helper::make_dir($direct->username, $this->settings->image_dir . '/user'); // Transaction commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('auth', 'directuser_success')); // Redirect $this->redirect(URL::site($this->settings->backend_name, 'http')); } catch (HTTP_Exception_302 $e) { $this->redirect($e->location()); } catch (Validation_Exception $e) { // Transaction rollback Database::instance()->rollback(); // Add validation notice Notice::add(Notice::VALIDATION, Kohana::message('auth', 'directuser_failed'), NULL, $e->errors('validation')); } catch (Exception $e) { // Transaction rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } /** * View */ // Get content $content_file = Tpl::get_file('directuser', $this->settings->back_tpl_dir . '/auth'); $this->content = Tpl::factory($content_file)->set('post', $this->request->post()); }
/** * Action index */ public function action_index() { /* * build column */ // <editor-fold defaultstate="collapsed" desc="column"> // Get order $query = $this->request->query(); $order_column = Arr::get($query, 'order_column', 'id'); $order_direction = Arr::get($query, 'order_direction', 'ASC'); // Build columns $columns = array(array('name' => 'id', 'order_column' => 'id', 'order_direction' => 'ASC'), array('name' => 'role', 'order_column' => 'role', 'order_direction' => 'ASC'), array('name' => 'username', 'order_column' => 'username', 'order_direction' => 'ASC'), array('name' => 'email', 'order_column' => 'email', 'order_direction' => 'ASC'), array('name' => 'is block', 'order_column' => 'is_block', 'order_direction' => 'ASC'), 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['username'] = $this->request->post('create_username'); $create['email'] = $this->request->post('create_email'); $create['password'] = $this->request->post('create_password'); $create['avatar'] = $_FILES['create_avatar']; $create['is_block'] = $this->request->post('create_is_block') ?: 0; // Database transaction start Database::instance()->begin(); // Try try { // If there is not avatar アバターがない時 if (!Upload::not_empty($create['avatar'])) { $user = Tbl::factory('users')->create($create)->add_roles('login'); // Create users_details $detail_ids = Tbl::factory('details')->read()->as_array(NULL, 'id'); foreach ($detail_ids as $detail_id) { Tbl::factory('users_details')->create(array('user_id' => $user->id, 'detail_id' => $detail_id, 'value' => NULL)); } // Make user dir Cms_Helper::make_dir($user->username, $this->settings->image_dir . '/user'); } else { // Get image type $create['ext'] = NULL; switch ($create['avatar']['type']) { case 'image/jpeg': $create['ext'] = '.jpg'; break; case 'image/png': $create['ext'] = '.png'; break; case 'image/gif': $create['ext'] = '.gif'; break; default: $create['ext'] = NULL; break; } // Create $user = Tbl::factory('users')->create($create, 'validate_with_avatar')->add_roles('login'); // Make user dir Cms_Helper::make_dir($user->username, $this->settings->image_dir . '/user'); // Image division directory // イメージを入れるディレクトリ $dir_path = 'application/' . $this->settings->image_dir . '/user/' . $user->username . '/'; // Upload image イメージをアップロード $filename = Upload::save($create['avatar'], 'avatar' . $user->ext, $dir_path); // Build sizes $sizes = array('_v' => explode(',', str_replace(' ', '', $this->settings->image_v)), '_h' => explode(',', str_replace(' ', '', $this->settings->image_h)), '_s' => explode(',', str_replace(' ', '', $this->settings->image_s))); // Resize image 他のサイズを作成 foreach ($sizes as $key => $value) { Image::factory($filename)->resize($value[0], $value[1], Image::INVERSE)->crop($value[0], $value[1])->save($dir_path . 'avatar' . $key . $user->ext); } } // Database commit Database::instance()->commit(); // Clear create $create['username'] = NULL; $create['email'] = NULL; $create['password'] = NULL; $create['thumb'] = NULL; $create['is_block'] = 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(), NULL, array($e->getFile(), $e->getLine())); } } // </editor-fold> /* * Get users */ // <editor-fold defaultstate="collapsed" desc="Get users"> // Get users $all_users = Tbl::factory('users')->read()->as_array(); foreach ($all_users as $all_user) { // Get user role $role = Tbl::factory('roles_users')->select('roles.*')->join('roles')->on('roles_users.role_id', '=', 'roles.id')->where('roles_users.user_id', '=', $all_user->id)->where('roles.name', '!=', 'login')->read('name'); $all_user->role = $role ?: 'login'; // Get avatar $all_user->avatar = new stdClass(); $all_user->avatar->path = URL::site("imagefly", 'http') . '/user/' . $all_user->username . '/'; $all_user->avatar->file = '/' . 'avatar' . $all_user->ext; if (!is_file('application/' . $this->settings->image_dir . '/user/' . $all_user->username . '/' . 'avatar' . $all_user->ext)) { $all_user->avatar = FALSE; } } // sort foreach ($all_users as $key => $value) { $key_id[$key] = $value->{$order_column}; } $sort = $order_direction == 'ASC' ? SORT_ASC : SORT_DESC; array_multisort($key_id, $sort, $all_users); /* * Pagenate */ // <editor-fold defaultstate="collapsed" desc="Pagenate"> $pagenate = Pgn::factory(array('total_items' => count($all_users), 'items_per_page' => $this->settings->pagenate_items_per_page_for_users, 'follow' => $this->settings->pagenate_items_follow_for_users)); // Paginated items $users = array_slice($all_users, $pagenate->offset, $pagenate->items_per_page); // </editor-fold> // add edit foreach ($users as $user) { $user->edit_url = URL::site("{$this->settings->backend_name}/users/edit/{$user->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 user foreach ($users as $user) { $user->is_block = isset($post['is_block'][$user->id]) ?: 0; } // Database transaction start Database::instance()->begin(); // Try try { // Update foreach ($users as $user) { Tbl::factory('users')->get($user->id)->update(array('is_block' => isset($post['is_block'][$user->id]) ?: 0)); } // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); // Redirect to wrapper edit $this->redirect(URL::site("{$this->settings->backend_name}/users", 'http') . URL::query()); } 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"> // local_menusの修正 $this->local_menus = array($this->local_menus['index']); $this->partials['pagenate'] = Tpl::get_file('pagenate', $this->settings->back_tpl_dir); $content_file = Tpl::get_file('index', $this->settings->back_tpl_dir . '/users', $this->partials); $this->content = Tpl::factory($content_file)->set('columns', $columns)->set('users', $users)->set('pagenate', $pagenate)->set('create', $create); // </editor-fold> }
/** * Action index */ public function action_index() { // Get id from param, if there is nothing then throw to 404 $division_segment = $this->request->param('division'); if (!$division_segment) { throw HTTP_Exception::factory(404); } $division = Tbl::factory('divisions')->where('segment', '=', $division_segment)->read(1); if (!$division) { throw HTTP_Exception::factory(404); } /* * 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'), 'title' => array('name' => 'title', 'order_column' => 'title', 'order_direction' => 'ASC'), 'segment' => array('name' => 'segment', 'order_column' => 'segment', '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'), 'send_comment_is_on' => array('name' => 'send_comment_is_on', 'order_column' => 'send_comment_is_on', '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 post create */ // <editor-fold defaultstate="collapsed" desc="If post create"> $create = array(); if ($this->request->post('create')) { // Build data $create['division_id'] = $division->id; $create['image_id'] = NULL; $create['user_id'] = $this->logged_in_user->id; $create['segment'] = $this->request->post('create_segment'); $create['title'] = $this->request->post('create_title'); $create['issued'] = $this->request->post('create_issued') ?: Date::formatted_time(); $create['created'] = Date::formatted_time(); $create['send_comment_is_on'] = $this->settings->send_comment_is_on_default; // Database transaction start Database::instance()->begin(); // Try try { // Create $item = Tbl::factory('items')->create($create); // Create items_fields $field_ids = Tbl::factory('fields')->where('division_id', '=', $item->division_id)->read()->as_array(NULL, 'id'); foreach ($field_ids as $field_id) { Tbl::factory('items_fields')->create(array('item_id' => $item->id, 'field_id' => $field_id, 'value' => NULL)); } // Create file Cms_Helper::set_file($item->segment, $this->settings->item_dir . '/' . $division->segment, 'item content'); // make image dir // images dirにitem segment名でディレクトリを作成 Cms_Helper::make_dir($item->segment, $this->settings->image_dir . '/item/' . $division->segment); // Database commit Database::instance()->commit(); // Clear create $create['segment'] = NULL; $create['title'] = NULL; $create['issued'] = 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); } } // </editor-fold> /* * Get items */ // <editor-fold defaultstate="collapsed" desc="Get items"> // authority is edit if ($this->logged_in_user->role == 'edit') { // Get all items $all_items = Tbl::factory('items')->select('items.*')->select('users.username')->join('users', 'LEFT')->on('items.user_id', '=', 'users.id')->where('division_id', '=', $division->id)->where('users.id', '=', $this->logged_in_user->id)->order_by($order_column, $order_direction)->read()->as_array(); } elseif ($this->logged_in_user->role == 'direct' or $this->logged_in_user->role == 'admin') { // Get all items $all_items = Tbl::factory('items')->select('items.*')->select('users.username')->join('users', 'LEFT')->on('items.user_id', '=', 'users.id')->where('division_id', '=', $division->id)->order_by($order_column, $order_direction)->read()->as_array(); } else { $all_items = array(); } // 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 = Text::auto_p($item->summary); $item->edit_url = URL::site("{$this->settings->backend_name}/items/{$division->segment}/edit/{$item->id}", 'http'); $item->delete_url = URL::site("{$this->settings->backend_name}/items/{$division->segment}/delete/{$item->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 item foreach ($items as $item) { $item->order = isset($post['order'][$item->id]) ? $post['order'][$item->id] : 0; $item->is_active = isset($post['is_active'][$item->id]) ? $post['is_active'][$item->id] : 0; $item->send_comment_is_on = isset($post['send_comment_is_on'][$item->id]) ? $post['send_comment_is_on'][$item->id] : 0; } // Database transaction start Database::instance()->begin(); // Try try { // Update foreach ($items as $item) { Tbl::factory('items')->get($item->id)->update(array('order' => isset($post['order'][$item->id]) ? $post['order'][$item->id] : 0, 'is_active' => isset($post['is_active'][$item->id]) ? $post['is_active'][$item->id] : 0, 'send_comment_is_on' => isset($post['send_comment_is_on'][$item->id]) ? $post['send_comment_is_on'][$item->id] : 0)); } // Database commit Database::instance()->commit(); // Add success notice Notice::add(Notice::SUCCESS, Kohana::message('general', 'update_success')); // Todo::1 取得しなおし? $this->redirect(URL::site("{$this->settings->backend_name}/items/{$division->segment}", '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_success'), NULL, $e->errors('validation')); } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Add error notice Notice::add(Notice::ERROR, $e->getMessage()); } } // </editor-fold> // local_menusの修正 $this->local_menus = array($this->local_menus['index']); /** * 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 . '/items', $this->partials); $this->content = Tpl::factory($content_file)->set('division', $division)->set('columns', $columns)->set('items', $items)->set('create', $create)->set('pagenate', $pagenate); // </editor-fold> }
/** * User activate * * @return object * query * success * invalid * exception */ public static function activate($get) { // Build result $result = new stdClass(); $result->query = $get; $result->success = FALSE; $result->invalid = FALSE; $result->exception = FALSE; $result->errors = array(); // Get user activate key $activate_key = Arr::get($get, 'activate_key'); // Get settings $settings = Cms_Helper::settings(); // Database transaction start Database::instance()->begin(); /** * Try */ try { // If user activate keyがないときはエラー if (!$activate_key) { throw new Kohana_Exception('user activate key is noting.'); } // ->query()なのでURLデコードいらない! // user active key 暗号解除 -> delimiterで分割 list($author_register_activate_access_key, $username, $email, $password) = explode($settings->author_register_activate_key_delimiter, Encrypt::instance()->decode($activate_key)); // If アクセスキーが違うときはエラー if ($author_register_activate_access_key !== $settings->author_register_activate_access_key) { throw new Kohana_Exception('user activate access key is noting.'); } // Create $user = Tbl::factory('users')->create(array('username' => $username, 'email' => $email, 'password' => $password, 'is_block' => $settings->author_register_default_is_block))->add_roles('login'); // Create users_details $detail_ids = Tbl::factory('details')->read()->as_array(NULL, 'id'); foreach ($detail_ids as $detail_id) { Tbl::factory('users_details')->create(array('user_id' => $user->id, 'detail_id' => $detail_id, 'value' => NULL)); } // Make user dir Cms_Helper::make_dir($user->username, $settings->image_dir . '/user'); //Cms_Helper::rename_dir($user->username, 'new', $settings->image_dir.'/user'); //Cms_Helper::delete_dir($user->username, $settings->image_dir.'/user', TRUE); // make dir はbackendも! /** * Set result */ $result->post = array(); $result->success = TRUE; // Database commit Database::instance()->commit(); } catch (Validation_Exception $e) { // Database rollback Database::instance()->rollback(); // Result $result->invalid = TRUE; } catch (Exception $e) { // Database rollback Database::instance()->rollback(); // Result $result->exception = TRUE; // errors //$result->errors = array( // 'field' => 'system error', // 'message' => $e->getMessage(), // 'file' => $e->getFile(), // 'line' => $e->getLine(), //); } // result set to session Session::instance()->set('activate_result', $result); }