コード例 #1
0
ファイル: Users.php プロジェクト: deraemons/deraemon-cms
 /**
  * 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 user, if there is nothing then throw to 404
     $user = Tbl::factory('users')->get($id);
     if (!$user) {
         throw HTTP_Exception::factory(404);
     }
     // Get user role
     $user->role = Tbl::factory('roles_users')->select('roles.*')->join('roles')->on('roles_users.role_id', '=', 'roles.id')->where('roles_users.user_id', '=', $user->id)->where('roles.name', '!=', 'login')->read('name');
     $user->avatar_delete_url = URL::site("{$this->settings->backend_name}/users/avatar_delete/{$user->id}", 'http');
     $user->delete_url = URL::site("{$this->settings->backend_name}/users/delete/{$user->id}", 'http');
     $user->avatar = new stdClass();
     $user->avatar->path = URL::site("imagefly", 'http') . '/user/' . $user->username . '/';
     $user->avatar->file = '/' . 'avatar' . $user->ext;
     if (!is_file('application/' . $this->settings->image_dir . '/user/' . $user->username . '/avatar' . $user->ext)) {
         $user->avatar = FALSE;
     }
     // Get roles ラジオボタンのため
     $roles = Tbl::factory('roles')->where('roles.name', '!=', 'login')->read()->as_array();
     // Save old file
     $oldname = $user->username;
     // Build post
     $post = array('username' => $user->username, 'email' => $user->email, 'role' => $user->role, 'is_block' => $user->is_block ?: 0);
     // If there are post
     if ($this->request->post()) {
         // Database transaction start
         Database::instance()->begin();
         // Try
         try {
             // Get roles users id
             $roles_users_id = Tbl::factory('roles_users')->select('roles_users.*')->join('roles')->on('roles_users.role_id', '=', 'roles.id')->where('roles_users.user_id', '=', $user->id)->where('roles.name', '!=', 'login')->read('id');
             // if there is roles users id then delete 一回消してあとで入れなおす
             if ($roles_users_id) {
                 Tbl::factory('roles_users')->where('id', '=', $roles_users_id)->get()->delete();
             }
             // Set post
             $post['username'] = $this->request->post('username');
             $post['email'] = $this->request->post('email');
             $post['role'] = $this->request->post('role');
             $post['is_block'] = $this->request->post('is_block') ?: 0;
             // Build data
             $data = array('username' => $post['username'], 'email' => $post['email'], 'is_block' => $post['is_block']);
             // If there is password
             if ($this->request->post('password')) {
                 $data['password'] = $this->request->post('password');
             }
             /*
              * If there is not avatar アバターがない時
              */
             if (!Upload::not_empty($_FILES['avatar'])) {
                 // Update
                 $user = Tbl::factory('users')->get($user->id)->update($data)->add_roles($post['role']);
                 // New name
                 $newname = $user->username;
                 // Rename image user dir
                 Cms_Helper::rename_dir($oldname, $newname, $this->settings->image_dir . '/user');
             } else {
                 // Set post
                 $data['avatar'] = $_FILES['avatar'];
                 // Get image type
                 $data['ext'] = NULL;
                 switch ($data['avatar']['type']) {
                     case 'image/jpeg':
                         $data['ext'] = '.jpg';
                         break;
                     case 'image/png':
                         $data['ext'] = '.png';
                         break;
                     case 'image/gif':
                         $data['ext'] = '.gif';
                         break;
                     default:
                         $data['ext'] = NULL;
                         break;
                 }
                 // Update
                 $user = Tbl::factory('users')->get($user->id)->update($data, 'validate_with_avatar')->add_roles($post['role']);
                 // New name
                 $newname = $user->username;
                 // Rename image user dir
                 Cms_Helper::rename_dir($oldname, $newname, $this->settings->image_dir . '/user');
                 // Image division directory // イメージを入れるディレクトリ
                 $dir_path = 'application/' . $this->settings->image_dir . '/user/' . $user->username . '/';
                 // Upload image イメージをアップロード
                 $filename = Upload::save($data['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);
                 }
             }
             // reload
             $user->role = Tbl::factory('roles_users')->select('roles.*')->join('roles')->on('roles_users.role_id', '=', 'roles.id')->where('roles_users.user_id', '=', $user->id)->where('roles.name', '!=', 'login')->read('name');
             $user->avatar_delete_url = URL::site("{$this->settings->backend_name}/users/avatar_delete/{$user->id}", 'http');
             $user->delete_url = URL::site("{$this->settings->backend_name}/users/delete/{$user->id}", 'http');
             $user->avatar = new stdClass();
             $user->avatar->path = URL::site("imagefly", 'http') . '/user/' . $user->username . '/';
             $user->avatar->file = '/' . 'avatar' . $user->ext;
             // 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('edit', $this->settings->back_tpl_dir . '/users', $this->partials);
     $this->content = Tpl::factory($content_file)->set('user', $user)->set('roles', $roles)->set('post', $post);
 }
コード例 #2
0
ファイル: Items.php プロジェクト: deraemons/deraemon-cms
 /**
  * Action edit
  */
 public function action_edit()
 {
     /**
      * Get item etc
      */
     // <editor-fold defaultstate="collapsed" desc="Get item etc">
     // Get division
     $division = Tbl::factory('divisions')->where('id', '=', $this->item->division_id)->read(1);
     // Direct set to division
     $this->item->division_segment = $division->segment;
     $this->item->division_name = $division->name;
     $this->item->issued = $this->item->issued ? Date::formatted_time($this->item->issued, 'Y-n-j h:i') : $this->item->issued;
     $this->item->created = $this->item->created ? Date::formatted_time($this->item->created, 'Y-n-j h:i') : $this->item->created;
     $this->item->send_comment_is_on = $this->item->send_comment_is_on ?: 0;
     // Get content from file and direct set to $this->item
     $this->item->delete_url = URL::site("{$this->settings->backend_name}/items/{$division->segment}/delete/{$this->item->id}", 'http');
     // Save old file
     $oldname = $this->item->segment;
     // Get item category_ids
     $item_category_ids = Tbl::factory('items_categories')->where('item_id', '=', $this->item->id)->read()->as_array(NULL, 'category_id');
     $this->item->category_ids = implode(', ', $item_category_ids);
     // Get categories
     $categories = Tbl::factory('categories')->where('division_id', '=', $this->item->division_id)->read()->as_array();
     // Get item tag_ids
     $item_tag_ids = Tbl::factory('items_tags')->where('item_id', '=', $this->item->id)->read()->as_array(NULL, 'tag_id');
     $this->item->tag_ids = implode(', ', $item_tag_ids);
     // Get tags
     $tags = Tbl::factory('tags')->read()->as_array();
     // Get divisions
     $divisions = Tbl::factory('divisions')->read()->as_array();
     // Get parents
     $parents = Tbl::factory('items')->read()->as_array();
     // </editor-fold>
     /**
      * If update
      */
     // <editor-fold defaultstate="collapsed" desc="If update">
     if ($this->request->post('update')) {
         // Set post to item
         $this->item->segment = Arr::get($this->request->post(), 'segment');
         $this->item->title = Arr::get($this->request->post(), 'title');
         $this->item->catch = Arr::get($this->request->post(), 'catch');
         $this->item->keywords = Arr::get($this->request->post(), 'keywords');
         $this->item->description = Arr::get($this->request->post(), 'description');
         $this->item->summary = Arr::get($this->request->post(), 'summary');
         $this->item->order = Arr::get($this->request->post(), 'order');
         $this->item->is_active = Arr::get($this->request->post(), 'is_active', 0);
         $this->item->issued = Arr::get($this->request->post(), 'issued', $this->item->created);
         $this->item->category_ids = $this->request->post('category_id') ? implode(', ', $this->request->post('category_id')) : '[]';
         $this->item->tag_ids = $this->request->post('tag_id') ? implode(', ', $this->request->post('tag_id')) : '[]';
         $this->item->parent_id = Arr::get($this->request->post(), 'parent_id');
         $this->item->send_comment_is_on = Arr::get($this->request->post(), 'send_comment_is_on', 0);
         // Database transaction start
         Database::instance()->begin();
         // Try
         try {
             // Update item
             Tbl::factory('items')->get($this->item->id)->update(array('segment' => Arr::get($this->request->post(), 'segment'), 'title' => Arr::get($this->request->post(), 'title'), 'catch' => Arr::get($this->request->post(), 'catch'), 'keywords' => Arr::get($this->request->post(), 'keywords'), 'description' => Arr::get($this->request->post(), 'description'), 'summary' => Arr::get($this->request->post(), 'summary'), 'order' => Arr::get($this->request->post(), 'order'), 'is_active' => Arr::get($this->request->post(), 'is_active', 0), 'issued' => Arr::get($this->request->post(), 'issued', $this->item->created), 'parent_id' => Arr::get($this->request->post(), 'parent_id'), 'send_comment_is_on' => Arr::get($this->request->post(), 'send_comment_is_on', 0)));
             // Delete category カテゴリーをいったん削除
             $delete_category_ids = Tbl::factory('items_categories')->where('item_id', '=', $this->item->id)->read()->as_array(NULL, 'id');
             foreach ($delete_category_ids as $delete_category_id) {
                 Tbl::factory('items_categories')->get($delete_category_id)->delete();
             }
             // Create category 新たにカテゴリーをつける
             if ($this->request->post('category_id')) {
                 foreach ($this->request->post('category_id') as $category_id) {
                     // リレーションテーブルなので念のためカテゴリーが有るかチェック
                     $category_exist = (bool) Tbl::factory('categories')->where('id', '=', $category_id)->read('id');
                     // なかったらエラー
                     if (!$category_exist) {
                         throw new Kohana_Exception(Kohana::message('general', 'not_exist'), array(':text' => 'Category'));
                     }
                     // Create items_categories
                     Tbl::factory('items_categories')->create(array('item_id' => $this->item->id, 'category_id' => $category_id));
                 }
             }
             // Delete tag タグをいったん削除
             $delete_tag_ids = Tbl::factory('items_tags')->where('item_id', '=', $this->item->id)->read()->as_array(NULL, 'id');
             foreach ($delete_tag_ids as $delete_tag_id) {
                 Tbl::factory('items_tags')->get($delete_tag_id)->delete();
             }
             // Create tag 新たにタブをつける
             if ($this->request->post('tag_id')) {
                 foreach ($this->request->post('tag_id') as $tag_id) {
                     // リレーションテーブルなので念のためカテゴリーが有るかチェック
                     $tag_exist = (bool) Tbl::factory('tags')->where('id', '=', $tag_id)->read('id');
                     // なかったらエラー
                     if (!$tag_exist) {
                         throw new Kohana_Exception(Kohana::message('general', 'not_exist'), array(':text' => 'Tag'));
                     }
                     // Create items_tags
                     Tbl::factory('items_tags')->create(array('item_id' => $this->item->id, 'tag_id' => $tag_id));
                 }
             }
             // New file
             $newname = $this->item->segment;
             // rename file
             $rename_file_success = Cms_Helper::rename_file($oldname, $newname, $this->settings->item_dir . '/' . $division->segment);
             // images dir change name イメージディレクトリの名前変更
             if ($rename_file_success) {
                 Cms_Helper::rename_dir($oldname, $newname, $this->settings->image_dir . '/item/' . $division->segment);
             }
             // 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());
         }
     }
     // </editor-fold>
     /**
      * View
      */
     // <editor-fold defaultstate="collapsed" desc="View">
     $this->partials['local_menu'] = Tpl::get_file('local_menu', $this->settings->back_tpl_dir);
     $content_file = Tpl::get_file('edit', $this->settings->back_tpl_dir . '/items', $this->partials);
     $this->content = Tpl::factory($content_file)->set('item', $this->item)->set('divisions', $divisions)->set('categories', $categories)->set('tags', $tags)->set('parents', $parents);
     // </editor-fold>
 }
コード例 #3
0
ファイル: Divisions.php プロジェクト: deraemons/deraemon-cms
 /**
  * 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);
 }
コード例 #4
0
ファイル: Item.php プロジェクト: deraemons/deraemon-cms
 /**
  * Password
  *
  * @return object
  * 					post
  * 					success
  * 					failed
  * 					errors
  */
 public static function account($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>
     // Build result
     $result = new stdClass();
     $result->post = $post;
     $result->success = FALSE;
     $result->invalid = FALSE;
     $result->exception = FALSE;
     $result->errors = array();
     // Try
     try {
         // Save old file
         $oldname = Auth::instance()->get_user()->username;
         // Get settings
         $settings = Cms_Helper::settings();
         // $_FILESがなくて$postがabatar_deleteを持ってない時
         if (!isset($_FILES['avatar']) and !Arr::get($post, 'avatar_delete')) {
             // Update
             $user = Tbl::factory('users')->get(Auth::instance()->get_user()->id)->update($post);
             // New name
             $newname = $user->username;
             // Rename image user dir
             Cms_Helper::rename_dir($oldname, $newname, $settings->image_dir . '/user');
         } elseif (Upload::not_empty($_FILES['avatar']) and !Arr::get($post, 'avatar_delete')) {
             // Set post
             $post['avatar'] = $_FILES['avatar'];
             // Get image type
             $post['ext'] = NULL;
             switch ($post['avatar']['type']) {
                 case 'image/jpeg':
                     $post['ext'] = '.jpg';
                     break;
                 case 'image/png':
                     $post['ext'] = '.png';
                     break;
                 case 'image/gif':
                     $post['ext'] = '.gif';
                     break;
                 default:
                     $post['ext'] = NULL;
                     break;
             }
             // Update
             $user = Tbl::factory('users')->get(Auth::instance()->get_user()->id)->update($post, 'validate_with_avatar');
             // New name
             $newname = $user->username;
             // Rename image user dir
             Cms_Helper::rename_dir($oldname, $newname, $settings->image_dir . '/user');
             // Image division directory // イメージを入れるディレクトリ
             $dir_path = 'application/' . $settings->image_dir . '/user/' . $user->username . '/';
             // Upload image イメージをアップロード
             $filename = Upload::save($post['avatar'], 'avatar' . $user->ext, $dir_path);
             // Build sizes
             $sizes = array('_v' => explode(',', str_replace(' ', '', $settings->image_v)), '_h' => explode(',', str_replace(' ', '', $settings->image_h)), '_s' => explode(',', str_replace(' ', '', $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);
             }
         } else {
             // Get user
             $user = Auth::instance()->get_user();
             // Get directory
             $dir_path = 'application/' . $settings->image_dir . '/user/' . $user->username . '/';
             // Delete image files
             if (is_file($dir_path . 'avatar' . $user->ext)) {
                 unlink($dir_path . 'avatar' . $user->ext);
                 unlink($dir_path . 'avatar' . '_v' . $user->ext);
                 unlink($dir_path . 'avatar' . '_h' . $user->ext);
                 unlink($dir_path . 'avatar' . '_s' . $user->ext);
             }
             // Set NULL to post ext
             $post['ext'] = NULL;
             // Update
             Tbl::factory('users')->get(Auth::instance()->get_user()->id)->update($post);
         }
         // Database commit
         Database::instance()->commit();
         Auth::instance()->logout();
         /**
          * Set result
          */
         $result->post = array();
         $result->success = TRUE;
         /**
          * redirect
          */
         Session::instance()->set('account_result', $result);
         // Todo:: oldとnewを比較、avatarだけならloginにいかないようにする?
         //HTTP::redirect(Request::current()->url('http'));
         HTTP::redirect(URL::site('author/login', 'http'));
     } catch (Validation_Exception $e) {
         // Database rollback
         Database::instance()->rollback();
         // 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 (HTTP_Exception_302 $e) {
         HTTP::redirect($e->location());
     } 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());
         //echo Debug::vars($result->errors);
     }
     Session::instance()->set('account_result', $result);
 }