* @link https://TheTempusProject.com * @license https://opensource.org/licenses/MIT [MIT LICENSE] */ namespace TheTempusProject\Controllers; use TheTempusProject\Hermes\Functions\Redirect; use TheTempusProject\Bedrock\Functions\Check; use TheTempusProject\Bedrock\Functions\Input; use TheTempusProject\Bedrock\Functions\Session; use TheTempusProject\Houdini\Classes\Issues; use TheTempusProject\Houdini\Classes\Views; use TheTempusProject\Classes\Controller; use TheTempusProject\Classes\Forms; use TheTempusProject\Models\Bookmarks as Bookmark; use TheTempusProject\Models\Folders; use TheTempusProject\TheTempusProject as App; use TheTempusProject\Houdini\Classes\Components; use TheTempusProject\Houdini\Classes\Forms as HoudiniForms; use TheTempusProject\Houdini\Classes\Navigation; class Bookmarks extends Controller { protected static $bookmarks; protected static $folders; public function __construct() { parent::__construct(); if ( !App::$isLoggedIn ) { Session::flash( 'notice', 'You must be logged in to create or manage bookmarks.' ); return Redirect::home(); } self::$bookmarks = new Bookmark; self::$folders = new Folders; self::$title = 'Bookmarks - {SITENAME}'; self::$pageDescription = 'Add and save url bookmarks here.'; $folderTabs = Views::simpleView( 'bookmarks.nav.folderTabs' ); if ( stripos( Input::get('url'), 'bookmarks/bookmarks' ) !== false ) { $tabsView = Navigation::activePageSelect( $folderTabs, '/bookmarks/folders/', false, true ); $userFolderTabs = Views::simpleView('bookmarks.nav.userFolderTabs', self::$folders->simpleObjectByUser(true) ); $userFolderTabsView = Navigation::activePageSelect( $userFolderTabs, Input::get( 'url' ), false, true ); } else { $tabsView = Navigation::activePageSelect( $folderTabs, Input::get( 'url' ), false, true ); $userFolderTabsView = ''; } Components::set( 'userFolderTabs', $userFolderTabsView ); Views::raw( $tabsView ); } public function index() { $bookmarks = self::$bookmarks->noFolder(); $folders = self::$folders->byUser(); $panelArray = []; if ( !empty( $folders ) ) { foreach ( $folders as $folder ) { $panel = new \stdClass(); $folderObject = new \stdClass(); $folderObject->bookmarks = self::$bookmarks->byFolder( $folder->ID ); $folderObject->ID = $folder->ID; $folderObject->title = $folder->title; $folderObject->color = $folder->color; $folderObject->bookmarkListRows = Views::simpleView( 'bookmarks.components.bookmarkListRows', $folderObject->bookmarks ); $panel->panel = Views::simpleView( 'bookmarks.components.bookmarkListPanel', [$folderObject] ); $panelArray[] = $panel; } } Components::set( 'foldersList', Views::simpleView( 'bookmarks.folders.list', $folders ) ); Components::set( 'folderPanels', Views::simpleView( 'bookmarks.components.folderPanelList', $panelArray ) ); Components::set( 'bookmarksList', Views::simpleView( 'bookmarks.bookmarks.list', $bookmarks ) ); return Views::view( 'bookmarks.dash' ); } /** * Bookmarks */ public function bookmark( $id = 0 ) { $bookmark = self::$bookmarks->findById( $id ); if ( $bookmark == false ) { Session::flash( 'error', 'Bookmark not found.' ); return Redirect::to( 'bookmarks/index' ); } if ( $bookmark->createdBy != App::$activeUser->ID ) { Session::flash( 'error', 'You do not have permission to modify this bookmark.' ); return Redirect::to( 'bookmarks/index' ); } Navigation::setCrumbComponent( 'BookmarkBreadCrumbs', 'bookmarks/bookmark/' . $id ); return Views::view( 'bookmarks.bookmarks.view', $bookmark ); } public function bookmarks( $id = null ) { $folder = self::$folders->findById( $id ); if ( $folder == false ) { Session::flash( 'error', 'Folder not found.' ); return Redirect::to( 'bookmarks/index' ); } if ( $folder->createdBy != App::$activeUser->ID ) { Session::flash( 'error', 'You do not have permission to view this folder.' ); return Redirect::to( 'bookmarks/index' ); } Navigation::setCrumbComponent( 'BookmarkBreadCrumbs', 'bookmarks/bookmarks/' . $id ); $bookmarks = self::$bookmarks->noFolder(); $panelArray = []; $panel = new \stdClass(); $folderObject = new \stdClass(); $folderObject->bookmarks = self::$bookmarks->byFolder( $folder->ID ); $folderObject->ID = $folder->ID; $folderObject->title = $folder->title; $folderObject->color = $folder->color; $folderObject->bookmarkListRows = Views::simpleView( 'bookmarks.components.bookmarkListRows', $folderObject->bookmarks ); $panel->panel = Views::simpleView( 'bookmarks.components.bookmarkListPanel', [$folderObject] ); $panelArray[] = $panel; return Views::view( 'bookmarks.components.folderPanelList', $panelArray ); } public function createBookmark( $id = null ) { $folderID = Input::get('folder_id') ? Input::get('folder_id') : $id; $folderID = Input::post('folder_id') ? Input::post('folder_id') : $id; $folderSelect = HoudiniForms::getFormFieldHtml( 'folder_id', 'Folder', 'select', $folderID, self::$folders->simpleByUser() ); Components::set( 'folderSelect', $folderSelect ); if ( ! Input::exists() ) { return Views::view( 'bookmarks.bookmarks.create' ); } if ( ! Forms::check( 'createBookmark' ) ) { Issues::add( 'error', [ 'There was an error with your form.' => Check::userErrors() ] ); return Views::view( 'bookmarks.bookmarks.create' ); } $result = self::$bookmarks->create( Input::post('title'), Input::post('url'), $folderID, Input::post('description'), Input::post('color'), Input::post('privacy'), ); if ( ! $result ) { Issues::add( 'error', [ 'There was an error creating your bookmark.' => Check::userErrors() ] ); return Views::view( 'bookmarks.bookmarks.create' ); } self::$bookmarks->refreshInfo( $result ); Session::flash( 'success', 'Your Bookmark has been created.' ); Redirect::to( 'bookmarks/bookmarks/'. $folderID ); } public function editBookmark( $id = null ) { $folderID = Input::exists('folder_id') ? Input::post('folder_id') : ''; $bookmark = self::$bookmarks->findById( $id ); if ( $bookmark == false ) { Issues::add( 'error', 'Bookmark not found.' ); return Redirect::to( 'bookmarks/index' ); } if ( $bookmark->createdBy != App::$activeUser->ID ) { Issues::add( 'error', 'You do not have permission to modify this bookmark.' ); return Redirect::to( 'bookmarks/index' ); } if ( empty( $folderID ) ) { $folderID = $bookmark->folderID; } $folderSelect = HoudiniForms::getFormFieldHtml( 'folder_id', 'Folder', 'select', $folderID, self::$folders->simpleByUser() ); Components::set( 'folderSelect', $folderSelect ); Components::set( 'color', $bookmark->color ); if ( ! Input::exists( 'submit' ) ) { return Views::view( 'bookmarks.bookmarks.edit', $bookmark ); } if ( ! Forms::check( 'editBookmark' ) ) { Issues::add( 'error', [ 'There was an error updating your bookmark.' => Check::userErrors() ] ); return Views::view( 'bookmarks.bookmarks.edit', $bookmark ); } $result = self::$bookmarks->update( $id, Input::post('title'), Input::post('url'), $folderID, Input::post('description'), Input::post('color'), Input::post('privacy'), ); if ( ! $result ) { Issues::add( 'error', [ 'There was an error updating your bookmark.' => Check::userErrors() ] ); return Views::view( 'bookmarks.bookmarks.edit', $bookmark ); } Session::flash( 'success', 'Your Bookmark has been updated.' ); Redirect::to( 'bookmarks/folders/'. $bookmark->folderID ); } public function deleteBookmark( $id = null ) { $bookmark = self::$bookmarks->findById( $id ); if ( $bookmark == false ) { Issues::add( 'error', 'Bookmark not found.' ); return $this->index(); } if ( $bookmark->createdBy != App::$activeUser->ID ) { Issues::add( 'error', 'You do not have permission to modify this bookmark.' ); return $this->index(); } $result = self::$bookmarks->delete( $id ); if ( !$result ) { Session::flash( 'error', 'There was an error deleting the bookmark(s)' ); } else { Session::flash( 'success', 'Bookmark deleted' ); } Redirect::to( 'bookmarks/folders/'. $bookmark->folderID ); } /** * Folders */ public function folders( $id = null) { $folder = self::$folders->findById( $id ); if ( $folder == false ) { $folders = self::$folders->byUser(); return Views::view( 'bookmarks.folders.list', $folders ); } if ( $folder->createdBy != App::$activeUser->ID ) { Session::flash( 'error', 'You do not have permission to view this folder.' ); return Redirect::to( 'bookmarks/index' ); } Navigation::setCrumbComponent( 'BookmarkBreadCrumbs', 'bookmarks/folders/' . $id ); return Views::view( 'bookmarks.folders.view', $folder ); } public function createFolder( $id = 0 ) { $folderID = Input::exists('folder_id') ? Input::post('folder_id') : $id; $folders = self::$folders->simpleByUser(); if ( ! empty( $folders ) ) { $folderSelect = HoudiniForms::getFormFieldHtml( 'folder_id', 'Folder', 'select', $folderID, $folders ); } else { $folderSelect = ''; } Components::set( 'folderSelect', $folderSelect ); if ( ! Input::exists() ) { return Views::view( 'bookmarks.folders.create' ); } if ( ! Forms::check( 'createFolder' ) ) { Issues::add( 'error', [ 'There was an error creating your folder.' => Check::userErrors() ] ); return Views::view( 'bookmarks.folders.create' ); } $folder = self::$folders->create( Input::post('title'), $folderID, Input::post('description'), Input::post('color'), Input::post('privacy') ); if ( ! $folder ) { return Views::view( 'bookmarks.folders.create' ); } Session::flash( 'success', 'Your Folder has been created.' ); Redirect::to( 'bookmarks/folders' ); } public function editFolder( $id = null ) { $folder = self::$folders->findById( $id ); if ( $folder == false ) { Issues::add( 'error', 'Folder not found.' ); return $this->index(); } if ( $folder->createdBy != App::$activeUser->ID ) { Issues::add( 'error', 'You do not have permission to modify this folder.' ); return $this->index(); } $folderID = ( false === Input::exists('folder_id') ) ? $folder->ID : Input::post('folder_id'); $folderSelect = HoudiniForms::getFormFieldHtml( 'folder_id', 'Folder', 'select', $folderID, self::$folders->simpleByUser() ); Components::set( 'folderSelect', $folderSelect ); Components::set( 'color', $folder->color ); if ( ! Input::exists( 'submit' ) ) { return Views::view( 'bookmarks.folders.edit', $folder ); } if ( !Forms::check( 'editFolder' ) ) { Issues::add( 'error', [ 'There was an error editing your folder.' => Check::userErrors() ] ); return Views::view( 'bookmarks.folders.edit', $folder ); } $result = self::$folders->update( $id, Input::post('title'), $folderID, Input::post('description'), Input::post('color'), Input::post('privacy') ); if ( !$result ) { Issues::add( 'error', [ 'There was an error updating your folder.' => Check::userErrors() ] ); return Views::view( 'bookmarks.folders.edit', $folder ); } Session::flash( 'success', 'Your Folder has been updated.' ); Redirect::to( 'bookmarks/folders/'. $folder->ID ); } public function deleteFolder( $id = null ) { $folder = self::$folders->findById( $id ); if ( $folder == false ) { Issues::add( 'error', 'Folder not found.' ); return $this->index(); } if ( $folder->createdBy != App::$activeUser->ID ) { Issues::add( 'error', 'You do not have permission to modify this folder.' ); return $this->index(); } $results = self::$bookmarks->deleteByFolder( $id ); $result = self::$folders->delete( $id ); if ( !$result ) { Session::flash( 'error', 'There was an error deleting the folder(s)' ); } else { Session::flash( 'success', 'Folder deleted' ); } Redirect::to( 'bookmarks/folders' ); } /** * Functionality */ public function hideBookmark( $id = null ) { $bookmark = self::$bookmarks->findById( $id ); if ( $bookmark == false ) { Session::flash( 'error', 'Bookmark not found.' ); return Redirect::to( 'bookmarks/index' ); } if ( $bookmark->createdBy != App::$activeUser->ID ) { Session::flash( 'error', 'You do not have permission to modify this bookmark.' ); return Redirect::to( 'bookmarks/index' ); } self::$bookmarks->hide( $id ); Session::flash( 'success', 'Bookmark hidden.' ); return Redirect::to( 'bookmarks/index' ); } public function archiveBookmark( $id = null ) { $bookmark = self::$bookmarks->findById( $id ); if ( $bookmark == false ) { Session::flash( 'error', 'Bookmark not found.' ); return Redirect::to( 'bookmarks/index' ); } if ( $bookmark->createdBy != App::$activeUser->ID ) { Session::flash( 'error', 'You do not have permission to modify this bookmark.' ); return Redirect::to( 'bookmarks/index' ); } self::$bookmarks->archive( $id ); Session::flash( 'success', 'Bookmark archived.' ); return Redirect::to( 'bookmarks/index' ); } public function showBookmark( $id = null ) { $bookmark = self::$bookmarks->findById( $id ); if ( $bookmark == false ) { Session::flash( 'error', 'Bookmark not found.' ); return Redirect::to( 'bookmarks/index' ); } if ( $bookmark->createdBy != App::$activeUser->ID ) { Session::flash( 'error', 'You do not have permission to modify this bookmark.' ); return Redirect::to( 'bookmarks/index' ); } self::$bookmarks->show( $id ); Session::flash( 'success', 'Bookmark shown.' ); return Redirect::to( 'bookmarks/index' ); } public function unarchiveBookmark( $id = null ) { $bookmark = self::$bookmarks->findById( $id ); if ( $bookmark == false ) { Session::flash( 'error', 'Bookmark not found.' ); return Redirect::to( 'bookmarks/index' ); } if ( $bookmark->createdBy != App::$activeUser->ID ) { Session::flash( 'error', 'You do not have permission to modify this bookmark.' ); return Redirect::to( 'bookmarks/index' ); } self::$bookmarks->unarchive( $id ); Session::flash( 'success', 'Bookmark un-archived.' ); return Redirect::to( 'bookmarks/index' ); } public function refreshBookmark( $id = null ) { $bookmark = self::$bookmarks->findById( $id ); if ( $bookmark == false ) { Session::flash( 'error', 'Bookmark not found.' ); return Redirect::to( 'bookmarks/index' ); } if ( $bookmark->createdBy != App::$activeUser->ID ) { Session::flash( 'error', 'You do not have permission to modify this bookmark.' ); return Redirect::to( 'bookmarks/index' ); } $info = self::$bookmarks->refreshInfo( $id ); if ( false == $info ) { Session::flash( 'error', 'Issue refreshing your bookmark.' ); return Redirect::to( 'bookmarks/bookmark/' . $bookmark->ID ); } Session::flash( 'success', 'Bookmark data refreshed.' ); return Redirect::to( 'bookmarks/bookmark/' . $bookmark->ID ); } }