From 8bccd2b893f584d0f584a60544c4a123ec6a7377 Mon Sep 17 00:00:00 2001 From: Greg Nagy Date: Wed, 28 Jul 2021 10:50:33 +0200 Subject: [PATCH 1/9] cleanup: remove all unnecessary flavours Decision was made in Nordcloud that all flavours should be removed and only python (django, flask) should be supported from this point. This is necessary because of complaints we got from candidates that versions are outdated. Signed-off-by: Greg Nagy --- CA_TECH | 84 - cakephp/README.rst | 88 - cakephp/notejam/.editorconfig | 18 - cakephp/notejam/.gitattributes | 36 - cakephp/notejam/.gitignore | 4 - cakephp/notejam/.htaccess | 5 - cakephp/notejam/.travis.yml | 18 - cakephp/notejam/bin/cake | 40 - cakephp/notejam/bin/cake.bat | 30 - cakephp/notejam/bin/cake.php | 33 - cakephp/notejam/composer.json | 41 - .../Migrations/20150928200943_initial.php | 141 - cakephp/notejam/config/app.default.php | 326 -- cakephp/notejam/config/app.php | 313 -- cakephp/notejam/config/bootstrap.php | 202 - cakephp/notejam/config/bootstrap_cli.php | 32 - cakephp/notejam/config/paths.php | 85 - cakephp/notejam/config/routes.php | 78 - cakephp/notejam/config/schema/i18n.sql | 27 - cakephp/notejam/config/schema/sessions.sql | 17 - cakephp/notejam/index.php | 16 - cakephp/notejam/phpunit.xml.dist | 33 - cakephp/notejam/src/Console/Installer.php | 192 - .../notejam/src/Controller/AppController.php | 88 - .../src/Controller/NotesController.php | 138 - .../notejam/src/Controller/PadsController.php | 121 - .../src/Controller/UsersController.php | 145 - .../notejam/src/Form/ForgotPasswordForm.php | 35 - cakephp/notejam/src/Form/SettingsForm.php | 47 - cakephp/notejam/src/Model/Entity/Note.php | 41 - cakephp/notejam/src/Model/Entity/Pad.php | 23 - cakephp/notejam/src/Model/Entity/User.php | 50 - .../notejam/src/Model/Table/NotesTable.php | 82 - cakephp/notejam/src/Model/Table/PadsTable.php | 70 - .../notejam/src/Model/Table/UsersTable.php | 80 - cakephp/notejam/src/Shell/ConsoleShell.php | 79 - .../src/Template/Cell/Pads/display.ctp | 16 - .../src/Template/Element/Flash/default.ctp | 7 - .../src/Template/Element/Flash/error.ctp | 3 - .../src/Template/Element/Flash/success.ctp | 3 - .../src/Template/Element/notes/form.ctp | 6 - .../src/Template/Element/pads/form.ctp | 4 - .../src/Template/Email/html/default.ctp | 22 - .../src/Template/Email/text/default.ctp | 16 - .../notejam/src/Template/Error/error400.ctp | 38 - .../notejam/src/Template/Error/error500.ctp | 37 - .../Template/Layout/Email/html/default.ctp | 24 - .../Template/Layout/Email/text/default.ctp | 16 - cakephp/notejam/src/Template/Layout/ajax.ctp | 16 - .../notejam/src/Template/Layout/anonymous.ctp | 6 - .../notejam/src/Template/Layout/default.ctp | 39 - cakephp/notejam/src/Template/Layout/error.ctp | 55 - .../src/Template/Layout/rss/default.ctp | 14 - cakephp/notejam/src/Template/Layout/user.ctp | 8 - cakephp/notejam/src/Template/Notes/create.ctp | 3 - cakephp/notejam/src/Template/Notes/delete.ctp | 7 - cakephp/notejam/src/Template/Notes/edit.ctp | 3 - cakephp/notejam/src/Template/Notes/index.ctp | 20 - cakephp/notejam/src/Template/Notes/view.ctp | 9 - cakephp/notejam/src/Template/Pads/create.ctp | 3 - cakephp/notejam/src/Template/Pads/delete.ctp | 6 - cakephp/notejam/src/Template/Pads/edit.ctp | 4 - cakephp/notejam/src/Template/Pads/view.ctp | 19 - .../src/Template/Users/forgotpassword.ctp | 6 - cakephp/notejam/src/Template/Users/index.ctp | 45 - .../notejam/src/Template/Users/settings.ctp | 8 - cakephp/notejam/src/Template/Users/signin.ctp | 9 - cakephp/notejam/src/Template/Users/signup.ctp | 7 - cakephp/notejam/src/View/AppView.php | 35 - cakephp/notejam/src/View/Cell/PadsCell.php | 33 - .../notejam/tests/Fixture/NotesFixture.php | 51 - cakephp/notejam/tests/Fixture/PadsFixture.php | 42 - .../notejam/tests/Fixture/UsersFixture.php | 48 - .../Controller/NotesControllerTest.php | 151 - .../Controller/PadsControllerTest.php | 151 - .../Controller/UsersControllerTest.php | 139 - .../tests/TestCase/NotejamTestCase.php | 44 - cakephp/notejam/tests/bootstrap.php | 8 - cakephp/notejam/webroot/.htaccess | 5 - cakephp/notejam/webroot/css/style.css | 396 -- cakephp/notejam/webroot/favicon.ico | Bin 1782 -> 0 bytes cakephp/notejam/webroot/img/cake.icon.png | Bin 943 -> 0 bytes cakephp/notejam/webroot/img/cake.power.gif | Bin 201 -> 0 bytes cakephp/notejam/webroot/index.php | 37 - cakephp/notejam/webroot/js/empty | 0 express/README.rst | 83 - express/notejam/app.js | 110 - express/notejam/bin/www | 9 - express/notejam/db.js | 105 - express/notejam/helpers.js | 22 - express/notejam/models.js | 49 - express/notejam/package.json | 34 - express/notejam/public/stylesheets/style.css | 397 -- express/notejam/routes/notes.js | 108 - express/notejam/routes/pads.js | 93 - express/notejam/routes/users.js | 230 - express/notejam/settings.js | 17 - express/notejam/tests/config.js | 25 - express/notejam/tests/notes.js | 141 - express/notejam/tests/pads.js | 138 - express/notejam/tests/users.js | 106 - express/notejam/views/error.jade | 6 - express/notejam/views/layout.jade | 44 - express/notejam/views/main.jade | 18 - express/notejam/views/mixins.jade | 13 - express/notejam/views/notes/create.jade | 19 - express/notejam/views/notes/delete.jade | 12 - express/notejam/views/notes/edit.jade | 20 - express/notejam/views/notes/list.jade | 33 - express/notejam/views/notes/view.jade | 12 - express/notejam/views/pads/create.jade | 11 - express/notejam/views/pads/delete.jade | 11 - express/notejam/views/pads/edit.jade | 14 - express/notejam/views/pads/list.jade | 27 - express/notejam/views/user.jade | 6 - .../notejam/views/users/forgot-password.jade | 11 - express/notejam/views/users/settings.jade | 18 - express/notejam/views/users/signin.jade | 18 - express/notejam/views/users/signup.jade | 22 - laravel/README.rst | 90 - laravel/notejam/.gitattributes | 1 - laravel/notejam/.gitignore | 8 - laravel/notejam/app/commands/.gitkeep | 0 laravel/notejam/app/config/app.php | 193 - laravel/notejam/app/config/auth.php | 71 - laravel/notejam/app/config/cache.php | 89 - laravel/notejam/app/config/compile.php | 18 - laravel/notejam/app/config/database.php | 130 - laravel/notejam/app/config/local/app.php | 18 - laravel/notejam/app/config/mail.php | 124 - laravel/notejam/app/config/packages/.gitkeep | 0 laravel/notejam/app/config/queue.php | 85 - laravel/notejam/app/config/remote.php | 59 - laravel/notejam/app/config/session.php | 140 - laravel/notejam/app/config/testing/cache.php | 20 - .../notejam/app/config/testing/database.php | 14 - .../notejam/app/config/testing/session.php | 21 - laravel/notejam/app/config/view.php | 31 - laravel/notejam/app/config/workbench.php | 31 - laravel/notejam/app/controllers/.gitkeep | 0 .../app/controllers/BaseController.php | 28 - .../app/controllers/NoteController.php | 114 - .../notejam/app/controllers/PadController.php | 87 - .../app/controllers/UserController.php | 150 - .../notejam/app/database/migrations/.gitkeep | 0 .../2014_05_14_215427_create_users_table.php | 34 - .../2014_05_16_225623_create_pads_table.php | 34 - .../2014_05_18_180146_create_notes_table.php | 36 - .../notejam/app/database/production.sqlite | 0 laravel/notejam/app/database/seeds/.gitkeep | 0 .../app/database/seeds/DatabaseSeeder.php | 17 - laravel/notejam/app/filters.php | 80 - laravel/notejam/app/lang/en/pagination.php | 20 - laravel/notejam/app/lang/en/reminders.php | 24 - laravel/notejam/app/lang/en/validation.php | 104 - laravel/notejam/app/models/Note.php | 41 - laravel/notejam/app/models/Pad.php | 26 - laravel/notejam/app/models/User.php | 85 - laravel/notejam/app/routes.php | 91 - laravel/notejam/app/start/artisan.php | 13 - laravel/notejam/app/start/global.php | 89 - laravel/notejam/app/start/local.php | 3 - laravel/notejam/app/storage/.gitignore | 1 - laravel/notejam/app/storage/cache/.gitignore | 2 - laravel/notejam/app/storage/logs/.gitignore | 2 - laravel/notejam/app/storage/meta/.gitignore | 2 - .../notejam/app/storage/sessions/.gitignore | 2 - laravel/notejam/app/storage/views/.gitignore | 2 - laravel/notejam/app/tests/NoteTest.php | 179 - laravel/notejam/app/tests/PadTest.php | 138 - laravel/notejam/app/tests/TestCase.php | 36 - laravel/notejam/app/tests/UserTest.php | 97 - .../app/views/emails/auth/reminder.blade.php | 13 - .../app/views/emails/password.blade.php | 4 - laravel/notejam/app/views/layout.blade.php | 71 - .../notejam/app/views/note/create.blade.php | 24 - .../notejam/app/views/note/delete.blade.php | 16 - laravel/notejam/app/views/note/edit.blade.php | 26 - .../notejam/app/views/note/index.blade.php | 33 - laravel/notejam/app/views/note/view.blade.php | 21 - .../notejam/app/views/pad/create.blade.php | 18 - .../notejam/app/views/pad/delete.blade.php | 15 - laravel/notejam/app/views/pad/edit.blade.php | 17 - laravel/notejam/app/views/pad/view.blade.php | 26 - .../app/views/partials/error.blade.php | 5 - laravel/notejam/app/views/user.blade.php | 24 - .../app/views/user/forgot-password.blade.php | 18 - .../notejam/app/views/user/settings.blade.php | 22 - .../notejam/app/views/user/signin.blade.php | 21 - .../notejam/app/views/user/signup.blade.php | 21 - laravel/notejam/artisan | 74 - laravel/notejam/bootstrap/autoload.php | 75 - laravel/notejam/bootstrap/paths.php | 57 - laravel/notejam/bootstrap/start.php | 73 - laravel/notejam/composer.json | 39 - laravel/notejam/phpunit.xml | 18 - laravel/notejam/public/.htaccess | 15 - laravel/notejam/public/css/style.css | 395 -- laravel/notejam/public/favicon.ico | 0 laravel/notejam/public/index.php | 49 - laravel/notejam/public/packages/.gitkeep | 0 laravel/notejam/public/robots.txt | 2 - laravel/notejam/server.php | 19 - nette/doctrine/README.rst | 98 - nette/doctrine/notejam/.gitignore | 2 - .../app/Components/ConfirmationControl.php | 71 - .../Components/ForgottenPasswordControl.php | 136 - .../notejam/app/Components/NoteControl.php | 172 - .../notejam/app/Components/PadsControl.php | 129 - .../Components/PadsList/PadsListControl.php | 60 - .../app/Components/PadsList/default.latte | 14 - .../app/Components/SettingsControl.php | 116 - .../notejam/app/Components/SignInControl.php | 100 - .../notejam/app/Components/SignUpControl.php | 125 - .../notejam/app/Presenters/BasePresenter.php | 68 - .../app/Presenters/Error4xxPresenter.php | 27 - .../notejam/app/Presenters/ErrorPresenter.php | 58 - .../notejam/app/Presenters/NotePresenter.php | 252 -- .../notejam/app/Presenters/PadPresenter.php | 223 - .../notejam/app/Presenters/UserPresenter.php | 145 - .../app/Presenters/templates/@layout.latte | 70 - .../app/Presenters/templates/@user.latte | 5 - .../app/Presenters/templates/Error/403.latte | 7 - .../app/Presenters/templates/Error/404.latte | 8 - .../app/Presenters/templates/Error/405.latte | 6 - .../app/Presenters/templates/Error/410.latte | 6 - .../app/Presenters/templates/Error/4xx.latte | 4 - .../app/Presenters/templates/Error/500.phtml | 20 - .../Presenters/templates/Note/create.latte | 8 - .../Presenters/templates/Note/default.latte | 36 - .../Presenters/templates/Note/delete.latte | 9 - .../Presenters/templates/Note/detail.latte | 10 - .../app/Presenters/templates/Note/edit.latte | 8 - .../app/Presenters/templates/Pad/create.latte | 5 - .../app/Presenters/templates/Pad/delete.latte | 9 - .../app/Presenters/templates/Pad/detail.latte | 37 - .../app/Presenters/templates/Pad/edit.latte | 6 - .../templates/User/forgottenPassword.latte | 10 - .../Presenters/templates/User/settings.latte | 10 - .../Presenters/templates/User/signIn.latte | 21 - .../Presenters/templates/User/signUp.latte | 20 - nette/doctrine/notejam/app/bootstrap.php | 21 - .../app/config/config.local.example.neon | 2 - nette/doctrine/notejam/app/config/config.neon | 42 - .../doctrine/notejam/app/config/services.neon | 21 - nette/doctrine/notejam/codeception.yml | 23 - nette/doctrine/notejam/composer.json | 39 - nette/doctrine/notejam/composer.lock | 3754 ----------------- nette/doctrine/notejam/log/.gitignore | 2 - .../src/Notejam/Http/RouterFactory.php | 40 - .../notejam/src/Notejam/Notes/Note.php | 168 - .../src/Notejam/Notes/NoteRepository.php | 34 - .../doctrine/notejam/src/Notejam/Pads/Pad.php | 105 - .../src/Notejam/Pads/PadRepository.php | 16 - .../src/Notejam/Templating/RuntimeFilters.php | 31 - .../notejam/src/Notejam/UI/FormFactory.php | 25 - .../notejam/src/Notejam/UI/FormRenderer.php | 29 - .../src/Notejam/Users/Authenticator.php | 49 - .../notejam/src/Notejam/Users/User.php | 162 - .../src/Notejam/Users/UserRepository.php | 16 - .../notejam/src/Notejam/exceptions.php | 22 - nette/doctrine/notejam/temp/.gitignore | 2 - nette/doctrine/notejam/tests/_bootstrap.php | 2 - nette/doctrine/notejam/tests/_data/dump.sql | 46 - .../doctrine/notejam/tests/_output/.gitignore | 2 - .../tests/_support/AcceptanceTester.php | 37 - .../tests/_support/FunctionalTester.php | 26 - .../tests/_support/Helper/Acceptance.php | 10 - .../tests/_support/Helper/Functional.php | 10 - .../notejam/tests/_support/Helper/Unit.php | 10 - .../notejam/tests/_support/UnitTester.php | 26 - .../tests/_support/_generated/.gitignore | 2 - .../notejam/tests/acceptance.suite.yml | 13 - .../tests/acceptance/CreateNoteCept.php | 10 - .../tests/acceptance/CreateNoteFailCept.php | 9 - .../tests/acceptance/CreatePadCept.php | 8 - .../tests/acceptance/CreatePadFailCept.php | 9 - .../tests/acceptance/DeleteNoteCept.php | 7 - .../acceptance/DeleteOtherOwnersNoteCept.php | 6 - .../acceptance/DeleteOtherOwnersPadCept.php | 6 - .../tests/acceptance/DeletePadCept.php | 7 - .../notejam/tests/acceptance/EditNoteCept.php | 12 - .../tests/acceptance/EditNoteFailCept.php | 11 - .../acceptance/EditOtherOwnersNoteCept.php | 6 - .../acceptance/EditOtherOwnersPadCept.php | 6 - .../notejam/tests/acceptance/EditPadCept.php | 8 - .../tests/acceptance/EditPadFailCept.php | 9 - .../acceptance/ForgottenPasswordCept.php | 7 - .../ForgottenPasswordInvalidEmailCept.php | 7 - ...ForgottenPasswordUnregisteredEmailCept.php | 7 - .../notejam/tests/acceptance/HomepageCept.php | 8 - .../tests/acceptance/NoteDetailCept.php | 7 - .../acceptance/OtherOwnersNoteDetailCept.php | 7 - .../acceptance/OtherOwnersPadDetailCept.php | 6 - .../tests/acceptance/PadDetailCept.php | 7 - .../tests/acceptance/SetNewPasswordCept.php | 10 - .../acceptance/SetNewPasswordFailCept.php | 11 - ...tNewPasswordInvalidCurrentPasswordCept.php | 10 - .../acceptance/SetNewPasswordMismatchCept.php | 10 - .../notejam/tests/acceptance/SignInCept.php | 5 - .../tests/acceptance/SignInFailCept.php | 10 - .../acceptance/SignInInvalidEmailCept.php | 5 - .../acceptance/SignInInvalidPasswordCept.php | 5 - .../acceptance/SignUpAlreadyExistsCept.php | 10 - .../notejam/tests/acceptance/SignUpCept.php | 13 - .../tests/acceptance/SignUpFailCept.php | 11 - .../acceptance/SignUpInvalidEmailCept.php | 10 - .../acceptance/SignUpPasswordMismatchCept.php | 10 - .../notejam/tests/acceptance/_bootstrap.php | 2 - .../notejam/tests/functional.suite.yml | 11 - .../notejam/tests/functional/_bootstrap.php | 2 - nette/doctrine/notejam/tests/unit.suite.yml | 9 - .../notejam/tests/unit/_bootstrap.php | 2 - nette/doctrine/notejam/www/.htaccess | 27 - nette/doctrine/notejam/www/.maintenance.php | 26 - nette/doctrine/notejam/www/css/style.css | 396 -- nette/doctrine/notejam/www/favicon.ico | Bin 2550 -> 0 bytes nette/doctrine/notejam/www/index.php | 8 - nette/doctrine/notejam/www/robots.txt | 0 nette/native_db/notejam/.gitignore | 7 - nette/native_db/notejam/app/bootstrap.php | 21 - .../app/components/Notes/INotesFactory.php | 18 - .../notejam/app/components/Notes/Notes.latte | 24 - .../notejam/app/components/Notes/Notes.php | 42 - .../app/components/Pads/IPadsFactory.php | 15 - .../notejam/app/components/Pads/Pads.latte | 11 - .../notejam/app/components/Pads/Pads.php | 35 - .../components/UserBar/IUserBarFactory.php | 14 - .../app/components/UserBar/UserBar.latte | 5 - .../app/components/UserBar/UserBar.php | 35 - .../notejam/app/config/config.example.neon | 3 - .../native_db/notejam/app/config/config.neon | 45 - .../Account/AccountSettingsFormFactory.php | 69 - .../app/forms/Note/DeleteNoteFormFactory.php | 45 - .../app/forms/Note/EditNoteFormFactory.php | 65 - .../app/forms/Note/NewNoteFormFactory.php | 68 - .../app/forms/Pad/DeletePadFormFactory.php | 46 - .../app/forms/Pad/EditPadFormFactory.php | 49 - .../app/forms/Pad/NewPadFormFactory.php | 54 - .../Sign/ForgottenPasswordFormFactory.php | 84 - .../app/forms/Sign/SignInFormFactory.php | 60 - .../app/forms/Sign/SignUpFormFactory.php | 65 - .../notejam/app/helpers/OrderHelper.php | 25 - .../notejam/app/model/NoteManager.php | 121 - .../notejam/app/model/PadManager.php | 100 - .../notejam/app/model/UserManager.php | 123 - .../app/presenters/AccountPresenter.php | 35 - .../notejam/app/presenters/BasePresenter.php | 47 - .../app/presenters/Error4xxPresenter.php | 21 - .../notejam/app/presenters/ErrorPresenter.php | 42 - .../app/presenters/HomepagePresenter.php | 51 - .../notejam/app/presenters/NotePresenter.php | 183 - .../notejam/app/presenters/PadPresenter.php | 189 - .../app/presenters/SecuredBasePresenter.php | 20 - .../notejam/app/presenters/SignPresenter.php | 116 - .../app/presenters/templates/@layout.latte | 74 - .../templates/Account/settings.latte | 13 - .../app/presenters/templates/Error/403.latte | 7 - .../app/presenters/templates/Error/404.latte | 8 - .../app/presenters/templates/Error/405.latte | 6 - .../app/presenters/templates/Error/410.latte | 6 - .../app/presenters/templates/Error/4xx.latte | 4 - .../app/presenters/templates/Error/500.phtml | 20 - .../templates/Homepage/default.latte | 6 - .../presenters/templates/Note/default.latte | 9 - .../presenters/templates/Note/delete.latte | 9 - .../app/presenters/templates/Note/edit.latte | 13 - .../app/presenters/templates/Note/new.latte | 13 - .../presenters/templates/Pad/default.latte | 8 - .../app/presenters/templates/Pad/delete.latte | 9 - .../app/presenters/templates/Pad/edit.latte | 11 - .../app/presenters/templates/Pad/new.latte | 9 - .../presenters/templates/Sign/forgotten.latte | 9 - .../app/presenters/templates/Sign/in.latte | 13 - .../app/presenters/templates/Sign/up.latte | 15 - .../notejam/app/router/RouterFactory.php | 40 - nette/native_db/notejam/bin/create-db.php | 29 - nette/native_db/notejam/codeception.yml | 23 - nette/native_db/notejam/composer.json | 39 - nette/native_db/notejam/composer.lock | 2697 ------------ nette/native_db/notejam/tests/_bootstrap.php | 2 - nette/native_db/notejam/tests/_data/dump.sql | 38 - .../notejam/tests/_output/.gitignore | 2 - .../tests/_support/AcceptanceTester.php | 36 - .../tests/_support/FunctionalTester.php | 26 - .../tests/_support/Helper/Acceptance.php | 10 - .../tests/_support/Helper/Functional.php | 10 - .../notejam/tests/_support/Helper/Unit.php | 10 - .../notejam/tests/_support/UnitTester.php | 26 - .../tests/_support/_generated/.gitignore | 2 - .../notejam/tests/acceptance.suite.yml | 13 - .../tests/acceptance/CreateNoteCept.php | 10 - .../tests/acceptance/CreateNoteFailCept.php | 9 - .../tests/acceptance/CreatePadCept.php | 8 - .../tests/acceptance/CreatePadFailCept.php | 9 - .../tests/acceptance/DeleteNoteCept.php | 7 - .../acceptance/DeleteOtherOwnersNoteCept.php | 6 - .../acceptance/DeleteOtherOwnersPadCept.php | 6 - .../tests/acceptance/DeletePadCept.php | 7 - .../notejam/tests/acceptance/EditNoteCept.php | 12 - .../tests/acceptance/EditNoteFailCept.php | 11 - .../acceptance/EditOtherOwnersNoteCept.php | 6 - .../acceptance/EditOtherOwnersPadCept.php | 6 - .../notejam/tests/acceptance/EditPadCept.php | 8 - .../tests/acceptance/EditPadFailCept.php | 9 - .../acceptance/ForgottenPasswordCept.php | 7 - .../ForgottenPasswordInvalidEmailCept.php | 7 - ...ForgottenPasswordUnregisteredEmailCept.php | 7 - .../notejam/tests/acceptance/HomepageCept.php | 8 - .../tests/acceptance/NoteDetailCept.php | 7 - .../acceptance/OtherOwnersNoteDetailCept.php | 7 - .../acceptance/OtherOwnersPadDetailCept.php | 6 - .../tests/acceptance/PadDetailCept.php | 7 - .../tests/acceptance/SetNewPasswordCept.php | 10 - .../acceptance/SetNewPasswordFailCept.php | 11 - ...tNewPasswordInvalidCurrentPasswordCept.php | 10 - .../acceptance/SetNewPasswordMismatchCept.php | 10 - .../notejam/tests/acceptance/SignInCept.php | 5 - .../tests/acceptance/SignInFailCept.php | 10 - .../acceptance/SignInInvalidEmailCept.php | 5 - .../acceptance/SignInInvalidPasswordCept.php | 5 - .../acceptance/SignUpAlreadyExistsCept.php | 10 - .../notejam/tests/acceptance/SignUpCept.php | 13 - .../tests/acceptance/SignUpFailCept.php | 11 - .../acceptance/SignUpInvalidEmailCept.php | 10 - .../acceptance/SignUpPasswordMismatchCept.php | 10 - .../notejam/tests/acceptance/_bootstrap.php | 2 - .../notejam/tests/functional.suite.yml | 11 - .../notejam/tests/functional/_bootstrap.php | 2 - nette/native_db/notejam/tests/unit.suite.yml | 9 - .../notejam/tests/unit/_bootstrap.php | 2 - nette/native_db/notejam/www/.maintenance.php | 26 - nette/native_db/notejam/www/css/style.css | 395 -- nette/native_db/notejam/www/favicon.ico | Bin 2550 -> 0 bytes .../native_db/notejam/www/images/spinner.gif | Bin 737 -> 0 bytes nette/native_db/notejam/www/index.php | 13 - nette/native_db/notejam/www/js/main.js | 2 - nette/native_db/notejam/www/robots.txt | 0 nette/native_db/readme.rst | 99 - padrino/README.rst | 73 - padrino/notejam/.components | 10 - padrino/notejam/.gitignore | 9 - padrino/notejam/Gemfile | 43 - padrino/notejam/Gemfile.lock | 144 - padrino/notejam/Rakefile | 6 - padrino/notejam/admin/app.rb | 43 - padrino/notejam/admin/controllers/accounts.rb | 90 - padrino/notejam/admin/controllers/base.rb | 5 - padrino/notejam/admin/controllers/sessions.rb | 25 - .../notejam/admin/views/accounts/_form.erb | 57 - padrino/notejam/admin/views/accounts/edit.erb | 10 - .../notejam/admin/views/accounts/index.erb | 74 - padrino/notejam/admin/views/accounts/new.erb | 9 - padrino/notejam/admin/views/base/index.erb | 15 - padrino/notejam/admin/views/errors/403.erb | 3 - padrino/notejam/admin/views/errors/404.erb | 3 - padrino/notejam/admin/views/errors/500.erb | 3 - .../admin/views/layouts/application.erb | 64 - padrino/notejam/admin/views/layouts/error.erb | 23 - padrino/notejam/admin/views/sessions/new.erb | 44 - padrino/notejam/app/app.rb | 84 - padrino/notejam/app/controllers/note.rb | 72 - padrino/notejam/app/controllers/pad.rb | 56 - padrino/notejam/app/controllers/user.rb | 79 - padrino/notejam/app/helpers.rb | 47 - padrino/notejam/app/helpers/user_helper.rb | 10 - padrino/notejam/app/mailers.rb | 44 - padrino/notejam/app/mailers/mailer.rb | 11 - .../notejam/app/views/layouts/layout.html.erb | 87 - .../notejam/app/views/layouts/user.html.erb | 63 - .../mailers/mailer/new_password_email.erb | 5 - .../notejam/app/views/note/create.html.erb | 18 - .../notejam/app/views/note/delete.html.erb | 9 - padrino/notejam/app/views/note/edit.html.erb | 19 - padrino/notejam/app/views/note/list.html.erb | 27 - padrino/notejam/app/views/note/view.html.erb | 11 - padrino/notejam/app/views/pad/create.html.erb | 10 - padrino/notejam/app/views/pad/delete.html.erb | 8 - padrino/notejam/app/views/pad/edit.html.erb | 12 - padrino/notejam/app/views/pad/view.html.erb | 19 - .../app/views/user/forgot-password.html.erb | 10 - .../notejam/app/views/user/settings.html.erb | 17 - .../notejam/app/views/user/signin.html.erb | 14 - .../notejam/app/views/user/signup.html.erb | 17 - padrino/notejam/config.ru | 9 - padrino/notejam/config/apps.rb | 39 - padrino/notejam/config/boot.rb | 47 - padrino/notejam/config/database.rb | 40 - .../notejam/db/migrate/001_create_users.rb | 14 - padrino/notejam/db/seeds.rb | 28 - padrino/notejam/models/note.rb | 21 - padrino/notejam/models/pad.rb | 16 - padrino/notejam/models/user.rb | 56 - .../notejam/public/admin/images/favicon.ico | Bin 3784 -> 0 bytes .../public/admin/images/font/FontAwesome.otf | Bin 61896 -> 0 bytes .../admin/images/font/fontawesome-webfont.eot | Bin 37405 -> 0 bytes .../admin/images/font/fontawesome-webfont.svg | 399 -- .../admin/images/font/fontawesome-webfont.ttf | Bin 79076 -> 0 bytes .../images/font/fontawesome-webfont.woff | Bin 43572 -> 0 bytes padrino/notejam/public/admin/images/logo.png | Bin 29343 -> 0 bytes .../public/admin/javascripts/application.js | 118 - .../admin/javascripts/bootstrap/affix.js | 126 - .../admin/javascripts/bootstrap/alert.js | 98 - .../javascripts/bootstrap/bootstrap.min.js | 6 - .../admin/javascripts/bootstrap/button.js | 109 - .../admin/javascripts/bootstrap/carousel.js | 217 - .../admin/javascripts/bootstrap/collapse.js | 179 - .../admin/javascripts/bootstrap/dropdown.js | 154 - .../admin/javascripts/bootstrap/modal.js | 246 -- .../admin/javascripts/bootstrap/popover.js | 117 - .../admin/javascripts/bootstrap/scrollspy.js | 158 - .../public/admin/javascripts/bootstrap/tab.js | 135 - .../admin/javascripts/bootstrap/tooltip.js | 386 -- .../admin/javascripts/bootstrap/transition.js | 56 - .../admin/javascripts/jquery-1.9.0.min.js | 4 - padrino/notejam/public/favicon.ico | Bin 3784 -> 0 bytes padrino/notejam/public/stylesheets/style.css | 395 -- .../app/controllers/note_controller_spec.rb | 174 - .../app/controllers/pad_controller_spec.rb | 140 - .../app/controllers/user_controller_spec.rb | 79 - padrino/notejam/spec/spec.rake | 20 - padrino/notejam/spec/spec_helper.rb | 42 - pyramid/CHANGES.txt | 4 - pyramid/MANIFEST.in | 2 - pyramid/README.rst | 81 - pyramid/README.txt | 14 - pyramid/development.ini | 75 - pyramid/notejam/__init__.py | 56 - pyramid/notejam/forms.py | 91 - pyramid/notejam/models.py | 106 - pyramid/notejam/scripts/__init__.py | 1 - pyramid/notejam/scripts/initializedb.py | 32 - pyramid/notejam/static/css/base.css | 269 -- pyramid/notejam/static/css/layout.css | 58 - pyramid/notejam/static/css/skeleton.css | 242 -- pyramid/notejam/static/css/style.css | 350 -- pyramid/notejam/static/css/tables.css | 45 - pyramid/notejam/static/favicon.ico | Bin 1406 -> 0 bytes pyramid/notejam/static/footerbg.png | Bin 333 -> 0 bytes pyramid/notejam/static/headerbg.png | Bin 203 -> 0 bytes pyramid/notejam/static/ie6.css | 8 - pyramid/notejam/static/middlebg.png | Bin 2797 -> 0 bytes pyramid/notejam/static/pylons.css | 372 -- pyramid/notejam/static/pyramid-small.png | Bin 7044 -> 0 bytes pyramid/notejam/static/pyramid.png | Bin 33055 -> 0 bytes pyramid/notejam/static/transparent.gif | Bin 49 -> 0 bytes pyramid/notejam/templates/app_layout.pt | 14 - pyramid/notejam/templates/base.pt | 69 - pyramid/notejam/templates/notes/create.pt | 17 - pyramid/notejam/templates/notes/delete.pt | 22 - pyramid/notejam/templates/notes/edit.pt | 18 - pyramid/notejam/templates/notes/list.pt | 31 - pyramid/notejam/templates/notes/view.pt | 23 - pyramid/notejam/templates/pads/create.pt | 17 - pyramid/notejam/templates/pads/delete.pt | 23 - pyramid/notejam/templates/pads/edit.pt | 18 - pyramid/notejam/templates/pads/note_list.pt | 30 - pyramid/notejam/templates/snippets.pt | 37 - pyramid/notejam/templates/user_layout.pt | 16 - .../templates/users/forgot_password.pt | 23 - pyramid/notejam/templates/users/settings.pt | 30 - pyramid/notejam/templates/users/signin.pt | 27 - pyramid/notejam/templates/users/signup.pt | 29 - pyramid/notejam/tests.py | 333 -- pyramid/notejam/views.py | 289 -- pyramid/production.ini | 62 - pyramid/setup.cfg | 27 - pyramid/setup.py | 49 - rubyonrails/README.rst | 83 - rubyonrails/notejam/.gitignore | 16 - rubyonrails/notejam/Gemfile | 45 - rubyonrails/notejam/Gemfile.lock | 150 - rubyonrails/notejam/README.rdoc | 28 - rubyonrails/notejam/Rakefile | 6 - rubyonrails/notejam/app/assets/images/.keep | 0 .../app/assets/javascripts/application.js | 16 - .../app/assets/javascripts/note.js.coffee | 3 - .../app/assets/javascripts/pad.js.coffee | 3 - .../app/assets/javascripts/user.js.coffee | 3 - .../app/assets/stylesheets/application.css | 13 - .../notejam/app/assets/stylesheets/base.css | 269 -- .../notejam/app/assets/stylesheets/layout.css | 58 - .../app/assets/stylesheets/note.css.scss | 3 - .../app/assets/stylesheets/pad.css.scss | 3 - .../app/assets/stylesheets/skeleton.css | 242 -- .../notejam/app/assets/stylesheets/style.css | 350 -- .../notejam/app/assets/stylesheets/tables.css | 45 - .../app/assets/stylesheets/user.css.scss | 3 - .../app/controllers/application_controller.rb | 35 - .../app/controllers/notes_controller.rb | 51 - .../app/controllers/pads_controller.rb | 40 - .../app/controllers/users_controller.rb | 73 - .../notejam/app/helpers/application_helper.rb | 11 - .../notejam/app/helpers/note_helper.rb | 15 - rubyonrails/notejam/app/helpers/pad_helper.rb | 2 - .../notejam/app/helpers/user_helper.rb | 2 - rubyonrails/notejam/app/mailers/.keep | 0 .../notejam/app/mailers/user_mailer.rb | 9 - rubyonrails/notejam/app/models/.keep | 0 rubyonrails/notejam/app/models/note.rb | 6 - rubyonrails/notejam/app/models/pad.rb | 5 - rubyonrails/notejam/app/models/user.rb | 9 - .../app/views/layouts/application.html.erb | 84 - .../notejam/app/views/layouts/users.html.erb | 3 - .../notejam/app/views/notes/create.html.erb | 16 - .../notejam/app/views/notes/delete.html.erb | 7 - .../notejam/app/views/notes/edit.html.erb | 16 - .../notejam/app/views/notes/index.html.erb | 26 - .../notejam/app/views/notes/show.html.erb | 10 - .../notejam/app/views/pads/create.html.erb | 9 - .../notejam/app/views/pads/delete.html.erb | 7 - .../notejam/app/views/pads/edit.html.erb | 9 - .../notejam/app/views/pads/show.html.erb | 19 - .../user_mailer/send_new_password.text.erb | 4 - .../app/views/users/forgot_password.html.erb | 9 - .../notejam/app/views/users/settings.html.erb | 16 - .../notejam/app/views/users/signin.html.erb | 13 - .../notejam/app/views/users/signup.html.erb | 17 - rubyonrails/notejam/bin/bundle | 3 - rubyonrails/notejam/bin/rails | 4 - rubyonrails/notejam/bin/rake | 4 - rubyonrails/notejam/config.ru | 4 - rubyonrails/notejam/config/application.rb | 26 - rubyonrails/notejam/config/boot.rb | 3 - rubyonrails/notejam/config/database.yml | 25 - rubyonrails/notejam/config/environment.rb | 5 - .../config/environments/development.rb | 41 - .../notejam/config/environments/production.rb | 79 - .../notejam/config/environments/test.rb | 42 - .../notejam/config/initializers/assets.rb | 11 - .../initializers/backtrace_silencers.rb | 7 - .../config/initializers/cookies_serializer.rb | 3 - .../initializers/filter_parameter_logging.rb | 4 - .../config/initializers/inflections.rb | 16 - .../notejam/config/initializers/mime_types.rb | 4 - .../config/initializers/secret_token.rb | 12 - .../config/initializers/session_store.rb | 3 - .../config/initializers/wrap_parameters.rb | 14 - rubyonrails/notejam/config/locales/en.yml | 23 - rubyonrails/notejam/config/routes.rb | 94 - rubyonrails/notejam/config/secrets.yml | 22 - .../db/migrate/20140409143934_create_users.rb | 10 - .../db/migrate/20140414192524_create_pads.rb | 10 - .../db/migrate/20140418215526_create_notes.rb | 12 - rubyonrails/notejam/db/schema.rb | 44 - rubyonrails/notejam/db/seeds.rb | 7 - rubyonrails/notejam/log/.keep | 0 rubyonrails/notejam/public/404.html | 58 - rubyonrails/notejam/public/422.html | 58 - rubyonrails/notejam/public/500.html | 57 - rubyonrails/notejam/public/favicon.ico | 0 rubyonrails/notejam/public/robots.txt | 5 - rubyonrails/notejam/test/controllers/.keep | 0 .../test/controllers/notes_controller_test.rb | 90 - .../test/controllers/pads_controller_test.rb | 74 - .../test/controllers/users_controller_test.rb | 61 - rubyonrails/notejam/test/fixtures/.keep | 0 rubyonrails/notejam/test/fixtures/notes.yml | 4 - rubyonrails/notejam/test/fixtures/pads.yml | 3 - rubyonrails/notejam/test/fixtures/users.yml | 7 - rubyonrails/notejam/test/helpers/.keep | 0 .../notejam/test/helpers/note_helper_test.rb | 4 - .../notejam/test/helpers/pad_helper_test.rb | 4 - .../notejam/test/helpers/user_helper_test.rb | 4 - rubyonrails/notejam/test/integration/.keep | 0 rubyonrails/notejam/test/mailers/.keep | 0 .../notejam/test/mailers/user_mailer_test.rb | 7 - rubyonrails/notejam/test/models/.keep | 0 rubyonrails/notejam/test/models/note_test.rb | 7 - rubyonrails/notejam/test/models/pad_test.rb | 7 - rubyonrails/notejam/test/models/user_test.rb | 7 - rubyonrails/notejam/test/test_helper.rb | 18 - .../notejam/vendor/assets/javascripts/.keep | 0 .../notejam/vendor/assets/stylesheets/.keep | 0 spring/.gitignore | 3 - spring/README.rst | 103 - spring/pom.xml | 127 - .../java/net/notejam/spring/Application.java | 138 - .../java/net/notejam/spring/URITemplates.java | 95 - .../spring/error/ForcedErrorController.java | 24 - .../error/ResourceNotFoundException.java | 17 - .../error/UnsupportedLocaleException.java | 31 - .../notejam/spring/error/package-info.java | 7 - .../converter/StringToPeriodConverter.java | 20 - .../spring/helper/converter/package-info.java | 7 - .../spring/helper/reflection/Annotated.java | 62 - .../helper/reflection/ReflectionUtils.java | 82 - .../helper/reflection/package-info.java | 7 - .../java/net/notejam/spring/note/Note.java | 153 - .../notejam/spring/note/NoteRepository.java | 48 - .../net/notejam/spring/note/NoteService.java | 142 - .../note/controller/AllNotesController.java | 55 - .../note/controller/CreateNoteController.java | 94 - .../note/controller/DeleteNoteController.java | 70 - .../note/controller/EditNoteController.java | 94 - .../note/controller/ViewNoteController.java | 55 - .../spring/note/controller/package-info.java | 7 - .../net/notejam/spring/note/package-info.java | 7 - .../java/net/notejam/spring/package-info.java | 7 - .../main/java/net/notejam/spring/pad/Pad.java | 100 - .../net/notejam/spring/pad/PadRepository.java | 26 - .../net/notejam/spring/pad/PadService.java | 106 - .../pad/controller/CreatePadController.java | 90 - .../pad/controller/DeletePadController.java | 70 - .../pad/controller/EditPadController.java | 94 - .../spring/pad/controller/PadsAdvice.java | 60 - .../controller/ViewPadNotesController.java | 83 - .../spring/pad/controller/package-info.java | 7 - .../net/notejam/spring/pad/package-info.java | 7 - .../spring/security/LoginController.java | 23 - .../security/SecurityConfiguration.java | 74 - .../spring/security/SecurityService.java | 58 - .../security/UserDetailsServiceImpl.java | 37 - .../notejam/spring/security/owner/Owned.java | 22 - .../spring/security/owner/PermitOwner.java | 20 - .../security/owner/PermitOwnerAspect.java | 126 - .../spring/security/owner/package-info.java | 7 - .../notejam/spring/security/package-info.java | 7 - .../java/net/notejam/spring/user/User.java | 77 - .../notejam/spring/user/UserRepository.java | 24 - .../net/notejam/spring/user/UserService.java | 100 - .../notejam/spring/user/account/Account.java | 96 - .../user/account/AccountController.java | 66 - .../account/constraints/CurrentPassword.java | 46 - .../constraints/CurrentPasswordValidator.java | 47 - .../account/constraints/package-info.java | 7 - .../spring/user/account/package-info.java | 7 - .../spring/user/constraints/Password.java | 47 - .../spring/user/constraints/package-info.java | 7 - .../spring/user/forgot/ForgotPassword.java | 39 - .../user/forgot/ForgotPasswordController.java | 86 - .../user/forgot/InvalidTokenException.java | 13 - .../user/forgot/PasswordRecoveryService.java | 239 -- .../forgot/RecoverPasswordController.java | 62 - .../spring/user/forgot/RecoveryToken.java | 102 - .../user/forgot/RecoveryTokenRepository.java | 37 - .../spring/user/forgot/package-info.java | 7 - .../net/notejam/spring/user/package-info.java | 7 - .../notejam/spring/user/signup/Signup.java | 97 - .../spring/user/signup/SignupController.java | 63 - .../user/signup/constraints/UniqueEmail.java | 46 - .../constraints/UniqueEmailValidator.java | 40 - .../user/signup/constraints/package-info.java | 7 - .../spring/user/signup/package-info.java | 7 - .../spring/view/ViewConfiguration.java | 27 - .../dialect/NaturalLanguageDateProcessor.java | 47 - .../view/dialect/NoteTextProcessor.java | 54 - .../spring/view/dialect/NotejamDialect.java | 35 - .../spring/view/dialect/ProcessorUtil.java | 44 - .../spring/view/dialect/package-info.java | 7 - .../net/notejam/spring/view/package-info.java | 7 - .../src/main/resources/application.properties | 18 - .../src/main/resources/messages_de.properties | 122 - .../src/main/resources/messages_en.properties | 122 - .../src/main/resources/static/css/style.css | 467 -- .../src/main/resources/templates/error.html | 16 - .../src/main/resources/templates/layout.html | 102 - .../main/resources/templates/note/create.html | 47 - .../main/resources/templates/note/delete.html | 21 - .../main/resources/templates/note/edit.html | 43 - .../main/resources/templates/note/view.html | 37 - .../src/main/resources/templates/notes.html | 61 - .../main/resources/templates/pad/create.html | 29 - .../main/resources/templates/pad/delete.html | 21 - .../main/resources/templates/pad/edit.html | 34 - .../resources/templates/user/account.html | 51 - .../templates/user/forgot-password.html | 29 - .../main/resources/templates/user/login.html | 40 - .../templates/user/reveal-password.html | 20 - .../main/resources/templates/user/signup.html | 45 - .../StringToPeriodConverterTest.java | 24 - .../spring/note/CreateNoteControllerTest.java | 142 - .../spring/note/DeleteNoteControllerTest.java | 104 - .../spring/note/EditNoteControllerTest.java | 169 - .../notejam/spring/note/NoteServiceTest.java | 98 - .../spring/note/ViewNoteControllerTest.java | 94 - .../spring/pad/CreatePadControllerTest.java | 83 - .../spring/pad/DeletePadControllerTest.java | 104 - .../spring/pad/EditPadControllerTest.java | 133 - .../spring/pad/ViewPadControllerTest.java | 94 - .../spring/security/LoginControllerTest.java | 79 - .../spring/security/SecurityServiceTest.java | 61 - .../security/owner/PermitOwnerAspectTest.java | 91 - .../owner/PermitOwnerIntegrationTest.java | 178 - .../notejam/spring/test/IntegrationTest.java | 30 - .../notejam/spring/test/MockMvcProvider.java | 40 - .../java/net/notejam/spring/test/UriUtil.java | 72 - .../spring/user/SignedUpUserProvider.java | 63 - .../notejam/spring/user/UserServiceTest.java | 50 - .../user/signup/SignupControllerTest.java | 145 - .../resources/application-test.properties | 1 - symfony/README.rst | 90 - symfony/notejam/.gitignore | 11 - symfony/notejam/.travis.yml | 10 - symfony/notejam/LICENSE | 19 - symfony/notejam/app/.htaccess | 1 - symfony/notejam/app/AppCache.php | 9 - symfony/notejam/app/AppKernel.php | 43 - .../Resources/translations/messages.fr.xlf | 11 - .../app/Resources/views/base.html.twig | 75 - .../app/Resources/views/fields.html.twig | 13 - .../app/Resources/views/user.html.twig | 5 - symfony/notejam/app/SymfonyRequirements.php | 764 ---- symfony/notejam/app/autoload.php | 13 - symfony/notejam/app/cache/.gitkeep | 0 symfony/notejam/app/check.php | 142 - symfony/notejam/app/config/config.yml | 72 - symfony/notejam/app/config/config_dev.yml | 31 - symfony/notejam/app/config/config_prod.yml | 23 - symfony/notejam/app/config/config_test.yml | 33 - symfony/notejam/app/config/parameters.yml | 14 - .../notejam/app/config/parameters.yml.dist | 15 - symfony/notejam/app/config/routing.yml | 7 - symfony/notejam/app/config/routing_dev.yml | 14 - symfony/notejam/app/config/security.yml | 44 - symfony/notejam/app/config/services.yml | 15 - symfony/notejam/app/console | 27 - symfony/notejam/app/logs/.gitkeep | 0 symfony/notejam/app/phpunit.xml.dist | 42 - symfony/notejam/composer.json | 57 - symfony/notejam/composer.lock | 2725 ------------ symfony/notejam/src/.htaccess | 1 - symfony/notejam/src/AppBundle/AppBundle.php | 13 - .../AppBundle/Controller/NoteController.php | 176 - .../AppBundle/Controller/PadController.php | 175 - .../AppBundle/Controller/UserController.php | 211 - symfony/notejam/src/AppBundle/Entity/Note.php | 194 - symfony/notejam/src/AppBundle/Entity/Pad.php | 119 - symfony/notejam/src/AppBundle/Entity/User.php | 238 -- .../Form/Type/ChangePasswordType.php | 43 - .../src/AppBundle/Form/Type/NoteType.php | 57 - .../src/AppBundle/Form/Type/PadType.php | 40 - .../src/AppBundle/Form/Type/UserType.php | 54 - .../AppBundle/Repository/NoteRepository.php | 14 - .../AppBundle/Repository/PadRepository.php | 14 - .../Resources/views/Note/create.html.twig | 23 - .../Resources/views/Note/delete.html.twig | 13 - .../Resources/views/Note/edit.html.twig | 24 - .../Resources/views/Note/list.html.twig | 32 - .../Resources/views/Note/view.html.twig | 13 - .../Resources/views/Pad/create.html.twig | 14 - .../Resources/views/Pad/delete.html.twig | 12 - .../Resources/views/Pad/edit.html.twig | 15 - .../Resources/views/Pad/list.html.twig | 16 - .../Resources/views/Pad/notes.html.twig | 35 - .../views/User/forgot-password.html.twig | 15 - .../Resources/views/User/index.html.twig | 4 - .../Resources/views/User/settings.html.twig | 22 - .../Resources/views/User/signin.html.twig | 22 - .../Resources/views/User/signup.html.twig | 23 - .../Tests/Controller/NoteControllerTest.php | 40 - .../Tests/Controller/PadControllerTest.php | 183 - symfony/notejam/web/.htaccess | 52 - symfony/notejam/web/app.php | 25 - symfony/notejam/web/app_dev.php | 30 - symfony/notejam/web/apple-touch-icon.png | Bin 10784 -> 0 bytes symfony/notejam/web/config.php | 124 - symfony/notejam/web/css/style.css | 396 -- symfony/notejam/web/favicon.ico | Bin 1150 -> 0 bytes symfony/notejam/web/robots.txt | 4 - .../fixtures.us-east-2.tfvars | 123 - .../terraform-aws-ecs-codepipeline/main.tf | 110 - .../terraform-aws-ecs-codepipeline/outputs.tf | 150 - .../variables.tf | 237 -- .../versions.tf | 11 - .../fixtures.us-east-2.tfvars | 96 - .../main.tf | 99 - .../outputs.tf | 105 - .../variables.tf | 204 - .../versions.tf | 8 - yii/README.rst | 91 - yii/notejam/.gitignore | 27 - yii/notejam/assets/AppAsset.php | 19 - yii/notejam/codeception.yml | 19 - yii/notejam/composer.json | 53 - yii/notejam/composer.lock | 2640 ------------ yii/notejam/config/db.php | 9 - yii/notejam/config/params.php | 6 - yii/notejam/config/web.php | 81 - yii/notejam/controllers/BaseController.php | 26 - yii/notejam/controllers/NoteController.php | 145 - yii/notejam/controllers/PadController.php | 115 - yii/notejam/controllers/UserController.php | 126 - yii/notejam/mail/layouts/html.php | 22 - yii/notejam/mail/password.php | 5 - .../m140804_111205_create_tables.php | 38 - yii/notejam/models/ChangePassword.php | 57 - yii/notejam/models/ForgotPassword.php | 74 - yii/notejam/models/LoginForm.php | 75 - yii/notejam/models/Note.php | 97 - yii/notejam/models/Pad.php | 53 - yii/notejam/models/SigninForm.php | 76 - yii/notejam/models/SignupForm.php | 53 - yii/notejam/models/User.php | 127 - yii/notejam/requirements.php | 102 - yii/notejam/runtime/.gitignore | 2 - yii/notejam/tests/.gitignore | 4 - yii/notejam/tests/README.md | 33 - yii/notejam/tests/_bootstrap.php | 23 - yii/notejam/tests/_config.php | 14 - yii/notejam/tests/_console_bootstrap.php | 12 - yii/notejam/tests/_data/dump.sql | 31 - yii/notejam/tests/_log/.gitignore | 2 - yii/notejam/tests/_pages/CreateNotePage.php | 19 - yii/notejam/tests/_pages/CreatePadPage.php | 17 - yii/notejam/tests/_pages/DeleteNotePage.php | 22 - yii/notejam/tests/_pages/DeletePadPage.php | 21 - yii/notejam/tests/_pages/EditNotePage.php | 24 - yii/notejam/tests/_pages/EditPadPage.php | 21 - yii/notejam/tests/_pages/SignedInPage.php | 31 - yii/notejam/tests/_pages/SigninPage.php | 24 - yii/notejam/tests/_pages/SignupPage.php | 25 - yii/notejam/tests/_pages/ViewNotePage.php | 10 - yii/notejam/tests/_pages/ViewPadPage.php | 9 - yii/notejam/tests/acceptance.suite.yml | 26 - yii/notejam/tests/acceptance/_bootstrap.php | 3 - yii/notejam/tests/acceptance/_config.php | 13 - yii/notejam/tests/acceptance/_console.php | 13 - yii/notejam/tests/acceptance/yii | 17 - yii/notejam/tests/acceptance/yii.bat | 20 - yii/notejam/tests/functional.suite.yml | 28 - .../tests/functional/CreateNoteCept.php | 29 - .../tests/functional/CreatePadCept.php | 19 - .../tests/functional/DeleteNoteCept.php | 17 - .../tests/functional/DeletePadCept.php | 16 - yii/notejam/tests/functional/EditNoteCept.php | 28 - yii/notejam/tests/functional/EditPadCept.php | 25 - yii/notejam/tests/functional/SigninCept.php | 23 - yii/notejam/tests/functional/SignupCept.php | 37 - yii/notejam/tests/functional/ViewNoteCept.php | 16 - yii/notejam/tests/functional/ViewPadCept.php | 16 - yii/notejam/tests/functional/_bootstrap.php | 3 - yii/notejam/tests/functional/_config.php | 17 - yii/notejam/tests/functional/_console.php | 13 - yii/notejam/tests/functional/yii | 17 - yii/notejam/tests/functional/yii.bat | 20 - yii/notejam/tests/unit.suite.yml | 6 - yii/notejam/tests/unit/_bootstrap.php | 3 - yii/notejam/tests/unit/_config.php | 13 - yii/notejam/tests/unit/_console.php | 13 - yii/notejam/tests/unit/fixtures/.gitkeep | 0 yii/notejam/tests/unit/fixtures/data/.gitkeep | 0 .../tests/unit/templates/fixtures/.gitkeep | 0 yii/notejam/tests/unit/yii | 17 - yii/notejam/tests/unit/yii.bat | 20 - yii/notejam/views/layouts/app.php | 37 - yii/notejam/views/layouts/base.php | 68 - yii/notejam/views/layouts/user.php | 16 - yii/notejam/views/note/create.php | 5 - yii/notejam/views/note/delete.php | 16 - yii/notejam/views/note/edit.php | 5 - yii/notejam/views/note/error.php | 22 - yii/notejam/views/note/form.php | 29 - yii/notejam/views/note/list.php | 30 - yii/notejam/views/note/view.php | 14 - yii/notejam/views/pad/create.php | 5 - yii/notejam/views/pad/delete.php | 15 - yii/notejam/views/pad/edit.php | 5 - yii/notejam/views/pad/form.php | 23 - yii/notejam/views/pad/view.php | 25 - yii/notejam/views/partials/errors.php | 9 - yii/notejam/views/user/forgot-password.php | 21 - yii/notejam/views/user/settings.php | 28 - yii/notejam/views/user/signin.php | 27 - yii/notejam/views/user/signup.php | 28 - yii/notejam/web/assets/.gitignore | 2 - yii/notejam/web/css/site.css | 91 - yii/notejam/web/css/style.css | 397 -- yii/notejam/web/favicon.ico | Bin 318 -> 0 bytes yii/notejam/web/index-test.php | 16 - yii/notejam/web/index.php | 12 - yii/notejam/web/robots.txt | 2 - yii/notejam/yii | 24 - yii/notejam/yii.bat | 20 - 974 files changed, 56262 deletions(-) delete mode 100644 CA_TECH delete mode 100644 cakephp/README.rst delete mode 100644 cakephp/notejam/.editorconfig delete mode 100644 cakephp/notejam/.gitattributes delete mode 100644 cakephp/notejam/.gitignore delete mode 100644 cakephp/notejam/.htaccess delete mode 100644 cakephp/notejam/.travis.yml delete mode 100755 cakephp/notejam/bin/cake delete mode 100644 cakephp/notejam/bin/cake.bat delete mode 100644 cakephp/notejam/bin/cake.php delete mode 100644 cakephp/notejam/composer.json delete mode 100644 cakephp/notejam/config/Migrations/20150928200943_initial.php delete mode 100644 cakephp/notejam/config/app.default.php delete mode 100644 cakephp/notejam/config/app.php delete mode 100644 cakephp/notejam/config/bootstrap.php delete mode 100644 cakephp/notejam/config/bootstrap_cli.php delete mode 100644 cakephp/notejam/config/paths.php delete mode 100644 cakephp/notejam/config/routes.php delete mode 100644 cakephp/notejam/config/schema/i18n.sql delete mode 100644 cakephp/notejam/config/schema/sessions.sql delete mode 100644 cakephp/notejam/index.php delete mode 100644 cakephp/notejam/phpunit.xml.dist delete mode 100644 cakephp/notejam/src/Console/Installer.php delete mode 100644 cakephp/notejam/src/Controller/AppController.php delete mode 100644 cakephp/notejam/src/Controller/NotesController.php delete mode 100644 cakephp/notejam/src/Controller/PadsController.php delete mode 100644 cakephp/notejam/src/Controller/UsersController.php delete mode 100644 cakephp/notejam/src/Form/ForgotPasswordForm.php delete mode 100644 cakephp/notejam/src/Form/SettingsForm.php delete mode 100644 cakephp/notejam/src/Model/Entity/Note.php delete mode 100644 cakephp/notejam/src/Model/Entity/Pad.php delete mode 100644 cakephp/notejam/src/Model/Entity/User.php delete mode 100644 cakephp/notejam/src/Model/Table/NotesTable.php delete mode 100644 cakephp/notejam/src/Model/Table/PadsTable.php delete mode 100644 cakephp/notejam/src/Model/Table/UsersTable.php delete mode 100644 cakephp/notejam/src/Shell/ConsoleShell.php delete mode 100644 cakephp/notejam/src/Template/Cell/Pads/display.ctp delete mode 100644 cakephp/notejam/src/Template/Element/Flash/default.ctp delete mode 100644 cakephp/notejam/src/Template/Element/Flash/error.ctp delete mode 100644 cakephp/notejam/src/Template/Element/Flash/success.ctp delete mode 100644 cakephp/notejam/src/Template/Element/notes/form.ctp delete mode 100644 cakephp/notejam/src/Template/Element/pads/form.ctp delete mode 100644 cakephp/notejam/src/Template/Email/html/default.ctp delete mode 100644 cakephp/notejam/src/Template/Email/text/default.ctp delete mode 100644 cakephp/notejam/src/Template/Error/error400.ctp delete mode 100644 cakephp/notejam/src/Template/Error/error500.ctp delete mode 100644 cakephp/notejam/src/Template/Layout/Email/html/default.ctp delete mode 100644 cakephp/notejam/src/Template/Layout/Email/text/default.ctp delete mode 100644 cakephp/notejam/src/Template/Layout/ajax.ctp delete mode 100644 cakephp/notejam/src/Template/Layout/anonymous.ctp delete mode 100644 cakephp/notejam/src/Template/Layout/default.ctp delete mode 100644 cakephp/notejam/src/Template/Layout/error.ctp delete mode 100644 cakephp/notejam/src/Template/Layout/rss/default.ctp delete mode 100644 cakephp/notejam/src/Template/Layout/user.ctp delete mode 100644 cakephp/notejam/src/Template/Notes/create.ctp delete mode 100644 cakephp/notejam/src/Template/Notes/delete.ctp delete mode 100644 cakephp/notejam/src/Template/Notes/edit.ctp delete mode 100644 cakephp/notejam/src/Template/Notes/index.ctp delete mode 100644 cakephp/notejam/src/Template/Notes/view.ctp delete mode 100644 cakephp/notejam/src/Template/Pads/create.ctp delete mode 100644 cakephp/notejam/src/Template/Pads/delete.ctp delete mode 100644 cakephp/notejam/src/Template/Pads/edit.ctp delete mode 100644 cakephp/notejam/src/Template/Pads/view.ctp delete mode 100644 cakephp/notejam/src/Template/Users/forgotpassword.ctp delete mode 100644 cakephp/notejam/src/Template/Users/index.ctp delete mode 100644 cakephp/notejam/src/Template/Users/settings.ctp delete mode 100644 cakephp/notejam/src/Template/Users/signin.ctp delete mode 100644 cakephp/notejam/src/Template/Users/signup.ctp delete mode 100644 cakephp/notejam/src/View/AppView.php delete mode 100644 cakephp/notejam/src/View/Cell/PadsCell.php delete mode 100644 cakephp/notejam/tests/Fixture/NotesFixture.php delete mode 100644 cakephp/notejam/tests/Fixture/PadsFixture.php delete mode 100644 cakephp/notejam/tests/Fixture/UsersFixture.php delete mode 100644 cakephp/notejam/tests/TestCase/Controller/NotesControllerTest.php delete mode 100644 cakephp/notejam/tests/TestCase/Controller/PadsControllerTest.php delete mode 100644 cakephp/notejam/tests/TestCase/Controller/UsersControllerTest.php delete mode 100644 cakephp/notejam/tests/TestCase/NotejamTestCase.php delete mode 100644 cakephp/notejam/tests/bootstrap.php delete mode 100644 cakephp/notejam/webroot/.htaccess delete mode 100644 cakephp/notejam/webroot/css/style.css delete mode 100644 cakephp/notejam/webroot/favicon.ico delete mode 100644 cakephp/notejam/webroot/img/cake.icon.png delete mode 100644 cakephp/notejam/webroot/img/cake.power.gif delete mode 100644 cakephp/notejam/webroot/index.php delete mode 100644 cakephp/notejam/webroot/js/empty delete mode 100644 express/README.rst delete mode 100644 express/notejam/app.js delete mode 100755 express/notejam/bin/www delete mode 100644 express/notejam/db.js delete mode 100644 express/notejam/helpers.js delete mode 100644 express/notejam/models.js delete mode 100644 express/notejam/package.json delete mode 100644 express/notejam/public/stylesheets/style.css delete mode 100644 express/notejam/routes/notes.js delete mode 100644 express/notejam/routes/pads.js delete mode 100644 express/notejam/routes/users.js delete mode 100644 express/notejam/settings.js delete mode 100644 express/notejam/tests/config.js delete mode 100644 express/notejam/tests/notes.js delete mode 100644 express/notejam/tests/pads.js delete mode 100644 express/notejam/tests/users.js delete mode 100644 express/notejam/views/error.jade delete mode 100644 express/notejam/views/layout.jade delete mode 100644 express/notejam/views/main.jade delete mode 100644 express/notejam/views/mixins.jade delete mode 100644 express/notejam/views/notes/create.jade delete mode 100644 express/notejam/views/notes/delete.jade delete mode 100644 express/notejam/views/notes/edit.jade delete mode 100644 express/notejam/views/notes/list.jade delete mode 100644 express/notejam/views/notes/view.jade delete mode 100644 express/notejam/views/pads/create.jade delete mode 100644 express/notejam/views/pads/delete.jade delete mode 100644 express/notejam/views/pads/edit.jade delete mode 100644 express/notejam/views/pads/list.jade delete mode 100644 express/notejam/views/user.jade delete mode 100644 express/notejam/views/users/forgot-password.jade delete mode 100644 express/notejam/views/users/settings.jade delete mode 100644 express/notejam/views/users/signin.jade delete mode 100644 express/notejam/views/users/signup.jade delete mode 100644 laravel/README.rst delete mode 100644 laravel/notejam/.gitattributes delete mode 100644 laravel/notejam/.gitignore delete mode 100644 laravel/notejam/app/commands/.gitkeep delete mode 100644 laravel/notejam/app/config/app.php delete mode 100644 laravel/notejam/app/config/auth.php delete mode 100644 laravel/notejam/app/config/cache.php delete mode 100644 laravel/notejam/app/config/compile.php delete mode 100644 laravel/notejam/app/config/database.php delete mode 100644 laravel/notejam/app/config/local/app.php delete mode 100644 laravel/notejam/app/config/mail.php delete mode 100644 laravel/notejam/app/config/packages/.gitkeep delete mode 100644 laravel/notejam/app/config/queue.php delete mode 100644 laravel/notejam/app/config/remote.php delete mode 100644 laravel/notejam/app/config/session.php delete mode 100644 laravel/notejam/app/config/testing/cache.php delete mode 100644 laravel/notejam/app/config/testing/database.php delete mode 100644 laravel/notejam/app/config/testing/session.php delete mode 100644 laravel/notejam/app/config/view.php delete mode 100644 laravel/notejam/app/config/workbench.php delete mode 100644 laravel/notejam/app/controllers/.gitkeep delete mode 100644 laravel/notejam/app/controllers/BaseController.php delete mode 100644 laravel/notejam/app/controllers/NoteController.php delete mode 100644 laravel/notejam/app/controllers/PadController.php delete mode 100644 laravel/notejam/app/controllers/UserController.php delete mode 100644 laravel/notejam/app/database/migrations/.gitkeep delete mode 100644 laravel/notejam/app/database/migrations/2014_05_14_215427_create_users_table.php delete mode 100644 laravel/notejam/app/database/migrations/2014_05_16_225623_create_pads_table.php delete mode 100644 laravel/notejam/app/database/migrations/2014_05_18_180146_create_notes_table.php delete mode 100644 laravel/notejam/app/database/production.sqlite delete mode 100644 laravel/notejam/app/database/seeds/.gitkeep delete mode 100644 laravel/notejam/app/database/seeds/DatabaseSeeder.php delete mode 100644 laravel/notejam/app/filters.php delete mode 100644 laravel/notejam/app/lang/en/pagination.php delete mode 100644 laravel/notejam/app/lang/en/reminders.php delete mode 100644 laravel/notejam/app/lang/en/validation.php delete mode 100644 laravel/notejam/app/models/Note.php delete mode 100644 laravel/notejam/app/models/Pad.php delete mode 100644 laravel/notejam/app/models/User.php delete mode 100644 laravel/notejam/app/routes.php delete mode 100644 laravel/notejam/app/start/artisan.php delete mode 100644 laravel/notejam/app/start/global.php delete mode 100644 laravel/notejam/app/start/local.php delete mode 100644 laravel/notejam/app/storage/.gitignore delete mode 100644 laravel/notejam/app/storage/cache/.gitignore delete mode 100644 laravel/notejam/app/storage/logs/.gitignore delete mode 100644 laravel/notejam/app/storage/meta/.gitignore delete mode 100644 laravel/notejam/app/storage/sessions/.gitignore delete mode 100644 laravel/notejam/app/storage/views/.gitignore delete mode 100644 laravel/notejam/app/tests/NoteTest.php delete mode 100644 laravel/notejam/app/tests/PadTest.php delete mode 100644 laravel/notejam/app/tests/TestCase.php delete mode 100644 laravel/notejam/app/tests/UserTest.php delete mode 100644 laravel/notejam/app/views/emails/auth/reminder.blade.php delete mode 100644 laravel/notejam/app/views/emails/password.blade.php delete mode 100644 laravel/notejam/app/views/layout.blade.php delete mode 100644 laravel/notejam/app/views/note/create.blade.php delete mode 100644 laravel/notejam/app/views/note/delete.blade.php delete mode 100644 laravel/notejam/app/views/note/edit.blade.php delete mode 100644 laravel/notejam/app/views/note/index.blade.php delete mode 100644 laravel/notejam/app/views/note/view.blade.php delete mode 100644 laravel/notejam/app/views/pad/create.blade.php delete mode 100644 laravel/notejam/app/views/pad/delete.blade.php delete mode 100644 laravel/notejam/app/views/pad/edit.blade.php delete mode 100644 laravel/notejam/app/views/pad/view.blade.php delete mode 100644 laravel/notejam/app/views/partials/error.blade.php delete mode 100644 laravel/notejam/app/views/user.blade.php delete mode 100644 laravel/notejam/app/views/user/forgot-password.blade.php delete mode 100644 laravel/notejam/app/views/user/settings.blade.php delete mode 100644 laravel/notejam/app/views/user/signin.blade.php delete mode 100644 laravel/notejam/app/views/user/signup.blade.php delete mode 100755 laravel/notejam/artisan delete mode 100644 laravel/notejam/bootstrap/autoload.php delete mode 100644 laravel/notejam/bootstrap/paths.php delete mode 100644 laravel/notejam/bootstrap/start.php delete mode 100644 laravel/notejam/composer.json delete mode 100644 laravel/notejam/phpunit.xml delete mode 100644 laravel/notejam/public/.htaccess delete mode 100644 laravel/notejam/public/css/style.css delete mode 100644 laravel/notejam/public/favicon.ico delete mode 100644 laravel/notejam/public/index.php delete mode 100644 laravel/notejam/public/packages/.gitkeep delete mode 100644 laravel/notejam/public/robots.txt delete mode 100644 laravel/notejam/server.php delete mode 100644 nette/doctrine/README.rst delete mode 100644 nette/doctrine/notejam/.gitignore delete mode 100644 nette/doctrine/notejam/app/Components/ConfirmationControl.php delete mode 100644 nette/doctrine/notejam/app/Components/ForgottenPasswordControl.php delete mode 100644 nette/doctrine/notejam/app/Components/NoteControl.php delete mode 100644 nette/doctrine/notejam/app/Components/PadsControl.php delete mode 100644 nette/doctrine/notejam/app/Components/PadsList/PadsListControl.php delete mode 100644 nette/doctrine/notejam/app/Components/PadsList/default.latte delete mode 100644 nette/doctrine/notejam/app/Components/SettingsControl.php delete mode 100644 nette/doctrine/notejam/app/Components/SignInControl.php delete mode 100644 nette/doctrine/notejam/app/Components/SignUpControl.php delete mode 100644 nette/doctrine/notejam/app/Presenters/BasePresenter.php delete mode 100644 nette/doctrine/notejam/app/Presenters/Error4xxPresenter.php delete mode 100644 nette/doctrine/notejam/app/Presenters/ErrorPresenter.php delete mode 100644 nette/doctrine/notejam/app/Presenters/NotePresenter.php delete mode 100644 nette/doctrine/notejam/app/Presenters/PadPresenter.php delete mode 100644 nette/doctrine/notejam/app/Presenters/UserPresenter.php delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/@layout.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/@user.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Error/403.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Error/404.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Error/405.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Error/410.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Error/4xx.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Error/500.phtml delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Note/create.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Note/default.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Note/delete.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Note/detail.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Note/edit.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Pad/create.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Pad/delete.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Pad/detail.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/Pad/edit.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/User/forgottenPassword.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/User/settings.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/User/signIn.latte delete mode 100644 nette/doctrine/notejam/app/Presenters/templates/User/signUp.latte delete mode 100644 nette/doctrine/notejam/app/bootstrap.php delete mode 100644 nette/doctrine/notejam/app/config/config.local.example.neon delete mode 100644 nette/doctrine/notejam/app/config/config.neon delete mode 100644 nette/doctrine/notejam/app/config/services.neon delete mode 100644 nette/doctrine/notejam/codeception.yml delete mode 100644 nette/doctrine/notejam/composer.json delete mode 100644 nette/doctrine/notejam/composer.lock delete mode 100644 nette/doctrine/notejam/log/.gitignore delete mode 100644 nette/doctrine/notejam/src/Notejam/Http/RouterFactory.php delete mode 100644 nette/doctrine/notejam/src/Notejam/Notes/Note.php delete mode 100644 nette/doctrine/notejam/src/Notejam/Notes/NoteRepository.php delete mode 100644 nette/doctrine/notejam/src/Notejam/Pads/Pad.php delete mode 100644 nette/doctrine/notejam/src/Notejam/Pads/PadRepository.php delete mode 100644 nette/doctrine/notejam/src/Notejam/Templating/RuntimeFilters.php delete mode 100644 nette/doctrine/notejam/src/Notejam/UI/FormFactory.php delete mode 100644 nette/doctrine/notejam/src/Notejam/UI/FormRenderer.php delete mode 100644 nette/doctrine/notejam/src/Notejam/Users/Authenticator.php delete mode 100644 nette/doctrine/notejam/src/Notejam/Users/User.php delete mode 100644 nette/doctrine/notejam/src/Notejam/Users/UserRepository.php delete mode 100644 nette/doctrine/notejam/src/Notejam/exceptions.php delete mode 100644 nette/doctrine/notejam/temp/.gitignore delete mode 100644 nette/doctrine/notejam/tests/_bootstrap.php delete mode 100644 nette/doctrine/notejam/tests/_data/dump.sql delete mode 100644 nette/doctrine/notejam/tests/_output/.gitignore delete mode 100644 nette/doctrine/notejam/tests/_support/AcceptanceTester.php delete mode 100644 nette/doctrine/notejam/tests/_support/FunctionalTester.php delete mode 100644 nette/doctrine/notejam/tests/_support/Helper/Acceptance.php delete mode 100644 nette/doctrine/notejam/tests/_support/Helper/Functional.php delete mode 100644 nette/doctrine/notejam/tests/_support/Helper/Unit.php delete mode 100644 nette/doctrine/notejam/tests/_support/UnitTester.php delete mode 100644 nette/doctrine/notejam/tests/_support/_generated/.gitignore delete mode 100644 nette/doctrine/notejam/tests/acceptance.suite.yml delete mode 100644 nette/doctrine/notejam/tests/acceptance/CreateNoteCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/CreateNoteFailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/CreatePadCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/CreatePadFailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/DeleteNoteCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/DeleteOtherOwnersNoteCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/DeleteOtherOwnersPadCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/DeletePadCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/EditNoteCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/EditNoteFailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/EditOtherOwnersNoteCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/EditOtherOwnersPadCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/EditPadCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/EditPadFailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/ForgottenPasswordCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/ForgottenPasswordInvalidEmailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/ForgottenPasswordUnregisteredEmailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/HomepageCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/NoteDetailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/OtherOwnersNoteDetailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/OtherOwnersPadDetailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/PadDetailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SetNewPasswordCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SetNewPasswordFailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SetNewPasswordInvalidCurrentPasswordCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SetNewPasswordMismatchCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignInCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignInFailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignInInvalidEmailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignInInvalidPasswordCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignUpAlreadyExistsCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignUpCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignUpFailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignUpInvalidEmailCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/SignUpPasswordMismatchCept.php delete mode 100644 nette/doctrine/notejam/tests/acceptance/_bootstrap.php delete mode 100644 nette/doctrine/notejam/tests/functional.suite.yml delete mode 100644 nette/doctrine/notejam/tests/functional/_bootstrap.php delete mode 100644 nette/doctrine/notejam/tests/unit.suite.yml delete mode 100644 nette/doctrine/notejam/tests/unit/_bootstrap.php delete mode 100644 nette/doctrine/notejam/www/.htaccess delete mode 100644 nette/doctrine/notejam/www/.maintenance.php delete mode 100644 nette/doctrine/notejam/www/css/style.css delete mode 100644 nette/doctrine/notejam/www/favicon.ico delete mode 100644 nette/doctrine/notejam/www/index.php delete mode 100644 nette/doctrine/notejam/www/robots.txt delete mode 100644 nette/native_db/notejam/.gitignore delete mode 100644 nette/native_db/notejam/app/bootstrap.php delete mode 100644 nette/native_db/notejam/app/components/Notes/INotesFactory.php delete mode 100644 nette/native_db/notejam/app/components/Notes/Notes.latte delete mode 100644 nette/native_db/notejam/app/components/Notes/Notes.php delete mode 100644 nette/native_db/notejam/app/components/Pads/IPadsFactory.php delete mode 100644 nette/native_db/notejam/app/components/Pads/Pads.latte delete mode 100644 nette/native_db/notejam/app/components/Pads/Pads.php delete mode 100644 nette/native_db/notejam/app/components/UserBar/IUserBarFactory.php delete mode 100644 nette/native_db/notejam/app/components/UserBar/UserBar.latte delete mode 100644 nette/native_db/notejam/app/components/UserBar/UserBar.php delete mode 100644 nette/native_db/notejam/app/config/config.example.neon delete mode 100644 nette/native_db/notejam/app/config/config.neon delete mode 100644 nette/native_db/notejam/app/forms/Account/AccountSettingsFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Note/DeleteNoteFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Note/EditNoteFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Note/NewNoteFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Pad/DeletePadFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Pad/EditPadFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Pad/NewPadFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Sign/ForgottenPasswordFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Sign/SignInFormFactory.php delete mode 100644 nette/native_db/notejam/app/forms/Sign/SignUpFormFactory.php delete mode 100644 nette/native_db/notejam/app/helpers/OrderHelper.php delete mode 100644 nette/native_db/notejam/app/model/NoteManager.php delete mode 100644 nette/native_db/notejam/app/model/PadManager.php delete mode 100644 nette/native_db/notejam/app/model/UserManager.php delete mode 100644 nette/native_db/notejam/app/presenters/AccountPresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/BasePresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/Error4xxPresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/ErrorPresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/HomepagePresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/NotePresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/PadPresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/SecuredBasePresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/SignPresenter.php delete mode 100644 nette/native_db/notejam/app/presenters/templates/@layout.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Account/settings.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Error/403.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Error/404.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Error/405.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Error/410.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Error/4xx.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Error/500.phtml delete mode 100644 nette/native_db/notejam/app/presenters/templates/Homepage/default.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Note/default.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Note/delete.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Note/edit.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Note/new.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Pad/default.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Pad/delete.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Pad/edit.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Pad/new.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Sign/forgotten.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Sign/in.latte delete mode 100644 nette/native_db/notejam/app/presenters/templates/Sign/up.latte delete mode 100644 nette/native_db/notejam/app/router/RouterFactory.php delete mode 100644 nette/native_db/notejam/bin/create-db.php delete mode 100644 nette/native_db/notejam/codeception.yml delete mode 100644 nette/native_db/notejam/composer.json delete mode 100644 nette/native_db/notejam/composer.lock delete mode 100644 nette/native_db/notejam/tests/_bootstrap.php delete mode 100644 nette/native_db/notejam/tests/_data/dump.sql delete mode 100644 nette/native_db/notejam/tests/_output/.gitignore delete mode 100644 nette/native_db/notejam/tests/_support/AcceptanceTester.php delete mode 100644 nette/native_db/notejam/tests/_support/FunctionalTester.php delete mode 100644 nette/native_db/notejam/tests/_support/Helper/Acceptance.php delete mode 100644 nette/native_db/notejam/tests/_support/Helper/Functional.php delete mode 100644 nette/native_db/notejam/tests/_support/Helper/Unit.php delete mode 100644 nette/native_db/notejam/tests/_support/UnitTester.php delete mode 100644 nette/native_db/notejam/tests/_support/_generated/.gitignore delete mode 100644 nette/native_db/notejam/tests/acceptance.suite.yml delete mode 100644 nette/native_db/notejam/tests/acceptance/CreateNoteCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/CreateNoteFailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/CreatePadCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/CreatePadFailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/DeleteNoteCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/DeleteOtherOwnersNoteCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/DeleteOtherOwnersPadCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/DeletePadCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/EditNoteCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/EditNoteFailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/EditOtherOwnersNoteCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/EditOtherOwnersPadCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/EditPadCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/EditPadFailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/ForgottenPasswordCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/ForgottenPasswordInvalidEmailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/ForgottenPasswordUnregisteredEmailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/HomepageCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/NoteDetailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/OtherOwnersNoteDetailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/OtherOwnersPadDetailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/PadDetailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SetNewPasswordCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SetNewPasswordFailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SetNewPasswordInvalidCurrentPasswordCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SetNewPasswordMismatchCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignInCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignInFailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignInInvalidEmailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignInInvalidPasswordCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignUpAlreadyExistsCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignUpCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignUpFailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignUpInvalidEmailCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/SignUpPasswordMismatchCept.php delete mode 100644 nette/native_db/notejam/tests/acceptance/_bootstrap.php delete mode 100644 nette/native_db/notejam/tests/functional.suite.yml delete mode 100644 nette/native_db/notejam/tests/functional/_bootstrap.php delete mode 100644 nette/native_db/notejam/tests/unit.suite.yml delete mode 100644 nette/native_db/notejam/tests/unit/_bootstrap.php delete mode 100644 nette/native_db/notejam/www/.maintenance.php delete mode 100644 nette/native_db/notejam/www/css/style.css delete mode 100644 nette/native_db/notejam/www/favicon.ico delete mode 100644 nette/native_db/notejam/www/images/spinner.gif delete mode 100644 nette/native_db/notejam/www/index.php delete mode 100644 nette/native_db/notejam/www/js/main.js delete mode 100644 nette/native_db/notejam/www/robots.txt delete mode 100644 nette/native_db/readme.rst delete mode 100644 padrino/README.rst delete mode 100644 padrino/notejam/.components delete mode 100644 padrino/notejam/.gitignore delete mode 100644 padrino/notejam/Gemfile delete mode 100644 padrino/notejam/Gemfile.lock delete mode 100644 padrino/notejam/Rakefile delete mode 100644 padrino/notejam/admin/app.rb delete mode 100644 padrino/notejam/admin/controllers/accounts.rb delete mode 100644 padrino/notejam/admin/controllers/base.rb delete mode 100644 padrino/notejam/admin/controllers/sessions.rb delete mode 100644 padrino/notejam/admin/views/accounts/_form.erb delete mode 100644 padrino/notejam/admin/views/accounts/edit.erb delete mode 100644 padrino/notejam/admin/views/accounts/index.erb delete mode 100644 padrino/notejam/admin/views/accounts/new.erb delete mode 100644 padrino/notejam/admin/views/base/index.erb delete mode 100644 padrino/notejam/admin/views/errors/403.erb delete mode 100644 padrino/notejam/admin/views/errors/404.erb delete mode 100644 padrino/notejam/admin/views/errors/500.erb delete mode 100644 padrino/notejam/admin/views/layouts/application.erb delete mode 100644 padrino/notejam/admin/views/layouts/error.erb delete mode 100644 padrino/notejam/admin/views/sessions/new.erb delete mode 100644 padrino/notejam/app/app.rb delete mode 100644 padrino/notejam/app/controllers/note.rb delete mode 100644 padrino/notejam/app/controllers/pad.rb delete mode 100644 padrino/notejam/app/controllers/user.rb delete mode 100644 padrino/notejam/app/helpers.rb delete mode 100644 padrino/notejam/app/helpers/user_helper.rb delete mode 100644 padrino/notejam/app/mailers.rb delete mode 100644 padrino/notejam/app/mailers/mailer.rb delete mode 100644 padrino/notejam/app/views/layouts/layout.html.erb delete mode 100644 padrino/notejam/app/views/layouts/user.html.erb delete mode 100644 padrino/notejam/app/views/mailers/mailer/new_password_email.erb delete mode 100644 padrino/notejam/app/views/note/create.html.erb delete mode 100644 padrino/notejam/app/views/note/delete.html.erb delete mode 100644 padrino/notejam/app/views/note/edit.html.erb delete mode 100644 padrino/notejam/app/views/note/list.html.erb delete mode 100644 padrino/notejam/app/views/note/view.html.erb delete mode 100644 padrino/notejam/app/views/pad/create.html.erb delete mode 100644 padrino/notejam/app/views/pad/delete.html.erb delete mode 100644 padrino/notejam/app/views/pad/edit.html.erb delete mode 100644 padrino/notejam/app/views/pad/view.html.erb delete mode 100644 padrino/notejam/app/views/user/forgot-password.html.erb delete mode 100644 padrino/notejam/app/views/user/settings.html.erb delete mode 100644 padrino/notejam/app/views/user/signin.html.erb delete mode 100644 padrino/notejam/app/views/user/signup.html.erb delete mode 100644 padrino/notejam/config.ru delete mode 100644 padrino/notejam/config/apps.rb delete mode 100644 padrino/notejam/config/boot.rb delete mode 100644 padrino/notejam/config/database.rb delete mode 100644 padrino/notejam/db/migrate/001_create_users.rb delete mode 100644 padrino/notejam/db/seeds.rb delete mode 100644 padrino/notejam/models/note.rb delete mode 100644 padrino/notejam/models/pad.rb delete mode 100644 padrino/notejam/models/user.rb delete mode 100644 padrino/notejam/public/admin/images/favicon.ico delete mode 100644 padrino/notejam/public/admin/images/font/FontAwesome.otf delete mode 100644 padrino/notejam/public/admin/images/font/fontawesome-webfont.eot delete mode 100644 padrino/notejam/public/admin/images/font/fontawesome-webfont.svg delete mode 100644 padrino/notejam/public/admin/images/font/fontawesome-webfont.ttf delete mode 100644 padrino/notejam/public/admin/images/font/fontawesome-webfont.woff delete mode 100644 padrino/notejam/public/admin/images/logo.png delete mode 100644 padrino/notejam/public/admin/javascripts/application.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/affix.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/alert.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/bootstrap.min.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/button.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/carousel.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/collapse.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/dropdown.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/modal.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/popover.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/scrollspy.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/tab.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/tooltip.js delete mode 100644 padrino/notejam/public/admin/javascripts/bootstrap/transition.js delete mode 100644 padrino/notejam/public/admin/javascripts/jquery-1.9.0.min.js delete mode 100644 padrino/notejam/public/favicon.ico delete mode 100644 padrino/notejam/public/stylesheets/style.css delete mode 100644 padrino/notejam/spec/app/controllers/note_controller_spec.rb delete mode 100644 padrino/notejam/spec/app/controllers/pad_controller_spec.rb delete mode 100644 padrino/notejam/spec/app/controllers/user_controller_spec.rb delete mode 100644 padrino/notejam/spec/spec.rake delete mode 100644 padrino/notejam/spec/spec_helper.rb delete mode 100644 pyramid/CHANGES.txt delete mode 100644 pyramid/MANIFEST.in delete mode 100644 pyramid/README.rst delete mode 100644 pyramid/README.txt delete mode 100644 pyramid/development.ini delete mode 100644 pyramid/notejam/__init__.py delete mode 100644 pyramid/notejam/forms.py delete mode 100644 pyramid/notejam/models.py delete mode 100644 pyramid/notejam/scripts/__init__.py delete mode 100644 pyramid/notejam/scripts/initializedb.py delete mode 100644 pyramid/notejam/static/css/base.css delete mode 100644 pyramid/notejam/static/css/layout.css delete mode 100644 pyramid/notejam/static/css/skeleton.css delete mode 100644 pyramid/notejam/static/css/style.css delete mode 100644 pyramid/notejam/static/css/tables.css delete mode 100644 pyramid/notejam/static/favicon.ico delete mode 100644 pyramid/notejam/static/footerbg.png delete mode 100644 pyramid/notejam/static/headerbg.png delete mode 100644 pyramid/notejam/static/ie6.css delete mode 100644 pyramid/notejam/static/middlebg.png delete mode 100644 pyramid/notejam/static/pylons.css delete mode 100644 pyramid/notejam/static/pyramid-small.png delete mode 100644 pyramid/notejam/static/pyramid.png delete mode 100644 pyramid/notejam/static/transparent.gif delete mode 100644 pyramid/notejam/templates/app_layout.pt delete mode 100644 pyramid/notejam/templates/base.pt delete mode 100644 pyramid/notejam/templates/notes/create.pt delete mode 100644 pyramid/notejam/templates/notes/delete.pt delete mode 100644 pyramid/notejam/templates/notes/edit.pt delete mode 100644 pyramid/notejam/templates/notes/list.pt delete mode 100644 pyramid/notejam/templates/notes/view.pt delete mode 100644 pyramid/notejam/templates/pads/create.pt delete mode 100644 pyramid/notejam/templates/pads/delete.pt delete mode 100644 pyramid/notejam/templates/pads/edit.pt delete mode 100644 pyramid/notejam/templates/pads/note_list.pt delete mode 100644 pyramid/notejam/templates/snippets.pt delete mode 100644 pyramid/notejam/templates/user_layout.pt delete mode 100644 pyramid/notejam/templates/users/forgot_password.pt delete mode 100644 pyramid/notejam/templates/users/settings.pt delete mode 100644 pyramid/notejam/templates/users/signin.pt delete mode 100644 pyramid/notejam/templates/users/signup.pt delete mode 100644 pyramid/notejam/tests.py delete mode 100644 pyramid/notejam/views.py delete mode 100644 pyramid/production.ini delete mode 100644 pyramid/setup.cfg delete mode 100644 pyramid/setup.py delete mode 100644 rubyonrails/README.rst delete mode 100644 rubyonrails/notejam/.gitignore delete mode 100644 rubyonrails/notejam/Gemfile delete mode 100644 rubyonrails/notejam/Gemfile.lock delete mode 100644 rubyonrails/notejam/README.rdoc delete mode 100644 rubyonrails/notejam/Rakefile delete mode 100644 rubyonrails/notejam/app/assets/images/.keep delete mode 100644 rubyonrails/notejam/app/assets/javascripts/application.js delete mode 100644 rubyonrails/notejam/app/assets/javascripts/note.js.coffee delete mode 100644 rubyonrails/notejam/app/assets/javascripts/pad.js.coffee delete mode 100644 rubyonrails/notejam/app/assets/javascripts/user.js.coffee delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/application.css delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/base.css delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/layout.css delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/note.css.scss delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/pad.css.scss delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/skeleton.css delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/style.css delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/tables.css delete mode 100644 rubyonrails/notejam/app/assets/stylesheets/user.css.scss delete mode 100644 rubyonrails/notejam/app/controllers/application_controller.rb delete mode 100644 rubyonrails/notejam/app/controllers/notes_controller.rb delete mode 100644 rubyonrails/notejam/app/controllers/pads_controller.rb delete mode 100644 rubyonrails/notejam/app/controllers/users_controller.rb delete mode 100644 rubyonrails/notejam/app/helpers/application_helper.rb delete mode 100644 rubyonrails/notejam/app/helpers/note_helper.rb delete mode 100644 rubyonrails/notejam/app/helpers/pad_helper.rb delete mode 100644 rubyonrails/notejam/app/helpers/user_helper.rb delete mode 100644 rubyonrails/notejam/app/mailers/.keep delete mode 100644 rubyonrails/notejam/app/mailers/user_mailer.rb delete mode 100644 rubyonrails/notejam/app/models/.keep delete mode 100644 rubyonrails/notejam/app/models/note.rb delete mode 100644 rubyonrails/notejam/app/models/pad.rb delete mode 100644 rubyonrails/notejam/app/models/user.rb delete mode 100644 rubyonrails/notejam/app/views/layouts/application.html.erb delete mode 100644 rubyonrails/notejam/app/views/layouts/users.html.erb delete mode 100644 rubyonrails/notejam/app/views/notes/create.html.erb delete mode 100644 rubyonrails/notejam/app/views/notes/delete.html.erb delete mode 100644 rubyonrails/notejam/app/views/notes/edit.html.erb delete mode 100644 rubyonrails/notejam/app/views/notes/index.html.erb delete mode 100644 rubyonrails/notejam/app/views/notes/show.html.erb delete mode 100644 rubyonrails/notejam/app/views/pads/create.html.erb delete mode 100644 rubyonrails/notejam/app/views/pads/delete.html.erb delete mode 100644 rubyonrails/notejam/app/views/pads/edit.html.erb delete mode 100644 rubyonrails/notejam/app/views/pads/show.html.erb delete mode 100644 rubyonrails/notejam/app/views/user_mailer/send_new_password.text.erb delete mode 100644 rubyonrails/notejam/app/views/users/forgot_password.html.erb delete mode 100644 rubyonrails/notejam/app/views/users/settings.html.erb delete mode 100644 rubyonrails/notejam/app/views/users/signin.html.erb delete mode 100644 rubyonrails/notejam/app/views/users/signup.html.erb delete mode 100755 rubyonrails/notejam/bin/bundle delete mode 100755 rubyonrails/notejam/bin/rails delete mode 100755 rubyonrails/notejam/bin/rake delete mode 100644 rubyonrails/notejam/config.ru delete mode 100644 rubyonrails/notejam/config/application.rb delete mode 100644 rubyonrails/notejam/config/boot.rb delete mode 100644 rubyonrails/notejam/config/database.yml delete mode 100644 rubyonrails/notejam/config/environment.rb delete mode 100644 rubyonrails/notejam/config/environments/development.rb delete mode 100644 rubyonrails/notejam/config/environments/production.rb delete mode 100644 rubyonrails/notejam/config/environments/test.rb delete mode 100644 rubyonrails/notejam/config/initializers/assets.rb delete mode 100644 rubyonrails/notejam/config/initializers/backtrace_silencers.rb delete mode 100644 rubyonrails/notejam/config/initializers/cookies_serializer.rb delete mode 100644 rubyonrails/notejam/config/initializers/filter_parameter_logging.rb delete mode 100644 rubyonrails/notejam/config/initializers/inflections.rb delete mode 100644 rubyonrails/notejam/config/initializers/mime_types.rb delete mode 100644 rubyonrails/notejam/config/initializers/secret_token.rb delete mode 100644 rubyonrails/notejam/config/initializers/session_store.rb delete mode 100644 rubyonrails/notejam/config/initializers/wrap_parameters.rb delete mode 100644 rubyonrails/notejam/config/locales/en.yml delete mode 100644 rubyonrails/notejam/config/routes.rb delete mode 100644 rubyonrails/notejam/config/secrets.yml delete mode 100644 rubyonrails/notejam/db/migrate/20140409143934_create_users.rb delete mode 100644 rubyonrails/notejam/db/migrate/20140414192524_create_pads.rb delete mode 100644 rubyonrails/notejam/db/migrate/20140418215526_create_notes.rb delete mode 100644 rubyonrails/notejam/db/schema.rb delete mode 100644 rubyonrails/notejam/db/seeds.rb delete mode 100644 rubyonrails/notejam/log/.keep delete mode 100644 rubyonrails/notejam/public/404.html delete mode 100644 rubyonrails/notejam/public/422.html delete mode 100644 rubyonrails/notejam/public/500.html delete mode 100644 rubyonrails/notejam/public/favicon.ico delete mode 100644 rubyonrails/notejam/public/robots.txt delete mode 100644 rubyonrails/notejam/test/controllers/.keep delete mode 100644 rubyonrails/notejam/test/controllers/notes_controller_test.rb delete mode 100644 rubyonrails/notejam/test/controllers/pads_controller_test.rb delete mode 100644 rubyonrails/notejam/test/controllers/users_controller_test.rb delete mode 100644 rubyonrails/notejam/test/fixtures/.keep delete mode 100644 rubyonrails/notejam/test/fixtures/notes.yml delete mode 100644 rubyonrails/notejam/test/fixtures/pads.yml delete mode 100644 rubyonrails/notejam/test/fixtures/users.yml delete mode 100644 rubyonrails/notejam/test/helpers/.keep delete mode 100644 rubyonrails/notejam/test/helpers/note_helper_test.rb delete mode 100644 rubyonrails/notejam/test/helpers/pad_helper_test.rb delete mode 100644 rubyonrails/notejam/test/helpers/user_helper_test.rb delete mode 100644 rubyonrails/notejam/test/integration/.keep delete mode 100644 rubyonrails/notejam/test/mailers/.keep delete mode 100644 rubyonrails/notejam/test/mailers/user_mailer_test.rb delete mode 100644 rubyonrails/notejam/test/models/.keep delete mode 100644 rubyonrails/notejam/test/models/note_test.rb delete mode 100644 rubyonrails/notejam/test/models/pad_test.rb delete mode 100644 rubyonrails/notejam/test/models/user_test.rb delete mode 100644 rubyonrails/notejam/test/test_helper.rb delete mode 100644 rubyonrails/notejam/vendor/assets/javascripts/.keep delete mode 100644 rubyonrails/notejam/vendor/assets/stylesheets/.keep delete mode 100644 spring/.gitignore delete mode 100644 spring/README.rst delete mode 100644 spring/pom.xml delete mode 100644 spring/src/main/java/net/notejam/spring/Application.java delete mode 100644 spring/src/main/java/net/notejam/spring/URITemplates.java delete mode 100644 spring/src/main/java/net/notejam/spring/error/ForcedErrorController.java delete mode 100644 spring/src/main/java/net/notejam/spring/error/ResourceNotFoundException.java delete mode 100644 spring/src/main/java/net/notejam/spring/error/UnsupportedLocaleException.java delete mode 100644 spring/src/main/java/net/notejam/spring/error/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/helper/converter/StringToPeriodConverter.java delete mode 100644 spring/src/main/java/net/notejam/spring/helper/converter/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/helper/reflection/Annotated.java delete mode 100644 spring/src/main/java/net/notejam/spring/helper/reflection/ReflectionUtils.java delete mode 100644 spring/src/main/java/net/notejam/spring/helper/reflection/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/Note.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/NoteRepository.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/NoteService.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/controller/AllNotesController.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/controller/CreateNoteController.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/controller/DeleteNoteController.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/controller/EditNoteController.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/controller/ViewNoteController.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/controller/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/note/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/Pad.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/PadRepository.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/PadService.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/controller/CreatePadController.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/controller/DeletePadController.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/controller/EditPadController.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/controller/PadsAdvice.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/controller/ViewPadNotesController.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/controller/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/pad/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/LoginController.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/SecurityConfiguration.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/SecurityService.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/UserDetailsServiceImpl.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/owner/Owned.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/owner/PermitOwner.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/owner/PermitOwnerAspect.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/owner/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/security/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/User.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/UserRepository.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/UserService.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/account/Account.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/account/AccountController.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/account/constraints/CurrentPassword.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/account/constraints/CurrentPasswordValidator.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/account/constraints/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/account/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/constraints/Password.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/constraints/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/forgot/ForgotPassword.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/forgot/ForgotPasswordController.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/forgot/InvalidTokenException.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/forgot/PasswordRecoveryService.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/forgot/RecoverPasswordController.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/forgot/RecoveryToken.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/forgot/RecoveryTokenRepository.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/forgot/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/signup/Signup.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/signup/SignupController.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/signup/constraints/UniqueEmail.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/signup/constraints/UniqueEmailValidator.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/signup/constraints/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/user/signup/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/view/ViewConfiguration.java delete mode 100644 spring/src/main/java/net/notejam/spring/view/dialect/NaturalLanguageDateProcessor.java delete mode 100644 spring/src/main/java/net/notejam/spring/view/dialect/NoteTextProcessor.java delete mode 100644 spring/src/main/java/net/notejam/spring/view/dialect/NotejamDialect.java delete mode 100644 spring/src/main/java/net/notejam/spring/view/dialect/ProcessorUtil.java delete mode 100644 spring/src/main/java/net/notejam/spring/view/dialect/package-info.java delete mode 100644 spring/src/main/java/net/notejam/spring/view/package-info.java delete mode 100644 spring/src/main/resources/application.properties delete mode 100644 spring/src/main/resources/messages_de.properties delete mode 100644 spring/src/main/resources/messages_en.properties delete mode 100644 spring/src/main/resources/static/css/style.css delete mode 100644 spring/src/main/resources/templates/error.html delete mode 100644 spring/src/main/resources/templates/layout.html delete mode 100644 spring/src/main/resources/templates/note/create.html delete mode 100644 spring/src/main/resources/templates/note/delete.html delete mode 100644 spring/src/main/resources/templates/note/edit.html delete mode 100644 spring/src/main/resources/templates/note/view.html delete mode 100644 spring/src/main/resources/templates/notes.html delete mode 100644 spring/src/main/resources/templates/pad/create.html delete mode 100644 spring/src/main/resources/templates/pad/delete.html delete mode 100644 spring/src/main/resources/templates/pad/edit.html delete mode 100644 spring/src/main/resources/templates/user/account.html delete mode 100644 spring/src/main/resources/templates/user/forgot-password.html delete mode 100644 spring/src/main/resources/templates/user/login.html delete mode 100644 spring/src/main/resources/templates/user/reveal-password.html delete mode 100644 spring/src/main/resources/templates/user/signup.html delete mode 100644 spring/src/test/java/net/notejam/spring/helper/converter/StringToPeriodConverterTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/note/CreateNoteControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/note/DeleteNoteControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/note/EditNoteControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/note/NoteServiceTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/note/ViewNoteControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/pad/CreatePadControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/pad/DeletePadControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/pad/EditPadControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/pad/ViewPadControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/security/LoginControllerTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/security/SecurityServiceTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/security/owner/PermitOwnerAspectTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/security/owner/PermitOwnerIntegrationTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/test/IntegrationTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/test/MockMvcProvider.java delete mode 100644 spring/src/test/java/net/notejam/spring/test/UriUtil.java delete mode 100644 spring/src/test/java/net/notejam/spring/user/SignedUpUserProvider.java delete mode 100644 spring/src/test/java/net/notejam/spring/user/UserServiceTest.java delete mode 100644 spring/src/test/java/net/notejam/spring/user/signup/SignupControllerTest.java delete mode 100644 spring/src/test/resources/application-test.properties delete mode 100644 symfony/README.rst delete mode 100644 symfony/notejam/.gitignore delete mode 100644 symfony/notejam/.travis.yml delete mode 100644 symfony/notejam/LICENSE delete mode 100644 symfony/notejam/app/.htaccess delete mode 100644 symfony/notejam/app/AppCache.php delete mode 100644 symfony/notejam/app/AppKernel.php delete mode 100644 symfony/notejam/app/Resources/translations/messages.fr.xlf delete mode 100644 symfony/notejam/app/Resources/views/base.html.twig delete mode 100644 symfony/notejam/app/Resources/views/fields.html.twig delete mode 100644 symfony/notejam/app/Resources/views/user.html.twig delete mode 100644 symfony/notejam/app/SymfonyRequirements.php delete mode 100644 symfony/notejam/app/autoload.php delete mode 100644 symfony/notejam/app/cache/.gitkeep delete mode 100644 symfony/notejam/app/check.php delete mode 100644 symfony/notejam/app/config/config.yml delete mode 100644 symfony/notejam/app/config/config_dev.yml delete mode 100644 symfony/notejam/app/config/config_prod.yml delete mode 100644 symfony/notejam/app/config/config_test.yml delete mode 100644 symfony/notejam/app/config/parameters.yml delete mode 100644 symfony/notejam/app/config/parameters.yml.dist delete mode 100644 symfony/notejam/app/config/routing.yml delete mode 100644 symfony/notejam/app/config/routing_dev.yml delete mode 100644 symfony/notejam/app/config/security.yml delete mode 100644 symfony/notejam/app/config/services.yml delete mode 100755 symfony/notejam/app/console delete mode 100644 symfony/notejam/app/logs/.gitkeep delete mode 100644 symfony/notejam/app/phpunit.xml.dist delete mode 100644 symfony/notejam/composer.json delete mode 100644 symfony/notejam/composer.lock delete mode 100644 symfony/notejam/src/.htaccess delete mode 100644 symfony/notejam/src/AppBundle/AppBundle.php delete mode 100644 symfony/notejam/src/AppBundle/Controller/NoteController.php delete mode 100644 symfony/notejam/src/AppBundle/Controller/PadController.php delete mode 100644 symfony/notejam/src/AppBundle/Controller/UserController.php delete mode 100644 symfony/notejam/src/AppBundle/Entity/Note.php delete mode 100644 symfony/notejam/src/AppBundle/Entity/Pad.php delete mode 100644 symfony/notejam/src/AppBundle/Entity/User.php delete mode 100644 symfony/notejam/src/AppBundle/Form/Type/ChangePasswordType.php delete mode 100644 symfony/notejam/src/AppBundle/Form/Type/NoteType.php delete mode 100644 symfony/notejam/src/AppBundle/Form/Type/PadType.php delete mode 100644 symfony/notejam/src/AppBundle/Form/Type/UserType.php delete mode 100644 symfony/notejam/src/AppBundle/Repository/NoteRepository.php delete mode 100644 symfony/notejam/src/AppBundle/Repository/PadRepository.php delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Note/create.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Note/delete.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Note/edit.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Note/list.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Note/view.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Pad/create.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Pad/delete.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Pad/edit.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Pad/list.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/Pad/notes.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/User/forgot-password.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/User/index.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/User/settings.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/User/signin.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Resources/views/User/signup.html.twig delete mode 100644 symfony/notejam/src/AppBundle/Tests/Controller/NoteControllerTest.php delete mode 100644 symfony/notejam/src/AppBundle/Tests/Controller/PadControllerTest.php delete mode 100644 symfony/notejam/web/.htaccess delete mode 100644 symfony/notejam/web/app.php delete mode 100644 symfony/notejam/web/app_dev.php delete mode 100644 symfony/notejam/web/apple-touch-icon.png delete mode 100644 symfony/notejam/web/config.php delete mode 100644 symfony/notejam/web/css/style.css delete mode 100644 symfony/notejam/web/favicon.ico delete mode 100644 symfony/notejam/web/robots.txt delete mode 100644 terraform/modules/terraform-aws-ecs-codepipeline/fixtures.us-east-2.tfvars delete mode 100644 terraform/modules/terraform-aws-ecs-codepipeline/main.tf delete mode 100644 terraform/modules/terraform-aws-ecs-codepipeline/outputs.tf delete mode 100644 terraform/modules/terraform-aws-ecs-codepipeline/variables.tf delete mode 100644 terraform/modules/terraform-aws-ecs-codepipeline/versions.tf delete mode 100644 terraform/modules/terraform-aws-elastic-beanstalk-environment/fixtures.us-east-2.tfvars delete mode 100644 terraform/modules/terraform-aws-elastic-beanstalk-environment/main.tf delete mode 100644 terraform/modules/terraform-aws-elastic-beanstalk-environment/outputs.tf delete mode 100644 terraform/modules/terraform-aws-elastic-beanstalk-environment/variables.tf delete mode 100644 terraform/modules/terraform-aws-elastic-beanstalk-environment/versions.tf delete mode 100644 yii/README.rst delete mode 100644 yii/notejam/.gitignore delete mode 100644 yii/notejam/assets/AppAsset.php delete mode 100644 yii/notejam/codeception.yml delete mode 100644 yii/notejam/composer.json delete mode 100644 yii/notejam/composer.lock delete mode 100644 yii/notejam/config/db.php delete mode 100644 yii/notejam/config/params.php delete mode 100644 yii/notejam/config/web.php delete mode 100644 yii/notejam/controllers/BaseController.php delete mode 100644 yii/notejam/controllers/NoteController.php delete mode 100644 yii/notejam/controllers/PadController.php delete mode 100644 yii/notejam/controllers/UserController.php delete mode 100644 yii/notejam/mail/layouts/html.php delete mode 100644 yii/notejam/mail/password.php delete mode 100644 yii/notejam/migrations/m140804_111205_create_tables.php delete mode 100644 yii/notejam/models/ChangePassword.php delete mode 100644 yii/notejam/models/ForgotPassword.php delete mode 100644 yii/notejam/models/LoginForm.php delete mode 100644 yii/notejam/models/Note.php delete mode 100644 yii/notejam/models/Pad.php delete mode 100644 yii/notejam/models/SigninForm.php delete mode 100644 yii/notejam/models/SignupForm.php delete mode 100644 yii/notejam/models/User.php delete mode 100644 yii/notejam/requirements.php delete mode 100644 yii/notejam/runtime/.gitignore delete mode 100644 yii/notejam/tests/.gitignore delete mode 100644 yii/notejam/tests/README.md delete mode 100644 yii/notejam/tests/_bootstrap.php delete mode 100644 yii/notejam/tests/_config.php delete mode 100644 yii/notejam/tests/_console_bootstrap.php delete mode 100644 yii/notejam/tests/_data/dump.sql delete mode 100644 yii/notejam/tests/_log/.gitignore delete mode 100644 yii/notejam/tests/_pages/CreateNotePage.php delete mode 100644 yii/notejam/tests/_pages/CreatePadPage.php delete mode 100644 yii/notejam/tests/_pages/DeleteNotePage.php delete mode 100644 yii/notejam/tests/_pages/DeletePadPage.php delete mode 100644 yii/notejam/tests/_pages/EditNotePage.php delete mode 100644 yii/notejam/tests/_pages/EditPadPage.php delete mode 100644 yii/notejam/tests/_pages/SignedInPage.php delete mode 100644 yii/notejam/tests/_pages/SigninPage.php delete mode 100644 yii/notejam/tests/_pages/SignupPage.php delete mode 100644 yii/notejam/tests/_pages/ViewNotePage.php delete mode 100644 yii/notejam/tests/_pages/ViewPadPage.php delete mode 100644 yii/notejam/tests/acceptance.suite.yml delete mode 100644 yii/notejam/tests/acceptance/_bootstrap.php delete mode 100644 yii/notejam/tests/acceptance/_config.php delete mode 100644 yii/notejam/tests/acceptance/_console.php delete mode 100644 yii/notejam/tests/acceptance/yii delete mode 100644 yii/notejam/tests/acceptance/yii.bat delete mode 100644 yii/notejam/tests/functional.suite.yml delete mode 100644 yii/notejam/tests/functional/CreateNoteCept.php delete mode 100644 yii/notejam/tests/functional/CreatePadCept.php delete mode 100644 yii/notejam/tests/functional/DeleteNoteCept.php delete mode 100644 yii/notejam/tests/functional/DeletePadCept.php delete mode 100644 yii/notejam/tests/functional/EditNoteCept.php delete mode 100644 yii/notejam/tests/functional/EditPadCept.php delete mode 100644 yii/notejam/tests/functional/SigninCept.php delete mode 100644 yii/notejam/tests/functional/SignupCept.php delete mode 100644 yii/notejam/tests/functional/ViewNoteCept.php delete mode 100644 yii/notejam/tests/functional/ViewPadCept.php delete mode 100644 yii/notejam/tests/functional/_bootstrap.php delete mode 100644 yii/notejam/tests/functional/_config.php delete mode 100644 yii/notejam/tests/functional/_console.php delete mode 100755 yii/notejam/tests/functional/yii delete mode 100644 yii/notejam/tests/functional/yii.bat delete mode 100644 yii/notejam/tests/unit.suite.yml delete mode 100644 yii/notejam/tests/unit/_bootstrap.php delete mode 100644 yii/notejam/tests/unit/_config.php delete mode 100644 yii/notejam/tests/unit/_console.php delete mode 100644 yii/notejam/tests/unit/fixtures/.gitkeep delete mode 100644 yii/notejam/tests/unit/fixtures/data/.gitkeep delete mode 100644 yii/notejam/tests/unit/templates/fixtures/.gitkeep delete mode 100644 yii/notejam/tests/unit/yii delete mode 100644 yii/notejam/tests/unit/yii.bat delete mode 100644 yii/notejam/views/layouts/app.php delete mode 100644 yii/notejam/views/layouts/base.php delete mode 100644 yii/notejam/views/layouts/user.php delete mode 100644 yii/notejam/views/note/create.php delete mode 100644 yii/notejam/views/note/delete.php delete mode 100644 yii/notejam/views/note/edit.php delete mode 100644 yii/notejam/views/note/error.php delete mode 100644 yii/notejam/views/note/form.php delete mode 100644 yii/notejam/views/note/list.php delete mode 100644 yii/notejam/views/note/view.php delete mode 100644 yii/notejam/views/pad/create.php delete mode 100644 yii/notejam/views/pad/delete.php delete mode 100644 yii/notejam/views/pad/edit.php delete mode 100644 yii/notejam/views/pad/form.php delete mode 100644 yii/notejam/views/pad/view.php delete mode 100644 yii/notejam/views/partials/errors.php delete mode 100644 yii/notejam/views/user/forgot-password.php delete mode 100644 yii/notejam/views/user/settings.php delete mode 100644 yii/notejam/views/user/signin.php delete mode 100644 yii/notejam/views/user/signup.php delete mode 100644 yii/notejam/web/assets/.gitignore delete mode 100644 yii/notejam/web/css/site.css delete mode 100644 yii/notejam/web/css/style.css delete mode 100644 yii/notejam/web/favicon.ico delete mode 100644 yii/notejam/web/index-test.php delete mode 100644 yii/notejam/web/index.php delete mode 100644 yii/notejam/web/robots.txt delete mode 100755 yii/notejam/yii delete mode 100644 yii/notejam/yii.bat diff --git a/CA_TECH b/CA_TECH deleted file mode 100644 index 3ef2665c8..000000000 --- a/CA_TECH +++ /dev/null @@ -1,84 +0,0 @@ -#!groovy - -node('slave_CA_notejam') { - /*stage('Clean Environment') { - cleanWs() - } - - stage('Code Check Out') { - withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', accessKeyVariable: 'AWS_ACCESS_KEY_ID', credentialsId: 'jenkins-service-account', secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) { - sh label: '', script: '''git config --global credential.helper \'!aws --profile assume_mobile codecommit credential-helper $@\'''' - */// checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-service-codecommit', url: 'https://git-codecommit.eu-central-1.amazonaws.com/v1/repos/ma_android-platform']]]) - /* } - }*/ - - /*stage('SonarQube Code Analysis') { - echo 'Analysing code...' - withSonarQubeEnv('SonarQube') { - sh returnStdout: true, script: ''' - gradle wrapper - ./gradlew sonarqube -x compileDebugAndroidTestKotlin -x compileDebugUnitTestKotlin -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.projectKey=${JOB_BASE_NAME} -Dsonar.projectName=$JOB_BASE_NAME -Dsonar.projectVersion=1.0-SNAPSHOT - ''' - sleep 10; - } - }*/ - - stage('SonarQube Code Analysis') { - echo 'Analysing code...' - withSonarQubeEnv('SonarQube') { - sh returnStdout: true, script: ''' - gradle wrapper - ./gradlew sonarqube -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.projectKey=${JOB_BASE_NAME} -Dsonar.projectName=$JOB_BASE_NAME -Dsonar.projectVersion=1.0-SNAPSHOT - ''' - sleep 10; - } - } - - stage("SonarQube Quality-Gate Validation") { - echo 'Quality Gate Verification...' - timeout(time: 1, unit: 'MINUTES') { - def qg = waitForQualityGate() - if (qg.status != 'OK') { - error "Pipeline aborted due to quality gate failure: ${qg.status}" - } - } - } - - stage('Build') { - echo 'Building ..' - sh returnStdout: true, script: ''' - ./gradlew clean assembleDebug - ''' - } - - stage('Push .APK to Nexus') { - withEnv([ - 'NEXUS_CREDS=nexus-service-account', - 'NEXUS_URL=artifacts.le.tnt.bank.ikano', - 'NEXUS_REPO=maven-snapshots', - 'NEXUS_PROTOCOL=https', - 'NEXUS_VERSION=nexus3' - ]) { - filesByGlob = findFiles(glob: "app/build/outputs/apk/debug/*.apk"); - artifactPath = filesByGlob[0].path; - artifactExists = fileExists artifactPath - if(artifactExists) { - nexusArtifactUploader( - nexusVersion: NEXUS_VERSION, - protocol: NEXUS_PROTOCOL, - nexusUrl: NEXUS_URL, - groupId: 'com.ikano.ipay.mobile', - version: '1.0-SNAPSHOT', - repository: NEXUS_REPO, - credentialsId: NEXUS_CREDS, - artifacts: [ - [artifactId: 'ma_android-platform', - type: 'apk', - file: artifactPath, - classifier: ''] - ] - ) - } - } - } -} diff --git a/cakephp/README.rst b/cakephp/README.rst deleted file mode 100644 index 606fd5e89..000000000 --- a/cakephp/README.rst +++ /dev/null @@ -1,88 +0,0 @@ -**************** -Notejam: CakePHP -**************** - -Notejam application implemented using `CakePHP `_ framework. - -CakePHP version: 3.1 - -PHP version required: 5.5+ - -========================== -Installation and launching -========================== - ------ -Clone ------ - -Clone the repo: - -.. code-block:: bash - - $ git clone git@github.com:komarserjio/notejam.git YOUR_PROJECT_DIR/ - -------- -Install -------- - -Install `composer `_ - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/cakephp/notejam - $ curl -s https://getcomposer.org/installer | php - -Install dependencies - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/cakephp/notejam - $ php composer.phar install - -Create database schema - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/cakephp/notejam - $ ./bin/cake migrations migrate - - ------- -Launch ------- - -Start built-in php web server: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/cakephp/notejam - $ ./bin/cake server - -Go to http://localhost:8765 in your browser. - ---------- -Run tests ---------- - -Run functional tests: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/cakephp/notejam/ - $ ./vendor/bin/phpunit - - -============ -Contribution -============ -Do you have CakePHP experience? Help the app to follow PHP and CakePHP best practices. - -Please send your pull requests in the ``master`` branch. -Always prepend your commits with framework name: - -.. code-block:: bash - - CakePHP: Implemented sign in functionality - -Read `contribution guide `_ for details. diff --git a/cakephp/notejam/.editorconfig b/cakephp/notejam/.editorconfig deleted file mode 100644 index 706190175..000000000 --- a/cakephp/notejam/.editorconfig +++ /dev/null @@ -1,18 +0,0 @@ -; This file is for unifying the coding style for different editors and IDEs. -; More information at http://editorconfig.org - -root = true - -[*] -indent_style = space -indent_size = 4 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -[*.bat] -end_of_line = crlf - -[*.yml] -indent_style = space -indent_size = 2 diff --git a/cakephp/notejam/.gitattributes b/cakephp/notejam/.gitattributes deleted file mode 100644 index 926a808fc..000000000 --- a/cakephp/notejam/.gitattributes +++ /dev/null @@ -1,36 +0,0 @@ -# Define the line ending behavior of the different file extensions -# Set default behaviour, in case users don't have core.autocrlf set. -* text=auto -* text eol=lf - -# Explicitly declare text files we want to always be normalized and converted -# to native line endings on checkout. -*.php text -*.default text -*.ctp text -*.sql text -*.md text -*.po text -*.js text -*.css text -*.ini text -*.properties text -*.txt text -*.xml text -*.yml text -.htaccess text - -# Declare files that will always have CRLF line endings on checkout. -*.bat eol=crlf - -# Declare files that will always have LF line endings on checkout. -*.pem eol=lf - -# Denote all files that are truly binary and should not be modified. -*.png binary -*.jpg binary -*.gif binary -*.ico binary -*.mo binary -*.pdf binary -*.phar binary diff --git a/cakephp/notejam/.gitignore b/cakephp/notejam/.gitignore deleted file mode 100644 index 46bc8c5c9..000000000 --- a/cakephp/notejam/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/vendor/* -/tmp/* -/logs/* -composer.lock diff --git a/cakephp/notejam/.htaccess b/cakephp/notejam/.htaccess deleted file mode 100644 index fc3aac4b2..000000000 --- a/cakephp/notejam/.htaccess +++ /dev/null @@ -1,5 +0,0 @@ - - RewriteEngine on - RewriteRule ^$ webroot/ [L] - RewriteRule (.*) webroot/$1 [L] - \ No newline at end of file diff --git a/cakephp/notejam/.travis.yml b/cakephp/notejam/.travis.yml deleted file mode 100644 index b9b337904..000000000 --- a/cakephp/notejam/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: php - -sudo: false - -php: - - 5.4 - - 5.5 - - 5.6 - -before_script: - - sh -c "composer require 'cakephp/cakephp-codesniffer:dev-master'" - - phpenv rehash - -script: - - sh -c "vendor/bin/phpcs -p --extensions=php --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests ./config ./webroot" - -notifications: - email: false diff --git a/cakephp/notejam/bin/cake b/cakephp/notejam/bin/cake deleted file mode 100755 index ffdacace9..000000000 --- a/cakephp/notejam/bin/cake +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bash -################################################################################ -# -# Bake is a shell script for running CakePHP bake script -# -# CakePHP(tm) : Rapid Development Framework (http://cakephp.org) -# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# -# @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) -# @link http://cakephp.org CakePHP(tm) Project -# @since 1.2.0 -# @license http://www.opensource.org/licenses/mit-license.php MIT License -# -################################################################################ - -# Canonicalize by following every symlink of the given name recursively -canonicalize() { - NAME="$1" - if [ -f "$NAME" ] - then - DIR=$(dirname -- "$NAME") - NAME=$(cd -P "$DIR" > /dev/null && pwd -P)/$(basename -- "$NAME") - fi - while [ -h "$NAME" ]; do - DIR=$(dirname -- "$NAME") - SYM=$(readlink "$NAME") - NAME=$(cd "$DIR" > /dev/null && cd $(dirname -- "$SYM") > /dev/null && pwd)/$(basename -- "$SYM") - done - echo "$NAME" -} - -CONSOLE=$(dirname -- "$(canonicalize "$0")") -APP=$(dirname "$CONSOLE") - -exec php "$CONSOLE"/cake.php "$@" -exit diff --git a/cakephp/notejam/bin/cake.bat b/cakephp/notejam/bin/cake.bat deleted file mode 100644 index dd1d9a821..000000000 --- a/cakephp/notejam/bin/cake.bat +++ /dev/null @@ -1,30 +0,0 @@ -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Bake is a shell script for running CakePHP bake script -:: -:: CakePHP(tm) : Rapid Development Framework (http://cakephp.org) -:: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) -:: -:: Licensed under The MIT License -:: Redistributions of files must retain the above copyright notice. -:: -:: @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) -:: @link http://cakephp.org CakePHP(tm) Project -:: @since 2.0.0 -:: @license http://www.opensource.org/licenses/mit-license.php MIT License -:: -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -:: In order for this script to work as intended, the cake\console\ folder must be in your PATH - -@echo. -@echo off - -SET app=%0 -SET lib=%~dp0 - -php "%lib%cake.php" %* - -echo. - -exit /B %ERRORLEVEL% diff --git a/cakephp/notejam/bin/cake.php b/cakephp/notejam/bin/cake.php deleted file mode 100644 index 4c7d7cef8..000000000 --- a/cakephp/notejam/bin/cake.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/php -q -require->php)) { - $minVersion = preg_replace('/([^0-9\.])/', '', $composer->require->php); - } -} -if (version_compare(phpversion(), $minVersion, '<')) { - fwrite(STDERR, sprintf("Minimum PHP version: %s. You are using: %s.\n", $minVersion, phpversion())); - exit(-1); -} - -include dirname(__DIR__) . '/config/bootstrap.php'; - -exit(Cake\Console\ShellDispatcher::run($argv)); diff --git a/cakephp/notejam/composer.json b/cakephp/notejam/composer.json deleted file mode 100644 index 6f1107153..000000000 --- a/cakephp/notejam/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "cakephp/app", - "description": "Notejam app", - "homepage": "https://github.com/komarserjio/notejam", - "type": "project", - "license": "MIT", - "require": { - "php": ">=5.6.0", - "cakephp/cakephp": "^3.5", - "mobiledetect/mobiledetectlib": "2.*", - "cakephp/migrations": "~1.0", - "cakephp/plugin-installer": "*" - }, - "require-dev": { - "psy/psysh": "@stable", - "cakephp/debug_kit": "~3.0", - "cakephp/bake": "~1.0", - "phpunit/phpunit": "^5.7|^6.0" - }, - "suggest": { - "phpunit/phpunit": "Allows automated tests to be run without system-wide install.", - "cakephp/cakephp-codesniffer": "Allows to check the code against the coding standards used in CakePHP." - }, - "autoload": { - "psr-4": { - "App\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "App\\Test\\": "tests", - "Cake\\Test\\": "./vendor/cakephp/cakephp/tests" - } - }, - "scripts": { - "post-install-cmd": "App\\Console\\Installer::postInstall", - "post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump" - }, - "minimum-stability": "dev", - "prefer-stable": true -} diff --git a/cakephp/notejam/config/Migrations/20150928200943_initial.php b/cakephp/notejam/config/Migrations/20150928200943_initial.php deleted file mode 100644 index 7ba3488b1..000000000 --- a/cakephp/notejam/config/Migrations/20150928200943_initial.php +++ /dev/null @@ -1,141 +0,0 @@ -table('notes'); - $table - ->addColumn('pad_id', 'integer', [ - 'default' => null, - 'limit' => null, - 'null' => true, - ]) - ->addColumn('user_id', 'integer', [ - 'default' => null, - 'limit' => null, - 'null' => false, - ]) - ->addColumn('name', 'string', [ - 'default' => null, - 'limit' => 100, - 'null' => false, - ]) - ->addColumn('text', 'text', [ - 'default' => null, - 'limit' => null, - 'null' => false, - ]) - ->addColumn('created_at', 'datetime', [ - 'default' => null, - 'limit' => null, - 'null' => false, - ]) - ->addColumn('updated_at', 'datetime', [ - 'default' => null, - 'limit' => null, - 'null' => false, - ]) - ->addIndex( - [ - 'pad_id', - ] - ) - ->addIndex( - [ - 'user_id', - ] - ) - ->create(); - - $table = $this->table('pads'); - $table - ->addColumn('name', 'string', [ - 'default' => null, - 'limit' => 100, - 'null' => false, - ]) - ->addColumn('user_id', 'integer', [ - 'default' => null, - 'limit' => null, - 'null' => false, - ]) - ->addIndex( - [ - 'user_id', - ] - ) - ->create(); - - $table = $this->table('users'); - $table - ->addColumn('email', 'string', [ - 'default' => null, - 'limit' => 75, - 'null' => false, - ]) - ->addColumn('password', 'string', [ - 'default' => null, - 'limit' => 128, - 'null' => false, - ]) - ->create(); - - $this->table('notes') - ->addForeignKey( - 'pad_id', - 'pads', - 'id', - [ - 'update' => 'NO_ACTION', - 'delete' => 'NO_ACTION' - ] - ) - ->addForeignKey( - 'user_id', - 'users', - 'id', - [ - 'update' => 'NO_ACTION', - 'delete' => 'NO_ACTION' - ] - ) - ->update(); - - $this->table('pads') - ->addForeignKey( - 'user_id', - 'users', - 'id', - [ - 'update' => 'NO_ACTION', - 'delete' => 'NO_ACTION' - ] - ) - ->update(); - - } - - public function down() - { - $this->table('notes') - ->dropForeignKey( - 'pad_id' - ) - ->dropForeignKey( - 'user_id' - ) - ->update(); - - $this->table('pads') - ->dropForeignKey( - 'user_id' - ) - ->update(); - - $this->dropTable('notes'); - $this->dropTable('pads'); - $this->dropTable('users'); - } -} diff --git a/cakephp/notejam/config/app.default.php b/cakephp/notejam/config/app.default.php deleted file mode 100644 index 52722ccaf..000000000 --- a/cakephp/notejam/config/app.default.php +++ /dev/null @@ -1,326 +0,0 @@ - true, - - /** - * Configure basic information about the application. - * - * - namespace - The namespace to find app classes under. - * - encoding - The encoding used for HTML + database connections. - * - base - The base directory the app resides in. If false this - * will be auto detected. - * - dir - Name of app directory. - * - webroot - The webroot directory. - * - wwwRoot - The file path to webroot. - * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to - * use CakePHP pretty URLs, remove these .htaccess - * files: - * /.htaccess - * /webroot/.htaccess - * And uncomment the baseUrl key below. - * - fullBaseUrl - A base URL to use for absolute links. - * - imageBaseUrl - Web path to the public images directory under webroot. - * - cssBaseUrl - Web path to the public css directory under webroot. - * - jsBaseUrl - Web path to the public js directory under webroot. - * - paths - Configure paths for non class based resources. Supports the - * `plugins`, `templates`, `locales` subkeys, which allow the definition of - * paths for plugins, view templates and locale files respectively. - */ - 'App' => [ - 'namespace' => 'App', - 'encoding' => 'UTF-8', - 'base' => false, - 'dir' => 'src', - 'webroot' => 'webroot', - 'wwwRoot' => WWW_ROOT, - // 'baseUrl' => env('SCRIPT_NAME'), - 'fullBaseUrl' => false, - 'imageBaseUrl' => 'img/', - 'cssBaseUrl' => 'css/', - 'jsBaseUrl' => 'js/', - 'paths' => [ - 'plugins' => [ROOT . DS . 'plugins' . DS], - 'templates' => [APP . 'Template' . DS], - 'locales' => [APP . 'Locale' . DS], - ], - ], - - /** - * Security and encryption configuration - * - * - salt - A random string used in security hashing methods. - * The salt value is also used as the encryption key. - * You should treat it as extremely sensitive data. - */ - 'Security' => [ - 'salt' => '__SALT__', - ], - - /** - * Apply timestamps with the last modified time to static assets (js, css, images). - * Will append a querystring parameter containing the time the file was modified. - * This is useful for busting browser caches. - * - * Set to true to apply timestamps when debug is true. Set to 'force' to always - * enable timestamping regardless of debug value. - */ - 'Asset' => [ - // 'timestamp' => true, - ], - - /** - * Configure the cache adapters. - */ - 'Cache' => [ - 'default' => [ - 'className' => 'File', - 'path' => CACHE, - ], - - /** - * Configure the cache used for general framework caching. Path information, - * object listings, and translation cache files are stored with this - * configuration. - */ - '_cake_core_' => [ - 'className' => 'File', - 'prefix' => 'myapp_cake_core_', - 'path' => CACHE . 'persistent/', - 'serialize' => true, - 'duration' => '+2 minutes', - ], - - /** - * Configure the cache for model and datasource caches. This cache - * configuration is used to store schema descriptions, and table listings - * in connections. - */ - '_cake_model_' => [ - 'className' => 'File', - 'prefix' => 'myapp_cake_model_', - 'path' => CACHE . 'models/', - 'serialize' => true, - 'duration' => '+2 minutes', - ], - ], - - /** - * Configure the Error and Exception handlers used by your application. - * - * By default errors are displayed using Debugger, when debug is true and logged - * by Cake\Log\Log when debug is false. - * - * In CLI environments exceptions will be printed to stderr with a backtrace. - * In web environments an HTML page will be displayed for the exception. - * With debug true, framework errors like Missing Controller will be displayed. - * When debug is false, framework errors will be coerced into generic HTTP errors. - * - * Options: - * - * - `errorLevel` - int - The level of errors you are interested in capturing. - * - `trace` - boolean - Whether or not backtraces should be included in - * logged errors/exceptions. - * - `log` - boolean - Whether or not you want exceptions logged. - * - `exceptionRenderer` - string - The class responsible for rendering - * uncaught exceptions. If you choose a custom class you should place - * the file for that class in src/Error. This class needs to implement a - * render method. - * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that - * extend one of the listed exceptions will also be skipped for logging. - * E.g.: - * `'skipLog' => ['Cake\Network\Exception\NotFoundException', 'Cake\Network\Exception\UnauthorizedException']` - */ - 'Error' => [ - 'errorLevel' => E_ALL & ~E_DEPRECATED, - 'exceptionRenderer' => 'Cake\Error\ExceptionRenderer', - 'skipLog' => [], - 'log' => true, - 'trace' => true, - ], - - /** - * Email configuration. - * - * You can configure email transports and email delivery profiles here. - * - * By defining transports separately from delivery profiles you can easily - * re-use transport configuration across multiple profiles. - * - * You can specify multiple configurations for production, development and - * testing. - * - * ### Configuring transports - * - * Each transport needs a `className`. Valid options are as follows: - * - * Mail - Send using PHP mail function - * Smtp - Send using SMTP - * Debug - Do not send the email, just return the result - * - * You can add custom transports (or override existing transports) by adding the - * appropriate file to src/Network/Email. Transports should be named - * 'YourTransport.php', where 'Your' is the name of the transport. - * - * ### Configuring delivery profiles - * - * Delivery profiles allow you to predefine various properties about email - * messages from your application and give the settings a name. This saves - * duplication across your application and makes maintenance and development - * easier. Each profile accepts a number of keys. See `Cake\Network\Email\Email` - * for more information. - */ - 'EmailTransport' => [ - 'default' => [ - 'className' => 'Mail', - // The following keys are used in SMTP transports - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'username' => 'user', - 'password' => 'secret', - 'client' => null, - 'tls' => null, - ], - ], - - 'Email' => [ - 'default' => [ - 'transport' => 'default', - 'from' => 'you@localhost', - //'charset' => 'utf-8', - //'headerCharset' => 'utf-8', - ], - ], - - /** - * Connection information used by the ORM to connect - * to your application's datastores. - * Drivers include Mysql Postgres Sqlite Sqlserver - * See vendor\cakephp\cakephp\src\Database\Driver for complete list - */ - 'Datasources' => [ - 'default' => [ - 'className' => 'Cake\Database\Connection', - 'driver' => 'Cake\Database\Driver\Mysql', - 'persistent' => false, - 'host' => 'localhost', - /** - * CakePHP will use the default DB port based on the driver selected - * MySQL on MAMP uses port 8889, MAMP users will want to uncomment - * the following line and set the port accordingly - */ - //'port' => 'nonstandard_port_number', - 'username' => 'my_app', - 'password' => 'secret', - 'database' => 'my_app', - 'encoding' => 'utf8', - 'timezone' => 'UTC', - 'cacheMetadata' => true, - - /** - * Set identifier quoting to true if you are using reserved words or - * special characters in your table or column names. Enabling this - * setting will result in queries built using the Query Builder having - * identifiers quoted when creating SQL. It should be noted that this - * decreases performance because each query needs to be traversed and - * manipulated before being executed. - */ - 'quoteIdentifiers' => false, - - /** - * During development, if using MySQL < 5.6, uncommenting the - * following line could boost the speed at which schema metadata is - * fetched from the database. It can also be set directly with the - * mysql configuration directive 'innodb_stats_on_metadata = 0' - * which is the recommended value in production environments - */ - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - ], - - /** - * The test connection is used during the test suite. - */ - 'test' => [ - 'className' => 'Cake\Database\Connection', - 'driver' => 'Cake\Database\Driver\Mysql', - 'persistent' => false, - 'host' => 'localhost', - //'port' => 'nonstandard_port_number', - 'username' => 'my_app', - 'password' => 'secret', - 'database' => 'test_myapp', - 'encoding' => 'utf8', - 'timezone' => 'UTC', - 'cacheMetadata' => true, - 'quoteIdentifiers' => false, - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - ], - ], - - /** - * Configures logging options - */ - 'Log' => [ - 'debug' => [ - 'className' => 'Cake\Log\Engine\FileLog', - 'path' => LOGS, - 'file' => 'debug', - 'levels' => ['notice', 'info', 'debug'], - ], - 'error' => [ - 'className' => 'Cake\Log\Engine\FileLog', - 'path' => LOGS, - 'file' => 'error', - 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], - ], - ], - - /** - * - * Session configuration. - * - * Contains an array of settings to use for session configuration. The - * `defaults` key is used to define a default preset to use for sessions, any - * settings declared here will override the settings of the default config. - * - * ## Options - * - * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. - * - `cookiePath` - The url path for which session cookie is set. Maps to the - * `session.cookie_path` php.ini config. Defaults to base path of app. - * - `timeout` - The time in minutes the session should be valid for. - * Pass 0 to disable checking timeout. - * - `defaults` - The default configuration set to use as a basis for your session. - * There are four built-in options: php, cake, cache, database. - * - `handler` - Can be used to enable a custom session handler. Expects an - * array with at least the `engine` key, being the name of the Session engine - * class to use for managing the session. CakePHP bundles the `CacheSession` - * and `DatabaseSession` engines. - * - `ini` - An associative array of additional ini values to set. - * - * The built-in `defaults` options are: - * - * - 'php' - Uses settings defined in your php.ini. - * - 'cake' - Saves session files in CakePHP's /tmp directory. - * - 'database' - Uses CakePHP's database sessions. - * - 'cache' - Use the Cache class to save sessions. - * - * To define a custom session handler, save it at src/Network/Session/.php. - * Make sure the class implements PHP's `SessionHandlerInterface` and set - * Session.handler to - * - * To use database sessions, load the SQL file located at config/Schema/sessions.sql - */ - 'Session' => [ - 'defaults' => 'php', - ], -]; diff --git a/cakephp/notejam/config/app.php b/cakephp/notejam/config/app.php deleted file mode 100644 index 3c36cdb55..000000000 --- a/cakephp/notejam/config/app.php +++ /dev/null @@ -1,313 +0,0 @@ - true, - - /** - * Configure basic information about the application. - * - * - namespace - The namespace to find app classes under. - * - encoding - The encoding used for HTML + database connections. - * - base - The base directory the app resides in. If false this - * will be auto detected. - * - dir - Name of app directory. - * - webroot - The webroot directory. - * - wwwRoot - The file path to webroot. - * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to - * use CakePHP pretty URLs, remove these .htaccess - * files: - * /.htaccess - * /webroot/.htaccess - * And uncomment the baseUrl key below. - * - fullBaseUrl - A base URL to use for absolute links. - * - imageBaseUrl - Web path to the public images directory under webroot. - * - cssBaseUrl - Web path to the public css directory under webroot. - * - jsBaseUrl - Web path to the public js directory under webroot. - * - paths - Configure paths for non class based resources. Supports the - * `plugins`, `templates`, `locales` subkeys, which allow the definition of - * paths for plugins, view templates and locale files respectively. - */ - 'App' => [ - 'namespace' => 'App', - 'encoding' => 'UTF-8', - 'base' => false, - 'dir' => 'src', - 'webroot' => 'webroot', - 'wwwRoot' => WWW_ROOT, - // 'baseUrl' => env('SCRIPT_NAME'), - 'fullBaseUrl' => false, - 'imageBaseUrl' => 'img/', - 'cssBaseUrl' => 'css/', - 'jsBaseUrl' => 'js/', - 'paths' => [ - 'plugins' => [ROOT . DS . 'plugins' . DS], - 'templates' => [APP . 'Template' . DS], - 'locales' => [APP . 'Locale' . DS], - ], - ], - - /** - * Security and encryption configuration - * - * - salt - A random string used in security hashing methods. - * The salt value is also used as the encryption key. - * You should treat it as extremely sensitive data. - */ - 'Security' => [ - 'salt' => '5a7f2d28c26b43c1eca92cd2fabb1a18bbba049f43799f6399f701a0c3f074d3', - ], - - /** - * Apply timestamps with the last modified time to static assets (js, css, images). - * Will append a querystring parameter containing the time the file was modified. - * This is useful for busting browser caches. - * - * Set to true to apply timestamps when debug is true. Set to 'force' to always - * enable timestamping regardless of debug value. - */ - 'Asset' => [ - // 'timestamp' => true, - ], - - /** - * Configure the cache adapters. - */ - 'Cache' => [ - 'default' => [ - 'className' => 'File', - 'path' => CACHE, - ], - - /** - * Configure the cache used for general framework caching. Path information, - * object listings, and translation cache files are stored with this - * configuration. - */ - '_cake_core_' => [ - 'className' => 'File', - 'prefix' => 'myapp_cake_core_', - 'path' => CACHE . 'persistent/', - 'serialize' => true, - 'duration' => '+2 minutes', - ], - - /** - * Configure the cache for model and datasource caches. This cache - * configuration is used to store schema descriptions, and table listings - * in connections. - */ - '_cake_model_' => [ - 'className' => 'File', - 'prefix' => 'myapp_cake_model_', - 'path' => CACHE . 'models/', - 'serialize' => true, - 'duration' => '+2 minutes', - ], - ], - - /** - * Configure the Error and Exception handlers used by your application. - * - * By default errors are displayed using Debugger, when debug is true and logged - * by Cake\Log\Log when debug is false. - * - * In CLI environments exceptions will be printed to stderr with a backtrace. - * In web environments an HTML page will be displayed for the exception. - * With debug true, framework errors like Missing Controller will be displayed. - * When debug is false, framework errors will be coerced into generic HTTP errors. - * - * Options: - * - * - `errorLevel` - int - The level of errors you are interested in capturing. - * - `trace` - boolean - Whether or not backtraces should be included in - * logged errors/exceptions. - * - `log` - boolean - Whether or not you want exceptions logged. - * - `exceptionRenderer` - string - The class responsible for rendering - * uncaught exceptions. If you choose a custom class you should place - * the file for that class in src/Error. This class needs to implement a - * render method. - * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that - * extend one of the listed exceptions will also be skipped for logging. - * E.g.: - * `'skipLog' => ['Cake\Network\Exception\NotFoundException', 'Cake\Network\Exception\UnauthorizedException']` - */ - 'Error' => [ - 'errorLevel' => E_ALL & ~E_DEPRECATED, - 'exceptionRenderer' => 'Cake\Error\ExceptionRenderer', - 'skipLog' => [], - 'log' => true, - 'trace' => true, - ], - - /** - * Email configuration. - * - * You can configure email transports and email delivery profiles here. - * - * By defining transports separately from delivery profiles you can easily - * re-use transport configuration across multiple profiles. - * - * You can specify multiple configurations for production, development and - * testing. - * - * ### Configuring transports - * - * Each transport needs a `className`. Valid options are as follows: - * - * Mail - Send using PHP mail function - * Smtp - Send using SMTP - * Debug - Do not send the email, just return the result - * - * You can add custom transports (or override existing transports) by adding the - * appropriate file to src/Network/Email. Transports should be named - * 'YourTransport.php', where 'Your' is the name of the transport. - * - * ### Configuring delivery profiles - * - * Delivery profiles allow you to predefine various properties about email - * messages from your application and give the settings a name. This saves - * duplication across your application and makes maintenance and development - * easier. Each profile accepts a number of keys. See `Cake\Network\Email\Email` - * for more information. - */ - 'EmailTransport' => [ - 'default' => [ - 'className' => 'Mail', - // The following keys are used in SMTP transports - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'username' => 'user', - 'password' => 'secret', - 'client' => null, - 'tls' => null, - ], - ], - - 'Email' => [ - 'default' => [ - 'transport' => 'default', - 'from' => 'you@localhost', - //'charset' => 'utf-8', - //'headerCharset' => 'utf-8', - ], - ], - - /** - * Connection information used by the ORM to connect - * to your application's datastores. - * Drivers include Mysql Postgres Sqlite Sqlserver - * See vendor\cakephp\cakephp\src\Database\Driver for complete list - */ - 'Datasources' => [ - 'default' => [ - 'className' => 'Cake\Database\Connection', - 'driver' => 'Cake\Database\Driver\Sqlite', - 'persistent' => false, - 'database' => 'notejam.db', - 'encoding' => 'utf8', - 'timezone' => 'UTC', - 'cacheMetadata' => true, - - /** - * Set identifier quoting to true if you are using reserved words or - * special characters in your table or column names. Enabling this - * setting will result in queries built using the Query Builder having - * identifiers quoted when creating SQL. It should be noted that this - * decreases performance because each query needs to be traversed and - * manipulated before being executed. - */ - 'quoteIdentifiers' => false, - - /** - * During development, if using MySQL < 5.6, uncommenting the - * following line could boost the speed at which schema metadata is - * fetched from the database. It can also be set directly with the - * mysql configuration directive 'innodb_stats_on_metadata = 0' - * which is the recommended value in production environments - */ - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - ], - - /** - * The test connection is used during the test suite. - */ - 'test' => [ - 'className' => 'Cake\Database\Connection', - 'driver' => 'Cake\Database\Driver\Sqlite', - 'persistent' => false, - 'database' => 'tests/notejam.db', - 'encoding' => 'utf8', - 'timezone' => 'UTC', - 'cacheMetadata' => true, - 'quoteIdentifiers' => false, - //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], - ], - ], - - /** - * Configures logging options - */ - 'Log' => [ - 'debug' => [ - 'className' => 'Cake\Log\Engine\FileLog', - 'path' => LOGS, - 'file' => 'debug', - 'levels' => ['notice', 'info', 'debug'], - ], - 'error' => [ - 'className' => 'Cake\Log\Engine\FileLog', - 'path' => LOGS, - 'file' => 'error', - 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], - ], - ], - - /** - * - * Session configuration. - * - * Contains an array of settings to use for session configuration. The - * `defaults` key is used to define a default preset to use for sessions, any - * settings declared here will override the settings of the default config. - * - * ## Options - * - * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. - * - `cookiePath` - The url path for which session cookie is set. Maps to the - * `session.cookie_path` php.ini config. Defaults to base path of app. - * - `timeout` - The time in minutes the session should be valid for. - * Pass 0 to disable checking timeout. - * - `defaults` - The default configuration set to use as a basis for your session. - * There are four built-in options: php, cake, cache, database. - * - `handler` - Can be used to enable a custom session handler. Expects an - * array with at least the `engine` key, being the name of the Session engine - * class to use for managing the session. CakePHP bundles the `CacheSession` - * and `DatabaseSession` engines. - * - `ini` - An associative array of additional ini values to set. - * - * The built-in `defaults` options are: - * - * - 'php' - Uses settings defined in your php.ini. - * - 'cake' - Saves session files in CakePHP's /tmp directory. - * - 'database' - Uses CakePHP's database sessions. - * - 'cache' - Use the Cache class to save sessions. - * - * To define a custom session handler, save it at src/Network/Session/.php. - * Make sure the class implements PHP's `SessionHandlerInterface` and set - * Session.handler to - * - * To use database sessions, load the SQL file located at config/Schema/sessions.sql - */ - 'Session' => [ - 'defaults' => 'php', - ], -]; diff --git a/cakephp/notejam/config/bootstrap.php b/cakephp/notejam/config/bootstrap.php deleted file mode 100644 index 62d662ece..000000000 --- a/cakephp/notejam/config/bootstrap.php +++ /dev/null @@ -1,202 +0,0 @@ -getMessage() . "\n"); -} - -// Load an environment local configuration file. -// You can use a file like app_local.php to provide local overrides to your -// shared configuration. -//Configure::load('app_local', 'default'); - -// When debug = false the metadata cache should last -// for a very very long time, as we don't want -// to refresh the cache while users are doing requests. -if (!Configure::read('debug')) { - Configure::write('Cache._cake_model_.duration', '+1 years'); - Configure::write('Cache._cake_core_.duration', '+1 years'); -} - -/** - * Set server timezone to UTC. You can change it to another timezone of your - * choice but using UTC makes time calculations / conversions easier. - */ -date_default_timezone_set('UTC'); - -/** - * Configure the mbstring extension to use the correct encoding. - */ -mb_internal_encoding(Configure::read('App.encoding')); - -/** - * Set the default locale. This controls how dates, number and currency is - * formatted and sets the default language to use for translations. - */ -ini_set('intl.default_locale', 'en_US'); - -/** - * Register application error and exception handlers. - */ -$isCli = php_sapi_name() === 'cli'; -if ($isCli) { - (new ConsoleErrorHandler(Configure::read('Error')))->register(); -} else { - (new ErrorHandler(Configure::read('Error')))->register(); -} - -// Include the CLI bootstrap overrides. -if ($isCli) { - require __DIR__ . '/bootstrap_cli.php'; -} - -/** - * Set the full base URL. - * This URL is used as the base of all absolute links. - * - * If you define fullBaseUrl in your config file you can remove this. - */ -if (!Configure::read('App.fullBaseUrl')) { - $s = null; - if (env('HTTPS')) { - $s = 's'; - } - - $httpHost = env('HTTP_HOST'); - if (isset($httpHost)) { - Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost); - } - unset($httpHost, $s); -} - -Cache::config(Configure::consume('Cache')); -ConnectionManager::config(Configure::consume('Datasources')); -Email::configTransport(Configure::consume('EmailTransport')); -Email::config(Configure::consume('Email')); -Log::config(Configure::consume('Log')); -Security::salt(Configure::consume('Security.salt')); - -/** - * The default crypto extension in 3.0 is OpenSSL. - * If you are migrating from 2.x uncomment this code to - * use a more compatible Mcrypt based implementation - */ -// Security::engine(new \Cake\Utility\Crypto\Mcrypt()); - -/** - * Setup detectors for mobile and tablet. - */ -Request::addDetector('mobile', function ($request) { - $detector = new \Detection\MobileDetect(); - return $detector->isMobile(); -}); -Request::addDetector('tablet', function ($request) { - $detector = new \Detection\MobileDetect(); - return $detector->isTablet(); -}); - -/** - * Custom Inflector rules, can be set to correctly pluralize or singularize - * table, model, controller names or whatever other string is passed to the - * inflection functions. - * - * Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']); - * Inflector::rules('irregular', ['red' => 'redlings']); - * Inflector::rules('uninflected', ['dontinflectme']); - * Inflector::rules('transliteration', ['/Ã¥/' => 'aa']); - */ - -/** - * Plugins need to be loaded manually, you can either load them one by one or all of them in a single call - * Uncomment one of the lines below, as you need. make sure you read the documentation on Plugin to use more - * advanced ways of loading plugins - * - * Plugin::loadAll(); // Loads all plugins at once - * Plugin::load('Migrations'); //Loads a single plugin named Migrations - * - */ - -Plugin::load('Migrations'); - -// Only try to load DebugKit in development mode -// Debug Kit should not be installed on a production system -if (Configure::read('debug')) { - Plugin::load('DebugKit', ['bootstrap' => true]); -} - -/** - * Connect middleware/dispatcher filters. - */ -DispatcherFactory::add('Asset'); -DispatcherFactory::add('Routing'); -DispatcherFactory::add('ControllerFactory'); - -/** - * Enable default locale format parsing. - * This is needed for matching the auto-localized string output of Time() class when parsing dates. - */ -Type::build('datetime')->useLocaleParser(); diff --git a/cakephp/notejam/config/bootstrap_cli.php b/cakephp/notejam/config/bootstrap_cli.php deleted file mode 100644 index 13cf979fa..000000000 --- a/cakephp/notejam/config/bootstrap_cli.php +++ /dev/null @@ -1,32 +0,0 @@ -connect('/', ['controller' => 'Notes', 'action' => 'index'], ['_name' => 'index']); - - $routes->connect('/signup', ['controller' => 'Users', 'action' => 'signup'], ['_name' => 'signup']); - $routes->connect('/signin', ['controller' => 'Users', 'action' => 'signin'], ['_name' => 'signin']); - $routes->connect('/signout', ['controller' => 'Users', 'action' => 'signout'], ['_name' => 'signout']); - $routes->connect('/settings', ['controller' => 'Users', 'action' => 'settings'], ['_name' => 'settings']); - $routes->connect('/forgot-password', ['controller' => 'Users', 'action' => 'forgotpassword'], ['_name' => 'forgot_password']); - - - $routes->scope('/pads', ['controller' => 'Pads'], function($routes) { - $routes->connect('/create', ['controller' => 'Pads', 'action' => 'create'], ['_name' => 'create_pad']); - $routes->connect('/:id/edit', ['controller' => 'Pads', 'action' => 'edit'], ['id' => '\d+', 'pass' => ['id'], '_name' => 'edit_pad']); - $routes->connect('/:id/delete', ['controller' => 'Pads', 'action' => 'delete'], ['id' => '\d+', 'pass' => ['id'], '_name' => 'delete_pad']); - $routes->connect('/:id', ['controller' => 'Pads', 'action' => 'view'], ['id' => '\d+', 'pass' => ['id'], '_name' => 'view_pad']); - }); - - $routes->scope('/notes', ['controller' => 'Notes'], function($routes) { - $routes->connect('/create', ['controller' => 'Notes', 'action' => 'create'], ['_name' => 'create_note']); - $routes->connect('/:id/edit', ['controller' => 'Notes', 'action' => 'edit'], ['id' => '\d+', 'pass' => ['id'], '_name' => 'edit_note']); - $routes->connect('/:id', ['controller' => 'Notes', 'action' => 'view'], ['id' => '\d+', 'pass' => ['id'], '_name' => 'view_note']); - $routes->connect('/:id/delete', ['controller' => 'Notes', 'action' => 'delete'], ['id' => '\d+', 'pass' => ['id'], '_name' => 'delete_note']); - }); -}); - -/** - * Load all plugin routes. See the Plugin documentation on - * how to customize the loading of plugin routes. - */ -Plugin::routes(); diff --git a/cakephp/notejam/config/schema/i18n.sql b/cakephp/notejam/config/schema/i18n.sql deleted file mode 100644 index 66a42bd19..000000000 --- a/cakephp/notejam/config/schema/i18n.sql +++ /dev/null @@ -1,27 +0,0 @@ -# $Id$ -# -# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# MIT License (http://www.opensource.org/licenses/mit-license.php) - -CREATE TABLE i18n ( - id int(10) NOT NULL auto_increment, - locale varchar(6) NOT NULL, - model varchar(255) NOT NULL, - foreign_key int(10) NOT NULL, - field varchar(255) NOT NULL, - content mediumtext, - PRIMARY KEY (id), -# UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), -# INDEX I18N_LOCALE_ROW(locale, model, foreign_key), -# INDEX I18N_LOCALE_MODEL(locale, model), -# INDEX I18N_FIELD(model, foreign_key, field), -# INDEX I18N_ROW(model, foreign_key), - INDEX locale (locale), - INDEX model (model), - INDEX row_id (foreign_key), - INDEX field (field) -); \ No newline at end of file diff --git a/cakephp/notejam/config/schema/sessions.sql b/cakephp/notejam/config/schema/sessions.sql deleted file mode 100644 index 434e1aa1c..000000000 --- a/cakephp/notejam/config/schema/sessions.sql +++ /dev/null @@ -1,17 +0,0 @@ -# $Id$ -# -# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) -# 1785 E. Sahara Avenue, Suite 490-204 -# Las Vegas, Nevada 89104 -# -# Licensed under The MIT License -# For full copyright and license information, please see the LICENSE.txt -# Redistributions of files must retain the above copyright notice. -# MIT License (http://www.opensource.org/licenses/mit-license.php) - -CREATE TABLE sessions ( - id varchar(40) NOT NULL default '', - data text, - expires INT(11) NOT NULL, - PRIMARY KEY (id) -); diff --git a/cakephp/notejam/index.php b/cakephp/notejam/index.php deleted file mode 100644 index fc5e39ccb..000000000 --- a/cakephp/notejam/index.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - ./tests/TestCase - - - - - - - - - - - - - - diff --git a/cakephp/notejam/src/Console/Installer.php b/cakephp/notejam/src/Console/Installer.php deleted file mode 100644 index 06d1115f7..000000000 --- a/cakephp/notejam/src/Console/Installer.php +++ /dev/null @@ -1,192 +0,0 @@ -getIO(); - - $rootDir = dirname(dirname(__DIR__)); - - static::createAppConfig($rootDir, $io); - static::createWritableDirectories($rootDir, $io); - - // ask if the permissions should be changed - if ($io->isInteractive()) { - $validator = function ($arg) { - if (in_array($arg, ['Y', 'y', 'N', 'n'])) { - return $arg; - } - throw new Exception('This is not a valid answer. Please choose Y or n.'); - }; - $setFolderPermissions = $io->askAndValidate( - 'Set Folder Permissions ? (Default to Y) [Y,n]? ', - $validator, - 10, - 'Y' - ); - - if (in_array($setFolderPermissions, ['Y', 'y'])) { - static::setFolderPermissions($rootDir, $io); - } - } else { - static::setFolderPermissions($rootDir, $io); - } - - static::setSecuritySalt($rootDir, $io); - - if (class_exists('\Cake\Codeception\Console\Installer')) { - \Cake\Codeception\Console\Installer::customizeCodeceptionBinary($event); - } - } - - /** - * Create the config/app.php file if it does not exist. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function createAppConfig($dir, $io) - { - $appConfig = $dir . '/config/app.php'; - $defaultConfig = $dir . '/config/app.default.php'; - if (!file_exists($appConfig)) { - copy($defaultConfig, $appConfig); - $io->write('Created `config/app.php` file'); - } - } - - /** - * Create the `logs` and `tmp` directories. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function createWritableDirectories($dir, $io) - { - $paths = [ - 'logs', - 'tmp', - 'tmp/cache', - 'tmp/cache/models', - 'tmp/cache/persistent', - 'tmp/cache/views', - 'tmp/sessions', - 'tmp/tests' - ]; - - foreach ($paths as $path) { - $path = $dir . '/' . $path; - if (!file_exists($path)) { - mkdir($path); - $io->write('Created `' . $path . '` directory'); - } - } - } - - /** - * Set globally writable permissions on the "tmp" and "logs" directory. - * - * This is not the most secure default, but it gets people up and running quickly. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function setFolderPermissions($dir, $io) - { - // Change the permissions on a path and output the results. - $changePerms = function ($path, $perms, $io) { - // Get current permissions in decimal format so we can bitmask it. - $currentPerms = octdec(substr(sprintf('%o', fileperms($path)), -4)); - if (($currentPerms & $perms) == $perms) { - return; - } - - $res = chmod($path, $currentPerms | $perms); - if ($res) { - $io->write('Permissions set on ' . $path); - } else { - $io->write('Failed to set permissions on ' . $path); - } - }; - - $walker = function ($dir, $perms, $io) use (&$walker, $changePerms) { - $files = array_diff(scandir($dir), ['.', '..']); - foreach ($files as $file) { - $path = $dir . '/' . $file; - - if (!is_dir($path)) { - continue; - } - - $changePerms($path, $perms, $io); - $walker($path, $perms, $io); - } - }; - - $worldWritable = bindec('0000000111'); - $walker($dir . '/tmp', $worldWritable, $io); - $changePerms($dir . '/tmp', $worldWritable, $io); - $changePerms($dir . '/logs', $worldWritable, $io); - } - - /** - * Set the security.salt value in the application's config file. - * - * @param string $dir The application's root directory. - * @param \Composer\IO\IOInterface $io IO interface to write to console. - * @return void - */ - public static function setSecuritySalt($dir, $io) - { - $config = $dir . '/config/app.php'; - $content = file_get_contents($config); - - $newKey = hash('sha256', $dir . php_uname() . microtime(true)); - $content = str_replace('__SALT__', $newKey, $content, $count); - - if ($count == 0) { - $io->write('No Security.salt placeholder to replace.'); - return; - } - - $result = file_put_contents($config, $content); - if ($result) { - $io->write('Updated Security.salt value in config/app.php'); - return; - } - $io->write('Unable to update Security.salt value.'); - } -} diff --git a/cakephp/notejam/src/Controller/AppController.php b/cakephp/notejam/src/Controller/AppController.php deleted file mode 100644 index 2207fda8d..000000000 --- a/cakephp/notejam/src/Controller/AppController.php +++ /dev/null @@ -1,88 +0,0 @@ -loadComponent('Flash'); - $this->loadComponent('Auth', [ - 'authenticate' => [ - 'Form' => [ - 'fields' => [ - 'username' => 'email', - 'password' => 'password' - ] - ] - ], - 'loginAction' => [ - 'controller' => 'Users', - 'action' => 'signin' - ] - ]); - $this->Auth->allow(['signup', 'forgotpassword']); - } - - /** - * Get authenticated user - * - * @return App\Model\Entity\User - */ - protected function getUser() - { - $id = $this->request->session()->read('Auth.User.id'); - return TableRegistry::get('Users')->get($id, [ - 'contain' => ['Pads', 'Notes'] - ]); - } - - /** - * Build order statetment - * - * @param string $order Order param - * @return array - */ - public function buildOrderBy($order) - { - $config = [ - 'name' => ['Notes.name' => 'ASC'], - '-name' => ['Notes.name' => 'DESC'], - 'updated_at' => ['Notes.updated_at' => 'ASC'], - '-updated_at' => ['Notes.updated_at' => 'DESC'], - ]; - return $config[$order ? $order : 'updated_at']; - } -} diff --git a/cakephp/notejam/src/Controller/NotesController.php b/cakephp/notejam/src/Controller/NotesController.php deleted file mode 100644 index 18740fc06..000000000 --- a/cakephp/notejam/src/Controller/NotesController.php +++ /dev/null @@ -1,138 +0,0 @@ -viewBuilder()->layout('user'); - } - - /** - * Index method - * - * @return void - */ - public function index() - { - $this->set( - 'notes', - $this->Notes->find('all', ['contain' => 'Pads']) - ->where(['Notes.user_id' => $this->getUser()->id]) - ->order($this->buildOrderBy($this->request->query('order'))) - ); - } - - /** - * View note - * - * @param string|null $id Note id. - * @return void - * @throws \Cake\Network\Exception\NotFoundException When record not found. - */ - public function view($id = null) - { - $note = $this->getNote($id); - $this->set('note', $note); - } - - /** - * Create note action - * - * @return void Redirects on successful add, renders view otherwise. - */ - public function create() - { - $note = $this->Notes->newEntity(); - if ($this->request->is('post')) { - $note = $this->Notes->patchEntity($note, array_merge( - $this->request->data, - ['user_id' => $this->getUser()->id] - )); - if ($this->Notes->save($note)) { - $this->Flash->success(__('The note has been saved.')); - return $this->redirect(['action' => 'index']); - } else { - $this->Flash->error(__('The note could not be saved. Please, try again.')); - } - } - // current pad - $pad = $this->request->query('pad'); - - $pads = collection($this->getUser()->pads)->combine('id', 'name')->toArray(); - $this->set(compact('note', 'pads', 'pad')); - } - - - /** - * Edit note - * - * @param string|null $id Note id. - * @return void Redirects on successful edit, renders view otherwise. - * @throws \Cake\Network\Exception\NotFoundException When record not found. - */ - public function edit($id = null) - { - $note = $this->getNote($id); - if ($this->request->is(['patch', 'post', 'put'])) { - $note = $this->Notes->patchEntity($note, $this->request->data); - if ($this->Notes->save($note)) { - $this->Flash->success(__('The note has been saved.')); - return $this->redirect(['action' => 'view', 'id' => $note->id]); - } else { - $this->Flash->error(__('The note could not be saved. Please, try again.')); - } - } - $pads = collection($this->getUser()->pads)->combine('id', 'name')->toArray(); - $this->set(compact('note', 'pads')); - } - - /** - * Delete method - * - * @param string|null $id Note id. - * @return void Redirects to index. - * @throws \Cake\Network\Exception\NotFoundException When record not found. - */ - public function delete($id = null) - { - $note = $this->getNote($id); - if ($this->request->is('post')) { - $this->Notes->delete($note); - $this->Flash->success(__('The note has been deleted.')); - return $this->redirect(['action' => 'index']); - } - $this->set(compact('note')); - } - - /** - * Get note - * - * @param int $id Note id - * @return Note - */ - protected function getNote($id) - { - return TableRegistry::get('Notes')->find() - ->contain(['Pads', 'Users']) - ->where(['Notes.id' => $id]) - ->where(['Notes.user_id' => $this->getUser()->id]) - ->firstOrFail(); - } -} diff --git a/cakephp/notejam/src/Controller/PadsController.php b/cakephp/notejam/src/Controller/PadsController.php deleted file mode 100644 index 246b98430..000000000 --- a/cakephp/notejam/src/Controller/PadsController.php +++ /dev/null @@ -1,121 +0,0 @@ -viewBuilder()->layout('user'); - } - - /** - * View pad - * - * @param string|null $id Pad id. - * @return void - * @throws \Cake\Network\Exception\NotFoundException When record not found. - */ - public function view($id = null) - { - $pad = $this->getPad($id); - $notes = TableRegistry::get('Notes')->find('all', ['contain' => 'Pads']) - ->where(['Notes.pad_id' => $id]) - ->where(['Notes.user_id' => $this->getUser()->id]) - ->order($this->buildOrderBy($this->request->query('order'))); - - $this->set('pad', $pad); - $this->set('notes', $notes); - } - - /** - * Create a pad - * - * @return void Redirects on successful add, renders view otherwise. - */ - public function create() - { - $pad = $this->Pads->newEntity(); - if ($this->request->is('post')) { - $pad = $this->Pads->patchEntity($pad, array_merge( - $this->request->data, - ['user_id' => $this->Auth->user('id')] - )); - if ($this->Pads->save($pad)) { - $this->Flash->success(__('The pad has been created.')); - return $this->redirect(['action' => 'view', 'id' => $pad->id]); - } - } - $this->set(compact('pad')); - } - - /** - * Edit pad - * - * @param string|null $id Pad id. - * @return void Redirects on successful edit, renders view otherwise. - * @throws \Cake\Network\Exception\NotFoundException When record not found. - */ - public function edit($id = null) - { - $pad = $this->getPad($id); - if ($this->request->is(['patch', 'post', 'put'])) { - $pad = $this->Pads->patchEntity($pad, $this->request->data); - if ($this->Pads->save($pad)) { - $this->Flash->success(__('The pad has been saved.')); - return $this->redirect(['action' => 'view', 'id' => $pad->id]); - } else { - $this->Flash->error(__('The pad could not be saved. Please, try again.')); - } - } - $this->set(compact('pad')); - } - - /** - * Delete method - * - * @param string|null $id Pad id. - * @return void Redirects to index. - * @throws \Cake\Network\Exception\NotFoundException When record not found. - */ - public function delete($id = null) - { - $pad = $this->getPad($id); - if ($this->request->is('post')) { - $this->Pads->delete($pad); - $this->Flash->success(__('The pad has been deleted.')); - return $this->redirect(['_name' => 'index']); - } - $this->set(compact('pad')); - } - - /** - * Get pad - * - * @param int $id Pad id - * @return Pad - */ - protected function getPad($id) - { - return TableRegistry::get('Pads')->find() - ->contain(['Users']) - ->where(['Pads.id' => $id]) - ->where(['Pads.user_id' => $this->getUser()->id]) - ->firstOrFail(); - } -} diff --git a/cakephp/notejam/src/Controller/UsersController.php b/cakephp/notejam/src/Controller/UsersController.php deleted file mode 100644 index 00b1afb37..000000000 --- a/cakephp/notejam/src/Controller/UsersController.php +++ /dev/null @@ -1,145 +0,0 @@ -viewBuilder()->layout('anonymous'); - } - - /** - * Signup action - * - * @return void Redirects on successful signup, renders errors otherwise. - */ - public function signup() - { - $user = $this->Users->newEntity(); - if ($this->request->is('post')) { - $user = $this->Users->patchEntity($user, $this->request->data); - if ($this->Users->save($user)) { - $this->Flash->success(__('Now you can signin')); - return $this->redirect(['action' => 'signin']); - } else { - $this->Flash->error(__('The user could not be saved. Please, try again.')); - } - } - $this->set(compact('user')); - } - - /** - * Signin action - * - * @return void Redirects on successful signup, renders errors otherwise. - */ - public function signin() - { - if ($this->request->is('post')) { - $user = $this->Auth->identify(); - if ($user) { - $this->Auth->setUser($user); - return $this->redirect($this->Auth->redirectUrl()); - } - $this->Flash->error('Your username or password is incorrect.'); - } - } - - /** - * Sign out action - * - * @return void Redirects on successful signin - */ - public function signout() - { - return $this->redirect($this->Auth->logout()); - } - - /** - * Account settings action - * - * @return void - */ - public function settings() - { - $settings = new SettingsForm(); - if ($this->request->is('post') && - $settings->validate($this->request->data)) { - - $user = $this->getUser(); - if ($user->checkPassword($this->request->data['current_password'])) { - $user->password = $this->request->data['new_password']; - $this->Users->save($user); - $this->Flash->success('Password is successfully changed.'); - return $this->redirect(['_name' => 'index']); - } - $this->Flash->error('Current password is not correct.'); - } - $this->set(compact('settings')); - } - - /** - * Forgot password action - * - * @return void - */ - public function forgotPassword() - { - $form = new ForgotPasswordForm(); - if ($this->request->is('post') && - $form->validate($this->request->data)) { - - $user = $this->Users->find() - ->where(['email' => $this->request->data['email']]) - ->first(); - if ($user) { - $this->resetPassword($user); - $this->Flash->success('New temp password is sent to your inbox.'); - return $this->redirect(['_name' => 'index']); - } - $this->Flash->error('User with given email does not exist.'); - } - $this->set(compact('form')); - } - - /** - * Reset user's password - * - * @param App\Model\Entity\User $user User - * @return void - */ - protected function resetPassword($user) - { - // primitive way to generate temporary password - $user->password = $password = substr( - sha1(time() . rand() . Configure::read('Security.salt')), 0, 8 - ); - $this->Users->save($user); - - Email::deliver( - $user->email, - "New notejam password", - "Your new temporary password is {$password}. - We recommend you to change it after signing in.", - ["from" => "noreply@notejamapp.com", "transport" => "default"] - ); - } -} diff --git a/cakephp/notejam/src/Form/ForgotPasswordForm.php b/cakephp/notejam/src/Form/ForgotPasswordForm.php deleted file mode 100644 index 5b7a3d2c8..000000000 --- a/cakephp/notejam/src/Form/ForgotPasswordForm.php +++ /dev/null @@ -1,35 +0,0 @@ -addField('email', ['type' => 'string']); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - protected function _buildValidator(Validator $validator) - { - return $validator - ->requirePresence('email', 'create') - ->add('email', 'valid', ['rule' => 'email']); - } -} - diff --git a/cakephp/notejam/src/Form/SettingsForm.php b/cakephp/notejam/src/Form/SettingsForm.php deleted file mode 100644 index ef7391a58..000000000 --- a/cakephp/notejam/src/Form/SettingsForm.php +++ /dev/null @@ -1,47 +0,0 @@ -addField('current_password', ['type' => 'password']) - ->addField('new_password', ['type' => 'password']) - ->addField('confirm_new_password', ['type' => 'password']); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - protected function _buildValidator(Validator $validator) - { - return $validator - ->requirePresence('current_password', 'create') - ->notEmpty('current_password') - ->requirePresence('new_password', 'create') - ->notEmpty('new_password') - ->add('new_password', [ - 'length' => [ - 'rule' => ['minLength', 6] - ], - 'compare' => [ - 'rule' => ['compareWith', 'confirm_new_password'], - 'message' => 'Passwords do not match' - ], - ]); - } -} diff --git a/cakephp/notejam/src/Model/Entity/Note.php b/cakephp/notejam/src/Model/Entity/Note.php deleted file mode 100644 index 56c772790..000000000 --- a/cakephp/notejam/src/Model/Entity/Note.php +++ /dev/null @@ -1,41 +0,0 @@ - true, - 'user_id' => true, - 'name' => true, - 'text' => true, - 'created_at' => true, - 'updated_at' => true, - 'pad' => true, - 'user' => true, - ]; - - /** - * Get pretty date like "Yesterday", "2 days ago", "etc" - * - * @return string - */ - public function getPrettyDate() - { - $time = new Time($this->_properties['updated_at']); - return $time->timeAgoInWords([ - 'format' => 'd' - ]); - } -} diff --git a/cakephp/notejam/src/Model/Entity/Pad.php b/cakephp/notejam/src/Model/Entity/Pad.php deleted file mode 100644 index 30163e110..000000000 --- a/cakephp/notejam/src/Model/Entity/Pad.php +++ /dev/null @@ -1,23 +0,0 @@ - true, - 'user_id' => true, - 'user' => true, - 'notes' => true, - ]; -} diff --git a/cakephp/notejam/src/Model/Entity/User.php b/cakephp/notejam/src/Model/Entity/User.php deleted file mode 100644 index 14dc77f42..000000000 --- a/cakephp/notejam/src/Model/Entity/User.php +++ /dev/null @@ -1,50 +0,0 @@ - true, - 'password' => true, - 'notes' => true, - 'pads' => true, - ]; - - - /** - * Password setter - * - * @param string $value password - * @return string - */ - protected function _setPassword($value) - { - $hasher = new DefaultPasswordHasher(); - return $hasher->hash($value); - } - - /** - * Check if passwords matches - * - * @param string $password Password - * @return boolean - */ - public function checkPassword($password) - { - $hasher = new DefaultPasswordHasher(); - return $hasher->check($password, $this->password); - } -} diff --git a/cakephp/notejam/src/Model/Table/NotesTable.php b/cakephp/notejam/src/Model/Table/NotesTable.php deleted file mode 100644 index bcf9415a2..000000000 --- a/cakephp/notejam/src/Model/Table/NotesTable.php +++ /dev/null @@ -1,82 +0,0 @@ -table('notes'); - $this->displayField('name'); - $this->primaryKey('id'); - $this->addBehavior('Timestamp', [ - 'events' => [ - 'Model.beforeSave' => [ - 'created_at' => 'new', - 'updated_at' => 'always' - ] - ] - ]); - $this->belongsTo('Pads', [ - 'foreignKey' => 'pad_id' - ]); - $this->belongsTo('Users', [ - 'foreignKey' => 'user_id', - 'joinType' => 'INNER' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->add('id', 'valid', ['rule' => 'numeric']) - ->allowEmpty('id', 'create'); - - $validator - ->requirePresence('name', 'create') - ->notEmpty('name'); - - $validator - ->requirePresence('text', 'create') - ->notEmpty('text'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['user_id'], 'Users')); - return $rules; - } -} diff --git a/cakephp/notejam/src/Model/Table/PadsTable.php b/cakephp/notejam/src/Model/Table/PadsTable.php deleted file mode 100644 index 921e2a328..000000000 --- a/cakephp/notejam/src/Model/Table/PadsTable.php +++ /dev/null @@ -1,70 +0,0 @@ -table('pads'); - $this->displayField('name'); - $this->primaryKey('id'); - $this->belongsTo('Users', [ - 'foreignKey' => 'user_id', - 'joinType' => 'INNER' - ]); - $this->hasMany('Notes', [ - 'foreignKey' => 'pad_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->add('id', 'valid', ['rule' => 'numeric']) - ->allowEmpty('id', 'create'); - - $validator - ->requirePresence('name', 'create') - ->notEmpty('name'); - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->existsIn(['user_id'], 'Users')); - return $rules; - } -} diff --git a/cakephp/notejam/src/Model/Table/UsersTable.php b/cakephp/notejam/src/Model/Table/UsersTable.php deleted file mode 100644 index ba359d614..000000000 --- a/cakephp/notejam/src/Model/Table/UsersTable.php +++ /dev/null @@ -1,80 +0,0 @@ -table('users'); - $this->displayField('id'); - $this->primaryKey('id'); - $this->hasMany('Notes', [ - 'foreignKey' => 'user_id' - ]); - $this->hasMany('Pads', [ - 'foreignKey' => 'user_id' - ]); - } - - /** - * Default validation rules. - * - * @param \Cake\Validation\Validator $validator Validator instance. - * @return \Cake\Validation\Validator - */ - public function validationDefault(Validator $validator) - { - $validator - ->add('email', 'valid', ['rule' => 'email']) - ->requirePresence('email', 'create') - ->notEmpty('email'); - - $validator - ->requirePresence('password', 'create') - ->notEmpty('password') - ->add('password', [ - 'length' => [ - 'rule' => ['minLength', 6] - ], - 'compare' => [ - 'rule' => ['compareWith', 'confirm_password'], - 'message' => 'Passwords do not match' - ], - ]); - - - return $validator; - } - - /** - * Returns a rules checker object that will be used for validating - * application integrity. - * - * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. - * @return \Cake\ORM\RulesChecker - */ - public function buildRules(RulesChecker $rules) - { - $rules->add($rules->isUnique(['email'])); - return $rules; - } -} diff --git a/cakephp/notejam/src/Shell/ConsoleShell.php b/cakephp/notejam/src/Shell/ConsoleShell.php deleted file mode 100644 index 97c797443..000000000 --- a/cakephp/notejam/src/Shell/ConsoleShell.php +++ /dev/null @@ -1,79 +0,0 @@ -err('Unable to load Psy\Shell.'); - $this->err(''); - $this->err('Make sure you have installed psysh as a dependency,'); - $this->err('and that Psy\Shell is registered in your autoloader.'); - $this->err(''); - $this->err('If you are using composer run'); - $this->err(''); - $this->err('$ php composer.phar require --dev psy/psysh'); - $this->err(''); - return 1; - } - - $this->out("You can exit with `CTRL-C` or `exit`"); - $this->out(''); - - Log::drop('debug'); - Log::drop('error'); - $this->_io->setLoggers(false); - restore_error_handler(); - restore_exception_handler(); - - $psy = new PsyShell(); - $psy->run(); - } - - /** - * Display help for this console. - * - * @return ConsoleOptionParser - */ - public function getOptionParser() - { - $parser = new ConsoleOptionParser('console', false); - $parser->description( - 'This shell provides a REPL that you can use to interact ' . - 'with your application in an interactive fashion. You can use ' . - 'it to run adhoc queries with your models, or experiment ' . - 'and explore the features of CakePHP and your application.' . - "\n\n" . - 'You will need to have psysh installed for this Shell to work.' - ); - return $parser; - } -} diff --git a/cakephp/notejam/src/Template/Cell/Pads/display.ctp b/cakephp/notejam/src/Template/Cell/Pads/display.ctp deleted file mode 100644 index 51181b443..000000000 --- a/cakephp/notejam/src/Template/Cell/Pads/display.ctp +++ /dev/null @@ -1,16 +0,0 @@ -
- - -
diff --git a/cakephp/notejam/src/Template/Element/Flash/default.ctp b/cakephp/notejam/src/Template/Element/Flash/default.ctp deleted file mode 100644 index bc1e2c369..000000000 --- a/cakephp/notejam/src/Template/Element/Flash/default.ctp +++ /dev/null @@ -1,7 +0,0 @@ - -
diff --git a/cakephp/notejam/src/Template/Element/Flash/error.ctp b/cakephp/notejam/src/Template/Element/Flash/error.ctp deleted file mode 100644 index d3995ad10..000000000 --- a/cakephp/notejam/src/Template/Element/Flash/error.ctp +++ /dev/null @@ -1,3 +0,0 @@ -
-
-
diff --git a/cakephp/notejam/src/Template/Element/Flash/success.ctp b/cakephp/notejam/src/Template/Element/Flash/success.ctp deleted file mode 100644 index 3ce1cc159..000000000 --- a/cakephp/notejam/src/Template/Element/Flash/success.ctp +++ /dev/null @@ -1,3 +0,0 @@ -
-
-
diff --git a/cakephp/notejam/src/Template/Element/notes/form.ctp b/cakephp/notejam/src/Template/Element/notes/form.ctp deleted file mode 100644 index 8351ee735..000000000 --- a/cakephp/notejam/src/Template/Element/notes/form.ctp +++ /dev/null @@ -1,6 +0,0 @@ -Form->create($note, ['class' => 'note']); ?> - Form->input('name'); ?> - Form->textarea('text'); ?> - Form->input('pad_id', ['type' => 'select', 'empty' => '---------', 'options' => $pads, 'default' => !empty($pad) ? $pad : 0]); ?> - Form->submit(__('Save')); ?> -Form->end(); ?> diff --git a/cakephp/notejam/src/Template/Element/pads/form.ctp b/cakephp/notejam/src/Template/Element/pads/form.ctp deleted file mode 100644 index dc9460c87..000000000 --- a/cakephp/notejam/src/Template/Element/pads/form.ctp +++ /dev/null @@ -1,4 +0,0 @@ -Form->create($pad, ['class' => 'pad']); ?> - Form->input('name'); ?> - Form->submit(__('Save')); ?> -Form->end(); ?> diff --git a/cakephp/notejam/src/Template/Email/html/default.ctp b/cakephp/notejam/src/Template/Email/html/default.ctp deleted file mode 100644 index 386674a1a..000000000 --- a/cakephp/notejam/src/Template/Email/html/default.ctp +++ /dev/null @@ -1,22 +0,0 @@ - - ' . $line . "

\n"; -endforeach; -?> diff --git a/cakephp/notejam/src/Template/Email/text/default.ctp b/cakephp/notejam/src/Template/Email/text/default.ctp deleted file mode 100644 index 704b46f03..000000000 --- a/cakephp/notejam/src/Template/Email/text/default.ctp +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/cakephp/notejam/src/Template/Error/error400.ctp b/cakephp/notejam/src/Template/Error/error400.ctp deleted file mode 100644 index 5cd7ce6ee..000000000 --- a/cakephp/notejam/src/Template/Error/error400.ctp +++ /dev/null @@ -1,38 +0,0 @@ -layout = 'dev_error'; - - $this->assign('title', $message); - $this->assign('templateName', 'error400.ctp'); - - $this->start('file'); -?> -queryString)) : ?> -

- SQL Query: - queryString) ?> -

- -params)) : ?> - SQL Query Params: - params) ?> - -element('auto_table_warning') ?> -end(); -endif; -?> -

-

- : - '{$url}'" - ) ?> -

diff --git a/cakephp/notejam/src/Template/Error/error500.ctp b/cakephp/notejam/src/Template/Error/error500.ctp deleted file mode 100644 index d2b7d92a1..000000000 --- a/cakephp/notejam/src/Template/Error/error500.ctp +++ /dev/null @@ -1,37 +0,0 @@ -layout = 'dev_error'; - - $this->assign('title', $message); - $this->assign('templateName', 'error500.ctp'); - - $this->start('file'); -?> -queryString)) : ?> -

- SQL Query: - queryString) ?> -

- -params)) : ?> - SQL Query Params: - params) ?> - -element('auto_table_warning'); - - if (extension_loaded('xdebug')): - xdebug_print_function_stack(); - endif; - - $this->end(); -endif; -?> -

-

- : - -

diff --git a/cakephp/notejam/src/Template/Layout/Email/html/default.ctp b/cakephp/notejam/src/Template/Layout/Email/html/default.ctp deleted file mode 100644 index 2b4397008..000000000 --- a/cakephp/notejam/src/Template/Layout/Email/html/default.ctp +++ /dev/null @@ -1,24 +0,0 @@ - - - - - <?= $this->fetch('title') ?> - - - fetch('content') ?> - - diff --git a/cakephp/notejam/src/Template/Layout/Email/text/default.ctp b/cakephp/notejam/src/Template/Layout/Email/text/default.ctp deleted file mode 100644 index 871dcfb48..000000000 --- a/cakephp/notejam/src/Template/Layout/Email/text/default.ctp +++ /dev/null @@ -1,16 +0,0 @@ - -fetch('content') ?> diff --git a/cakephp/notejam/src/Template/Layout/ajax.ctp b/cakephp/notejam/src/Template/Layout/ajax.ctp deleted file mode 100644 index 871dcfb48..000000000 --- a/cakephp/notejam/src/Template/Layout/ajax.ctp +++ /dev/null @@ -1,16 +0,0 @@ - -fetch('content') ?> diff --git a/cakephp/notejam/src/Template/Layout/anonymous.ctp b/cakephp/notejam/src/Template/Layout/anonymous.ctp deleted file mode 100644 index 42db077f5..000000000 --- a/cakephp/notejam/src/Template/Layout/anonymous.ctp +++ /dev/null @@ -1,6 +0,0 @@ -extend('/Layout/default'); ?> - -
- Flash->render() ?> - fetch('content') ?> -
diff --git a/cakephp/notejam/src/Template/Layout/default.ctp b/cakephp/notejam/src/Template/Layout/default.ctp deleted file mode 100644 index 9c9a7cc8d..000000000 --- a/cakephp/notejam/src/Template/Layout/default.ctp +++ /dev/null @@ -1,39 +0,0 @@ - - - - Html->charset() ?> - <?= $this->fetch('title') ?> - - Html->css('http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/base.min.css') ?> - Html->css('http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/skeleton.min.css') ?> - Html->css('http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/layout.css') ?> - Html->css('style.css') ?> - - fetch('css') ?> - - -
-
- -
-
-

notejam: fetch('title') ?>

-
- - fetch('content') ?> - - - -
- Fork me on GitHub - - diff --git a/cakephp/notejam/src/Template/Layout/error.ctp b/cakephp/notejam/src/Template/Layout/error.ctp deleted file mode 100644 index e6945a8ad..000000000 --- a/cakephp/notejam/src/Template/Layout/error.ctp +++ /dev/null @@ -1,55 +0,0 @@ - - - - - Html->charset() ?> - - <?= $cakeDescription ?>: - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - - Html->css('base.css') ?> - Html->css('cake.css') ?> - - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
- -
- Flash->render() ?> - - fetch('content') ?> -
- -
- - diff --git a/cakephp/notejam/src/Template/Layout/rss/default.ctp b/cakephp/notejam/src/Template/Layout/rss/default.ctp deleted file mode 100644 index fdadcbf78..000000000 --- a/cakephp/notejam/src/Template/Layout/rss/default.ctp +++ /dev/null @@ -1,14 +0,0 @@ -fetch('title'); -endif; - -echo $this->Rss->document( - $this->Rss->channel( - array(), $channel, $this->fetch('content') - ) -); -?> diff --git a/cakephp/notejam/src/Template/Layout/user.ctp b/cakephp/notejam/src/Template/Layout/user.ctp deleted file mode 100644 index 0ae6e9478..000000000 --- a/cakephp/notejam/src/Template/Layout/user.ctp +++ /dev/null @@ -1,8 +0,0 @@ -extend('/Layout/default'); ?> - -cell('Pads', ['auth' => 'auth_param']); ?> - -
- Flash->render() ?> - fetch('content') ?> -
diff --git a/cakephp/notejam/src/Template/Notes/create.ctp b/cakephp/notejam/src/Template/Notes/create.ctp deleted file mode 100644 index 8c191f354..000000000 --- a/cakephp/notejam/src/Template/Notes/create.ctp +++ /dev/null @@ -1,3 +0,0 @@ -assign('title', __('New note')); ?> - -element('notes/form'); ?> diff --git a/cakephp/notejam/src/Template/Notes/delete.ctp b/cakephp/notejam/src/Template/Notes/delete.ctp deleted file mode 100644 index cc79d7d9e..000000000 --- a/cakephp/notejam/src/Template/Notes/delete.ctp +++ /dev/null @@ -1,7 +0,0 @@ -

name};") ?>

-Form->create(); ?> - - " ?> -   - Html->link(__('Cancel'), ['_name' => 'view_note', 'id' => $note->id]) ?> -Form->end(); ?> diff --git a/cakephp/notejam/src/Template/Notes/edit.ctp b/cakephp/notejam/src/Template/Notes/edit.ctp deleted file mode 100644 index 24faf5dee..000000000 --- a/cakephp/notejam/src/Template/Notes/edit.ctp +++ /dev/null @@ -1,3 +0,0 @@ -assign('title', __('Edit ' . $note->name)); ?> - -element('notes/form'); ?> diff --git a/cakephp/notejam/src/Template/Notes/index.ctp b/cakephp/notejam/src/Template/Notes/index.ctp deleted file mode 100644 index db767a984..000000000 --- a/cakephp/notejam/src/Template/Notes/index.ctp +++ /dev/null @@ -1,20 +0,0 @@ -assign('title', __("All notes ({$notes->count()})")); ?> -count()): ?> - - - - - - - - - - - - - -
Html->link('↑', ['_name' => 'index', 'order' => '-name'], ['class' => 'sort_arrow']) ?>Html->link('↓', ['_name' => 'index', 'order' => 'name'], ['class' => 'sort_arrow']) ?> Html->link('↑', ['_name' => 'index', 'order' => '-updated_at'], ['class' => 'sort_arrow']) ?>Html->link('↓', ['_name' => 'index', 'order' => 'updated_at'], ['class' => 'sort_arrow']) ?>
Html->link($note->name, ['id' => $note->id, '_name' => 'view_note']) ?>pad) ? $this->Html->link($note->pad->name, ['id' => $note->pad->id, '_name' => 'view_pad']) : 'No pad'; ?>getPrettyDate(); ?>
- -

- -Html->link(__("New note"), ["_name" => "create_note"], ["class" => "button"]); ?> diff --git a/cakephp/notejam/src/Template/Notes/view.ctp b/cakephp/notejam/src/Template/Notes/view.ctp deleted file mode 100644 index 3c48c2362..000000000 --- a/cakephp/notejam/src/Template/Notes/view.ctp +++ /dev/null @@ -1,9 +0,0 @@ -assign('title', h($note->name)); ?> -

Last edited at getPrettyDate(); ?>

-
-

- text); ?> -

-
-Html->link('Edit note', ['id' => $note->id, '_name' => 'edit_note'], ['class' => 'button']) ?> -Html->link('Delete it', ['id' => $note->id, '_name' => 'delete_note'], ['class' => 'delete-note']) ?> diff --git a/cakephp/notejam/src/Template/Pads/create.ctp b/cakephp/notejam/src/Template/Pads/create.ctp deleted file mode 100644 index 236e80839..000000000 --- a/cakephp/notejam/src/Template/Pads/create.ctp +++ /dev/null @@ -1,3 +0,0 @@ -assign('title', __('New pad')); ?> - -element('pads/form'); ?> diff --git a/cakephp/notejam/src/Template/Pads/delete.ctp b/cakephp/notejam/src/Template/Pads/delete.ctp deleted file mode 100644 index b6f307d19..000000000 --- a/cakephp/notejam/src/Template/Pads/delete.ctp +++ /dev/null @@ -1,6 +0,0 @@ -

name};") ?>

-Form->create(); ?> - " ?> -   - Html->link(__('Cancel'), ['_name' => 'index']) ?> -Form->end(); ?> diff --git a/cakephp/notejam/src/Template/Pads/edit.ctp b/cakephp/notejam/src/Template/Pads/edit.ctp deleted file mode 100644 index 7fba45ec6..000000000 --- a/cakephp/notejam/src/Template/Pads/edit.ctp +++ /dev/null @@ -1,4 +0,0 @@ -assign('title', __('Edit ' . $pad->name)); ?> - -element('pads/form'); ?> -Html->link('Delete pad', ['id' => $pad->id, '_name' => 'delete_pad'], ['class' => 'small-red']) ?> diff --git a/cakephp/notejam/src/Template/Pads/view.ctp b/cakephp/notejam/src/Template/Pads/view.ctp deleted file mode 100644 index 4766dc3f1..000000000 --- a/cakephp/notejam/src/Template/Pads/view.ctp +++ /dev/null @@ -1,19 +0,0 @@ -assign('title', __($pad->name . " ({$notes->count()})")); ?> -count()): ?> - - - - - - - - - - - -
Html->link('↑', ['_name' => 'view_pad', 'order' => '-name', 'id' => $pad->id], ['class' => 'sort_arrow']) ?>Html->link('↓', ['_name' => 'view_pad', 'order' => 'name', 'id' => $pad->id], ['class' => 'sort_arrow']) ?> Html->link('↑', ['_name' => 'view_pad', 'order' => '-updated_at', 'id' => $pad->id], ['class' => 'sort_arrow']) ?>Html->link('↓', ['_name' => 'view_pad', 'order' => 'updated_at', 'id' => $pad->id], ['class' => 'sort_arrow']) ?>
Html->link($note->name, ['id' => $note->id, '_name' => 'view_note']) ?>getPrettyDate(); ?>
- -

- -Html->link(__("New note"), ["_name" => "create_note", "pad" => $pad->id], ["class" => "button"]); ?>
-Html->link(__("Pad settings"), ["_name" => "edit_pad", "id" => $pad->id]); ?> diff --git a/cakephp/notejam/src/Template/Users/forgotpassword.ctp b/cakephp/notejam/src/Template/Users/forgotpassword.ctp deleted file mode 100644 index da2eafa98..000000000 --- a/cakephp/notejam/src/Template/Users/forgotpassword.ctp +++ /dev/null @@ -1,6 +0,0 @@ -assign('title', __('Forgot password?')); ?> - -Form->create($form, ['class' => 'offset-by-six sign-in']); ?> - Form->input('email', ['type' => 'text']); ?> - Form->submit(__('Generate password')); ?> -Form->end(); ?> diff --git a/cakephp/notejam/src/Template/Users/index.ctp b/cakephp/notejam/src/Template/Users/index.ctp deleted file mode 100644 index 7a4b50039..000000000 --- a/cakephp/notejam/src/Template/Users/index.ctp +++ /dev/null @@ -1,45 +0,0 @@ -
-

-
    -
  • Html->link(__('New User'), ['action' => 'add']) ?>
  • -
  • Html->link(__('List Notes'), ['controller' => 'Notes', 'action' => 'index']) ?>
  • -
  • Html->link(__('New Note'), ['controller' => 'Notes', 'action' => 'add']) ?>
  • -
  • Html->link(__('List Pads'), ['controller' => 'Pads', 'action' => 'index']) ?>
  • -
  • Html->link(__('New Pad'), ['controller' => 'Pads', 'action' => 'add']) ?>
  • -
-
-
- - - - - - - - - - - - - - - - - - - - -
Paginator->sort('id') ?>Paginator->sort('email') ?>Paginator->sort('password') ?>
Number->format($user->id) ?>email) ?>password) ?> - Html->link(__('View'), ['action' => 'view', $user->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $user->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $user->id], ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]) ?> -
-
-
    - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> -
-

Paginator->counter() ?>

-
-
diff --git a/cakephp/notejam/src/Template/Users/settings.ctp b/cakephp/notejam/src/Template/Users/settings.ctp deleted file mode 100644 index 9e6424874..000000000 --- a/cakephp/notejam/src/Template/Users/settings.ctp +++ /dev/null @@ -1,8 +0,0 @@ -assign('title', __('Account settings')); ?> - -Form->create($settings, ['class' => 'offset-by-six sign-in']); ?> - Form->input('current_password', ['type' => 'password']); ?> - Form->input('new_password', ['type' => 'password']); ?> - Form->input('confirm_new_password', ['type' => 'password']); ?> - Form->submit(__('Save')); ?> -Form->end(); ?> diff --git a/cakephp/notejam/src/Template/Users/signin.ctp b/cakephp/notejam/src/Template/Users/signin.ctp deleted file mode 100644 index 7138e35eb..000000000 --- a/cakephp/notejam/src/Template/Users/signin.ctp +++ /dev/null @@ -1,9 +0,0 @@ -assign('title', __('Sign in')); ?> - -Form->create(null, ['class' => 'offset-by-six sign-in']); ?> - Form->input('email'); ?> - Form->input('password', ['label' => __('Password')]); ?> - or Html->link(__('Sign Up'), ['_name' => 'signup']) ?> -
-

Html->link(__('Forgot password?'), ['_name' => 'forgot_password'], ['class' => 'small-red']) ?>

-Form->end(); ?> diff --git a/cakephp/notejam/src/Template/Users/signup.ctp b/cakephp/notejam/src/Template/Users/signup.ctp deleted file mode 100644 index 770953124..000000000 --- a/cakephp/notejam/src/Template/Users/signup.ctp +++ /dev/null @@ -1,7 +0,0 @@ -assign('title', __('Sign up')); ?> -Form->create($user, ['class' => 'offset-by-six sign-in']); ?> - Form->input('email'); ?> - Form->input('password', ['label' => __('Password')]); ?> - Form->input('confirm_password', ['label' => __('Confirm password'), 'type' => 'password']); ?> - or Html->link(__('Sign In'), ['_name' => 'signin']) ?> -Form->end(); ?> diff --git a/cakephp/notejam/src/View/AppView.php b/cakephp/notejam/src/View/AppView.php deleted file mode 100644 index e8bb1118c..000000000 --- a/cakephp/notejam/src/View/AppView.php +++ /dev/null @@ -1,35 +0,0 @@ -loadHelper('Html');` - * - * @return void - */ - public function initialize() - { - } -} diff --git a/cakephp/notejam/src/View/Cell/PadsCell.php b/cakephp/notejam/src/View/Cell/PadsCell.php deleted file mode 100644 index 10d2d301a..000000000 --- a/cakephp/notejam/src/View/Cell/PadsCell.php +++ /dev/null @@ -1,33 +0,0 @@ -request->session()->read('Auth.User.id'); - $user = \Cake\ORM\TableRegistry::get('Users')->get($id, [ - 'contain' => ['Pads'] - ]); - $this->set('pads', $user->pads); - } -} diff --git a/cakephp/notejam/tests/Fixture/NotesFixture.php b/cakephp/notejam/tests/Fixture/NotesFixture.php deleted file mode 100644 index 5252801d2..000000000 --- a/cakephp/notejam/tests/Fixture/NotesFixture.php +++ /dev/null @@ -1,51 +0,0 @@ - ['type' => 'integer', 'length' => null, 'unsigned' => false, 'null' => false, 'default' => null, 'autoIncrement' => true, 'precision' => null, 'comment' => null], - 'pad_id' => ['type' => 'integer', 'length' => null, 'unsigned' => false, 'null' => true, 'default' => null, 'precision' => null, 'comment' => null, 'autoIncrement' => null], - 'user_id' => ['type' => 'integer', 'length' => null, 'unsigned' => false, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null, 'autoIncrement' => null], - 'name' => ['type' => 'string', 'length' => 100, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null, 'fixed' => null], - 'text' => ['type' => 'text', 'length' => null, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null], - 'created_at' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null], - 'updated_at' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'user_id_fk' => ['type' => 'foreign', 'columns' => ['user_id'], 'references' => ['users', 'id'], 'update' => 'noAction', 'delete' => 'noAction', 'length' => []], - 'pad_id_fk' => ['type' => 'foreign', 'columns' => ['pad_id'], 'references' => ['pads', 'id'], 'update' => 'noAction', 'delete' => 'noAction', 'length' => []], - ], - ]; - // @codingStandardsIgnoreEnd - - /** - * Records - * - * @var array - */ - public $records = [ - [ - 'id' => 1, - 'pad_id' => 1, - 'user_id' => 1, - 'name' => 'Note #1', - 'text' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.', - 'created_at' => '2015-07-12 19:07:40', - 'updated_at' => '2015-07-12 19:07:40' - ], - ]; -} diff --git a/cakephp/notejam/tests/Fixture/PadsFixture.php b/cakephp/notejam/tests/Fixture/PadsFixture.php deleted file mode 100644 index 27da918d4..000000000 --- a/cakephp/notejam/tests/Fixture/PadsFixture.php +++ /dev/null @@ -1,42 +0,0 @@ - ['type' => 'integer', 'length' => null, 'unsigned' => false, 'null' => false, 'default' => null, 'autoIncrement' => true, 'precision' => null, 'comment' => null], - 'name' => ['type' => 'string', 'length' => 100, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null, 'fixed' => null], - 'user_id' => ['type' => 'integer', 'length' => null, 'unsigned' => false, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null, 'autoIncrement' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - 'user_id_fk' => ['type' => 'foreign', 'columns' => ['user_id'], 'references' => ['users', 'id'], 'update' => 'noAction', 'delete' => 'noAction', 'length' => []], - ], - ]; - // @codingStandardsIgnoreEnd - - /** - * Records - * - * @var array - */ - public $records = [ - [ - 'id' => 1, - 'name' => 'Pad', - 'user_id' => 1 - ], - ]; -} diff --git a/cakephp/notejam/tests/Fixture/UsersFixture.php b/cakephp/notejam/tests/Fixture/UsersFixture.php deleted file mode 100644 index 6731d3a4f..000000000 --- a/cakephp/notejam/tests/Fixture/UsersFixture.php +++ /dev/null @@ -1,48 +0,0 @@ - ['type' => 'integer', 'length' => null, 'unsigned' => false, 'null' => false, 'default' => null, 'autoIncrement' => true, 'precision' => null, 'comment' => null], - 'email' => ['type' => 'string', 'length' => 75, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null, 'fixed' => null], - 'password' => ['type' => 'string', 'length' => 128, 'null' => false, 'default' => null, 'precision' => null, 'comment' => null, 'fixed' => null], - '_constraints' => [ - 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], - ], - ]; - // @codingStandardsIgnoreEnd - - /** - * Records - * - * @var array - */ - public $records = [ - [ - 'id' => 1, - 'email' => 'user1@example.com', - // password is 111111 - 'password' => '$2y$10$0hoGWxcL.dC6WWrhCDQUVezLFlxMkguhXDziDi.yQSLjhoBaI9FDO' - ], - [ - 'id' => 2, - 'email' => 'user2@example.com', - // password is 111111 - 'password' => '$2y$10$0hoGWxcL.dC6WWrhCDQUVezLFlxMkguhXDziDi.yQSLjhoBaI9FDO' - ], - ]; -} diff --git a/cakephp/notejam/tests/TestCase/Controller/NotesControllerTest.php b/cakephp/notejam/tests/TestCase/Controller/NotesControllerTest.php deleted file mode 100644 index 5fc33976f..000000000 --- a/cakephp/notejam/tests/TestCase/Controller/NotesControllerTest.php +++ /dev/null @@ -1,151 +0,0 @@ -signin($this->user); - $data = ['name' => 'New note', 'text' => 'Text']; - $this->post('/notes/create', $data); - $this->assertResponseSuccess(); - $this->assertRedirect('/'); - $this->assertEquals( - TableRegistry::get('Notes')->get(2)->name, - $data['name'] - ); - } - - /** - * Test if validation works when create a note - * - * @return void - */ - public function testCreateFailRequiredFields() - { - $this->signin($this->user); - $this->post('/notes/create', ['name' => '']); - $this->assertResponseContains('This field cannot be left empty'); - } - - /** - * Test if note can be successfully edited - * - * @return void - */ - public function testEditSuccess() - { - $this->signin($this->user); - $data = ['name' => 'New note name']; - $this->post('/notes/1/edit', $data); - $this->assertResponseSuccess(); - $this->assertRedirect('/notes/1'); - $this->assertEquals( - TableRegistry::get('Notes')->get(1)->name, - $data['name'] - ); - } - - /** - * Test if validation works when edit a note - * - * @return void - */ - public function testEditFailRequiredFields() - { - $this->signin($this->user); - $this->post('/notes/1/edit', ['name' => '']); - $this->assertResponseContains('This field cannot be left empty'); - } - - /** - * Test if note cannot be successfully viewed by not an owner - * - * @return void - */ - public function testEditFailNotAnOwner() - { - $this->signin(['id' => 2, 'email' => 'user2@example.com']); - $data = ['name' => 'New note name']; - $this->post('/notes/1/edit', $data); - $this->assertResponseError(); - } - - /** - * Test if note can be successfully viewed - * - * @return void - */ - public function testViewSuccess() - { - $this->signin($this->user); - $this->get('/notes/1'); - $this->assertResponseSuccess(); - $this->assertResponseContains('Note #1'); - } - - /** - * Test if note cannot be viewed by not an owner - * - * @return void - */ - public function testViewFailNotAnOwner() - { - $this->signin(['id' => 2, 'email' => 'user2@example.com']); - $this->get('/notes/1/'); - $this->assertResponseError(); - } - - /** - * Test if note can be successfully deleted - * - * @return void - */ - public function testDeleteSuccess() - { - $this->signin($this->user); - $this->post('/notes/1/delete', []); - $this->assertResponseSuccess(); - $this->assertRedirect('/'); - $this->assertEquals( - TableRegistry::get('Notes')->find('all')->count(), - 0 - ); - } - - /** - * Test if note cannot be deleted by not an owner - * - * @return void - */ - public function testDeleteFailNotAnOwner() - { - $this->signin(['id' => 2, 'email' => 'user2@example.com']); - $this->post('/notes/1/delete', []); - $this->assertResponseError(); - } -} diff --git a/cakephp/notejam/tests/TestCase/Controller/PadsControllerTest.php b/cakephp/notejam/tests/TestCase/Controller/PadsControllerTest.php deleted file mode 100644 index d1921f7cb..000000000 --- a/cakephp/notejam/tests/TestCase/Controller/PadsControllerTest.php +++ /dev/null @@ -1,151 +0,0 @@ -signin($this->user); - $data = ['name' => 'New pad']; - $this->post('/pads/create', $data); - $this->assertResponseSuccess(); - $this->assertRedirect('/pads/2'); - $this->assertEquals( - TableRegistry::get('Pads')->get(2)->name, - $data['name'] - ); - } - - /** - * Test if validation works when create a pad - * - * @return void - */ - public function testCreateFailRequiredFields() - { - $this->signin($this->user); - $this->post('/pads/create', ['name' => '']); - $this->assertResponseContains('This field cannot be left empty'); - } - - /** - * Test if pad can be successfully edited - * - * @return void - */ - public function testEditSuccess() - { - $this->signin($this->user); - $data = ['name' => 'New pad name']; - $this->post('/pads/1/edit', $data); - $this->assertResponseSuccess(); - $this->assertRedirect('/pads/1'); - $this->assertEquals( - TableRegistry::get('Pads')->get(1)->name, - $data['name'] - ); - } - - /** - * Test if validation works when edit a pad - * - * @return void - */ - public function testEditFailRequiredFields() - { - $this->signin($this->user); - $this->post('/pads/1/edit', ['name' => '']); - $this->assertResponseContains('This field cannot be left empty'); - } - - /** - * Test if pad cannot be edited by not an owner - * - * @return void - */ - public function testEditFailNotAnOwner() - { - $this->signin(['id' => 2, 'email' => 'user2@example.com']); - $data = ['name' => 'New pad name']; - $this->post('/pads/1/edit', $data); - $this->assertResponseError(); - } - - /** - * Test if pad can be successfully viewed - * - * @return void - */ - public function testViewSuccess() - { - $this->signin($this->user); - $this->get('/pads/1'); - $this->assertResponseSuccess(); - $this->assertResponseContains('Pad (1)'); - } - - /** - * Test if pad cannot be viewed by not an owner - * - * @return void - */ - public function testViewFailNotAnOwner() - { - $this->signin(['id' => 2, 'email' => 'user2@example.com']); - $this->get('/pads/1'); - $this->assertResponseError(); - } - - /** - * Test if pad can be successfully deleted - * - * @return void - */ - public function testDeleteSuccess() - { - $this->signin($this->user); - $this->post('/pads/1/delete', []); - $this->assertResponseSuccess(); - $this->assertRedirect('/'); - $this->assertEquals( - TableRegistry::get('Pads')->find('all')->count(), - 0 - ); - } - - /** - * Test if pad cannot be deleted by not an owner - * - * @return void - */ - public function testDeleteFailNotAnOwner() - { - $this->signin(['id' => 2, 'email' => 'user2@example.com']); - $this->post('/pads/1/delete', []); - $this->assertResponseError(); - } -} diff --git a/cakephp/notejam/tests/TestCase/Controller/UsersControllerTest.php b/cakephp/notejam/tests/TestCase/Controller/UsersControllerTest.php deleted file mode 100644 index 15ce28ec3..000000000 --- a/cakephp/notejam/tests/TestCase/Controller/UsersControllerTest.php +++ /dev/null @@ -1,139 +0,0 @@ - 'user@example.com', - 'password' => 'pa$$word', - 'confirm_password' => 'pa$$word' - ]; - $this->post('/signup', $data); - $this->assertResponseSuccess(); - $users = TableRegistry::get('Users'); - $query = $users->find()->where(['email' => $data['email']]); - $this->assertEquals(1, $query->count()); - } - - /** - * Test if signup fails if required fields are missing - * - * @return void - */ - public function testSignupFailRequiredFields() - { - $data = [ - 'email' => '', - 'password' => '', - 'confirm_password' => '' - ]; - $this->post('/signup', $data); - $this->assertResponseSuccess(); - $this->assertResponseContains('This field cannot be left empty'); - } - - /** - * Test if signup fails if email is invalid - * - * @return void - */ - public function testSignupFailInvalidEmail() - { - $data = [ - 'email' => 'invalid email' - ]; - $this->post('/signup', $data); - $this->assertResponseSuccess(); - $this->assertResponseContains('The provided value is invalid'); - } - - /** - * Test if signup fails if email already exists - * - * @return void - */ - public function testSignupFailEmailExists() - { - $data = [ - 'email' => 'user1@example.com', - 'password' => 'pa$$word', - 'confirm_password' => 'pa$$word' - ]; - $this->post('/signup', $data); - $this->assertResponseSuccess(); - $this->assertResponseContains('This value is already in use'); - } - - /** - * Test if signup fails if passwords do not match - * - * @return void - */ - public function testSignupFailPasswordsNotMatch() - { - $data = [ - 'email' => 'user1@example.com', - 'password' => 'pa$$word1', - 'confirm_password' => 'pa$$word2' - ]; - $this->post('/signup', $data); - $this->assertResponseSuccess(); - $this->assertResponseContains('Passwords do not match'); - } - - /** - * Test if signin success - * - * @return void - */ - public function testSigninSuccess() - { - $data = [ - 'email' => 'user1@example.com', - 'password' => '111111' - ]; - $this->post('/signin', $data); - $this->assertResponseSuccess(); - $this->assertRedirect(['controller' => 'Notes', 'action' => 'index']); - $this->assertSession('user1@example.com', 'Auth.User.email'); - - } - - /** - * Test if signin fails if provided credentials are wroing - * - * @return void - */ - public function testSigninFailWrongCredentials() - { - $data = [ - 'email' => 'user2@example.com', - 'password' => 'wrong password' - ]; - $this->post('/signin', $data); - $this->assertResponseContains('Your username or password is incorrect.'); - } -} diff --git a/cakephp/notejam/tests/TestCase/NotejamTestCase.php b/cakephp/notejam/tests/TestCase/NotejamTestCase.php deleted file mode 100644 index d8d5f468c..000000000 --- a/cakephp/notejam/tests/TestCase/NotejamTestCase.php +++ /dev/null @@ -1,44 +0,0 @@ - 1, - 'email' => 'user@example.com' - ]; - - /** - * Sign in user - * - * @param array $user User - * @return void - */ - public function signin($user) - { - $this->session([ - 'Auth' => [ - 'User' => [ - 'id' => $user['id'], - 'username' => $user['email'] - ] - ] - ]); - } - - /** - * Create a user - * - * @param array $userData User data - * @return User - */ - public function createUser($userData) - { - $user = TableRegistry::get('Users')->newEntity($userData); - TableRegistry::get('Users')->save($user); - return $user; - } -} diff --git a/cakephp/notejam/tests/bootstrap.php b/cakephp/notejam/tests/bootstrap.php deleted file mode 100644 index e56aa9df2..000000000 --- a/cakephp/notejam/tests/bootstrap.php +++ /dev/null @@ -1,8 +0,0 @@ - - RewriteEngine On - RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^ index.php [L] - diff --git a/cakephp/notejam/webroot/css/style.css b/cakephp/notejam/webroot/css/style.css deleted file mode 100644 index 5748e0390..000000000 --- a/cakephp/notejam/webroot/css/style.css +++ /dev/null @@ -1,396 +0,0 @@ -/* -* Skeleton V1.0.3 -* Copyright 2011, Dave Gamache -* www.getskeleton.com -* Free to use under the MIT license. -* http://www.opensource.org/licenses/mit-license.php -* 7/17/2011 -*/ - - -/* Documentation Styles -================================================== */ - div.container { - padding-top: 40px; } - - /* Doc nav */ - nav { - width: 160px; } - #logo, .bold-header { - margin-bottom: 30px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - letter-spacing: -1px; - color: #555; - font-weight: bold; } - .bold-header span { - font-weight: normal; - font-size: 23px; - } - .bold-header a.header { - text-decoration: none; - color: inherit; - } - .bold-header span.jam { - font-size: 46px; - line-height: 50px; - } - nav ul { - float: left; } - nav ul li { - display: block; - margin-bottom: 10px; } - nav ul li a, - nav ul li a:visited, - nav ul li a:active { - font-size: 14px; - color: #555; - text-decoration: none; - font-weight: bold; } - nav ul li a:hover, - nav ul li a:focus { - color: #222; } - header h1 { - font-size: 52px; - line-height: 61px; - letter-spacing: -1px; - font-weight: normal; - font-family: "Georgia", "Times New Roman", Helvetica, Arial, sans-serif; } - hr.large { - border: none; - height: 8px; - background: #ebebeb; - margin: 50px 0; } - div.doc-section { - margin: 30px 0; } - - #whatAndWhy .row { - padding: 30px 0 0; } - - #typography blockquote { - margin-top: 20px; } - - .hidden-code a { - font-size: 12px; - color: #999; } - .hidden-code>div { - display: none; } - - - /* Grid */ - #grid .column, - #grid .columns { - background: #ddd; - height: 25px; - line-height: 25px; - margin-bottom: 10px; - text-align: center; - text-transform: uppercase; - color: #555; - font-size: 12px; - font-weight: bold; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; } - #grid .column:hover, - #grid .columns:hover { - background: #bbb; - color: #333; } - #grid .example-grid { overflow: hidden; } - - .post-button-note, - .post-button-note a { - font-size: 11px; - color: #999; } - - #examples .four.columns a { - text-decoration: none; - } - #examples .four.columns a:hover { - text-decoration: underline; - } - - - .resize { - position: fixed; - bottom: 0; - right: 0; - height: 80px; - width: 80px; - background: url(images/resize.png); } - - - img { - max-width: 100%; - height: auto; } - - .gist-meta { display: none !important;} - - ul ul ul li { margin-bottom: 3px; } - - .twitter-share-button { margin-bottom: -18px; } - - /* Table stylesheets */ - table { - width: 100%; - border-collapse: collapse; - } - - table th, table td { - padding: 10px 10px 9px; - font-size: 13px; - line-height: 18px; - text-align: left; - } - - table td { - vertical-align: top; - border-top: solid 1px #ddd; - } - - table th { - padding-top: 9px; - font-weight: bold; - vertical-align: middle; - } - - table.condensed th, table.condensed td { - padding: 5px 5px 4px; - } - - table.bordered { - border-collapse: separate; - border: solid 1px #ddd; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - } - - table.bordered th + th, - table.bordered th + td, - table.bordered td + td { - border-left: solid 1px #ddd; - } - - .zebra-striped tbody tr:nth-child(odd) td, - .zebra-striped tbody tr:nth-child(odd) th { - background: #f5f5f5; - } - -.carbonad, -.carbonad-image, -.carbonad-text, -.carbonad-tag { - background: none !important; - border: none !important; - margin-left: 0 !important; -} -.carbonad-tag { - margin-top: 6px !important; - padding-top: 0 !important; -} -.carbonad-text { - height: auto !important; -} -.carbonad-image { - margin-top: 0 !important; -} - -.hidden-text { - font-size: 12px; - color: #999; -} - -td.date, th.date { - text-align: right; -} - -td.date { - font-style: italic; -} - -form.note input[type="text"], form.note textarea { - width: 100%; -} - -form hr { - width: 218px; - margin: 10px 0px; -} - -form.note textarea { - height: 250px; -} - -div.content-area { - min-height: 600px; -} - -hr.footer { - margin-bottom: 10px; -} - -div.footer { - margin-bottom: 10px; - text-align: center; - font-size: 12px; -} - -form.sign-in { - margin: 50px 0 0 0; -} - -.sort_arrow { - text-decoration: none; -} - -.sort_arrow:hover { - text-decoration: none; - color: red; -} - -div.sign-in-out-block { - position: absolute; - right: 14px; - top: 8px; - font-size: 12px; -} - -div.sign-in-out-block a { - /*text-decoration: none;*/ -} - -a.small-red { - color: red; - font-size: 12px; -} - -table.notes { - margin: 0 0 20px 0; -} - -table.notes th.note { - width: 72%; -} - -table.notes td.pad { - color: grey; -} - -table.notes td.pad a { - color: grey; - text-decoration: underline; - font-style: normal; -} - - -table.notes td.pad a:hover { - color: black; -} - -p.empty { - color: grey; - font-style: italic; -} - -a.delete-note { - float: right; - font-size: 12px; - color: red; -} - -.red, input.red { - color: red !important; -} - -ul.errorlist, ul.errors, .error-message { - margin: -18px 0 0 0; -} - -ul.errorlist li, ul.errors li, .error-message { - color: red; -} - -.alert-area { - text-align: center; -} - -.alert { - padding: 5px 8px; - margin: 0 0 12px 0; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border: 1px solid #d6e9c6; -} - -.alert-error { - color: #b94a48; - background-color: #f2dede; - border: 1px solid #eed3d7; -} - - /* Mobile */ - @media only screen and (max-width: 767px) { - header h1 { font-size: 34px; line-height: 37px; } - nav { position: relative; } - nav ul, - .carbonad { - display: none; - } - #logo { text-align: left; } - #examples .four.columns { - padding-top: 30px; - } - } - - /* Mobile Landscape */ - @media only screen and (min-width: 480px) and (max-width: 767px) { - nav ul { - display: none; - } - } - - /* Non 960 */ - @media only screen and (max-width: 959px) { - #logo { - font-size: 21px; - margin-bottom: 15px; } - nav .button { - padding: 9px 20px 11px; } - } - - /* iPad Portrait/Browser */ - @media only screen and (min-width: 768px) and (max-width: 959px) { - nav { - width: 124px; } - } - - /* Mobile/Browser */ - @media only screen and (max-width: 767px) {} - - /* Mobile Landscape/Browser */ - @media only screen and (min-width: 480px) and (max-width: 767px) {} - - /* Anything smaller than standard 960 */ - @media only screen and (max-width: 959px) {} - - - /* iPad Portrait Only */ - @media only screen and (min-width: 768px) and (max-width: 959px) and (max-device-width: 1000px) {} - - /* Mobile Only */ - @media only screen and (max-width: 767px) and (max-device-width: 1000px) {} - - /* Mobile Landscape Only */ - @media only screen and (min-width: 480px) and (max-width: 767px) and (max-device-width: 1000px) {} - - /* Anything smaller than standard 960 on a device */ - @media only screen and (max-width: 959px) and (max-device-width: 1000px) { - .resize { display: none; } - } - diff --git a/cakephp/notejam/webroot/favicon.ico b/cakephp/notejam/webroot/favicon.ico deleted file mode 100644 index aaac9c853a085a151ef0b2ded6f03ecd88f88899..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1782 zcmZuxc{H2(8vck{YH2L3U6I6Ci{zs&X;D#QrZ*&^i{84XI(0j$xRmxXt*IrVEw@F7 z+uEv@*w=$BB$il$kZ35^Qn3tU=~#l=<}*Ea{<`P9=l8tpAMbgd-wOZ|fFuBi0}#pr z2ND2a1OR}({+F091pr7%0HAo{-4u^&9fwMa?qB1G5JD3GTowks#ug_?5R7?V@^Xc+ z*}%H~v}J{^c^3lwVjYGU$f?$|_%lYZU5qWiP`8H5XL1GKO@bkLp9V|}jig5&7zyPTS^5n9mvAcYk~WabC%ir3gh_ZWG% zD$_ms>m%x||H3BV2cxfchuo++1AeTHsj#x0=!{w{DxMom7B&QIe;8kxC>F2sJMWWr zrWTfF2X+qECkLp@CFR?DE7foA?rzPu6#t7;@raumG{FuXX-%w*Oiex7Ih=?m0cQVh zO)*WEo_=NCnmi$zX#M`TV^FQt9p~(&AvnjIJ@v#1er$?BkO)jDSULrx(?$C^T@q=l zo!QLDt-CQ_WxrCM4cC$EmO4Pbe1!kbc-DsD8)$x({B1rb3h-(#DZC?2C!4-KuJX2T zePuoL{C#EA)OvuHgOYTE`sA@hJKwvJk-LIOu}-70N3W2!84<UQ4$(~ zL;}g98v*tpK&~M;PndfMERw5v=GF2+# zJrsWuY_9aotmF4L*1Ifh=SQ1ft0~r{V#RB}WQ3?SzBCqiT*)<7t$E?VK5g;#5xPCl zVSi7Ys|kMrllmm$wnSSt-$ShL|KsB?t_xc}Yx8swg|ag>{)yK38>^e=i=X5bcO*G> zI$L&7{d>K!Jx+F&Pi>yvgjHTQqH{fjtfw>qp)SL|>CL6uDqH~(G1Nvbh%xFc0OuIw zeunvSDT^9l-a*va*_&S9XelkT{mA>d--XoKq`tZJt~pkVl_opRBdu=5_fzhS{udk- z*p%99jnt8bdoi3`P0_;D3OD`T-O)V7cY6@)I)CUNourP%dFr8TO^U8NSFcCW>~J}{fUbJAengd7wot}smH>`oZ#`iWcLKC`dVhH`E@jgo?sQGb-NIa!C*{!yQq4B)0pO7_Q zZ|PP~+f zzPQM(X5rbSW0p$na0Z(|9#YE1K1R9XtkvMgc|+4Rlc!sh$`U9X);EmktX{IAvH@I) z45Q{|EYbpCrWx1xWt_dJ(D3kJJI9xObF~K*+fG$E-cvT9Oo#-F?!7lMaXw|?VfmuzF_PH2>WxRtJg zJiotCAc}er#jch1bAG0!AeRy~KgRoRbtGeWcePZ|uo6mN&H|oyh>Qjn>K;$*qvAee zGA+&UIpgyY9v>cD31jE};0fDMP@I)MSV~Sw2@WR2W-V7@!ir_#Rh#7}%J;Wlb7xOs z#ngTj%aeevi&OmZZRIXlK>y0w#W3#d>0~B8|2$gUm@UvG$k|{`jCbwNuZgNyfv>%! vNX3^}e9zJgoz!XVI;{2C>Dyj9q)cr7> zIGsQFGn3| zCzs2iP$-yfVPOGVTU&6sT(-5fwHb2tVsLP9#{Vr9Ct?R7q(rf?v2A5#W$OI=e1YUJ zQ1YRnA&iWSQ1XYAm__>aYb6XIhMiYVD+-z8_pYi6+CsH{*^m;vOjqvbr=H&DFkeqxHQBh$Scsoy0Glw(T zsaSG*ok62V;~yXYNgP*DUw;o98^+0@vGFb{HC+As}XJ=;xg=B7N_;-mKbHH{|lXs_o+aPcs5~J?s%^P2Odb)Uz z$GvY6^!N9(C2-h?28B$qx7%_yHnt2eU%nQ0qThbl6a_+b)EirjBgQ`g1_07Fr&6R? RzIgxu002ovPDHLkV1mdlwUYn< diff --git a/cakephp/notejam/webroot/img/cake.power.gif b/cakephp/notejam/webroot/img/cake.power.gif deleted file mode 100644 index 8f8d570a2e24d86f0ad7730ee8f2435fd49f152c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmV;)05<&ZTq0L2I(c1A@d@rg`ENj#vn zcl`yi#iKX*jb2F7vd0WQgUq5Tw}Jp}g+ZnCeBY3dYNI+m71%bHRfx4UCkD2th(Q*@ zmd5r+MJNYn7dispatch( - Request::createFromGlobals(), - new Response() -); diff --git a/cakephp/notejam/webroot/js/empty b/cakephp/notejam/webroot/js/empty deleted file mode 100644 index e69de29bb..000000000 diff --git a/express/README.rst b/express/README.rst deleted file mode 100644 index a851fa182..000000000 --- a/express/README.rst +++ /dev/null @@ -1,83 +0,0 @@ -**************** -Notejam: Express -**************** - -Notejam application implemented using `Express.js `_ microframework. - -Express version: 4.2 - -Middlewares/extentions used: - -* `Passport.js `_ for authentication -* `Node ORM 2 `_ for database -* `Mocha `_ and `Superagent `_ for testing -* ... and `others `_ - -========================== -Installation and launching -========================== - -------- -Cloning -------- - -Clone the repo: - -.. code-block:: bash - - $ git clone git@github.com:komarserjio/notejam.git YOUR_PROJECT_DIR/ - -------------------- -Install environment -------------------- -Use `npm `_ to manage dependencies. - -Install dependencies - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/express/notejam/ - $ npm install - -Create database schema - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/express/notejam/ - $ node db.js - ------- -Launch ------- - -Start built-in web server: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/express/notejam/ - $ DEBUG=* ./bin/www - -Go to http://127.0.0.1:3000/ in your browser - ------------------- -Running unit tests ------------------- - -Run unit tests: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/express/notejam/ - $ ./node_modules/mocha/bin/mocha tests - -============ -Contribution -============ - -Please send your pull requests in the ``master`` branch. - -Always prepend your commits with a framework name: - -.. code-block:: bash - - Express: Implemented sign in functionality diff --git a/express/notejam/app.js b/express/notejam/app.js deleted file mode 100644 index f78635800..000000000 --- a/express/notejam/app.js +++ /dev/null @@ -1,110 +0,0 @@ -var express = require('express'); -var session = require('express-session'); -var path = require('path'); -var favicon = require('static-favicon'); -var logger = require('morgan'); -var cookieParser = require('cookie-parser'); -var flash = require('connect-flash'); -var bodyParser = require('body-parser'); -var orm = require('orm'); -var expressValidator = require('express-validator'); -var passport = require('passport'); -var LocalStrategy = require('passport-local').Strategy; - -var users = require('./routes/users'); -var pads = require('./routes/pads'); -var notes = require('./routes/notes'); -var settings = require('./settings') - -var app = express(); - - -// view engine setup -app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'jade'); - -app.use(favicon()); -app.use(logger('dev')); -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded()); -app.use(expressValidator()); -app.use(cookieParser()); -app.use(session({cookie: { maxAge: 60000 }, secret: 'secret'})); -app.use(flash()); -app.use(passport.initialize()); -app.use(passport.session()); -app.use(express.static(path.join(__dirname, 'public'))); - -// DB configuration -var sqlite3 = require('sqlite3').verbose(); -var db = new sqlite3.Database(settings.db); - -orm.settings.set("instance.returnAllErrors", true); -app.use(orm.express(settings.dsn, { - define: function (db, models, next) { - db.load("./models", function (err) { - models.User = db.models.users; - models.Pad = db.models.pads; - models.Note = db.models.notes; - next(); - }); - } -})); - -// Flash Messages configuration -app.use(function(req, res, next){ - res.locals.flash_messages = { - 'success': req.flash('success'), - 'error': req.flash('error') - } - next(); -}); - -// Inject request object and user pads in view scope -app.use(function(req, res, next){ - res.locals.req = req; - - if (req.isAuthenticated()) { - req.user.getPads(function(i, pads) { - res.locals.pads = pads; - next(); - }); - } else { - next(); - } -}); - -app.use('/', users); -app.use('/', pads); -app.use('/', notes); - -/// catch 404 and forward to error handler -app.use(function(req, res, next) { - var err = new Error('Not Found'); - err.status = 404; - next(err); -}); - -// development error handler -// will print stacktrace -if (app.get('env') === 'development') { - app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: err - }); - }); -} - -// production error handler -// no stacktraces leaked to user -app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: {} - }); -}); - -module.exports = app; diff --git a/express/notejam/bin/www b/express/notejam/bin/www deleted file mode 100755 index 5e193192b..000000000 --- a/express/notejam/bin/www +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env node -var debug = require('debug')('notejam'); -var app = require('../app'); - -app.set('port', process.env.PORT || 3000); - -var server = app.listen(app.get('port'), function() { - debug('Express server listening on port ' + server.address().port); -}); diff --git a/express/notejam/db.js b/express/notejam/db.js deleted file mode 100644 index d0d4a0dec..000000000 --- a/express/notejam/db.js +++ /dev/null @@ -1,105 +0,0 @@ -var sqlite3 = require('sqlite3').verbose(); -var async = require('async'); - -var settings = require('./settings'); -var db = new sqlite3.Database(settings.db); - -var functions = { - createTables: function(next) { - async.series({ - createUsers: function(callback) { - db.run("CREATE TABLE IF NOT EXISTS users (" + - "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + - "email VARCHAR(75) NOT NULL," + - "password VARCHAR(128) NOT NULL);", [], - function() { callback(null); }); - }, - createPads: function(callback) { - db.run("CREATE TABLE IF NOT EXISTS pads (" + - "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + - "name VARCHAR(100) NOT NULL," + - "user_id INTEGER NOT NULL REFERENCES users(id));", [], - function() { callback(null); }) - }, - createNotes: function(callback) { - db.run("CREATE TABLE IF NOT EXISTS notes (" + - "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + - "pad_id INTEGER REFERENCES pads(id)," + - "user_id INTEGER NOT NULL REFERENCES users(id)," + - "name VARCHAR(100) NOT NULL," + - "text text NOT NULL," + - "created_at default current_timestamp," + - "updated_at default current_timestamp);", [], - function() { callback(null); }); - } - }, - function(err, results) { - next(); - }); - }, - - applyFixtures: function(next) { - this.truncateTables(function() { - async.series([ - function(callback) { - db.run("INSERT INTO users VALUES (1, 'user1@example.com', " + - "'$2a$10$mhkqpUvPPs.zoRSTiGAEKODOJMljkOY96zludIIw.Pop1UvQCTx8u')", [], - function() { callback(null) }); - }, - function(callback) { - db.run("INSERT INTO users VALUES (2, 'user2@example.com', " + - "'$2a$10$mhkqpUvPPs.zoRSTiGAEKODOJMljkOY96zludIIw.Pop1UvQCTx8u')", [], - function() { callback(null) }); - - }, - function(callback) { - db.run("INSERT INTO pads VALUES (1, 'Pad 1', 1)", [], - function() { callback(null) }); - }, - function(callback) { - db.run("INSERT INTO pads VALUES (2, 'Pad 2', 1)", [], - function() { callback(null) }); - }, - function(callback) { - db.run("INSERT INTO notes VALUES (1, 1, 1, 'Note 1', 'Text', 1, 1)", [], - function() { callback(null) }); - }, - function(callback) { - db.run("INSERT INTO notes VALUES (2, 1, 1, 'Note 2', 'Text', 1, 1)", [], - function() { callback(null) }); - } - ], function(err, results) { - next(); - }) - }); - }, - - truncateTables: function(next) { - async.series([ - function(callback) { - db.run("DELETE FROM users;", [], - function() { callback(null) }); - }, - function(callback) { - db.run("DELETE FROM notes;", [], - function() { callback(null) }); - - }, - function(callback) { - db.run("DELETE FROM pads;", [], - function(result) { callback(null); }); - } - ], function(err, results) { - next(); - }) - } -} - - -if (require.main === module) { - functions.createTables(function() { - console.log("DB successfully initialized"); - }); -} - -module.exports = functions; diff --git a/express/notejam/helpers.js b/express/notejam/helpers.js deleted file mode 100644 index 21fe0a575..000000000 --- a/express/notejam/helpers.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - formatFormErrors: function(errors) { - formatted = {}; - errors.forEach(function(e) { - formatted[e.param] = e.msg; - }); - return formatted; - }, - - formatModelErrors: function(errors) { - formatted = {}; - errors.forEach(function(e) { - formatted[e.property] = e.msg; - }); - return formatted; - }, - - loginRequired: function (req, res, next) { - if (req.isAuthenticated()) { return next(); } - res.redirect('/signin') - } -} diff --git a/express/notejam/models.js b/express/notejam/models.js deleted file mode 100644 index aa5b3ab11..000000000 --- a/express/notejam/models.js +++ /dev/null @@ -1,49 +0,0 @@ -var orm = require('orm'); -var moment = require('moment'); - -module.exports = function (db, cb) { - var User = db.define("users", { - id : { type: "serial", key: true }, - email : { type: "text" }, - password: { type: "text" } - }, { - validations: { - email: [orm.enforce.unique("User with given email already exists!"), - orm.enforce.patterns.email("Invalid email")], - password: orm.enforce.notEmptyString("Password is required"), - // @TODO add "match passwords" validation - } - }); - - var Pad = db.define("pads", { - id : { type: "serial", key: true }, - name : { type: "text" }, - }, { - validations: { - name: orm.enforce.notEmptyString("Name is required"), - } - }); - Pad.hasOne("user", User, { required: true, reverse: 'pads' }); - - var Note = db.define("notes", { - id : { type: "serial", key: true }, - name : { type: "text" }, - text : { type: "text" }, - created_at : { type: "date", time: true }, - updated_at : { type: "date", time: true } - }, { - methods: { - updatedAt: function () { - return moment(this.updated_at).fromNow(); - } - }, - validations: { - name: orm.enforce.notEmptyString("Name is required"), - text: orm.enforce.notEmptyString("Text is required"), - } - }); - Note.hasOne("user", User, { required: true, reverse: 'notes' }); - Note.hasOne("pad", Pad, { required: false, reverse: 'notes' }); - - return cb(); -}; diff --git a/express/notejam/package.json b/express/notejam/package.json deleted file mode 100644 index cd4cb3a00..000000000 --- a/express/notejam/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "notejam", - "version": "0.0.1", - "private": true, - "scripts": { - "start": "node ./bin/www" - }, - "dependencies": { - "express": "~4.2.0", - "sqlite3": "*", - "static-favicon": "~1.0.0", - "morgan": "~1.0.0", - "cookie-parser": "~1.0.1", - "body-parser": "~1.0.0", - "debug": "~0.7.4", - "jade": "~1.3.0", - "orm": "~2.1.19", - "connect-flash": "~0.1.1", - "express-session": "~1.0.2", - "express-validator": "~2.6.0", - "passport": "0.2.1", - "passport-local": "1.0.0", - "mocha": "1.*.*", - "supertest": "0.*.*", - "superagent": "*", - "should": "*", - "should-http": "*", - "async": "*", - "moment": "*", - "bcrypt": "*", - "nodemailer": "*", - "nodemailer-stub-transport": "*" - } -} diff --git a/express/notejam/public/stylesheets/style.css b/express/notejam/public/stylesheets/style.css deleted file mode 100644 index f2cf7f5de..000000000 --- a/express/notejam/public/stylesheets/style.css +++ /dev/null @@ -1,397 +0,0 @@ -/* -* Skeleton V1.0.3 -* Copyright 2011, Dave Gamache -* www.getskeleton.com -* Free to use under the MIT license. -* http://www.opensource.org/licenses/mit-license.php -* 7/17/2011 -*/ - - -/* Documentation Styles -================================================== */ - div.container { - padding-top: 40px; } - - /* Doc nav */ - nav { - width: 160px; } - #logo, .bold-header { - margin-bottom: 30px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - letter-spacing: -1px; - color: #555; - font-weight: bold; } - .bold-header span { - font-weight: normal; - font-size: 23px; - } - .bold-header a.header { - text-decoration: none; - color: inherit; - } - .bold-header span.jam { - font-size: 46px; - line-height: 50px; - } - nav ul { - float: left; } - nav ul li { - display: block; - margin-bottom: 10px; } - nav ul li a, - nav ul li a:visited, - nav ul li a:active { - font-size: 14px; - color: #555; - text-decoration: none; - font-weight: bold; } - nav ul li a:hover, - nav ul li a:focus { - color: #222; } - header h1 { - font-size: 52px; - line-height: 61px; - letter-spacing: -1px; - font-weight: normal; - font-family: "Georgia", "Times New Roman", Helvetica, Arial, sans-serif; } - hr.large { - border: none; - height: 8px; - background: #ebebeb; - margin: 50px 0; } - div.doc-section { - margin: 30px 0; } - - #whatAndWhy .row { - padding: 30px 0 0; } - - #typography blockquote { - margin-top: 20px; } - - .hidden-code a { - font-size: 12px; - color: #999; } - .hidden-code>div { - display: none; } - - - /* Grid */ - #grid .column, - #grid .columns { - background: #ddd; - height: 25px; - line-height: 25px; - margin-bottom: 10px; - text-align: center; - text-transform: uppercase; - color: #555; - font-size: 12px; - font-weight: bold; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; } - #grid .column:hover, - #grid .columns:hover { - background: #bbb; - color: #333; } - #grid .example-grid { overflow: hidden; } - - .post-button-note, - .post-button-note a { - font-size: 11px; - color: #999; } - - #examples .four.columns a { - text-decoration: none; - } - #examples .four.columns a:hover { - text-decoration: underline; - } - - - .resize { - position: fixed; - bottom: 0; - right: 0; - height: 80px; - width: 80px; - background: url(images/resize.png); } - - - img { - max-width: 100%; - height: auto; } - - .gist-meta { display: none !important;} - - ul ul ul li { margin-bottom: 3px; } - - .twitter-share-button { margin-bottom: -18px; } - - /* Table stylesheets */ - table { - width: 100%; - border-collapse: collapse; - } - - table th, table td { - padding: 10px 10px 9px; - font-size: 13px; - line-height: 18px; - text-align: left; - } - - table td { - vertical-align: top; - border-top: solid 1px #ddd; - } - - table th { - padding-top: 9px; - font-weight: bold; - vertical-align: middle; - } - - table.condensed th, table.condensed td { - padding: 5px 5px 4px; - } - - table.bordered { - border-collapse: separate; - border: solid 1px #ddd; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - } - - table.bordered th + th, - table.bordered th + td, - table.bordered td + td { - border-left: solid 1px #ddd; - } - - .zebra-striped tbody tr:nth-child(odd) td, - .zebra-striped tbody tr:nth-child(odd) th { - background: #f5f5f5; - } - -.carbonad, -.carbonad-image, -.carbonad-text, -.carbonad-tag { - background: none !important; - border: none !important; - margin-left: 0 !important; -} -.carbonad-tag { - margin-top: 6px !important; - padding-top: 0 !important; -} -.carbonad-text { - height: auto !important; -} -.carbonad-image { - margin-top: 0 !important; -} - -.hidden-text { - font-size: 12px; - color: #999; -} - -td.date, th.date { - text-align: right; -} - -td.date { - font-style: italic; -} - -form.note input[type="text"], form.note textarea { - width: 100%; -} - -form hr { - width: 218px; - margin: 10px 0px; -} - -form.note textarea { - height: 250px; -} - -div.content-area { - min-height: 600px; -} - -hr.footer { - margin-bottom: 10px; -} - -div.footer { - margin-bottom: 10px; - text-align: center; - font-size: 12px; -} - -form.sign-in { - margin: 50px 0 0 0; -} - -.sort_arrow { - text-decoration: none; -} - -.sort_arrow:hover { - text-decoration: none; - color: red; -} - -div.sign-in-out-block { - position: absolute; - right: 14px; - top: 8px; - font-size: 12px; -} - -div.sign-in-out-block a { - /*text-decoration: none;*/ -} - -a.small-red { - color: red; - font-size: 12px; -} - -table.notes { - margin: 0 0 20px 0; -} - -table.notes th.note { - width: 72%; -} - -table.notes td.pad { - color: grey; -} - -table.notes td.pad a { - color: grey; - text-decoration: underline; - font-style: normal; -} - - -table.notes td.pad a:hover { - color: black; -} - -p.empty { - color: grey; - font-style: italic; -} - -a.delete-note { - float: right; - font-size: 12px; - color: red; -} - -.red, input.red { - color: red !important; -} - -ul.errorlist, ul.errors { - margin: -18px 0 0 0; -} - -ul.errorlist li, ul.errors li { - color: red; -} - -.alert-area { - text-align: center; -} - -.alert { - padding: 5px 8px; - margin: 0 0 12px 0; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border: 1px solid #d6e9c6; -} - -.alert-error { - color: #b94a48; - background-color: #f2dede; - border: 1px solid #eed3d7; -} - - /* Mobile */ - @media only screen and (max-width: 767px) { - header h1 { font-size: 34px; line-height: 37px; } - nav { position: relative; } - nav ul, - .carbonad { - display: none; - } - #logo { text-align: left; } - #examples .four.columns { - padding-top: 30px; - } - } - - /* Mobile Landscape */ - @media only screen and (min-width: 480px) and (max-width: 767px) { - nav ul { - display: none; - } - } - - /* Non 960 */ - @media only screen and (max-width: 959px) { - #logo { - font-size: 21px; - margin-bottom: 15px; } - nav .button { - padding: 9px 20px 11px; } - } - - /* iPad Portrait/Browser */ - @media only screen and (min-width: 768px) and (max-width: 959px) { - nav { - width: 124px; } - } - - /* Mobile/Browser */ - @media only screen and (max-width: 767px) {} - - /* Mobile Landscape/Browser */ - @media only screen and (min-width: 480px) and (max-width: 767px) {} - - /* Anything smaller than standard 960 */ - @media only screen and (max-width: 959px) {} - - - /* iPad Portrait Only */ - @media only screen and (min-width: 768px) and (max-width: 959px) and (max-device-width: 1000px) {} - - /* Mobile Only */ - @media only screen and (max-width: 767px) and (max-device-width: 1000px) {} - - /* Mobile Landscape Only */ - @media only screen and (min-width: 480px) and (max-width: 767px) and (max-device-width: 1000px) {} - - /* Anything smaller than standard 960 on a device */ - @media only screen and (max-width: 959px) and (max-device-width: 1000px) { - .resize { display: none; } - } - - diff --git a/express/notejam/routes/notes.js b/express/notejam/routes/notes.js deleted file mode 100644 index 339e21228..000000000 --- a/express/notejam/routes/notes.js +++ /dev/null @@ -1,108 +0,0 @@ -var express = require('express'); -var router = express.Router(); -var orm = require('orm'); -var async = require('async'); - -var helpers = require('../helpers'); - -// All notes (main page) -router.get('/', helpers.loginRequired, function(req, res) { - req.user.getNotes(req.param("order", "-updated_at"), function(i, notes) { - async.map(notes, function(item, cb) { - item.getPad(function(err, pad) { - item.pad = pad; - return cb(null, item); - }) - }, function(err, results) { - res.render( - 'notes/list', - {title: 'All notes (' + results.length + ')', notes: results} - ); - }); - }) -}); - -// Create new note -router.get('/notes/create', helpers.loginRequired, function(req, res) { - res.render('notes/create', {padId: req.param('pad')}); -}); - -router.post('/notes/create', helpers.loginRequired, function(req, res) { - var data = req.body; - data['user_id'] = req.user.id; - req.models.Note.create(data, function(err, message) { - if (err) { - res.locals.errors = helpers.formatModelErrors(err); - } else { - req.flash( - 'success', - 'Note is successfully created' - ); - return res.redirect('/'); - } - res.render('notes/create'); - }); -}); - -// Inject note in request -router.use('/notes/:id', function(req, res, next) { - if (req.user) { - req.models.Note.one( - {id: req.param('id'), user_id: req.user.id}, - function(err, note) { - if (note == null) { - res.send(404); - return; - }; - req.note = note; - next(); - }); - } else { - next(); - } -}); - - -// View note -router.get('/notes/:id', helpers.loginRequired, function(req, res) { - res.render('notes/view', {note: req.note}); -}); - - - -// Edit note -router.get('/notes/:id/edit', helpers.loginRequired, function(req, res) { - res.render('notes/edit', {note: req.note}); -}); - -router.post('/notes/:id/edit', helpers.loginRequired, function(req, res) { - req.note.save(req.body, function(err) { - if (err) { - res.locals.errors = helpers.formatModelErrors(err); - res.render('notes/edit', {note: req.note}); - } else { - req.flash( - 'success', - 'Note is successfully updated' - ); - res.redirect('/notes/' + req.note.id); - } - }); -}); - -// Delete note -router.get('/notes/:id/delete', helpers.loginRequired, function(req, res) { - res.render('notes/delete', {note: req.note}); -}); - -router.post('/notes/:id/delete', helpers.loginRequired, function(req, res) { - req.note.remove(function(err) { - req.flash( - 'success', - 'Note is successfully deleted' - ); - res.redirect('/'); - }); -}); - -module.exports = router; diff --git a/express/notejam/routes/pads.js b/express/notejam/routes/pads.js deleted file mode 100644 index c9d1ceee4..000000000 --- a/express/notejam/routes/pads.js +++ /dev/null @@ -1,93 +0,0 @@ -var express = require('express'); -var router = express.Router(); -var orm = require('orm'); - -var helpers = require('../helpers') - -// Create new pad -router.get('/pads/create', helpers.loginRequired, function(req, res) { - res.render('pads/create'); -}); - -router.post('/pads/create', helpers.loginRequired, function(req, res) { - var data = req.body; - data['user_id'] = req.user.id; - req.models.Pad.create(data, function(err, message) { - if (err) { - res.locals.errors = helpers.formatModelErrors(err); - } else { - req.flash( - 'success', - 'Pad is successfully created' - ); - return res.redirect('/'); - } - res.render('pads/create'); - }); -}); - -// Inject pad in request -router.use('/pads/:id', function(req, res, next) { - if (req.user) { - req.models.Pad.one( - {id: req.param('id'), user_id: req.user.id}, - function(err, pad) { - if (pad == null) { - res.send(404); - return; - }; - req.pad = pad; - next(); - }); - } else { - next(); - } -}); - -// Pad notes -router.get('/pads/:id', helpers.loginRequired, function(req, res) { - req.pad.getNotes(req.param("order", "-updated_at"), function(i, notes) { - res.render( - 'pads/list', - {title: req.pad.name + ' (' + notes.length + ')', - pad: req.pad, notes: notes} - ); - }); -}); - -// Edit pad -router.get('/pads/:id/edit', helpers.loginRequired, function(req, res) { - res.render('pads/edit', {pad: req.pad}); -}); - -router.post('/pads/:id/edit', helpers.loginRequired, function(req, res) { - req.pad.save({name: req.param('name')}, function(err) { - if (err) { - res.locals.errors = helpers.formatModelErrors(err); - res.render('pads/edit', {pad: req.pad}); - } else { - req.flash( - 'success', - 'Pad is successfully updated' - ); - res.redirect('/'); - } - }); -}); - -// Delete pad -router.get('/pads/:id/delete', helpers.loginRequired, function(req, res) { - res.render('pads/delete', {pad: req.pad}); -}); - -router.post('/pads/:id/delete', helpers.loginRequired, function(req, res) { - req.pad.remove(function(err) { - req.flash( - 'success', - 'Pad is successfully deleted' - ); - res.redirect('/'); - }); -}); - -module.exports = router; diff --git a/express/notejam/routes/users.js b/express/notejam/routes/users.js deleted file mode 100644 index e1e72dc06..000000000 --- a/express/notejam/routes/users.js +++ /dev/null @@ -1,230 +0,0 @@ -var express = require('express'); -var router = express.Router(); -var debug = require('debug')('http') -var orm = require('orm'); -var passport = require('passport'); -var LocalStrategy = require('passport-local').Strategy; -var bcrypt = require('bcrypt'); -var nodemailer = require('nodemailer'); -var stubTransport = require('nodemailer-stub-transport'); - -var helpers = require('../helpers') -var settings = require('../settings'); - -// Sign Up -router.get('/signup', function(req, res) { - res.render('users/signup'); -}); - -router.post('/signup', function(req, res) { - var data = req.body; - if (data['password']) { - data['password'] = generateHash(data['password']); - }; - req.models.User.create(data, function(err, message) { - if (err) { - res.locals.errors = helpers.formatModelErrors(err); - } else { - req.flash( - 'success', - 'User is successfully created. Now you can sign in.' - ); - return res.redirect('/signin'); - } - res.render('users/signup'); - }); -}); - -// Sign In -router.get('/signin', function(req, res) { - res.render('users/signin'); -}); - -router.post('/signin', function(req, res, next) { - req.checkBody('email', 'Email is required').notEmpty(); - req.checkBody('password', 'Password is required').notEmpty(); - if (req.validationErrors()) { - var errors = helpers.formatFormErrors(req.validationErrors()); - } - - if (!errors) { - passport.authenticate('local', function(err, user, info) { - if (err) { return next(err) } - if (!user) { - req.flash('error', info.message); - return res.redirect('/signin') - } - req.logIn(user, function(err) { - if (err) { return next(err); } - return res.redirect('/'); - }); - })(req, res, next); - } else { - res.locals.errors = errors; - res.render('users/signin'); - } -}); - -// Account settings -router.get('/settings', helpers.loginRequired, function(req, res) { - res.render('users/settings'); -}); - -router.post('/settings', function(req, res, next) { - req.checkBody('password', 'Password is required').notEmpty(); - req.checkBody('new_password', 'New password is required').notEmpty(); - req.checkBody('confirm_new_password', 'Passwords do not match').equals( - req.body.new_password - ); - if (req.validationErrors()) { - var errors = helpers.formatFormErrors(req.validationErrors()); - } - - if (!errors) { - if (!checkPassword(req.user, req.param('password'))) { - req.flash( - 'error', - 'Current password is not correct' - ); - return res.redirect('/settings'); - } - var hash = generateHash(req.param('password')); - req.user.save({password: hash}, function(err) { - req.flash( - 'success', - 'Password is successfully changed' - ); - return res.redirect('/'); - }) - } else { - res.locals.errors = errors; - res.render('users/settings'); - } -}); - -// Forgot password -router.get('/forgot-password', function(req, res) { - res.render('users/forgot-password'); -}); - -router.post('/forgot-password', function(req, res) { - req.checkBody('email', 'Email is required').notEmpty(); - if (req.validationErrors()) { - res.locals.errors = helpers.formatFormErrors(req.validationErrors()); - res.render('users/forgot-password'); - return; - } - if (req.models.User.one({email: req.param('email')}, function(err, user) { - if (user) { - var password = generateRandomPassword(); - var hash = generateHash(password); - user.save({password: hash}, function() { - sendNewPassword(user, password); - req.flash( - 'success', - 'New password sent to your inbox' - ); - return res.redirect('/signin'); - }); - } else { - req.flash( - 'error', - 'No user with given email found' - ); - return res.redirect('/forgot-password'); - } - })); -}); - -// Sign Out -router.get('/signout', function(req, res) { - req.logout(); - res.redirect('/signin'); -}); - - -// Helper user functions -// Auth settings -passport.serializeUser(function(user, done) { - done(null, user.id); -}); - -passport.deserializeUser(function(id, done) { - findById(id, function (err, user) { - done(err, user); - }); -}); - -passport.use(new LocalStrategy( - {usernameField: 'email', passwordField: 'password'}, - function(username, password, done) { - findByUsername(username, function(err, user) { - if (err) { - return done(err); - } - if (!user) { - return done(null, false, { message: 'Unknown user ' + username }); - } - if (!checkPassword(user, password)) { - return done(null, false, { message: 'Invalid password' }); - } - return done(null, user); - }) - } -)); - -function findByUsername(username, fn) { - orm.connect(settings.dsn, function(err, db) { - db.load("../models", function (err) { - var User = db.models.users; - db.models.users.find({email: username}, function (err, users) { - if (users.length) { - return fn(null, users[0]); - } else { - return fn(null, null); - } - }); - }); - }); -} - -function findById(id, fn) { - orm.connect(settings.dsn, function(err, db) { - db.load("../models", function (err) { - var User = db.models.users; - User.get(id, function (err, user) { - if (err) { - fn(new Error('User ' + id + ' does not exist')); - } - return fn(null, user); - }); - }); - }); -} - -function generateHash(password) { - return bcrypt.hashSync(password, bcrypt.genSaltSync(10)); -} - -function checkPassword(user, password) { - return bcrypt.compareSync(password, user.password); -} - -function generateRandomPassword() { - return Math.random().toString(36).replace(/[^a-z]+/g, ''); -} - -function sendNewPassword(user, password) { - var mailer = nodemailer.createTransport(stubTransport()); - mailer.sendMail({ - from: 'norepy@notejamapp.com', - to: user.email, - subject: 'New notejam password', - text: 'Your new password: ' + password - }, function(err, info) { - // sent mail to console output - console.log(info.response.toString()); - }); -} - -module.exports = router; diff --git a/express/notejam/settings.js b/express/notejam/settings.js deleted file mode 100644 index 0350717b8..000000000 --- a/express/notejam/settings.js +++ /dev/null @@ -1,17 +0,0 @@ -var settings = { - development: { - db: "notejam.db", - dsn: "sqlite://notejam.db" - }, - test: { - db: "notejam_test.db", - dsn: "sqlite://notejam_test.db" - } -}; - - -var env = process.env.NODE_ENV -if (!env) { - env = 'development' -}; -module.exports = settings[env]; diff --git a/express/notejam/tests/config.js b/express/notejam/tests/config.js deleted file mode 100644 index dfd5a09c9..000000000 --- a/express/notejam/tests/config.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - host: 'http://localhost', - port: 3000, - - // build absolute url - url: function(url) { - return this.host + ":" + this.port + url; - }, - - // sign in user/agent - signInUser: function (agent, user) { - var self = this; - return function(done) { - agent - .post(self.url('/signin')) - .send(user) - .end(onResponse); - - function onResponse(err, res) { - res.should.have.status(200); - return done(); - } - }; - } -} diff --git a/express/notejam/tests/notes.js b/express/notejam/tests/notes.js deleted file mode 100644 index da60c9aac..000000000 --- a/express/notejam/tests/notes.js +++ /dev/null @@ -1,141 +0,0 @@ -// Enable test environment -process.env.NODE_ENV = 'test'; - -var request = require('superagent'); -var should = require('should'); -require('should-http'); - -var db = require('../db'); -var config = require('./config') -var app = require('../app'); - -app.listen(config.port); - -before(function(done) { - db.createTables(function() { - db.applyFixtures(done); - }); -}); - -describe('Note', function() { - - var agent = request.agent(); - before( - config.signInUser( - agent, {email: 'user1@example.com', password: 'password'} - ) - ); - - describe('can be', function() { - it('successfully created', function(done) { - agent - .post(config.url('/notes/create')) - .send({name: 'New note', text: 'text', pad_id: 1}) - .end(function(error, res){ - res.redirects.should.eql([config.url('/')]); - res.text.should.containEql('Note is successfully created'); - done(); - }); - }); - - it('successfully edited', function(done) { - agent - .post(config.url('/notes/1/edit')) - .send({name: 'New name', text: 'New text'}) - .end(function(error, res){ - res.redirects.should.eql([config.url('/notes/1')]); - res.text.should.containEql('Note is successfully updated'); - done(); - }); - }); - - it('successfully deleted', function(done) { - agent - .post(config.url('/notes/2/delete')) - .end(function(error, res){ - res.redirects.should.eql([config.url('/')]); - res.text.should.containEql('Note is successfully deleted'); - done(); - }); - }); - - it('successfully viewed', function(done) { - agent - .get(config.url('/notes/1')) - .end(function(error, res){ - res.should.have.status(200); - done(); - }); - }); - }); - - describe('can not be', function() { - it('created if required fields are missing', function(done) { - agent - .post(config.url('/notes/create')) - .send({name: '', text: ''}) - .end(function(error, res){ - res.text.should.containEql('Name is required'); - res.text.should.containEql('Text is required'); - done(); - }); - }); - - it('edited if required fields are missing', function(done) { - agent - .post(config.url('/notes/1/edit')) - .send({name: '', text: ''}) - .end(function(error, res){ - res.text.should.containEql('Name is required'); - res.text.should.containEql('Text is required'); - done(); - }); - }); - - it('edited by not an owner', function(done) { - var agent = request.agent(); - var signed = config.signInUser( - agent, {email: 'user2@example.com', password: 'password'} - ); - signed(function() { - agent - .post(config.url('/notes/1/edit')) - .send({name: 'new name', text: 'new text'}) - .end(function(error, res){ - res.should.have.status(404); - done(); - }); - }) - }); - - it('deleted by not an owner', function(done) { - var agent = request.agent(); - var signed = config.signInUser( - agent, {email: 'user2@example.com', password: 'password'} - ); - signed(function() { - agent - .post(config.url('/notes/1/delete')) - .end(function(error, res){ - res.should.have.status(404); - done(); - }); - }) - }); - - it('viewed by not an owner', function(done) { - var agent = request.agent(); - var signed = config.signInUser( - agent, {email: 'user2@example.com', password: 'password'} - ); - signed(function() { - agent - .get(config.url('/notes/1')) - .end(function(error, res){ - res.should.have.status(404); - done(); - }); - }) - }); - }); -}); diff --git a/express/notejam/tests/pads.js b/express/notejam/tests/pads.js deleted file mode 100644 index 00f1dab2c..000000000 --- a/express/notejam/tests/pads.js +++ /dev/null @@ -1,138 +0,0 @@ -// Enable test environment -process.env.NODE_ENV = 'test'; - -var request = require('superagent'); -var should = require('should'); -require('should-http'); - -var db = require('../db'); -var config = require('./config'); -var app = require('../app'); - -app.listen(3000); - -before(function(done) { - db.createTables(function() { - db.applyFixtures(done); - }); -}); - -describe('Pad', function() { - - var agent = request.agent(); - before( - config.signInUser(agent, {email: 'user1@example.com', password: 'password'}) - ); - - describe('can be', function() { - it('successfully created', function(done) { - agent - .post(config.url('/pads/create')) - .send({name: 'New pad'}) - .end(function(error, res){ - res.redirects.should.eql([config.url('/')]); - res.text.should.containEql('Pad is successfully created'); - done(); - }); - }); - - it('successfully edited', function(done) { - agent - .post(config.url('/pads/1/edit')) - .send({name: 'New pad name'}) - .end(function(error, res){ - res.redirects.should.eql([config.url('/')]); - res.text.should.containEql('Pad is successfully updated'); - done(); - }); - }); - - it('successfully deleted', function(done) { - agent - .post(config.url('/pads/2/delete')) - .end(function(error, res){ - res.redirects.should.eql([config.url('/')]); - res.text.should.containEql('Pad is successfully deleted'); - done(); - }); - }); - - it('successfully viewed', function(done) { - agent - .get(config.url('/pads/1')) - .end(function(error, res){ - res.should.have.status(200); - res.text.should.containEql('Pad settings'); - done(); - }); - }); - }); - - describe('can not be', function() { - it('created if required fields are missing', function(done) { - agent - .post(config.url('/pads/create')) - .send({name: ''}) - .end(function(error, res){ - res.text.should.containEql('Name is required'); - done(); - }); - }); - - it('edited if required fields are missing', function(done) { - agent - .post(config.url('/pads/1/edit')) - .send({name: ''}) - .end(function(error, res){ - res.text.should.containEql('Name is required'); - done(); - }); - }); - - it('edited by not an owner', function(done) { - var agent = request.agent(); - var signed = config.signInUser( - agent, {email: 'user2@example.com', password: 'password'} - ); - signed(function() { - agent - .post(config.url('/pads/1/edit')) - .send({name: 'new name'}) - .end(function(error, res){ - res.should.have.status(404); - done(); - }); - }) - }); - - it('deleted by not an owner', function(done) { - var agent = request.agent(); - var signed = config.signInUser( - agent, {email: 'user2@example.com', password: 'password'} - ); - signed(function() { - agent - .post(config.url('/pads/1/delete')) - .end(function(error, res){ - res.should.have.status(404); - done(); - }); - }) - }); - - it('viewed by not an owner', function(done) { - var agent = request.agent(); - var signed = config.signInUser( - agent, {email: 'user2@example.com', password: 'password'} - ); - signed(function() { - agent - .get(config.url('/pads/1')) - .end(function(error, res){ - res.should.have.status(404); - done(); - }); - }) - }); - }); -}); diff --git a/express/notejam/tests/users.js b/express/notejam/tests/users.js deleted file mode 100644 index 958f6caaa..000000000 --- a/express/notejam/tests/users.js +++ /dev/null @@ -1,106 +0,0 @@ -// Enable test environment -process.env.NODE_ENV = 'test'; - -var request = require('superagent'); -var should = require('should'); -require('should-http'); - -var db = require('../db'); -var config = require('./config'); -var app = require('../app'); - -app.listen(3000); - -before(function(done) { - db.createTables(function() { - db.applyFixtures(done); - }); -}); - -describe('User', function(){ - - it('can successfully sign in', function(done){ - var agent = request.agent(); - agent - .post(config.url('/signin')) - .send({email: 'user1@example.com', password: 'password' }) - .end(function(error, res){ - res.redirects.should.eql([config.url('/')]); - done(); - }); - }); - - describe('cant sign in', function() { - it('with wrong credentials', function(done) { - var agent = request.agent(); - agent - .post(config.url('/signin')) - .send({email: 'unknown@email.com', password: 'unknown' }) - .end(function(error, res){ - res.text.should.containEql('Unknown user'); - done(); - }); - }); - - it('if required fields are missing', function(done){ - var agent = request.agent(); - agent - .post(config.url('/signin')) - .send({email: '', password: '' }) - .end(function(error, res){ - res.text.should.containEql('Email is required'); - res.text.should.containEql('Password is required'); - done(); - }); - }); - }); - - it('can successfully sign up', function(done) { - var agent = request.agent(); - agent - .post(config.url('/signup')) - .send({email: 'usersadfasdf@example.com', password: 'password'}) - .end(function(error, res){ - res.redirects.should.eql([config.url('/signin')]); - done(); - }); - }); - - describe('cant signup', function() { - it('if email is invalid', function(done) { - var agent = request.agent(); - agent - .post(config.url('/signup')) - .send({email: 'invalid', password: 'password' }) - .end(function(error, res){ - res.text.should.containEql('Invalid email'); - done(); - }); - }); - - it('if required fields are missing', function(done) { - var agent = request.agent(); - agent - .post(config.url('/signup')) - .send({email: '', password: '' }) - .end(function(error, res){ - res.text.should.containEql('Invalid email'); - res.text.should.containEql('Password is required'); - done(); - }); - }); - - it('if user already exists', function(done) { - var agent = request.agent(); - agent - .post(config.url('/signup')) - .send({email: 'user1@example.com', password: 'password' }) - .end(function(error, res){ - res.text.should.containEql('User with given email already exists'); - done(); - }); - }); - - // @TODO implement "if passwords do not match" case - }); -}) diff --git a/express/notejam/views/error.jade b/express/notejam/views/error.jade deleted file mode 100644 index db0601f24..000000000 --- a/express/notejam/views/error.jade +++ /dev/null @@ -1,6 +0,0 @@ -extends layout - -block content_area - h1= message - h2= error.status - pre #{error.stack} diff --git a/express/notejam/views/layout.jade b/express/notejam/views/layout.jade deleted file mode 100644 index f94fa8bcb..000000000 --- a/express/notejam/views/layout.jade +++ /dev/null @@ -1,44 +0,0 @@ -include mixins.jade - -doctype html -html(lang='en') - meta(charset='utf-8') - title - block title - meta(name='description', content='Notejam: Unified sample app') - meta(name='author', content='Notejam') - meta(name='viewport', content='width=device-width, initial-scale=1, maximum-scale=1') - link(rel='stylesheet', href='http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/base.min.css') - link(rel='stylesheet', href='http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/skeleton.min.css') - link(rel='stylesheet', href='http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/layout.css') - link(rel='stylesheet', href='/stylesheets/style.css') - body - .container - .sixteen.columns - .sign-in-out-block - if req.isAuthenticated() - | #{req.user.email}:   - a(href='/settings') Account settings - |     - a(href='/signout') Sign out - else - a(href='/signup') Sign up - |     - a(href='/signin') Sign in - .sixteen.columns - h1.bold-header - a.header(href="/") - | note - span.jam - | jam:  - span - block title - block content_area - hr.footer - .footer - div - | Notejam: Express application - div - Github, Twitter, created by Serhii Komar - a(href='https://github.com/komarserjio/notejam') - img(style='position: absolute; top: 0; right: 0; border: 0;', src='https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png', alt='Fork me on GitHub') diff --git a/express/notejam/views/main.jade b/express/notejam/views/main.jade deleted file mode 100644 index 2441f8ff2..000000000 --- a/express/notejam/views/main.jade +++ /dev/null @@ -1,18 +0,0 @@ -extends layout - -block content_area - .three.columns - h4#logo My pads - nav - if pads.length - ul - each pad in pads - li - a(href='/pads/#{pad.id}') #{pad.name} - else - p.empty= 'No pads yet' - hr - a(href='/pads/create') New pad - .thirteen.columns.content-area - +render_flash_messages(flash_messages) - block content diff --git a/express/notejam/views/mixins.jade b/express/notejam/views/mixins.jade deleted file mode 100644 index acfb1a12d..000000000 --- a/express/notejam/views/mixins.jade +++ /dev/null @@ -1,13 +0,0 @@ -mixin error(field, errors) - if errors && (field in errors) - ul.errors - li= errors[field] - -// render flash messages -mixin render_flash_messages(messages) - if messages.success.length || messages.error.length - div.alert-area - each message in messages.success - div.alert.alert-success= message - each message in messages.error - div.alert.alert-error= message diff --git a/express/notejam/views/notes/create.jade b/express/notejam/views/notes/create.jade deleted file mode 100644 index 8a3dd27f4..000000000 --- a/express/notejam/views/notes/create.jade +++ /dev/null @@ -1,19 +0,0 @@ -extends ../main - -block title - | New note - -block content - form.note(method='POST') - label(for='name') Name - input#name(type='text', name='name') - +error('name', errors) - label(for='text') Text - textarea(name='text') - +error('text', errors) - label(for='pad_id') Pad - select(name='pad_id') - option -------------- - each pad in req.user.pads - option(value=pad.id, selected=pad.id == padId) #{pad.name} - input(type='submit', value='Save') diff --git a/express/notejam/views/notes/delete.jade b/express/notejam/views/notes/delete.jade deleted file mode 100644 index 61224f24d..000000000 --- a/express/notejam/views/notes/delete.jade +++ /dev/null @@ -1,12 +0,0 @@ -extends ../main - -block title - | #{note.name} - -block content - p Are you sure you want to delete the note? - form(method='post') - input(type='submit', class="red", value='Yes, delete I want to delete this note') - |   - a(href='/notes/#{note.id}') Cancel - diff --git a/express/notejam/views/notes/edit.jade b/express/notejam/views/notes/edit.jade deleted file mode 100644 index 95b1233e6..000000000 --- a/express/notejam/views/notes/edit.jade +++ /dev/null @@ -1,20 +0,0 @@ -extends ../main - -block title - | #{note.name} - -block content - form.note(method='POST') - label(for='name') Name - input#name(type='text', name='name', value='#{note.name}') - +error('name', errors) - label(for='text') Text - textarea(name='text') #{note.text} - +error('text', errors) - label(for='pad_id') Pad - select(name='pad_id') - option ---------- - each pad in req.user.pads - option(value=pad.id, selected=pad.id == note.pad_id) #{pad.name} - input(type='submit', value='Save') - diff --git a/express/notejam/views/notes/list.jade b/express/notejam/views/notes/list.jade deleted file mode 100644 index 868dfa47b..000000000 --- a/express/notejam/views/notes/list.jade +++ /dev/null @@ -1,33 +0,0 @@ -extends ../main - -block title - | #{title} - -block content - if notes.length - table.notes - tr - th.note - | Note - a.sort_arrow(href='/?order=-name') ↑ - a.sort_arrow(href='/?order=name') ↓ - th - | Pad - th.date - | Last modified - a.sort_arrow(href='/?order=-updated_at') ↑ - a.sort_arrow(href='/?order=updated_at') ↓ - each note in notes - tr - td - a(href='/notes/#{note.id}') #{note.name} - td.pad - if note.pad - a(href='/pads/#{note.pad.id}') #{note.pad.name} - else - | No pad - td.hidden-text.date #{note.updatedAt()} - else - p.empty Create your first note - a.button(href='/notes/create') New note - diff --git a/express/notejam/views/notes/view.jade b/express/notejam/views/notes/view.jade deleted file mode 100644 index 79a7c933a..000000000 --- a/express/notejam/views/notes/view.jade +++ /dev/null @@ -1,12 +0,0 @@ -extends ../main - -block title - | #{note.name} - -block content - p.hidden-text Last edited #{note.updatedAt()} - div.note - p #{note.text} - - a.button(href='/notes/#{note.id}/edit') Edit - a.delete-note(href='/notes/#{note.id}/delete') Delete it diff --git a/express/notejam/views/pads/create.jade b/express/notejam/views/pads/create.jade deleted file mode 100644 index 416c94bce..000000000 --- a/express/notejam/views/pads/create.jade +++ /dev/null @@ -1,11 +0,0 @@ -extends ../main - -block title - | New pad - -block content - form(method='POST') - label(for='name') Name - input#name(type='text', name='name') - +error('name', errors) - input(type='submit', value='Save') diff --git a/express/notejam/views/pads/delete.jade b/express/notejam/views/pads/delete.jade deleted file mode 100644 index 09597cc8e..000000000 --- a/express/notejam/views/pads/delete.jade +++ /dev/null @@ -1,11 +0,0 @@ -extends ../main - -block title - | #{pad.name} - -block content - p Are you sure you want to delete the pad? - form(method='post') - input(type='submit', class="red", value='Yes, delete I want to delete this pad') - |   - a(href="/pads/#{pad.id}/edit") Cancel diff --git a/express/notejam/views/pads/edit.jade b/express/notejam/views/pads/edit.jade deleted file mode 100644 index 0d6b013b0..000000000 --- a/express/notejam/views/pads/edit.jade +++ /dev/null @@ -1,14 +0,0 @@ -extends ../main - -block title - | #{pad.name} - -block content - form(method='POST') - label(for='name') Name - input#name(type='text', name='name', value='#{pad.name}') - +error('name', errors) - input(type='submit', value='Save') - div - a.red(href="/pads/#{pad.id}/delete") Delete pad - diff --git a/express/notejam/views/pads/list.jade b/express/notejam/views/pads/list.jade deleted file mode 100644 index 95f248233..000000000 --- a/express/notejam/views/pads/list.jade +++ /dev/null @@ -1,27 +0,0 @@ -extends ../main - -block title - | #{title} - -block content - if notes.length - table.notes - tr - th.note - | Note - a.sort_arrow(href='/pads/#{pad.id}/?order=-name') ↑ - a.sort_arrow(href='/pads/#{pad.id}/?order=name') ↓ - th.date - | Last modified - a.sort_arrow(href='/pads/#{pad.id}/?order=-updated_at') ↑ - a.sort_arrow(href='/pads/#{pad.id}/?order=updated_at') ↓ - each note in notes - tr - td - a(href='/notes/#{note.id}') #{note.name} - td.hidden-text.date #{note.updatedAt()} - else - p.empty Create your first note in the pad - a.button(href='/notes/create?pad=#{pad.id}') New note - |   - a(href="/pads/#{pad.id}/edit") Pad settings diff --git a/express/notejam/views/user.jade b/express/notejam/views/user.jade deleted file mode 100644 index f6c3513d2..000000000 --- a/express/notejam/views/user.jade +++ /dev/null @@ -1,6 +0,0 @@ -extends layout - -block content_area - .sixteen.columns.content-area - +render_flash_messages(flash_messages) - block content diff --git a/express/notejam/views/users/forgot-password.jade b/express/notejam/views/users/forgot-password.jade deleted file mode 100644 index 70a856e3d..000000000 --- a/express/notejam/views/users/forgot-password.jade +++ /dev/null @@ -1,11 +0,0 @@ -extends ../user - -block title - | Forgot password? - -block content - form.offset-by-six.sign-in(method='POST') - label(for='email') Email - input#email(type='text', name='email') - +error('email', errors) - input(type='submit', value='Get new password') diff --git a/express/notejam/views/users/settings.jade b/express/notejam/views/users/settings.jade deleted file mode 100644 index bda9ec5f3..000000000 --- a/express/notejam/views/users/settings.jade +++ /dev/null @@ -1,18 +0,0 @@ -extends ../user - -block title - | Account settings - -block content - form.offset-by-six.sign-in(method='POST') - label(for='password') Current password - input#email(type='password', name='password') - +error('password', errors) - label(for='new_password') New Password - input#password(type='password', name='new_password') - +error('new_password', errors) - label(for='confirm_new_password') Confirm New Password - input#confirm_password(type='password', name='confirm_new_password') - +error('confirm_new_password', errors) - input(type='submit', value='Change password') - diff --git a/express/notejam/views/users/signin.jade b/express/notejam/views/users/signin.jade deleted file mode 100644 index dcd13b36f..000000000 --- a/express/notejam/views/users/signin.jade +++ /dev/null @@ -1,18 +0,0 @@ -extends ../user - -block title - | Sign In - -block content - form.offset-by-six.sign-in(method='POST') - label(for='email') Email - input#email(type='text', name='email') - +error('email', errors) - label(for='password') Password - input#password(type='password', name='password') - +error('password', errors) - input(type='submit', value='Sign In') - | or Sign Up - hr - p - a.small-red(href='/forgot-password') Forgot password? diff --git a/express/notejam/views/users/signup.jade b/express/notejam/views/users/signup.jade deleted file mode 100644 index c7e487d80..000000000 --- a/express/notejam/views/users/signup.jade +++ /dev/null @@ -1,22 +0,0 @@ -extends ../user - -block title - | Sign Up - -block content - form.offset-by-six.sign-in(method='POST') - label(for='email') Email - input#email(type='text', name='email') - +error('email', errors) - label(for='password') Password - input#password(type='password', name='password') - +error('password', errors) - label(for='confirm_password') Confirm Password - input#confirm_password(type='password', name='confirm_password') - +error('confirm_password', errors) - input(type='submit', value='Sign Up') - | or Sign In - hr - p - a.small-red(href='#forgot-password') Forgot password? - diff --git a/laravel/README.rst b/laravel/README.rst deleted file mode 100644 index f547c6009..000000000 --- a/laravel/README.rst +++ /dev/null @@ -1,90 +0,0 @@ -**************** -Notejam: Laravel -**************** - -Notejam application implemented using `Laravel `_ framework. - -Laravel version: 4.1 - - -========================== -Installation and launching -========================== - ------ -Clone ------ - -Clone the repo: - -.. code-block:: bash - - $ git clone git@github.com:komarserjio/notejam.git YOUR_PROJECT_DIR/ - -------- -Install -------- - -Install `composer `_ - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/laravel/notejam/ - $ curl -s https://getcomposer.org/installer | php - -Install dependencies - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/laravel/notejam/ - $ php composer.phar install - -Create database schema - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/laravel/notejam/ - $ touch app/database/notejam.db - $ php artisan migrate - - ------- -Launch ------- - -Start laravel web server: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/laravel/notejam/ - $ php artisan serve - -Go to http://localhost:8000/ in your browser. - ---------- -Run tests ---------- - -Run functional and unit tests: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/laravel/notejam/ - $ php vendor/bin/phpunit - - - -============ -Contribution -============ - -Do you have php/laravel experience? Help the app to follow php and laravel best practices. - -Please send your pull requests in the ``master`` branch. -Always prepend your commits with framework name: - -.. code-block:: bash - - Laravel: Implemented sign in functionality - -Read `contribution guide `_ for details. diff --git a/laravel/notejam/.gitattributes b/laravel/notejam/.gitattributes deleted file mode 100644 index 176a458f9..000000000 --- a/laravel/notejam/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto diff --git a/laravel/notejam/.gitignore b/laravel/notejam/.gitignore deleted file mode 100644 index b5363f020..000000000 --- a/laravel/notejam/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -/bootstrap/compiled.php -/vendor -composer.phar -composer.lock -.env.*.php -.env.php -.DS_Store -Thumbs.db diff --git a/laravel/notejam/app/commands/.gitkeep b/laravel/notejam/app/commands/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/laravel/notejam/app/config/app.php b/laravel/notejam/app/config/app.php deleted file mode 100644 index a63864d83..000000000 --- a/laravel/notejam/app/config/app.php +++ /dev/null @@ -1,193 +0,0 @@ - true, - - /* - |-------------------------------------------------------------------------- - | Application URL - |-------------------------------------------------------------------------- - | - | This URL is used by the console to properly generate URLs when using - | the Artisan command line tool. You should set this to the root of - | your application so that it is used when running Artisan tasks. - | - */ - - 'url' => 'http://localhost', - - /* - |-------------------------------------------------------------------------- - | Application Timezone - |-------------------------------------------------------------------------- - | - | Here you may specify the default timezone for your application, which - | will be used by the PHP date and date-time functions. We have gone - | ahead and set this to a sensible default for you out of the box. - | - */ - - 'timezone' => 'UTC', - - /* - |-------------------------------------------------------------------------- - | Application Locale Configuration - |-------------------------------------------------------------------------- - | - | The application locale determines the default locale that will be used - | by the translation service provider. You are free to set this value - | to any of the locales which will be supported by the application. - | - */ - - 'locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Application Fallback Locale - |-------------------------------------------------------------------------- - | - | The fallback locale determines the locale to use when the current one - | is not available. You may change the value to correspond to any of - | the language folders that are provided through your application. - | - */ - - 'fallback_locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Encryption Key - |-------------------------------------------------------------------------- - | - | This key is used by the Illuminate encrypter service and should be set - | to a random, 32 character string, otherwise these encrypted strings - | will not be safe. Please do this before deploying an application! - | - */ - - 'key' => 'J5263afFApteAj79OGkWSpGnBf0h76kF', - - 'crypt' => MCRYPT_RIJNDAEL_256, - - /* - |-------------------------------------------------------------------------- - | Autoloaded Service Providers - |-------------------------------------------------------------------------- - | - | The service providers listed here will be automatically loaded on the - | request to your application. Feel free to add your own services to - | this array to grant expanded functionality to your applications. - | - */ - - 'providers' => array( - - 'Illuminate\Foundation\Providers\ArtisanServiceProvider', - 'Illuminate\Auth\AuthServiceProvider', - 'Illuminate\Cache\CacheServiceProvider', - 'Illuminate\Session\CommandsServiceProvider', - 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', - 'Illuminate\Routing\ControllerServiceProvider', - 'Illuminate\Cookie\CookieServiceProvider', - 'Illuminate\Database\DatabaseServiceProvider', - 'Illuminate\Encryption\EncryptionServiceProvider', - 'Illuminate\Filesystem\FilesystemServiceProvider', - 'Illuminate\Hashing\HashServiceProvider', - 'Illuminate\Html\HtmlServiceProvider', - 'Illuminate\Log\LogServiceProvider', - 'Illuminate\Mail\MailServiceProvider', - 'Illuminate\Database\MigrationServiceProvider', - 'Illuminate\Pagination\PaginationServiceProvider', - 'Illuminate\Queue\QueueServiceProvider', - 'Illuminate\Redis\RedisServiceProvider', - 'Illuminate\Remote\RemoteServiceProvider', - 'Illuminate\Auth\Reminders\ReminderServiceProvider', - 'Illuminate\Database\SeedServiceProvider', - 'Illuminate\Session\SessionServiceProvider', - 'Illuminate\Translation\TranslationServiceProvider', - 'Illuminate\Validation\ValidationServiceProvider', - 'Illuminate\View\ViewServiceProvider', - 'Illuminate\Workbench\WorkbenchServiceProvider', - - ), - - /* - |-------------------------------------------------------------------------- - | Service Provider Manifest - |-------------------------------------------------------------------------- - | - | The service provider manifest is used by Laravel to lazy load service - | providers which are not needed for each request, as well to keep a - | list of all of the services. Here, you may set its storage spot. - | - */ - - 'manifest' => storage_path().'/meta', - - /* - |-------------------------------------------------------------------------- - | Class Aliases - |-------------------------------------------------------------------------- - | - | This array of class aliases will be registered when this application - | is started. However, feel free to register as many as you wish as - | the aliases are "lazy" loaded so they don't hinder performance. - | - */ - - 'aliases' => array( - - 'App' => 'Illuminate\Support\Facades\App', - 'Artisan' => 'Illuminate\Support\Facades\Artisan', - 'Auth' => 'Illuminate\Support\Facades\Auth', - 'Blade' => 'Illuminate\Support\Facades\Blade', - 'Cache' => 'Illuminate\Support\Facades\Cache', - 'ClassLoader' => 'Illuminate\Support\ClassLoader', - 'Config' => 'Illuminate\Support\Facades\Config', - 'Controller' => 'Illuminate\Routing\Controller', - 'Cookie' => 'Illuminate\Support\Facades\Cookie', - 'Crypt' => 'Illuminate\Support\Facades\Crypt', - 'DB' => 'Illuminate\Support\Facades\DB', - 'Eloquent' => 'Illuminate\Database\Eloquent\Model', - 'Event' => 'Illuminate\Support\Facades\Event', - 'File' => 'Illuminate\Support\Facades\File', - 'Form' => 'Illuminate\Support\Facades\Form', - 'Hash' => 'Illuminate\Support\Facades\Hash', - 'HTML' => 'Illuminate\Support\Facades\HTML', - 'Input' => 'Illuminate\Support\Facades\Input', - 'Lang' => 'Illuminate\Support\Facades\Lang', - 'Log' => 'Illuminate\Support\Facades\Log', - 'Mail' => 'Illuminate\Support\Facades\Mail', - 'Paginator' => 'Illuminate\Support\Facades\Paginator', - 'Password' => 'Illuminate\Support\Facades\Password', - 'Queue' => 'Illuminate\Support\Facades\Queue', - 'Redirect' => 'Illuminate\Support\Facades\Redirect', - 'Redis' => 'Illuminate\Support\Facades\Redis', - 'Request' => 'Illuminate\Support\Facades\Request', - 'Response' => 'Illuminate\Support\Facades\Response', - 'Route' => 'Illuminate\Support\Facades\Route', - 'Schema' => 'Illuminate\Support\Facades\Schema', - 'Seeder' => 'Illuminate\Database\Seeder', - 'Session' => 'Illuminate\Support\Facades\Session', - 'SSH' => 'Illuminate\Support\Facades\SSH', - 'Str' => 'Illuminate\Support\Str', - 'URL' => 'Illuminate\Support\Facades\URL', - 'Validator' => 'Illuminate\Support\Facades\Validator', - 'View' => 'Illuminate\Support\Facades\View', - - ), - -); diff --git a/laravel/notejam/app/config/auth.php b/laravel/notejam/app/config/auth.php deleted file mode 100644 index eacbbfaed..000000000 --- a/laravel/notejam/app/config/auth.php +++ /dev/null @@ -1,71 +0,0 @@ - 'eloquent', - - /* - |-------------------------------------------------------------------------- - | Authentication Model - |-------------------------------------------------------------------------- - | - | When using the "Eloquent" authentication driver, we need to know which - | Eloquent model should be used to retrieve your users. Of course, it - | is often just the "User" model but you may use whatever you like. - | - */ - - 'model' => 'User', - - /* - |-------------------------------------------------------------------------- - | Authentication Table - |-------------------------------------------------------------------------- - | - | When using the "Database" authentication driver, we need to know which - | table should be used to retrieve your users. We have chosen a basic - | default value but you may easily change it to any table you like. - | - */ - - 'table' => 'users', - - /* - |-------------------------------------------------------------------------- - | Password Reminder Settings - |-------------------------------------------------------------------------- - | - | Here you may set the settings for password reminders, including a view - | that should be used as your password reminder e-mail. You will also - | be able to set the name of the table that holds the reset tokens. - | - | The "expire" time is the number of minutes that the reminder should be - | considered valid. This security feature keeps tokens short-lived so - | they have less time to be guessed. You may change this as needed. - | - */ - - 'reminder' => array( - - 'email' => 'emails.auth.reminder', - - 'table' => 'password_reminders', - - 'expire' => 60, - - ), - -); diff --git a/laravel/notejam/app/config/cache.php b/laravel/notejam/app/config/cache.php deleted file mode 100644 index ce8984239..000000000 --- a/laravel/notejam/app/config/cache.php +++ /dev/null @@ -1,89 +0,0 @@ - 'file', - - /* - |-------------------------------------------------------------------------- - | File Cache Location - |-------------------------------------------------------------------------- - | - | When using the "file" cache driver, we need a location where the cache - | files may be stored. A sensible default has been specified, but you - | are free to change it to any other place on disk that you desire. - | - */ - - 'path' => storage_path().'/cache', - - /* - |-------------------------------------------------------------------------- - | Database Cache Connection - |-------------------------------------------------------------------------- - | - | When using the "database" cache driver you may specify the connection - | that should be used to store the cached items. When this option is - | null the default database connection will be utilized for cache. - | - */ - - 'connection' => null, - - /* - |-------------------------------------------------------------------------- - | Database Cache Table - |-------------------------------------------------------------------------- - | - | When using the "database" cache driver we need to know the table that - | should be used to store the cached items. A default table name has - | been provided but you're free to change it however you deem fit. - | - */ - - 'table' => 'cache', - - /* - |-------------------------------------------------------------------------- - | Memcached Servers - |-------------------------------------------------------------------------- - | - | Now you may specify an array of your Memcached servers that should be - | used when utilizing the Memcached cache driver. All of the servers - | should contain a value for "host", "port", and "weight" options. - | - */ - - 'memcached' => array( - - array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100), - - ), - - /* - |-------------------------------------------------------------------------- - | Cache Key Prefix - |-------------------------------------------------------------------------- - | - | When utilizing a RAM based store such as APC or Memcached, there might - | be other applications utilizing the same cache. So, we'll specify a - | value to get prefixed to all our keys so we can avoid collisions. - | - */ - - 'prefix' => 'laravel', - -); diff --git a/laravel/notejam/app/config/compile.php b/laravel/notejam/app/config/compile.php deleted file mode 100644 index d5e55181b..000000000 --- a/laravel/notejam/app/config/compile.php +++ /dev/null @@ -1,18 +0,0 @@ - PDO::FETCH_CLASS, - - /* - |-------------------------------------------------------------------------- - | Default Database Connection Name - |-------------------------------------------------------------------------- - | - | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. - | - */ - - 'default' => 'sqlite', - - /* - |-------------------------------------------------------------------------- - | Database Connections - |-------------------------------------------------------------------------- - | - | Here are each of the database connections setup for your application. - | Of course, examples of configuring each database platform that is - | supported by Laravel is shown below to make development simple. - | - | - | All database work in Laravel is done through the PHP PDO facilities - | so make sure you have the driver for your particular database of - | choice installed on your machine before you begin development. - | - */ - - 'connections' => array( - - 'sqlite' => array( - 'driver' => 'sqlite', - 'database' => __DIR__.'/../database/notejam.db', - 'prefix' => '', - ), - - 'mysql' => array( - 'driver' => 'mysql', - 'host' => 'localhost', - 'database' => 'database', - 'username' => 'root', - 'password' => '', - 'charset' => 'utf8', - 'collation' => 'utf8_unicode_ci', - 'prefix' => '', - ), - - 'pgsql' => array( - 'driver' => 'pgsql', - 'host' => 'localhost', - 'database' => 'database', - 'username' => 'root', - 'password' => '', - 'charset' => 'utf8', - 'prefix' => '', - 'schema' => 'public', - ), - - 'sqlsrv' => array( - 'driver' => 'sqlsrv', - 'host' => 'localhost', - 'database' => 'database', - 'username' => 'root', - 'password' => '', - 'prefix' => '', - ), - - ), - - /* - |-------------------------------------------------------------------------- - | Migration Repository Table - |-------------------------------------------------------------------------- - | - | This table keeps track of all the migrations that have already run for - | your application. Using this information, we can determine which of - | the migrations on disk haven't actually been run in the database. - | - */ - - 'migrations' => 'migrations', - - /* - |-------------------------------------------------------------------------- - | Redis Databases - |-------------------------------------------------------------------------- - | - | Redis is an open source, fast, and advanced key-value store that also - | provides a richer set of commands than a typical key-value systems - | such as APC or Memcached. Laravel makes it easy to dig right in. - | - */ - - 'redis' => array( - - 'cluster' => false, - - 'default' => array( - 'host' => '127.0.0.1', - 'port' => 6379, - 'database' => 0, - ), - - ), - - 'test' => array( - 'driver' => 'sqlite', - 'database' => 'memory:', - 'prefix' => '', - ), - -); diff --git a/laravel/notejam/app/config/local/app.php b/laravel/notejam/app/config/local/app.php deleted file mode 100644 index c56fcb9ce..000000000 --- a/laravel/notejam/app/config/local/app.php +++ /dev/null @@ -1,18 +0,0 @@ - true, - -); diff --git a/laravel/notejam/app/config/mail.php b/laravel/notejam/app/config/mail.php deleted file mode 100644 index 06be66551..000000000 --- a/laravel/notejam/app/config/mail.php +++ /dev/null @@ -1,124 +0,0 @@ - 'smtp', - - /* - |-------------------------------------------------------------------------- - | SMTP Host Address - |-------------------------------------------------------------------------- - | - | Here you may provide the host address of the SMTP server used by your - | applications. A default option is provided that is compatible with - | the Mailgun mail service which will provide reliable deliveries. - | - */ - - 'host' => 'smtp.mailgun.org', - - /* - |-------------------------------------------------------------------------- - | SMTP Host Port - |-------------------------------------------------------------------------- - | - | This is the SMTP port used by your application to delivery e-mails to - | users of your application. Like the host we have set this value to - | stay compatible with the Mailgun e-mail applications by default. - | - */ - - 'port' => 587, - - /* - |-------------------------------------------------------------------------- - | Global "From" Address - |-------------------------------------------------------------------------- - | - | You may wish for all e-mails sent by your application to be sent from - | the same address. Here, you may specify a name and address that is - | used globally for all e-mails that are sent by your application. - | - */ - - 'from' => array('address' => null, 'name' => null), - - /* - |-------------------------------------------------------------------------- - | E-Mail Encryption Protocol - |-------------------------------------------------------------------------- - | - | Here you may specify the encryption protocol that should be used when - | the application send e-mail messages. A sensible default using the - | transport layer security protocol should provide great security. - | - */ - - 'encryption' => 'tls', - - /* - |-------------------------------------------------------------------------- - | SMTP Server Username - |-------------------------------------------------------------------------- - | - | If your SMTP server requires a username for authentication, you should - | set it here. This will get used to authenticate with your server on - | connection. You may also set the "password" value below this one. - | - */ - - 'username' => null, - - /* - |-------------------------------------------------------------------------- - | SMTP Server Password - |-------------------------------------------------------------------------- - | - | Here you may set the password required by your SMTP server to send out - | messages from your application. This will be given to the server on - | connection so that the application will be able to send messages. - | - */ - - 'password' => null, - - /* - |-------------------------------------------------------------------------- - | Sendmail System Path - |-------------------------------------------------------------------------- - | - | When using the "sendmail" driver to send e-mails, we will need to know - | the path to where Sendmail lives on this server. A default path has - | been provided here, which will work well on most of your systems. - | - */ - - 'sendmail' => '/usr/sbin/sendmail -bs', - - /* - |-------------------------------------------------------------------------- - | Mail "Pretend" - |-------------------------------------------------------------------------- - | - | When this option is enabled, e-mail will not actually be sent over the - | web and will instead be written to your application's logs files so - | you may inspect the message. This is great for local development. - | - */ - - 'pretend' => true, - -); diff --git a/laravel/notejam/app/config/packages/.gitkeep b/laravel/notejam/app/config/packages/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/laravel/notejam/app/config/queue.php b/laravel/notejam/app/config/queue.php deleted file mode 100644 index 1fa4467e0..000000000 --- a/laravel/notejam/app/config/queue.php +++ /dev/null @@ -1,85 +0,0 @@ - 'sync', - - /* - |-------------------------------------------------------------------------- - | Queue Connections - |-------------------------------------------------------------------------- - | - | Here you may configure the connection information for each server that - | is used by your application. A default configuration has been added - | for each back-end shipped with Laravel. You are free to add more. - | - */ - - 'connections' => array( - - 'sync' => array( - 'driver' => 'sync', - ), - - 'beanstalkd' => array( - 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'ttr' => 60, - ), - - 'sqs' => array( - 'driver' => 'sqs', - 'key' => 'your-public-key', - 'secret' => 'your-secret-key', - 'queue' => 'your-queue-url', - 'region' => 'us-east-1', - ), - - 'iron' => array( - 'driver' => 'iron', - 'host' => 'mq-aws-us-east-1.iron.io', - 'token' => 'your-token', - 'project' => 'your-project-id', - 'queue' => 'your-queue-name', - 'encrypt' => false - ), - - 'redis' => array( - 'driver' => 'redis', - 'queue' => 'default', - ), - - ), - - /* - |-------------------------------------------------------------------------- - | Failed Queue Jobs - |-------------------------------------------------------------------------- - | - | These options configure the behavior of failed queue job logging so you - | can control which database and table are used to store the jobs that - | have failed. You may change them to any database / table you wish. - | - */ - - 'failed' => array( - - 'database' => 'mysql', 'table' => 'failed_jobs', - - ), - -); diff --git a/laravel/notejam/app/config/remote.php b/laravel/notejam/app/config/remote.php deleted file mode 100644 index 2169c434b..000000000 --- a/laravel/notejam/app/config/remote.php +++ /dev/null @@ -1,59 +0,0 @@ - 'production', - - /* - |-------------------------------------------------------------------------- - | Remote Server Connections - |-------------------------------------------------------------------------- - | - | These are the servers that will be accessible via the SSH task runner - | facilities of Laravel. This feature radically simplifies executing - | tasks on your servers, such as deploying out these applications. - | - */ - - 'connections' => array( - - 'production' => array( - 'host' => '', - 'username' => '', - 'password' => '', - 'key' => '', - 'keyphrase' => '', - 'root' => '/var/www', - ), - - ), - - /* - |-------------------------------------------------------------------------- - | Remote Server Groups - |-------------------------------------------------------------------------- - | - | Here you may list connections under a single group name, which allows - | you to easily access all of the servers at once using a short name - | that is extremely easy to remember, such as "web" or "database". - | - */ - - 'groups' => array( - - 'web' => array('production') - - ), - -); diff --git a/laravel/notejam/app/config/session.php b/laravel/notejam/app/config/session.php deleted file mode 100644 index ae343029e..000000000 --- a/laravel/notejam/app/config/session.php +++ /dev/null @@ -1,140 +0,0 @@ - 'file', - - /* - |-------------------------------------------------------------------------- - | Session Lifetime - |-------------------------------------------------------------------------- - | - | Here you may specify the number of minutes that you wish the session - | to be allowed to remain idle before it expires. If you want them - | to immediately expire on the browser closing, set that option. - | - */ - - 'lifetime' => 120, - - 'expire_on_close' => false, - - /* - |-------------------------------------------------------------------------- - | Session File Location - |-------------------------------------------------------------------------- - | - | When using the native session driver, we need a location where session - | files may be stored. A default has been set for you but a different - | location may be specified. This is only needed for file sessions. - | - */ - - 'files' => storage_path().'/sessions', - - /* - |-------------------------------------------------------------------------- - | Session Database Connection - |-------------------------------------------------------------------------- - | - | When using the "database" or "redis" session drivers, you may specify a - | connection that should be used to manage these sessions. This should - | correspond to a connection in your database configuration options. - | - */ - - 'connection' => null, - - /* - |-------------------------------------------------------------------------- - | Session Database Table - |-------------------------------------------------------------------------- - | - | When using the "database" session driver, you may specify the table we - | should use to manage the sessions. Of course, a sensible default is - | provided for you; however, you are free to change this as needed. - | - */ - - 'table' => 'sessions', - - /* - |-------------------------------------------------------------------------- - | Session Sweeping Lottery - |-------------------------------------------------------------------------- - | - | Some session drivers must manually sweep their storage location to get - | rid of old sessions from storage. Here are the chances that it will - | happen on a given request. By default, the odds are 2 out of 100. - | - */ - - 'lottery' => array(2, 100), - - /* - |-------------------------------------------------------------------------- - | Session Cookie Name - |-------------------------------------------------------------------------- - | - | Here you may change the name of the cookie used to identify a session - | instance by ID. The name specified here will get used every time a - | new session cookie is created by the framework for every driver. - | - */ - - 'cookie' => 'laravel_session', - - /* - |-------------------------------------------------------------------------- - | Session Cookie Path - |-------------------------------------------------------------------------- - | - | The session cookie path determines the path for which the cookie will - | be regarded as available. Typically, this will be the root path of - | your application but you are free to change this when necessary. - | - */ - - 'path' => '/', - - /* - |-------------------------------------------------------------------------- - | Session Cookie Domain - |-------------------------------------------------------------------------- - | - | Here you may change the domain of the cookie used to identify a session - | in your application. This will determine which domains the cookie is - | available to in your application. A sensible default has been set. - | - */ - - 'domain' => null, - - /* - |-------------------------------------------------------------------------- - | HTTPS Only Cookies - |-------------------------------------------------------------------------- - | - | By setting this option to true, session cookies will only be sent back - | to the server if the browser has a HTTPS connection. This will keep - | the cookie from being sent to you if it can not be done securely. - | - */ - - 'secure' => false, - -); diff --git a/laravel/notejam/app/config/testing/cache.php b/laravel/notejam/app/config/testing/cache.php deleted file mode 100644 index 66a8a39a8..000000000 --- a/laravel/notejam/app/config/testing/cache.php +++ /dev/null @@ -1,20 +0,0 @@ - 'array', - -); diff --git a/laravel/notejam/app/config/testing/database.php b/laravel/notejam/app/config/testing/database.php deleted file mode 100644 index d5e72f04a..000000000 --- a/laravel/notejam/app/config/testing/database.php +++ /dev/null @@ -1,14 +0,0 @@ - 'sqlite', - - 'connections' => array( - 'sqlite' => array( - 'driver' => 'sqlite', - 'database' => ':memory:', - 'prefix' => '' - ), - ) -); diff --git a/laravel/notejam/app/config/testing/session.php b/laravel/notejam/app/config/testing/session.php deleted file mode 100644 index 0364b63dc..000000000 --- a/laravel/notejam/app/config/testing/session.php +++ /dev/null @@ -1,21 +0,0 @@ - 'array', - -); diff --git a/laravel/notejam/app/config/view.php b/laravel/notejam/app/config/view.php deleted file mode 100644 index 34b8f3873..000000000 --- a/laravel/notejam/app/config/view.php +++ /dev/null @@ -1,31 +0,0 @@ - array(__DIR__.'/../views'), - - /* - |-------------------------------------------------------------------------- - | Pagination View - |-------------------------------------------------------------------------- - | - | This view will be used to render the pagination link output, and can - | be easily customized here to show any view you like. A clean view - | compatible with Twitter's Bootstrap is given to you by default. - | - */ - - 'pagination' => 'pagination::slider-3', - -); diff --git a/laravel/notejam/app/config/workbench.php b/laravel/notejam/app/config/workbench.php deleted file mode 100644 index 87c5e3879..000000000 --- a/laravel/notejam/app/config/workbench.php +++ /dev/null @@ -1,31 +0,0 @@ - '', - - /* - |-------------------------------------------------------------------------- - | Workbench Author E-Mail Address - |-------------------------------------------------------------------------- - | - | Like the option above, your e-mail address is used when generating new - | workbench packages. The e-mail is placed in your composer.json file - | automatically after the package is created by the workbench tool. - | - */ - - 'email' => '', - -); diff --git a/laravel/notejam/app/controllers/.gitkeep b/laravel/notejam/app/controllers/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/laravel/notejam/app/controllers/BaseController.php b/laravel/notejam/app/controllers/BaseController.php deleted file mode 100644 index cd6f5a89f..000000000 --- a/laravel/notejam/app/controllers/BaseController.php +++ /dev/null @@ -1,28 +0,0 @@ -layout)) - { - $this->layout = View::make($this->layout); - } - } - - protected function processOrderParam() - { - $order = array( - 'name' => array('name', 'ASC'), - '-name' => array('name', 'DESC'), - 'updated_at' => array('updated_at', 'ASC'), - '-updated_at' => array('updated_at', 'DESC'), - ); - return $order[Input::get('order', '-updated_at')]; - } -} diff --git a/laravel/notejam/app/controllers/NoteController.php b/laravel/notejam/app/controllers/NoteController.php deleted file mode 100644 index 7c853dcae..000000000 --- a/laravel/notejam/app/controllers/NoteController.php +++ /dev/null @@ -1,114 +0,0 @@ -processOrderParam(); - $notes = Auth::user()->notes()->orderBy( - $orderParams[0], $orderParams[1] - )->get(); - return View::make('note/index', array('notes' => $notes)); - } - - public function create() - { - return View::make('note/create'); - } - - public function store() - { - $validation = $this->validator(); - if ($validation->fails()) - { - return Redirect::route('notes.create')->withErrors($validation); - } - $note = new Note( - array( - 'name' => Input::get('name'), - 'text' => Input::get('text') - ) - ); - $padId = (int)Input::get('pad_id'); - if ($padId) { - $pad = Auth::user()->pads() - ->where('id', $padId)->firstOrFail(); - $note->pad_id = $pad->id; - } - Auth::user()->notes()->save($note); - return Redirect::route('notes.show', array('id' => $note->id)) - ->with('success', 'Note is successfully created.'); - } - - public function edit($id) - { - $note = $this->getNoteOrFail($id); - return View::make('note/edit', array('note' => $note)); - } - - public function update($id) - { - $note = $this->getNoteOrFail($id); - $validation = $this->validator(); - if ($validation->fails()) - { - return Redirect::route('notes.edit')->withErrors($validation); - } - $note->update( - array( - 'name' => Input::get('name'), - 'text' => Input::get('text') - ) - ); - $padId = (int)Input::get('pad_id'); - if ($padId) { - $pad = Auth::user()->pads() - ->where('id', $padId)->firstOrFail(); - $note->pad_id = $pad->id; - } else { - $note->pad_id = null; - } - Auth::user()->notes()->save($note); - - return Redirect::route('notes.show', array('id' => $note->id)) - ->with('success', 'Note is successfully updated.'); - } - - public function delete($id) - { - $note = $this->getNoteOrFail($id); - return View::make('note/delete', array('note' => $note)); - } - - public function destroy($id) - { - $note = $this->getNoteOrFail($id); - $note->delete(); - return Redirect::route('all_notes') - ->with('success', 'Note is deleted.'); - } - - public function show($id) - { - $note = $this->getNoteOrFail($id); - return View::make('note/view', array('note' => $note)); - } - - private function getNoteOrFail($id) - { - return Auth::user()->notes() - ->where('id', '=', $id)->firstOrFail(); - } - - private function validator() - { - return Validator::make( - Input::all(), - array( - 'name' => 'required', - 'text' => 'required', - ) - ); - } -} diff --git a/laravel/notejam/app/controllers/PadController.php b/laravel/notejam/app/controllers/PadController.php deleted file mode 100644 index 81017f24f..000000000 --- a/laravel/notejam/app/controllers/PadController.php +++ /dev/null @@ -1,87 +0,0 @@ -validator(); - if ($validation->fails()) - { - return Redirect::route('pads.create')->withErrors($validation); - } - $pad = new Pad(array('name' => Input::get('name'))); - Auth::user()->pads()->save($pad); - return Redirect::route('pads.show', array('id' => $pad->id)) - ->with('success', 'Pad is created.'); - } - - public function edit($id) - { - $pad = $this->getPadOrFail($id); - return View::make('pad/edit', array('pad' => $pad)); - } - - public function update($id) - { - $pad = $this->getPadOrFail($id); - $validation = $this->validator(); - if ($validation->fails()) - { - return Redirect::route('pads.edit', array('id' => $pad->id)) - ->withErrors($validation); - } - $pad->name = Input::get('name'); - $pad->save(); - return Redirect::route('pads.show', array('id' => $pad->id)) - ->with('success', 'Pad is updated.'); - } - - public function show($id) - { - $pad = $this->getPadOrFail($id); - $orderParams = $this->processOrderParam(); - $notes = $pad->notes()->orderBy( - $orderParams[0], $orderParams[1] - )->get(); - return View::make( - 'pad/view', - array('pad' => $pad, 'notes' => $notes) - ); - } - - public function delete($id) - { - $pad = $this->getPadOrFail($id); - return View::make('pad/delete', array('pad' => $pad)); - } - - public function destroy($id) - { - $pad = $this->getPadOrFail($id); - $pad->delete(); - return Redirect::route('all_notes') - ->with('success', 'Pad is deleted.'); - } - - private function getPadOrFail($id) - { - return Auth::user()->pads() - ->where('id', '=', $id)->firstOrFail(); - } - - private function validator() - { - return Validator::make( - Input::all(), - array( - 'name' => 'required', - ) - ); - } -} - diff --git a/laravel/notejam/app/controllers/UserController.php b/laravel/notejam/app/controllers/UserController.php deleted file mode 100644 index 0d5745c06..000000000 --- a/laravel/notejam/app/controllers/UserController.php +++ /dev/null @@ -1,150 +0,0 @@ - 'required|email|unique:users', - 'password' => 'required|min:6|confirmed', - 'password_confirmation' => 'required|min:6', - ) - ); - if ($validation->fails()) - { - return Redirect::route('signup')->withErrors($validation); - } - $user = User::create( - array( - 'email' => Input::get('email'), - 'password' => Hash::make(Input::get('password')) - ) - ); - return Redirect::route('signin') - ->with('success', 'Account is created. Now you can sign in.'); - } - - public function signin() - { - return View::make('user/signin'); - } - - public function processSignin() - { - $validation = Validator::make( - Input::all(), - array( - 'email' => 'required|email', - 'password' => 'required|min:6', - ) - ); - if ($validation->fails()) - { - return Redirect::route('signin')->withErrors($validation); - } - $authParams = array( - 'email' => Input::get('email'), - 'password' => Input::get('password') - ); - if (Auth::attempt($authParams)) - { - return Redirect::route('all_notes') - ->with('success', 'Signed in now!'); - } - return Redirect::route('signin') - ->with('error', 'Invalid email or password'); - } - - public function settings() - { - return View::make('user/settings'); - } - - public function updateSettings() - { - $user = Auth::user(); - $validation = Validator::make( - Input::all(), - array( - 'old_password' => 'required', - 'password' => 'required|min:6|confirmed', - 'password_confirmation' => 'required|min:6', - ) - ); - if ($validation->fails()) - { - return Redirect::route('settings')->withErrors($validation); - } - $authParams = array( - 'email' => $user->email, - 'password' => Input::get('old_password') - ); - if (Auth::validate($authParams)) - { - $user->password = Hash::make(Input::get('password')); - return Redirect::route('settings') - ->with('success', 'Password is successfully changed'); - } else { - return Redirect::route('settings') - ->with('error', 'Current password is incorrect'); - } - } - - public function forgotPassword() - { - if (Request::isMethod('post')) - { - $validation = Validator::make( - Input::all(), - array( - 'email' => 'required|email|exists:users', - ) - ); - if ($validation->fails()) - { - return Redirect::route('forgot_password') - ->withErrors($validation); - } - $user = User::where( - 'email', '=', Input::get('email') - )->firstOrFail(); - - $password = $this->generatePassword(); - $user->password = Hash::make($password); - $user->save(); - - $this->sendNewPassword($user, $password); - - return Redirect::route('signin') - ->with('success', 'New password sent to you mail.'); - } - return View::make('user/forgot-password'); - } - - private function generatePassword() - { - return substr(md5(time()), 0, 8); - } - - private function sendNewPassword($user, $password) - { - $data = array( - 'email' => $user->email, - 'password' => $password - ); - Mail::send(array('text' => 'emails.password') , $data, - function($message) use ($user) - { - $message->to($user->email)->subject('New password'); - } - ); - } -} - diff --git a/laravel/notejam/app/database/migrations/.gitkeep b/laravel/notejam/app/database/migrations/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/laravel/notejam/app/database/migrations/2014_05_14_215427_create_users_table.php b/laravel/notejam/app/database/migrations/2014_05_14_215427_create_users_table.php deleted file mode 100644 index 88be6b9f9..000000000 --- a/laravel/notejam/app/database/migrations/2014_05_14_215427_create_users_table.php +++ /dev/null @@ -1,34 +0,0 @@ -increments('id'); - $table->string('email'); - $table->string('password', 60); - $table->string('remember_token', 100)->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('users'); - } -} diff --git a/laravel/notejam/app/database/migrations/2014_05_16_225623_create_pads_table.php b/laravel/notejam/app/database/migrations/2014_05_16_225623_create_pads_table.php deleted file mode 100644 index b3ac08f33..000000000 --- a/laravel/notejam/app/database/migrations/2014_05_16_225623_create_pads_table.php +++ /dev/null @@ -1,34 +0,0 @@ -increments('id'); - $table->string('name', 255); - $table->integer('user_id'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - // - } - -} diff --git a/laravel/notejam/app/database/migrations/2014_05_18_180146_create_notes_table.php b/laravel/notejam/app/database/migrations/2014_05_18_180146_create_notes_table.php deleted file mode 100644 index 9ae69da2e..000000000 --- a/laravel/notejam/app/database/migrations/2014_05_18_180146_create_notes_table.php +++ /dev/null @@ -1,36 +0,0 @@ -increments('id'); - $table->string('name', 255); - $table->text('text'); - $table->integer('user_id'); - $table->integer('pad_id')->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - // - } - -} diff --git a/laravel/notejam/app/database/production.sqlite b/laravel/notejam/app/database/production.sqlite deleted file mode 100644 index e69de29bb..000000000 diff --git a/laravel/notejam/app/database/seeds/.gitkeep b/laravel/notejam/app/database/seeds/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/laravel/notejam/app/database/seeds/DatabaseSeeder.php b/laravel/notejam/app/database/seeds/DatabaseSeeder.php deleted file mode 100644 index 198925207..000000000 --- a/laravel/notejam/app/database/seeds/DatabaseSeeder.php +++ /dev/null @@ -1,17 +0,0 @@ -call('UserTableSeeder'); - } - -} diff --git a/laravel/notejam/app/filters.php b/laravel/notejam/app/filters.php deleted file mode 100644 index 5b81f3e36..000000000 --- a/laravel/notejam/app/filters.php +++ /dev/null @@ -1,80 +0,0 @@ - '« Previous', - - 'next' => 'Next »', - -); diff --git a/laravel/notejam/app/lang/en/reminders.php b/laravel/notejam/app/lang/en/reminders.php deleted file mode 100644 index e42148e9f..000000000 --- a/laravel/notejam/app/lang/en/reminders.php +++ /dev/null @@ -1,24 +0,0 @@ - "Passwords must be at least six characters and match the confirmation.", - - "user" => "We can't find a user with that e-mail address.", - - "token" => "This password reset token is invalid.", - - "sent" => "Password reminder sent!", - -); diff --git a/laravel/notejam/app/lang/en/validation.php b/laravel/notejam/app/lang/en/validation.php deleted file mode 100644 index b03b926c8..000000000 --- a/laravel/notejam/app/lang/en/validation.php +++ /dev/null @@ -1,104 +0,0 @@ - "The :attribute must be accepted.", - "active_url" => "The :attribute is not a valid URL.", - "after" => "The :attribute must be a date after :date.", - "alpha" => "The :attribute may only contain letters.", - "alpha_dash" => "The :attribute may only contain letters, numbers, and dashes.", - "alpha_num" => "The :attribute may only contain letters and numbers.", - "array" => "The :attribute must be an array.", - "before" => "The :attribute must be a date before :date.", - "between" => array( - "numeric" => "The :attribute must be between :min and :max.", - "file" => "The :attribute must be between :min and :max kilobytes.", - "string" => "The :attribute must be between :min and :max characters.", - "array" => "The :attribute must have between :min and :max items.", - ), - "confirmed" => "The :attribute confirmation does not match.", - "date" => "The :attribute is not a valid date.", - "date_format" => "The :attribute does not match the format :format.", - "different" => "The :attribute and :other must be different.", - "digits" => "The :attribute must be :digits digits.", - "digits_between" => "The :attribute must be between :min and :max digits.", - "email" => "The :attribute must be a valid email address.", - "exists" => "The selected :attribute is invalid.", - "image" => "The :attribute must be an image.", - "in" => "The selected :attribute is invalid.", - "integer" => "The :attribute must be an integer.", - "ip" => "The :attribute must be a valid IP address.", - "max" => array( - "numeric" => "The :attribute may not be greater than :max.", - "file" => "The :attribute may not be greater than :max kilobytes.", - "string" => "The :attribute may not be greater than :max characters.", - "array" => "The :attribute may not have more than :max items.", - ), - "mimes" => "The :attribute must be a file of type: :values.", - "min" => array( - "numeric" => "The :attribute must be at least :min.", - "file" => "The :attribute must be at least :min kilobytes.", - "string" => "The :attribute must be at least :min characters.", - "array" => "The :attribute must have at least :min items.", - ), - "not_in" => "The selected :attribute is invalid.", - "numeric" => "The :attribute must be a number.", - "regex" => "The :attribute format is invalid.", - "required" => "The :attribute field is required.", - "required_if" => "The :attribute field is required when :other is :value.", - "required_with" => "The :attribute field is required when :values is present.", - "required_with_all" => "The :attribute field is required when :values is present.", - "required_without" => "The :attribute field is required when :values is not present.", - "required_without_all" => "The :attribute field is required when none of :values are present.", - "same" => "The :attribute and :other must match.", - "size" => array( - "numeric" => "The :attribute must be :size.", - "file" => "The :attribute must be :size kilobytes.", - "string" => "The :attribute must be :size characters.", - "array" => "The :attribute must contain :size items.", - ), - "unique" => "The :attribute has already been taken.", - "url" => "The :attribute format is invalid.", - - /* - |-------------------------------------------------------------------------- - | Custom Validation Language Lines - |-------------------------------------------------------------------------- - | - | Here you may specify custom validation messages for attributes using the - | convention "attribute.rule" to name the lines. This makes it quick to - | specify a specific custom language line for a given attribute rule. - | - */ - - 'custom' => array( - 'attribute-name' => array( - 'rule-name' => 'custom-message', - ), - ), - - /* - |-------------------------------------------------------------------------- - | Custom Validation Attributes - |-------------------------------------------------------------------------- - | - | The following language lines are used to swap attribute place-holders - | with something more reader friendly such as E-Mail Address instead - | of "email". This simply helps us make messages a little cleaner. - | - */ - - 'attributes' => array(), - -); diff --git a/laravel/notejam/app/models/Note.php b/laravel/notejam/app/models/Note.php deleted file mode 100644 index 1867ff21c..000000000 --- a/laravel/notejam/app/models/Note.php +++ /dev/null @@ -1,41 +0,0 @@ -belongsTo('User'); - } - - public function pad() - { - return $this->belongsTo('Pad'); - } - - public function smartDate() - { - $day = 86400; - $date = strtotime($this->updated_at); - $diff = floor((time() - $date) / $day); - if ($diff < 1) { - return "Today at " . date("H:i", $date); - } elseif ($diff == 1) { - return "Yesterday at " . date("H:i", $date); - } elseif ($diff > 1 && $diff < 8) { - return "{$diff} days ago"; - } else { - return date("d.m.Y", $date); - } - } -} diff --git a/laravel/notejam/app/models/Pad.php b/laravel/notejam/app/models/Pad.php deleted file mode 100644 index 95c0759be..000000000 --- a/laravel/notejam/app/models/Pad.php +++ /dev/null @@ -1,26 +0,0 @@ -belongsTo('User'); - } - - public function notes() - { - return $this->hasMany('Note'); - } -} - diff --git a/laravel/notejam/app/models/User.php b/laravel/notejam/app/models/User.php deleted file mode 100644 index d780769c7..000000000 --- a/laravel/notejam/app/models/User.php +++ /dev/null @@ -1,85 +0,0 @@ -getKey(); - } - - /** - * Get the password for the user. - * - * @return string - */ - public function getAuthPassword() - { - return $this->password; - } - - /** - * Get the token value for the "remember me" session. - * - * @return string - */ - public function getRememberToken() - { - return $this->remember_token; - } - - /** - * Set the token value for the "remember me" session. - * - * @param string $value - * @return void - */ - public function setRememberToken($value) - { - $this->remember_token = $value; - } - - /** - * Get the column name for the "remember me" token. - * - * @return string - */ - public function getRememberTokenName() - { - return 'remember_token'; - } - - public function pads() - { - return $this->hasMany('Pad'); - } - - public function notes() - { - return $this->hasMany('Note'); - } - -} diff --git a/laravel/notejam/app/routes.php b/laravel/notejam/app/routes.php deleted file mode 100644 index b25c1e562..000000000 --- a/laravel/notejam/app/routes.php +++ /dev/null @@ -1,91 +0,0 @@ - 'auth'), function() -{ - Route::get('/', array( - 'as' => 'all_notes', 'uses' => 'NoteController@index' - ) - ); - - # user related routes (authed) - Route::get('settings', array( - 'as' => 'settings', 'uses' => 'UserController@settings' - ) - ); - Route::post('settings', array( - 'as' => 'settings.update', 'uses' => 'UserController@updateSettings' - ) - ); - Route::get('signout', array('as' => 'signout', function() { - Auth::logout(); - return Redirect::route('signin'); - })); - - # customized pad resource controller - Route::post('pads/{id}/update', array( - 'as' => 'pads.update', 'uses' => 'PadController@update' - ) - ); - Route::get('pads/{id}/delete', array( - 'as' => 'pads.delete', 'uses' => 'PadController@delete' - ) - ); - Route::post('pads/{id}/delete', array( - 'as' => 'pads.destroy', 'uses' => 'PadController@destroy' - ) - ); - Route::resource('pads', 'PadController', - array('except' => array('destroy', 'index', 'update'))); - - # customized note resource controller - Route::post('notes/{id}/update', array( - 'as' => 'notes.update', 'uses' => 'NoteController@update' - ) - ); - Route::get('notes/{id}/delete', array( - 'as' => 'notes.delete', 'uses' => 'NoteController@delete' - ) - ); - Route::post('notes/{id}/delete', array( - 'as' => 'notes.destroy', 'uses' => 'NoteController@destroy' - ) - ); - Route::resource('notes', 'NoteController', - array('except' => array('destroy', 'index', 'update'))); -}); - -# user related routes (anonymous) -Route::get( - 'signup', - array('as' => 'signup', 'uses' => 'UserController@signup') -); -Route::post( - 'signup', - array('as' => 'user.store', 'uses' => 'UserController@store') -); - -Route::get( - 'signin', - array('as' => 'signin', 'uses' => 'UserController@signin') -); -Route::post( - 'signin', - array('as' => 'signin.process', 'uses' => 'UserController@processSignin') -); -Route::match( - array('GET', 'POST'), - 'forgot-password', - array('as' => 'forgot_password', 'uses' => 'UserController@forgotPassword') -); - diff --git a/laravel/notejam/app/start/artisan.php b/laravel/notejam/app/start/artisan.php deleted file mode 100644 index 1df850bc9..000000000 --- a/laravel/notejam/app/start/artisan.php +++ /dev/null @@ -1,13 +0,0 @@ - 'Note', - 'text' => 'Text', - ), - $override - ); - } - - public function testCreateSuccess() - { - $data = $this->getNoteData(); - $user = $this->createUser('exists@example.com'); - $this->be($user); - $crawler = $this->client->request( - 'POST', URL::route('notes.store'), $data - ); - $this->assertRedirectedToRoute( - 'notes.show', - array('id' => $user->notes()->first()->id) - ); - $this->assertEquals(1, $user->notes()->count()); - } - - public function testCreateFailRequiredFields() - { - $this->be($this->createUser('exists@example.com')); - $crawler = $this->client->request( - 'POST', URL::route('notes.store'), array() - ); - $this->assertSessionHasErrors( - array('name', 'text') - ); - } - - public function testCreateFailAnonymousUser() - { - $data = $this->getNoteData(); - $crawler = $this->client->request( - 'POST', URL::route('notes.store'), $data - ); - $this->assertRedirectedToRoute('signin'); - } - - /** - * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException - */ - public function testCreateFailAnothersUserPad() - { - $user2 = $this->createUser('exists@example.com'); - $pad = $user2->pads()->save(new Pad(array('name' => 'pad'))); - - $user = $this->createUser('exists2@example.com'); - $data = $this->getNoteData(array('pad_id' => $pad->id)); - $this->be($user); - $crawler = $this->client->request( - 'POST', URL::route('notes.store'), $data - ); - } - - public function testEditSuccess() - { - $user = $this->createUser('exists@example.com'); - $this->be($user); - $note = $user->notes()->save( - new Note($this->getNoteData()) - ); - $crawler = $this->client->request( - 'POST', - URL::route('notes.update', array('id' => $note->id)), - array('name' => 'new name', 'text' => 'new text') - ); - $this->assertRedirectedToRoute('notes.show', array('id' => $note->id)); - } - - public function testEditFailRequiredFields() - { - $user = $this->createUser('exists@example.com'); - $this->be($user); - $note = $user->notes()->save( - new Note($this->getNoteData()) - ); - $crawler = $this->client->request( - 'POST', - URL::route('notes.update', array('id' => $note->id)), - array() - ); - $this->assertSessionHasErrors( - array('name', 'text') - ); - } - - /** - * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException - */ - public function testEditFailNotAnOwner() - { - $user = $this->createUser('exists@example.com'); - $note = $user->notes()->save( - new Note($this->getNoteData()) - ); - $this->be($this->createUser('exists2@example.com')); - - $crawler = $this->client->request( - 'POST', - URL::route('notes.update', array('id' => $note->id)), - array('name' => 'new name', 'text' => 'new text') - ); - } - - public function testViewSuccess() - { - $user = $this->createUser('exists@example.com'); - $note = $user->notes()->save( - new Note($this->getNoteData()) - ); - $this->be($user); - $crawler = $this->client->request( - 'GET', - URL::route('notes.show', array('id' => $note->id)) - ); - $this->assertTrue($this->client->getResponse()->isOk()); - } - - /** - * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException - */ - public function testViewFailNotAnOwner() - { - $user = $this->createUser('exists@example.com'); - $note = $user->notes()->save( - new Note($this->getNoteData()) - ); - $this->be($this->createUser('exists2@example.com')); - $crawler = $this->client->request( - 'GET', - URL::route('notes.show', array('id' => $note->id)) - ); - } - - public function testDeleteSuccess() - { - $user = $this->createUser('exists@example.com'); - $note = $user->notes()->save( - new Note($this->getNoteData()) - ); - $this->be($user); - $crawler = $this->client->request( - 'POST', - URL::route('notes.destroy', array('id' => $note->id)) - ); - $this->assertRedirectedToRoute('all_notes'); - $this->assertEquals(0, $user->notes()->count()); - } - - /** - * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException - */ - public function testDeleteFailNotAnOwner() - { - $user = $this->createUser('exists@example.com'); - $note = $user->notes()->save( - new Note($this->getNoteData()) - ); - $this->be($this->createUser('exists2@example.com')); - $crawler = $this->client->request( - 'POST', - URL::route('notes.destroy', array('id' => $note->id)) - ); - } -} - - - diff --git a/laravel/notejam/app/tests/PadTest.php b/laravel/notejam/app/tests/PadTest.php deleted file mode 100644 index ecae234bb..000000000 --- a/laravel/notejam/app/tests/PadTest.php +++ /dev/null @@ -1,138 +0,0 @@ - 'Pad', - ), - $override - ); - } - - public function testCreateSuccess() - { - $data = $this->getPadData(); - $user = $this->createUser('exists@example.com'); - $this->be($user); - $crawler = $this->client->request( - 'POST', URL::route('pads.store'), $data - ); - $this->assertRedirectedToRoute( - 'pads.show', - array('id' => $user->pads()->first()->id) - ); - $this->assertEquals(1, $user->pads()->count()); - } - - public function testCreateFailRequiredFields() - { - $this->be($this->createUser('exists@example.com')); - $crawler = $this->client->request( - 'POST', URL::route('pads.store'), array() - ); - $this->assertSessionHasErrors( - array('name') - ); - } - - public function testEditSuccess() - { - $user = $this->createUser('exists@example.com'); - $this->be($user); - $pad = $user->pads()->save(new Pad(array('name' => 'pad'))); - $crawler = $this->client->request( - 'POST', - URL::route('pads.update', array('id' => $pad->id)), - array('name' => 'new name') - ); - $this->assertRedirectedToRoute('pads.show', array('id' => $pad->id)); - } - - public function testEditFailRequiredFields() - { - $user = $this->createUser('exists@example.com'); - $this->be($user); - $pad = $user->pads()->save(new Pad(array('name' => 'pad'))); - $crawler = $this->client->request( - 'POST', - URL::route('pads.update', array('id' => $pad->id)), - array() - ); - $this->assertSessionHasErrors( - array('name') - ); - } - - /** - * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException - */ - public function testEditFailNotAnOwner() - { - $user = $this->createUser('exists@example.com'); - $pad = $user->pads()->save(new Pad(array('name' => 'pad'))); - - $this->be($this->createUser('exists2@example.com')); - $crawler = $this->client->request( - 'POST', - URL::route('pads.update', array('id' => $pad->id)), - array('name' => 'new name') - ); - } - - public function testViewSuccess() - { - $user = $this->createUser('exists@example.com'); - $this->be($user); - $pad = $user->pads()->save(new Pad(array('name' => 'pad'))); - $crawler = $this->client->request( - 'GET', - URL::route('pads.show', array('id' => $pad->id)) - ); - $this->assertTrue($this->client->getResponse()->isOk()); - } - - /** - * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException - */ - public function testViewFailNotAnOwner() - { - $user = $this->createUser('exists@example.com'); - $pad = $user->pads()->save(new Pad(array('name' => 'pad'))); - $this->be($this->createUser('exists2@example.com')); - $crawler = $this->client->request( - 'GET', - URL::route('pads.show', array('id' => $pad->id)) - ); - } - - public function testDeleteSuccess() - { - $user = $this->createUser('exists@example.com'); - $this->be($user); - $pad = $user->pads()->save(new Pad(array('name' => 'pad'))); - $crawler = $this->client->request( - 'POST', - URL::route('pads.destroy', array('id' => $pad->id)) - ); - $this->assertRedirectedToRoute('all_notes'); - $this->assertEquals(0, $user->pads()->count()); - } - - /** - * @expectedException Illuminate\Database\Eloquent\ModelNotFoundException - */ - public function testDeleteFailNotAnOwner() - { - $user = $this->createUser('exists@example.com'); - $pad = $user->pads()->save(new Pad(array('name' => 'pad'))); - $this->be($this->createUser('exists2@example.com')); - $crawler = $this->client->request( - 'POST', - URL::route('pads.destroy', array('id' => $pad->id)) - ); - } -} - - diff --git a/laravel/notejam/app/tests/TestCase.php b/laravel/notejam/app/tests/TestCase.php deleted file mode 100644 index 2c0e90102..000000000 --- a/laravel/notejam/app/tests/TestCase.php +++ /dev/null @@ -1,36 +0,0 @@ -app['router']->enableFilters(); - - Artisan::call('migrate'); - } - - protected function createUser($email, $password = 'password') { - $user = User::create( - array( - 'email' => $email, - 'password' => Hash::make($password) - ) - ); - return $user; - } - -} diff --git a/laravel/notejam/app/tests/UserTest.php b/laravel/notejam/app/tests/UserTest.php deleted file mode 100644 index f95f14d83..000000000 --- a/laravel/notejam/app/tests/UserTest.php +++ /dev/null @@ -1,97 +0,0 @@ - 'user@example.com', - 'password' => 'secure_password' - ), - $override - ); - } - - public function testSignupSuccess() - { - $data = $this->getUserData(); - $data['password_confirmation'] = $data['password']; - $crawler = $this->client->request( - 'POST', URL::route('signup'), $data - ); - $this->assertRedirectedToRoute('signin'); - $this->assertEquals(1, User::all()->count()); - } - - public function testSignupFailRequiredFields() - { - $crawler = $this->client->request( - 'POST', URL::route('signup'), array() - ); - $this->assertSessionHasErrors( - array('email', 'password', 'password_confirmation') - ); - } - - public function testSignupFailInvalidEmail() - { - $data = $this->getUserData(array('email' => 'invalid')); - $crawler = $this->client->request( - 'POST', URL::route('signup'), $data - ); - $this->assertSessionHasErrors('email'); - } - - public function testSignupFailEmailExists() - { - $email = 'exists@example.com'; - $user = $this->createUser($email); - - $data = $this->getUserData(array('email' => $email)); - $crawler = $this->client->request( - 'POST', URL::route('signup'), $data - ); - $this->assertSessionHasErrors('email'); - } - - public function testSignupFailPasswordsNotMatch() - { - $data = $this->getUserData(); - $data['password_confirmation'] = 'another_password'; - $crawler = $this->client->request( - 'POST', URL::route('signup'), $data - ); - $this->assertSessionHasErrors('password'); - } - - public function testSigninSuccess() - { - $data = $this->getUserData(); - $data['password'] = Hash::make($data['password']); - $user = User::create($data); - $crawler = $this->client->request( - 'POST', URL::route('signin'), $this->getUserData() - ); - $this->assertRedirectedToRoute('all_notes'); - } - - public function testSigninFailRequiredFields() - { - $crawler = $this->client->request( - 'POST', URL::route('signin'), array() - ); - $this->assertSessionHasErrors( - array('email', 'password') - ); - } - - public function testSigninFailInvalidCredentials() - { - $crawler = $this->client->request( - 'POST', URL::route('signin'), $this->getUserData() - ); - $this->assertRedirectedToRoute('signin'); - $this->assertSessionHas('error'); - } -} - diff --git a/laravel/notejam/app/views/emails/auth/reminder.blade.php b/laravel/notejam/app/views/emails/auth/reminder.blade.php deleted file mode 100644 index d92f2b3f5..000000000 --- a/laravel/notejam/app/views/emails/auth/reminder.blade.php +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - -

Password Reset

- -
- To reset your password, complete this form: {{ URL::to('password/reset', array($token)) }}. -
- - diff --git a/laravel/notejam/app/views/emails/password.blade.php b/laravel/notejam/app/views/emails/password.blade.php deleted file mode 100644 index d2f8e7ceb..000000000 --- a/laravel/notejam/app/views/emails/password.blade.php +++ /dev/null @@ -1,4 +0,0 @@ -Hi, {{ $email }} -========================================= -  -Your new password is {{ $password }} diff --git a/laravel/notejam/app/views/layout.blade.php b/laravel/notejam/app/views/layout.blade.php deleted file mode 100644 index aeb5c7aa9..000000000 --- a/laravel/notejam/app/views/layout.blade.php +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - @yield('page_title') - - - - - - - - {{ HTML::style('http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/base.min.css') }} - {{ HTML::style('http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/skeleton.min.css') }} - {{ HTML::style('http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/layout.css') }} - {{ HTML::style('css/style.css') }} - - - - -
-
- -
-
-

- notejam: - @yield('page_title') -

-
- @yield('pads') -
- @if(Session::has('success') || Session::has('error')) -
- @if(Session::has('success')) -
{{ Session::get('success') }}
- {{ Session::forget('success') }} - @endif - @if(Session::has('error')) -
{{ Session::get('error') }}
- {{ Session::forget('error') }} - @endif -
- @endif - @yield('content') -
- - -
- Fork me on GitHub - - diff --git a/laravel/notejam/app/views/note/create.blade.php b/laravel/notejam/app/views/note/create.blade.php deleted file mode 100644 index 6b801ba8f..000000000 --- a/laravel/notejam/app/views/note/create.blade.php +++ /dev/null @@ -1,24 +0,0 @@ -@extends('user') - -@section('page_title') -New note -@stop - -@section('content') - {{ Form::open(array("route" => "notes.store", "class" => "note")) }} - - {{ Form::label('name', 'Name') . Form::text('name', Input::old('name'), array('class' => 'thirteen')) }} - @include('partials.error', array('error' => $errors->first('name'))) - - {{ Form::label('text', 'Text') . Form::textarea('text', Input::old('text'), array('class' => 'thirteen')) }} - @include('partials.error', array('error' => $errors->first('text'))) - - {{ Form::label('pad_id', 'Pad') . Form::select('pad_id', array(0 => '-----------') + Auth::user()->pads()->lists('name', 'id'), Input::old('pad_id')) }} - - {{ Form::submit('Create') }} - - {{ Form::close() }} - -@stop - - diff --git a/laravel/notejam/app/views/note/delete.blade.php b/laravel/notejam/app/views/note/delete.blade.php deleted file mode 100644 index 9b226b376..000000000 --- a/laravel/notejam/app/views/note/delete.blade.php +++ /dev/null @@ -1,16 +0,0 @@ -@extends('user') - -@section('page_title') -{{ $note->name }} -@stop - -@section('content') - {{ Form::open() }} -

Are you sure you want to delete {{ $note->name }}?

- {{ Form::submit('Yes, I want to delete this note', array('class' => 'button red')) }} - Cancel - - {{ Form::close() }} -@stop - - diff --git a/laravel/notejam/app/views/note/edit.blade.php b/laravel/notejam/app/views/note/edit.blade.php deleted file mode 100644 index d95e76c86..000000000 --- a/laravel/notejam/app/views/note/edit.blade.php +++ /dev/null @@ -1,26 +0,0 @@ -@extends('user') - -@section('page_title') -{{ $note->name }} -@stop - -@section('content') - {{ Form::open(array("route" => array("notes.update", $note->id), "class" => "note")) }} - - {{ Form::label('name', 'Name') . Form::text('name', $note->name, array('class' => 'thirteen')) }} - @include('partials.error', array('error' => $errors->first('name'))) - - {{ Form::label('text', 'Text') . Form::textarea('text', $note->text, array('class' => 'thirteen')) }} - @include('partials.error', array('error' => $errors->first('text'))) - - {{ Form::label('pad_id', 'Pad') . Form::select('pad_id', array(0 => '-----------') + Auth::user()->pads()->lists('name', 'id'), $note->pad_id) }} - - {{ Form::submit('Save') }} - - {{ Form::close() }} - -@stop - - - - diff --git a/laravel/notejam/app/views/note/index.blade.php b/laravel/notejam/app/views/note/index.blade.php deleted file mode 100644 index 367a52a6b..000000000 --- a/laravel/notejam/app/views/note/index.blade.php +++ /dev/null @@ -1,33 +0,0 @@ -@extends('user') - -@section('page_title') -All notes ({{ $notes->count() }}) -@stop - -@section('content') - @if ($notes->count()) - - - - - - - @foreach ($notes as $note) - - - - - - @endforeach -
Note PadLast modified
{{ $note->name }} - @if ($note->pad) - {{ $note->pad->name }} - @else - No pad - @endif - {{ $note->smartDate(); }}
- @else -

Create your first note.

- @endif - New note -@stop diff --git a/laravel/notejam/app/views/note/view.blade.php b/laravel/notejam/app/views/note/view.blade.php deleted file mode 100644 index 19a552c3d..000000000 --- a/laravel/notejam/app/views/note/view.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@extends('user') - -@section('page_title') -{{ $note->name }} -@stop - -@section('content') -

Last edited at {{ $note->smartDate() }}

-
-

- {{ $note->text }} -

-
- Edit - Delete it -@stop - - - - - diff --git a/laravel/notejam/app/views/pad/create.blade.php b/laravel/notejam/app/views/pad/create.blade.php deleted file mode 100644 index 8b4b4a84d..000000000 --- a/laravel/notejam/app/views/pad/create.blade.php +++ /dev/null @@ -1,18 +0,0 @@ -@extends('user') - -@section('page_title') -New pad -@stop - -@section('content') - {{ Form::open(array('route' => 'pads.store')) }} - - {{ Form::label('name', 'Name') . Form::text('name', Input::old('name')) }} - @include('partials.error', array('error' => $errors->first('name'))) - - {{ Form::submit('Save') }} - - {{ Form::close() }} - -@stop - diff --git a/laravel/notejam/app/views/pad/delete.blade.php b/laravel/notejam/app/views/pad/delete.blade.php deleted file mode 100644 index 21b38099f..000000000 --- a/laravel/notejam/app/views/pad/delete.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@extends('user') - -@section('page_title') -Delete pad {{ $pad->name }} -@stop - -@section('content') - {{ Form::open(array('route' => array('pads.destroy', $pad->id))) }} -

Are you sure you want to delete {{ $pad->name }}?

- {{ Form::submit('Yes, I want to delete this pad', array('class' => 'button red')) }} - Cancel - - {{ Form::close() }} -@stop - diff --git a/laravel/notejam/app/views/pad/edit.blade.php b/laravel/notejam/app/views/pad/edit.blade.php deleted file mode 100644 index ac46abe20..000000000 --- a/laravel/notejam/app/views/pad/edit.blade.php +++ /dev/null @@ -1,17 +0,0 @@ -@extends('user') - -@section('page_title') -{{ $pad->name }} -@stop - -@section('content') - {{ Form::open(array('route' => array('pads.update', $pad->id))) }} - - {{ Form::label('name', 'Name') . Form::text('name', $pad->name) }} - @include('partials.error', array('error' => $errors->first('name'))) - - {{ Form::submit('Save') }} - {{ Form::close() }} - Delete pad - -@stop diff --git a/laravel/notejam/app/views/pad/view.blade.php b/laravel/notejam/app/views/pad/view.blade.php deleted file mode 100644 index 6fd1935e7..000000000 --- a/laravel/notejam/app/views/pad/view.blade.php +++ /dev/null @@ -1,26 +0,0 @@ -@extends('user') - -@section('page_title') -{{ $pad->name; }} ({{ $notes->count() }}) -@stop - -@section('content') - @if ($notes->count()) - - - - - - @foreach ($notes as $note) - - - - - @endforeach -
Note Last modified
{{ $note->name }}{{ $note->smartDate(); }}
- @else -

You don't have notes in this pad yet.

- @endif - New note  - Pad settings -@stop diff --git a/laravel/notejam/app/views/partials/error.blade.php b/laravel/notejam/app/views/partials/error.blade.php deleted file mode 100644 index cf7c470da..000000000 --- a/laravel/notejam/app/views/partials/error.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@if($error) -
    -
  • {{ $error }}
  • -
-@endif diff --git a/laravel/notejam/app/views/user.blade.php b/laravel/notejam/app/views/user.blade.php deleted file mode 100644 index 6cb1edf74..000000000 --- a/laravel/notejam/app/views/user.blade.php +++ /dev/null @@ -1,24 +0,0 @@ -@extends('layout') - -@section('content_class') -thirteen -@stop - -@section('pads') -
- - -
-@stop diff --git a/laravel/notejam/app/views/user/forgot-password.blade.php b/laravel/notejam/app/views/user/forgot-password.blade.php deleted file mode 100644 index 7ddd40535..000000000 --- a/laravel/notejam/app/views/user/forgot-password.blade.php +++ /dev/null @@ -1,18 +0,0 @@ -@extends('layout') - -@section('page_title') -Forgot Password? -@stop - -@section('content') - {{ Form::open(array('class' => 'offset-by-six')) }} - - {{ Form::label('email', 'E-mail') . Form::text('email', Input::old('email')) }} - @include('partials.error', array('error' => $errors->first('email'))) - - {{ Form::submit('Send') }} - - {{ Form::close() }} -@stop - - diff --git a/laravel/notejam/app/views/user/settings.blade.php b/laravel/notejam/app/views/user/settings.blade.php deleted file mode 100644 index 64ece1836..000000000 --- a/laravel/notejam/app/views/user/settings.blade.php +++ /dev/null @@ -1,22 +0,0 @@ -@extends('layout') - -@section('page_title') -Account Settings -@stop - -@section('content') - {{ Form::open(array('class' => 'offset-by-six')) }} - - {{ Form::label('old_password', 'Current password') . Form::password('old_password') }} - @include('partials.error', array('error' => $errors->first('old_password'))) - {{ Form::label('password', 'Password') . Form::password('password') }} - @include('partials.error', array('error' => $errors->first('password'))) - {{ Form::label('password_confirmation', 'Confirm password') . Form::password('password_confirmation') }} - @include('partials.error', array('error' => $errors->first('password_confirmation'))) - - {{ Form::submit('Save') }} - - {{ Form::close() }} - -@stop - diff --git a/laravel/notejam/app/views/user/signin.blade.php b/laravel/notejam/app/views/user/signin.blade.php deleted file mode 100644 index c118efe83..000000000 --- a/laravel/notejam/app/views/user/signin.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@extends('layout') - -@section('page_title') -Sign In -@stop - -@section('content') - {{ Form::open(array('class' => 'offset-by-six')) }} - - {{ Form::label('email', 'E-mail') . Form::text('email', Input::old('email')) }} - @include('partials.error', array('error' => $errors->first('email'))) - {{ Form::label('password', 'Password') . Form::password('password') }} - @include('partials.error', array('error' => $errors->first('password'))) - - {{ Form::submit('Sign in') }} or Sign up -
-

Forgot Password?

- - {{ Form::close() }} -@stop - diff --git a/laravel/notejam/app/views/user/signup.blade.php b/laravel/notejam/app/views/user/signup.blade.php deleted file mode 100644 index 136c29755..000000000 --- a/laravel/notejam/app/views/user/signup.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@extends('layout') - -@section('page_title') -Sign Up -@stop - -@section('content') - {{ Form::open(array('class' => 'offset-by-six')) }} - - {{ Form::label('email', 'E-mail') . Form::text('email', Input::old('email')) }} - @include('partials.error', array('error' => $errors->first('email'))) - {{ Form::label('password', 'Password') . Form::password('password') }} - @include('partials.error', array('error' => $errors->first('password'))) - {{ Form::label('password_confirmation', 'Confirm password') . Form::password('password_confirmation') }} - @include('partials.error', array('error' => $errors->first('password_confirmation'))) - - {{ Form::submit('Sign Up') }} or Sign in - - {{ Form::close() }} - -@stop diff --git a/laravel/notejam/artisan b/laravel/notejam/artisan deleted file mode 100755 index 5c408ad80..000000000 --- a/laravel/notejam/artisan +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -setRequestForConsoleEnvironment(); - -$artisan = Illuminate\Console\Application::start($app); - -/* -|-------------------------------------------------------------------------- -| Run The Artisan Application -|-------------------------------------------------------------------------- -| -| When we run the console application, the current CLI command will be -| executed in this console and the response sent back to a terminal -| or another output device for the developers. Here goes nothing! -| -*/ - -$status = $artisan->run(); - -/* -|-------------------------------------------------------------------------- -| Shutdown The Application -|-------------------------------------------------------------------------- -| -| Once Artisan has finished running. We will fire off the shutdown events -| so that any final work may be done by the application before we shut -| down the process. This is the last thing to happen to the request. -| -*/ - -$app->shutdown(); - -exit($status); diff --git a/laravel/notejam/bootstrap/autoload.php b/laravel/notejam/bootstrap/autoload.php deleted file mode 100644 index 6b329312a..000000000 --- a/laravel/notejam/bootstrap/autoload.php +++ /dev/null @@ -1,75 +0,0 @@ - __DIR__.'/../app', - - /* - |-------------------------------------------------------------------------- - | Public Path - |-------------------------------------------------------------------------- - | - | The public path contains the assets for your web application, such as - | your JavaScript and CSS files, and also contains the primary entry - | point for web requests into these applications from the outside. - | - */ - - 'public' => __DIR__.'/../public', - - /* - |-------------------------------------------------------------------------- - | Base Path - |-------------------------------------------------------------------------- - | - | The base path is the root of the Laravel installation. Most likely you - | will not need to change this value. But, if for some wild reason it - | is necessary you will do so here, just proceed with some caution. - | - */ - - 'base' => __DIR__.'/..', - - /* - |-------------------------------------------------------------------------- - | Storage Path - |-------------------------------------------------------------------------- - | - | The storage path is used by Laravel to store cached Blade views, logs - | and other pieces of information. You may modify the path here when - | you want to change the location of this directory for your apps. - | - */ - - 'storage' => __DIR__.'/../app/storage', - -); diff --git a/laravel/notejam/bootstrap/start.php b/laravel/notejam/bootstrap/start.php deleted file mode 100644 index a55def12d..000000000 --- a/laravel/notejam/bootstrap/start.php +++ /dev/null @@ -1,73 +0,0 @@ -detectEnvironment(array( - - 'local' => array('your-machine-name'), - -)); - -/* -|-------------------------------------------------------------------------- -| Bind Paths -|-------------------------------------------------------------------------- -| -| Here we are binding the paths configured in paths.php to the app. You -| should not be changing these here. If you need to change these you -| may do so within the paths.php file and they will be bound here. -| -*/ - -$app->bindInstallPaths(require __DIR__.'/paths.php'); - -/* -|-------------------------------------------------------------------------- -| Load The Application -|-------------------------------------------------------------------------- -| -| Here we will load this Illuminate application. We will keep this in a -| separate location so we can isolate the creation of an application -| from the actual running of the application with a given request. -| -*/ - -$framework = $app['path.base']. - '/vendor/laravel/framework/src'; - -require $framework.'/Illuminate/Foundation/start.php'; - -/* -|-------------------------------------------------------------------------- -| Return The Application -|-------------------------------------------------------------------------- -| -| This script returns the application instance. The instance is given to -| the calling script so we can separate the building of the instances -| from the actual running of the application and sending responses. -| -*/ - -return $app; diff --git a/laravel/notejam/composer.json b/laravel/notejam/composer.json deleted file mode 100644 index 6ccce0385..000000000 --- a/laravel/notejam/composer.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "laravel/laravel", - "description": "The Laravel Framework.", - "keywords": ["framework", "laravel"], - "license": "MIT", - "require": { - "laravel/framework": "4.2.*" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, - "autoload": { - "classmap": [ - "app/commands", - "app/controllers", - "app/models", - "app/database/migrations", - "app/database/seeds", - "app/tests/TestCase.php" - ] - }, - "scripts": { - "post-install-cmd": [ - "php artisan clear-compiled", - "php artisan optimize" - ], - "post-update-cmd": [ - "php artisan clear-compiled", - "php artisan optimize" - ], - "post-create-project-cmd": [ - "php artisan key:generate" - ] - }, - "config": { - "preferred-install": "dist" - }, - "minimum-stability": "stable" -} diff --git a/laravel/notejam/phpunit.xml b/laravel/notejam/phpunit.xml deleted file mode 100644 index c33042056..000000000 --- a/laravel/notejam/phpunit.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - ./app/tests/ - - - diff --git a/laravel/notejam/public/.htaccess b/laravel/notejam/public/.htaccess deleted file mode 100644 index 77827ae70..000000000 --- a/laravel/notejam/public/.htaccess +++ /dev/null @@ -1,15 +0,0 @@ - - - Options -MultiViews - - - RewriteEngine On - - # Redirect Trailing Slashes... - RewriteRule ^(.*)/$ /$1 [L,R=301] - - # Handle Front Controller... - RewriteCond %{REQUEST_FILENAME} !-d - RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^ index.php [L] - diff --git a/laravel/notejam/public/css/style.css b/laravel/notejam/public/css/style.css deleted file mode 100644 index 86cd131ff..000000000 --- a/laravel/notejam/public/css/style.css +++ /dev/null @@ -1,395 +0,0 @@ -/* -* Skeleton V1.0.3 -* Copyright 2011, Dave Gamache -* www.getskeleton.com -* Free to use under the MIT license. -* http://www.opensource.org/licenses/mit-license.php -* 7/17/2011 -*/ - - -/* Documentation Styles -================================================== */ - div.container { - padding-top: 40px; } - - /* Doc nav */ - nav { - width: 160px; } - #logo, .bold-header { - margin-bottom: 30px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - letter-spacing: -1px; - color: #555; - font-weight: bold; } - .bold-header span { - font-weight: normal; - font-size: 23px; - } - .bold-header a.header { - text-decoration: none; - color: inherit; - } - .bold-header span.jam { - font-size: 46px; - line-height: 50px; - } - nav ul { - float: left; } - nav ul li { - display: block; - margin-bottom: 10px; } - nav ul li a, - nav ul li a:visited, - nav ul li a:active { - font-size: 14px; - color: #555; - text-decoration: none; - font-weight: bold; } - nav ul li a:hover, - nav ul li a:focus { - color: #222; } - header h1 { - font-size: 52px; - line-height: 61px; - letter-spacing: -1px; - font-weight: normal; - font-family: "Georgia", "Times New Roman", Helvetica, Arial, sans-serif; } - hr.large { - border: none; - height: 8px; - background: #ebebeb; - margin: 50px 0; } - div.doc-section { - margin: 30px 0; } - - #whatAndWhy .row { - padding: 30px 0 0; } - - #typography blockquote { - margin-top: 20px; } - - .hidden-code a { - font-size: 12px; - color: #999; } - .hidden-code>div { - display: none; } - - - /* Grid */ - #grid .column, - #grid .columns { - background: #ddd; - height: 25px; - line-height: 25px; - margin-bottom: 10px; - text-align: center; - text-transform: uppercase; - color: #555; - font-size: 12px; - font-weight: bold; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; } - #grid .column:hover, - #grid .columns:hover { - background: #bbb; - color: #333; } - #grid .example-grid { overflow: hidden; } - - .post-button-note, - .post-button-note a { - font-size: 11px; - color: #999; } - - #examples .four.columns a { - text-decoration: none; - } - #examples .four.columns a:hover { - text-decoration: underline; - } - - - .resize { - position: fixed; - bottom: 0; - right: 0; - height: 80px; - width: 80px; - background: url(images/resize.png); } - - - img { - max-width: 100%; - height: auto; } - - .gist-meta { display: none !important;} - - ul ul ul li { margin-bottom: 3px; } - - .twitter-share-button { margin-bottom: -18px; } - - /* Table stylesheets */ - table { - width: 100%; - border-collapse: collapse; - } - - table th, table td { - padding: 10px 10px 9px; - font-size: 13px; - line-height: 18px; - text-align: left; - } - - table td { - vertical-align: top; - border-top: solid 1px #ddd; - } - - table th { - padding-top: 9px; - font-weight: bold; - vertical-align: middle; - } - - table.condensed th, table.condensed td { - padding: 5px 5px 4px; - } - - table.bordered { - border-collapse: separate; - border: solid 1px #ddd; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - } - - table.bordered th + th, - table.bordered th + td, - table.bordered td + td { - border-left: solid 1px #ddd; - } - - .zebra-striped tbody tr:nth-child(odd) td, - .zebra-striped tbody tr:nth-child(odd) th { - background: #f5f5f5; - } - -.carbonad, -.carbonad-image, -.carbonad-text, -.carbonad-tag { - background: none !important; - border: none !important; - margin-left: 0 !important; -} -.carbonad-tag { - margin-top: 6px !important; - padding-top: 0 !important; -} -.carbonad-text { - height: auto !important; -} -.carbonad-image { - margin-top: 0 !important; -} - -.hidden-text { - font-size: 12px; - color: #999; -} - -td.date, th.date { - text-align: right; -} - -td.date { - font-style: italic; -} - -form.note input[type="text"], form.note textarea { - width: 100%; -} - -form hr { - width: 218px; - margin: 10px 0px; -} - -form.note textarea { - height: 250px; -} - -div.content-area { - min-height: 600px; -} - -hr.footer { - margin-bottom: 10px; -} - -div.footer { - margin-bottom: 10px; - text-align: center; - font-size: 12px; -} - -form.sign-in { - margin: 50px 0 0 0; -} - -.sort_arrow { - text-decoration: none; -} - -.sort_arrow:hover { - text-decoration: none; - color: red; -} - -div.sign-in-out-block { - position: absolute; - right: 14px; - top: 8px; - font-size: 12px; -} - -div.sign-in-out-block a { - /*text-decoration: none;*/ -} - -a.small-red { - color: red; - font-size: 12px; -} - -table.notes { - margin: 0 0 20px 0; -} - -table.notes th.note { - width: 72%; -} - -table.notes td.pad { - color: grey; -} - -table.notes td.pad a { - color: grey; - text-decoration: underline; - font-style: normal; -} - - -table.notes td.pad a:hover { - color: black; -} - -p.empty { - color: grey; - font-style: italic; -} - -a.delete-note { - float: right; - font-size: 12px; - color: red; -} - -.red, input.red { - color: red !important; -} - -ul.errorlist, ul.errors { - margin: -18px 0 0 0; -} - -ul.errorlist li, ul.errors li { - color: red; -} - -.alert-area { - text-align: center; -} - -.alert { - padding: 5px 8px; - margin: 0 0 12px 0; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border: 1px solid #d6e9c6; -} - -.alert-error { - color: #b94a48; - background-color: #f2dede; - border: 1px solid #eed3d7; -} - - /* Mobile */ - @media only screen and (max-width: 767px) { - header h1 { font-size: 34px; line-height: 37px; } - nav { position: relative; } - nav ul, - .carbonad { - display: none; - } - #logo { text-align: left; } - #examples .four.columns { - padding-top: 30px; - } - } - - /* Mobile Landscape */ - @media only screen and (min-width: 480px) and (max-width: 767px) { - nav ul { - display: none; - } - } - - /* Non 960 */ - @media only screen and (max-width: 959px) { - #logo { - font-size: 21px; - margin-bottom: 15px; } - nav .button { - padding: 9px 20px 11px; } - } - - /* iPad Portrait/Browser */ - @media only screen and (min-width: 768px) and (max-width: 959px) { - nav { - width: 124px; } - } - - /* Mobile/Browser */ - @media only screen and (max-width: 767px) {} - - /* Mobile Landscape/Browser */ - @media only screen and (min-width: 480px) and (max-width: 767px) {} - - /* Anything smaller than standard 960 */ - @media only screen and (max-width: 959px) {} - - - /* iPad Portrait Only */ - @media only screen and (min-width: 768px) and (max-width: 959px) and (max-device-width: 1000px) {} - - /* Mobile Only */ - @media only screen and (max-width: 767px) and (max-device-width: 1000px) {} - - /* Mobile Landscape Only */ - @media only screen and (min-width: 480px) and (max-width: 767px) and (max-device-width: 1000px) {} - - /* Anything smaller than standard 960 on a device */ - @media only screen and (max-width: 959px) and (max-device-width: 1000px) { - .resize { display: none; } - } diff --git a/laravel/notejam/public/favicon.ico b/laravel/notejam/public/favicon.ico deleted file mode 100644 index e69de29bb..000000000 diff --git a/laravel/notejam/public/index.php b/laravel/notejam/public/index.php deleted file mode 100644 index f08822d95..000000000 --- a/laravel/notejam/public/index.php +++ /dev/null @@ -1,49 +0,0 @@ - - */ - -/* -|-------------------------------------------------------------------------- -| Register The Auto Loader -|-------------------------------------------------------------------------- -| -| Composer provides a convenient, automatically generated class loader -| for our application. We just need to utilize it! We'll require it -| into the script here so that we do not have to worry about the -| loading of any our classes "manually". Feels great to relax. -| -*/ - -require __DIR__.'/../bootstrap/autoload.php'; - -/* -|-------------------------------------------------------------------------- -| Turn On The Lights -|-------------------------------------------------------------------------- -| -| We need to illuminate PHP development, so let's turn on the lights. -| This bootstraps the framework and gets it ready for use, then it -| will load up this application so that we can run it and send -| the responses back to the browser and delight these users. -| -*/ - -$app = require_once __DIR__.'/../bootstrap/start.php'; - -/* -|-------------------------------------------------------------------------- -| Run The Application -|-------------------------------------------------------------------------- -| -| Once we have the application, we can simply call the run method, -| which will execute the request and send the response back to -| the client's browser allowing them to enjoy the creative -| and wonderful application we have whipped up for them. -| -*/ - -$app->run(); diff --git a/laravel/notejam/public/packages/.gitkeep b/laravel/notejam/public/packages/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/laravel/notejam/public/robots.txt b/laravel/notejam/public/robots.txt deleted file mode 100644 index eb0536286..000000000 --- a/laravel/notejam/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: diff --git a/laravel/notejam/server.php b/laravel/notejam/server.php deleted file mode 100644 index 5f187f344..000000000 --- a/laravel/notejam/server.php +++ /dev/null @@ -1,19 +0,0 @@ -`_. - -Nette version: 2.3 - -The application is maintained by `@fprochazka `_. - -========================== -Installation and launching -========================== - ------ -Clone ------ - -Clone the repo: - -.. code-block:: bash - - $ git clone git@github.com:komarserjio/notejam.git YOUR_PROJECT_DIR/ - -------- -Install -------- - -Install `composer `_ - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/doctrine/notejam - $ curl -s https://getcomposer.org/installer | php - -Install dependencies - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/doctrine/notejam - $ php composer.phar install - -Create empty ``config.local.neon`` - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/doctrine/notejam - $ cp app/config/config.local.example.neon app/config/config.local.neon - -Create database schema - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/doctrine/notejam - $ php www/index.php orm:schema:up --force - - ------- -Launch ------- - -Start built-in php web server: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/doctrine/notejam/ - $ php -t `pwd`/www -S 127.0.0.1:8000 `pwd`/www/index.php - -Go to http://localhost:8000/ in your browser. - ---------- -Run tests ---------- - -Run tests: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/doctrine/notejam/ - $ php -t `pwd`/www -S 127.0.0.1:8000 `pwd`/www/index.php - $ ./vendor/bin/codecept run - - -============ -Contribution -============ - - -Do you have php/nette experience? Help the app to follow php and Nette Framework best practices. - -Please send your pull requests in the ``master`` branch. -Always prepend your commits with framework name: - -.. code-block:: bash - - Nette: Implemented sign in functionality - -Read `contribution guide `_ for details. diff --git a/nette/doctrine/notejam/.gitignore b/nette/doctrine/notejam/.gitignore deleted file mode 100644 index 6ddedf44f..000000000 --- a/nette/doctrine/notejam/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -app/config/config.local.neon -vendor diff --git a/nette/doctrine/notejam/app/Components/ConfirmationControl.php b/nette/doctrine/notejam/app/Components/ConfirmationControl.php deleted file mode 100644 index f9fbf8fe8..000000000 --- a/nette/doctrine/notejam/app/Components/ConfirmationControl.php +++ /dev/null @@ -1,71 +0,0 @@ -formFactory = $formFactory; - } - - - - /** - * @return Form - */ - protected function createComponentForm() - { - $form = $this->formFactory->create(); - - $form->addProtection(); - $form->addSubmit('confirm', 'Confirm'); - $form->onSuccess[] = function (Form $form) { - $this->onConfirm($this); - }; - - return $form; - } - - -} - - - -/** - * @see \Notejam\Components\PadsList\IPadsListControlFactory - */ -interface IConfirmationControlFactory -{ - - /** - * @return ConfirmationControl - */ - public function create(); -} diff --git a/nette/doctrine/notejam/app/Components/ForgottenPasswordControl.php b/nette/doctrine/notejam/app/Components/ForgottenPasswordControl.php deleted file mode 100644 index 847b79516..000000000 --- a/nette/doctrine/notejam/app/Components/ForgottenPasswordControl.php +++ /dev/null @@ -1,136 +0,0 @@ -formFactory = $formFactory; - $this->em = $em; - $this->userRepository = $userRepository; - $this->mailer = $mailer; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return Form - */ - protected function createComponentForm() - { - $form = $this->formFactory->create(); - - $form->addText('email', 'Email') - ->setRequired('%label is required') - ->addRule($form::EMAIL, 'Invalid email'); - - $form->addSubmit('save', 'Get new password'); - $form->onSuccess[] = [$this, 'formSucceeded']; - - return $form; - } - - - - /** - * Callback method, that is called once form is successfully submitted, without validation errors. - * - * @param Form $form - * @param Nette\Utils\ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - if (!$user = $this->userRepository->findOneBy(['email' => $values->email])) { - $form['email']->addError("User with given email doesn't exist"); - return; - } - - // this is not a very secure way of getting new password - // but it's the same way the symfony app is doing it... - $newPassword = $user->generateRandomPassword(); - $this->em->flush(); - - try { - $message = new Nette\Mail\Message(); - $message->setSubject('Notejam password'); - $message->setFrom('noreply@notejamapp.com'); - $message->addTo($user->getEmail()); - - // !!! Never send passwords through email !!! - // This is only for demonstration purposes of Notejam. - // Ideally, you can create a unique link where user can change his password - // himself for limited amount of time, and then send the link. - $message->setBody("Your new password is {$newPassword}"); - - $this->mailer->send($message); - - } catch (Nette\Mail\SendException $e) { - Debugger::log($e, 'email'); - $form->addError('Could not send email with new password'); - } - - $this->onSuccess($this); - } - -} - - - -/** - * @see \Notejam\Components\PadsList\IPadsListControlFactory - */ -interface IForgottenPasswordControlFactory -{ - - /** - * @return ForgottenPasswordControl - */ - public function create(); -} diff --git a/nette/doctrine/notejam/app/Components/NoteControl.php b/nette/doctrine/notejam/app/Components/NoteControl.php deleted file mode 100644 index f0cec1c5e..000000000 --- a/nette/doctrine/notejam/app/Components/NoteControl.php +++ /dev/null @@ -1,172 +0,0 @@ -padRepository = $padRepository; - $this->em = $em; - $this->user = $user; - $this->formFactory = $formFactory; - } - - - - /** - * This setter allows to edit notes instead of only creating them. - * - * @param Note $note - */ - public function setNote(Note $note) - { - $this->note = $note; - $this['form']->setDefaults([ - 'name' => $note->getName(), - 'text' => $note->getText(), - 'pad' => $note->getPad() ? $note->getPad()->getId() : NULL, - ]); - } - - - - /** - * Setter for the default pad, to be pre-selected in the pad select form element. - * - * @param Pad|null $pad - */ - public function setPad(Pad $pad = NULL) - { - if ($pad === NULL) { - return; // ignore - } - - $this['form']->setDefaults([ - 'pad' => $pad->getId(), - ]); - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return Form - */ - protected function createComponentForm() - { - $form = $this->formFactory->create(); - - $form->addText('name', 'Name') - ->setRequired('%label is required'); - $form->addTextArea('text', 'Text') - ->setRequired('%label is required'); - $form->addSelect('pad', 'Pad') - ->setPrompt('----------') - ->setItems($this->padRepository->findPairs('name')); - - $form->addSubmit('save', 'Save'); - $form->onSuccess[] = [$this, 'formSucceeded']; - - return $form; - } - - - - /** - * Callback method, that is called once form is successfully submitted, without validation errors. - * - * @param Form $form - * @param Nette\Utils\ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - if ($this->note === NULL) { - $note = new Note($this->user->getIdentity()); - $this->em->persist($note); - - } else { - $note = $this->note; - } - - $note->setName($values->name); - $note->setText($values->text); - - if ($values->pad === NULL) { - $note->setPad(NULL); - - } else { - $note->setPad($this->padRepository->find($values->pad)); - } - - $this->em->flush(); - - $this->onSuccess($this); - } - -} - - - -/** - * @see \Notejam\Components\PadsList\IPadsListControlFactory - */ -interface INoteControlFactory -{ - - /** - * @return NoteControl - */ - function create(); -} diff --git a/nette/doctrine/notejam/app/Components/PadsControl.php b/nette/doctrine/notejam/app/Components/PadsControl.php deleted file mode 100644 index e9c367498..000000000 --- a/nette/doctrine/notejam/app/Components/PadsControl.php +++ /dev/null @@ -1,129 +0,0 @@ -em = $em; - $this->user = $user; - $this->formFactory = $formFactory; - } - - - - /** - * This setter allows to edit pads instead of only creating them. - * - * @param Pad $pad - */ - public function setPad(Pad $pad) - { - $this->pad = $pad; - $this['form']->setDefaults([ - 'name' => $pad->getName(), - ]); - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return Form - */ - protected function createComponentForm() - { - $form = $this->formFactory->create(); - - $form->addText('name', 'Name') - ->setRequired('%label is required'); - - $form->addSubmit('save', 'Save'); - $form->onSuccess[] = [$this, 'formSucceeded']; - - return $form; - } - - - - /** - * Callback method, that is called once form is successfully submitted, without validation errors. - * - * @param Form $form - * @param Nette\Utils\ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - if ($this->pad === NULL) { - $this->em->persist($pad = new Pad($this->user->getIdentity())); - - } else { - $pad = $this->pad; - } - - $pad->setName($values->name); - $this->em->flush($pad); - - $this->onSuccess($this, $pad); - } - -} - - - -/** - * @see \Notejam\Components\PadsList\IPadsListControlFactory - */ -interface IPadsControlFactory -{ - - /** - * @return PadsControl - */ - function create(); -} diff --git a/nette/doctrine/notejam/app/Components/PadsList/PadsListControl.php b/nette/doctrine/notejam/app/Components/PadsList/PadsListControl.php deleted file mode 100644 index 7406c7cb9..000000000 --- a/nette/doctrine/notejam/app/Components/PadsList/PadsListControl.php +++ /dev/null @@ -1,60 +0,0 @@ -padRepository = $padRepository; - $this->user = $user; - } - - - - public function render() - { - $this->template->pads = $this->padRepository->findBy(['user' => $this->user->getId()]); - $this->template->render(__DIR__ . '/default.latte'); - } - -} - - - -/** - * Interface for automatically generated factory (handled by Nette/DI), - * that is used for creating new instance of the PadsListControl. - * - * This probably should be in a separated file, but this is more convenient. - */ -interface IPadsListControlFactory -{ - - /** - * @return PadsListControl - */ - public function create(); -} diff --git a/nette/doctrine/notejam/app/Components/PadsList/default.latte b/nette/doctrine/notejam/app/Components/PadsList/default.latte deleted file mode 100644 index 66ea4a20d..000000000 --- a/nette/doctrine/notejam/app/Components/PadsList/default.latte +++ /dev/null @@ -1,14 +0,0 @@ -
- - -
diff --git a/nette/doctrine/notejam/app/Components/SettingsControl.php b/nette/doctrine/notejam/app/Components/SettingsControl.php deleted file mode 100644 index 62425dd15..000000000 --- a/nette/doctrine/notejam/app/Components/SettingsControl.php +++ /dev/null @@ -1,116 +0,0 @@ -user = $user; - $this->em = $em; - $this->formFactory = $formFactory; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return Form - */ - protected function createComponentForm() - { - $form = $this->formFactory->create(); - - $form->addPassword('current', 'Current password') - ->setRequired('%label is required'); - $form->addPassword('password', 'New password') - ->setRequired('%label is required'); - $form->addPassword('confirm', 'Confirm') - ->setRequired('%label is required') - ->addRule(Form::EQUAL, 'New passwords must match', $form['password']); - - $form->addSubmit('save', 'Change password'); - $form->onSuccess[] = [$this, 'formSucceeded']; - - return $form; - } - - - - /** - * Callback method, that is called once form is successfully submitted, without validation errors. - * - * @param Form $form - * @param Nette\Utils\ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - /** @var User $user */ - $user = $this->user->getIdentity(); - - try { - $user->changePassword($values->current, $values->password); - $this->em->flush(); - $this->onSuccess($this); - - } catch (InvalidPasswordException $e) { - $form['current']->addError('Invalid current password'); - } - } - -} - - - -/** - * @see \Notejam\Components\PadsList\IPadsListControlFactory - */ -interface ISettingsControlFactory -{ - - /** - * @return SettingsControl - */ - public function create(); -} diff --git a/nette/doctrine/notejam/app/Components/SignInControl.php b/nette/doctrine/notejam/app/Components/SignInControl.php deleted file mode 100644 index 11c9bbe1a..000000000 --- a/nette/doctrine/notejam/app/Components/SignInControl.php +++ /dev/null @@ -1,100 +0,0 @@ -user = $user; - $this->formFactory = $formFactory; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return Form - */ - protected function createComponentForm() - { - $form = $this->formFactory->create(); - - $form->addText('email', 'Email') - ->setRequired('%label is required') - ->addRule($form::EMAIL); - $form->addPassword('password', 'Password') - ->setRequired('%label is required'); - - $form->addSubmit('send'); - $form->onSuccess[] = [$this, 'formSucceeded']; - - return $form; - } - - - - /** - * Callback method, that is called once form is successfully submitted, without validation errors. - * - * @param Form $form - * @param Nette\Utils\ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - try { - $this->user->login($values->email, $values->password); - $this->onSuccess($this); - - } catch (Nette\Security\AuthenticationException $e) { - $form->addError($e->getMessage()); - } - } - -} - - - -/** - * @see \Notejam\Components\PadsList\IPadsListControlFactory - */ -interface ISignInControlFactory -{ - - /** - * @return SignInControl - */ - public function create(); -} diff --git a/nette/doctrine/notejam/app/Components/SignUpControl.php b/nette/doctrine/notejam/app/Components/SignUpControl.php deleted file mode 100644 index 81cd73ede..000000000 --- a/nette/doctrine/notejam/app/Components/SignUpControl.php +++ /dev/null @@ -1,125 +0,0 @@ -user = $user; - $this->em = $em; - $this->userRepository = $userRepository; - $this->formFactory = $formFactory; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return Form - */ - protected function createComponentForm() - { - $form = $this->formFactory->create(); - - $form->addText('email', 'Email') - ->setRequired('%label is required') - ->addRule($form::EMAIL); - $form->addPassword('password', 'Password') - ->setRequired('%label is required'); - $form->addPassword('confirm', 'Confirm') - ->setRequired('%label is required') - ->addRule(Form::EQUAL, 'New passwords must match', $form['password']); - - $form->addSubmit('send'); - $form->onSuccess[] = [$this, 'formSucceeded']; - - $form->onValidate[] = function (Form $form, $values) { - if ($this->userRepository->countBy(['email' => $values->email]) > 0) { - $form->addError('Account with this email already exists'); - } - }; - - return $form; - } - - - - /** - * Callback method, that is called once form is successfully submitted, without validation errors. - * - * @param Form $form - * @param Nette\Utils\ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - $user = new User($values->email, $values->password); - $this->em->persist($user); - $this->em->flush(); - - // directly login user on signup - // $this->user->login($user); - - $this->onSuccess($this); - } - -} - - - -/** - * @see \Notejam\Components\PadsList\IPadsListControlFactory - */ -interface ISignUpControlFactory -{ - - /** - * @return SignUpControl - */ - public function create(); -} diff --git a/nette/doctrine/notejam/app/Presenters/BasePresenter.php b/nette/doctrine/notejam/app/Presenters/BasePresenter.php deleted file mode 100644 index a4ccaa27d..000000000 --- a/nette/doctrine/notejam/app/Presenters/BasePresenter.php +++ /dev/null @@ -1,68 +0,0 @@ -padsListControlFactory->create(); - } - - - - /** - * This allows me to implement a basic access control for presenters. - * - * This method is called for every presenter run, - * once it's created before the presenter startup, - * and for every other lifecycle methods, like render, action and signals. - */ - public function checkRequirements($element) - { - $user = PresenterComponentReflection::parseAnnotation($element, 'User'); - if ($user === FALSE) { - return; // not protected - } - - if (!$this->getUser()->isLoggedIn()) { - $this->forbiddenAccess(); - } - } - - - - /** - * The default behaviour for parts of app, where the user is not allowed for some reason. - * This can be overwritten in subclasses to achieve different behaviour. - */ - protected function forbiddenAccess() - { - $this->redirect('User:signIn'); - } - -} diff --git a/nette/doctrine/notejam/app/Presenters/Error4xxPresenter.php b/nette/doctrine/notejam/app/Presenters/Error4xxPresenter.php deleted file mode 100644 index 666e5e05a..000000000 --- a/nette/doctrine/notejam/app/Presenters/Error4xxPresenter.php +++ /dev/null @@ -1,27 +0,0 @@ -getCode()}.latte"; - $this->template->setFile(is_file($file) ? $file : __DIR__ . '/templates/Error/4xx.latte'); - } - -} diff --git a/nette/doctrine/notejam/app/Presenters/ErrorPresenter.php b/nette/doctrine/notejam/app/Presenters/ErrorPresenter.php deleted file mode 100644 index 2d05af731..000000000 --- a/nette/doctrine/notejam/app/Presenters/ErrorPresenter.php +++ /dev/null @@ -1,58 +0,0 @@ -logger = $logger; - } - - - - /** - * This method is usually implemented by the more complex UI\Presenter - * But since an unhandled exception might have occurred, - * it should be processed as simply as possible to avoid any further problems or even another exception. - * - * @param Nette\Application\Request $request - * @return Responses\CallbackResponse|Responses\ForwardResponse - */ - public function run(Nette\Application\Request $request) - { - $exception = $request->getParameter('exception'); - - // if it's a simple BadRequestException, use the more powerful presenter - if ($exception instanceof Nette\Application\BadRequestException) { - return new Responses\ForwardResponse($request->setPresenterName('Error4xx')); - } - - $this->logger->log($exception, ILogger::EXCEPTION); - - // the 500 means unhandled exception, which should translate to the simplest page possible - return new Responses\CallbackResponse( - function () { - require __DIR__ . '/templates/Error/500.phtml'; - } - ); - } - -} diff --git a/nette/doctrine/notejam/app/Presenters/NotePresenter.php b/nette/doctrine/notejam/app/Presenters/NotePresenter.php deleted file mode 100644 index 39b42d8bb..000000000 --- a/nette/doctrine/notejam/app/Presenters/NotePresenter.php +++ /dev/null @@ -1,252 +0,0 @@ -getParameter('id')) { - $this->note = $this->noteRepository->findOneBy([ - 'id' => $id, - 'user' => $this->user->getId() - ]); - - if (!$this->note) { - $this->error(); - } - } - - if ($padId = $this->getParameter('pad')) { - $this->pad = $this->padRepository->findOneBy([ - 'id' => $padId, - 'user' => $this->user->getId() - ]); - - if (!$this->pad) { - $this->error(); - } - } - } - - - - /** - * This method is called before the render method. - * It is a good place to add code that would be duplicated in all render methods. - */ - protected function beforeRender() - { - parent::beforeRender(); - - // so we don't have to repeat the code in every render method - $this->template->note = $this->note; - } - - - - /** - * Prepares template variables for the default action. - * - * @param string $order - */ - public function renderDefault($order = 'name') - { - $this->template->notes = $this->noteRepository->findBy( - [ - 'user' => $this->getUser()->getId() - ], - $this->noteRepository->buildOrderBy($order) - ); - } - - - - /** - * Since the note is required for the detail, - * if it haven't been found, the presenter should end with 404 error. - */ - public function actionDetail($id) - { - if (!$this->note) { - $this->error(); - } - } - - - - /** - * Since the note is required for the edit, - * if it haven't been found, the presenter should end with 404 error. - */ - public function actionEdit($id) - { - if (!$this->note) { - $this->error(); - } - } - - - - /** - * Since the note is required for the delete, - * if it haven't been found, the presenter should end with 404 error. - */ - public function actionDelete($id) - { - if (!$this->note) { - $this->error(); - } - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * This factory creates a ConfirmationControl, - * that calls the onConfirm event if user clicks on the button. - * - * @return \Notejam\Components\ConfirmationControl - */ - protected function createComponentDeleteNote() - { - if ($this->action !== 'delete') { - $this->error(); - } - - $control = $this->confirmationControlFactory->create(); - $control->onConfirm[] = function () { - $this->em->remove($this->note); - $this->em->flush(); - $this->flashMessage('The note has been deleted', 'success'); - $this->redirect('Note:'); - }; - - return $control; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * This factory creates a NoteControl that handles creation of new notes. - * - * @return \Notejam\Components\NoteControl - * @throws Nette\Application\BadRequestException - */ - protected function createComponentCreateNote() - { - if ($this->action !== 'create') { - $this->error(); - } - - $control = $this->noteControlFactory->create(); - $control->setPad($this->pad); - $control->onSuccess[] = function () { - $this->flashMessage('Note was successfully created', 'success'); - $this->redirect('Note:'); - }; - - return $control; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * This factory creates a NoteControl that handles edit of existing notes. - * - * @return \Notejam\Components\NoteControl - * @throws Nette\Application\BadRequestException - */ - protected function createComponentEditNote() - { - if ($this->action !== 'edit' || !$this->note) { - $this->error(); - } - - $control = $this->noteControlFactory->create(); - $control->setNote($this->note); - $control->onSuccess[] = function () { - $this->flashMessage('Note was successfully edited', 'success'); - $this->redirect('Note:'); - }; - - return $control; - } - -} diff --git a/nette/doctrine/notejam/app/Presenters/PadPresenter.php b/nette/doctrine/notejam/app/Presenters/PadPresenter.php deleted file mode 100644 index c65e942a4..000000000 --- a/nette/doctrine/notejam/app/Presenters/PadPresenter.php +++ /dev/null @@ -1,223 +0,0 @@ -getParameter('id')) { - $this->pad = $this->padRepository->findOneBy([ - 'id' => $id, - 'user' => $this->user->getId() - ]); - } - } - - - - /** - * This method is called before the render method. - * It is a good place to add code that would be duplicated in all render methods. - */ - protected function beforeRender() - { - parent::beforeRender(); - - // so we don't have to repeat the code in every render method - $this->template->pad = $this->pad; - } - - - - /** - * Since the pad is required for the edit, - * if it haven't been found, the presenter should end with 404 error. - * - * Prepares template variables for the detail action. - */ - public function actionDetail($id, $order = 'name') - { - if (!$this->pad) { - $this->error(); - } - - $this->template->notes = $this->noteRepository->findBy( - [ - 'user' => $this->getUser()->getId(), - 'pad' => $this->pad->getId() - ], - $this->noteRepository->buildOrderBy($order) - ); - } - - - - /** - * Since the pad is required for the edit, - * if it haven't been found, the presenter should end with 404 error. - */ - public function actionEdit($id) - { - if (!$this->pad) { - $this->error(); - } - } - - - - /** - * Since the pad is required for the delete, - * if it haven't been found, the presenter should end with 404 error. - */ - public function actionDelete($id) - { - if (!$this->pad) { - $this->error(); - } - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * This factory creates a ConfirmationControl, - * that calls the onConfirm event if user clicks on the button. - * - * @return \Notejam\Components\ConfirmationControl - */ - protected function createComponentDeletePad() - { - if ($this->action !== 'delete') { - $this->error(); - } - - $control = $this->confirmationControlFactory->create(); - $control->onConfirm[] = function () { - $this->em->remove($this->pad); - $this->em->flush(); - $this->flashMessage('The pad has been deleted', 'success'); - $this->redirect('Note:'); - }; - - return $control; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * This factory creates a PadsControl that handles creation of new pads. - * - * @return \Notejam\Components\PadsControl - * @throws Nette\Application\BadRequestException - */ - protected function createComponentCreatePad() - { - if ($this->action !== 'create') { - $this->error(); - } - - $control = $this->padsControlFactory->create(); - $control->onSuccess[] = function ($control, Pad $createdPad) { - $this->flashMessage('New pad has been created', 'success'); - $this->redirect('Pad:detail', ['id' => $createdPad->getId()]); - }; - - return $control; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * This factory creates a PadsControl that handles edit of existing pads. - * - * @return \Notejam\Components\PadsControl - * @throws Nette\Application\BadRequestException - */ - protected function createComponentEditPad() - { - if ($this->action !== 'edit' || !$this->pad) { - $this->error(); - } - - $control = $this->padsControlFactory->create(); - $control->setPad($this->pad); - $control->onSuccess[] = function () { - $this->flashMessage('Pad has been edited', 'success'); - $this->redirect('Pad:detail', ['id' => $this->pad->getId()]); - }; - - return $control; - } - -} diff --git a/nette/doctrine/notejam/app/Presenters/UserPresenter.php b/nette/doctrine/notejam/app/Presenters/UserPresenter.php deleted file mode 100644 index 03cfe6e34..000000000 --- a/nette/doctrine/notejam/app/Presenters/UserPresenter.php +++ /dev/null @@ -1,145 +0,0 @@ -user->logout(TRUE); - $this->flashMessage("You've been logged out.", 'success'); - $this->redirect('User:signIn'); - } - - - - /** - * This method is here only for the user annotation, that creates a protected section of app. - * Meaning that if you try to access this action when you're not logged in, you'll be redirected to login form page. - * - * @User() - */ - public function actionSettings() - { - - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return \Notejam\Components\SignInControl - */ - protected function createComponentSignIn() - { - $control = $this->signInFormFactory->create(); - $control->onSuccess[] = function () { - $this->redirect('Note:'); - }; - - return $control; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return \Notejam\Components\SignUpControl - */ - protected function createComponentSignUp() - { - $control = $this->signUpFormFactory->create(); - $control->onSuccess[] = function () { - $this->flashMessage('Thank you for registration. Now you can sign in', 'success'); - $this->redirect('User:signIn'); - }; - - return $control; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return \Notejam\Components\SettingsControl - * @throws Nette\Application\BadRequestException - */ - protected function createComponentSettings() - { - if ($this->action !== 'settings') { - $this->error(); - } - - $control = $this->settingsControlFactory->create(); - $control->onSuccess[] = function () { - $this->flashMessage('The password has been changed', 'success'); - $this->redirect('Note:'); - }; - - return $control; - } - - - - /** - * Factory method for subcomponent form instance. - * This factory is called internally by Nette in the component model. - * - * @return \Notejam\Components\ForgottenPasswordControl - */ - protected function createComponentForgottenPassword() - { - $control = $this->forgottenPasswordControlFactory->create(); - $control->onSuccess[] = function () { - $this->flashMessage('New password sent to your inbox', 'success'); - $this->redirect('User:signIn'); - }; - - return $control; - } - -} diff --git a/nette/doctrine/notejam/app/Presenters/templates/@layout.latte b/nette/doctrine/notejam/app/Presenters/templates/@layout.latte deleted file mode 100644 index 8dd37f71f..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/@layout.latte +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - {ifset title}{include title|striptags}{else}Notejam{/ifset} - - - - - - - {block stylesheets} - - - - - - - - {/block} - - -
-
- -
-
-

- notejam: - {block page_title} - All notes - {/block} -

-
- {block pads} - {control padsList} - {/block} -
-
-
{$flash->message}
-
- {block body}{/block} -
- - -
- Fork me on GitHub - {block javascripts} - - {/block} - - diff --git a/nette/doctrine/notejam/app/Presenters/templates/@user.latte b/nette/doctrine/notejam/app/Presenters/templates/@user.latte deleted file mode 100644 index 2b72e3db8..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/@user.latte +++ /dev/null @@ -1,5 +0,0 @@ -{extends '@layout.latte'} - -{block content_class}sixteen columns content-area{/block} - -{block pads}{/block} diff --git a/nette/doctrine/notejam/app/Presenters/templates/Error/403.latte b/nette/doctrine/notejam/app/Presenters/templates/Error/403.latte deleted file mode 100644 index 25c24ab3c..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Error/403.latte +++ /dev/null @@ -1,7 +0,0 @@ -{block body} -

Access Denied

- -

You do not have permission to view this page. Please try contact the web -site administrator if you believe you should be able to view this page.

- -

error 403

diff --git a/nette/doctrine/notejam/app/Presenters/templates/Error/404.latte b/nette/doctrine/notejam/app/Presenters/templates/Error/404.latte deleted file mode 100644 index d0a09f2a3..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Error/404.latte +++ /dev/null @@ -1,8 +0,0 @@ -{block body} -

Page Not Found

- -

The page you requested could not be found. It is possible that the address is -incorrect, or that the page no longer exists. Please use a search engine to find -what you are looking for.

- -

error 404

diff --git a/nette/doctrine/notejam/app/Presenters/templates/Error/405.latte b/nette/doctrine/notejam/app/Presenters/templates/Error/405.latte deleted file mode 100644 index 28192d2ff..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Error/405.latte +++ /dev/null @@ -1,6 +0,0 @@ -{block body} -

Method Not Allowed

- -

The requested method is not allowed for the URL.

- -

error 405

diff --git a/nette/doctrine/notejam/app/Presenters/templates/Error/410.latte b/nette/doctrine/notejam/app/Presenters/templates/Error/410.latte deleted file mode 100644 index b81f19b68..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Error/410.latte +++ /dev/null @@ -1,6 +0,0 @@ -{block body} -

Page Not Found

- -

The page you requested has been taken off the site. We apologize for the inconvenience.

- -

error 410

diff --git a/nette/doctrine/notejam/app/Presenters/templates/Error/4xx.latte b/nette/doctrine/notejam/app/Presenters/templates/Error/4xx.latte deleted file mode 100644 index d084ed723..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Error/4xx.latte +++ /dev/null @@ -1,4 +0,0 @@ -{block body} -

Oops...

- -

Your browser sent a request that this server could not understand or process.

diff --git a/nette/doctrine/notejam/app/Presenters/templates/Error/500.phtml b/nette/doctrine/notejam/app/Presenters/templates/Error/500.phtml deleted file mode 100644 index 619611eac..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Error/500.phtml +++ /dev/null @@ -1,20 +0,0 @@ - - - -Server Error - - - -
-

Server Error

- -

We're sorry! The server encountered an internal error and - was unable to complete your request. Please try again later.

- -

error 500

-
diff --git a/nette/doctrine/notejam/app/Presenters/templates/Note/create.latte b/nette/doctrine/notejam/app/Presenters/templates/Note/create.latte deleted file mode 100644 index c43128571..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Note/create.latte +++ /dev/null @@ -1,8 +0,0 @@ -{block title}New note{/block} -{block page_title}New note{/block} - -{block body} -
- {control $form ownerrors} - {control $form body} -
diff --git a/nette/doctrine/notejam/app/Presenters/templates/Note/default.latte b/nette/doctrine/notejam/app/Presenters/templates/Note/default.latte deleted file mode 100644 index 5863a25e0..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Note/default.latte +++ /dev/null @@ -1,36 +0,0 @@ -{block title}All notes ({$notes|length}){/block} -{block page_title}All notes ({$notes|length}){/block} - -{block body} - - - - - - - - - - - -
- Note - - - Pad - Last modified - - -
{$note->name} - {if $note->pad} - {$note->pad} - {else} - No pad - {/if} - {$note->updatedAt|date:'d M. Y'}
- -{if !$iterations} -

Create your first note.

-{/if} - -New note diff --git a/nette/doctrine/notejam/app/Presenters/templates/Note/delete.latte b/nette/doctrine/notejam/app/Presenters/templates/Note/delete.latte deleted file mode 100644 index 8b552f369..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Note/delete.latte +++ /dev/null @@ -1,9 +0,0 @@ -{block title}Delete note {$note->name}{/block} -{block page_title}Delete note {$note->name}{/block} - -{block body} -
-

Are you sure you want to delete {$note->name}?

- - Cancel -
diff --git a/nette/doctrine/notejam/app/Presenters/templates/Note/detail.latte b/nette/doctrine/notejam/app/Presenters/templates/Note/detail.latte deleted file mode 100644 index 8c2409094..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Note/detail.latte +++ /dev/null @@ -1,10 +0,0 @@ -{block title}{$note->name}{/block} -{block page_title}{$note->name}{/block} - -{block body} -

Last edited at {$note->updatedAt->format('H:i')}

-
- {$note->text|escape|nl2br|noescape} -
- Edit - Delete it diff --git a/nette/doctrine/notejam/app/Presenters/templates/Note/edit.latte b/nette/doctrine/notejam/app/Presenters/templates/Note/edit.latte deleted file mode 100644 index 906bb35df..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Note/edit.latte +++ /dev/null @@ -1,8 +0,0 @@ -{block title}{$note->name}{/block} -{block page_title}{$note->name}{/block} - -{block body} -
- {control $form ownerrors} - {control $form body} -
diff --git a/nette/doctrine/notejam/app/Presenters/templates/Pad/create.latte b/nette/doctrine/notejam/app/Presenters/templates/Pad/create.latte deleted file mode 100644 index 1d446a09e..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Pad/create.latte +++ /dev/null @@ -1,5 +0,0 @@ -{block title}New pad{/block} -{block page_title}New pad{/block} - -{block body} - {control createPad-form} diff --git a/nette/doctrine/notejam/app/Presenters/templates/Pad/delete.latte b/nette/doctrine/notejam/app/Presenters/templates/Pad/delete.latte deleted file mode 100644 index 9b842beb1..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Pad/delete.latte +++ /dev/null @@ -1,9 +0,0 @@ -{block title}Delete pad {$pad->name}{/block} -{block page_title}Delete pad {$pad->name}{/block} - -{block body} -
-

Are you sure you want to delete {$pad->name}?

- - Cancel -
diff --git a/nette/doctrine/notejam/app/Presenters/templates/Pad/detail.latte b/nette/doctrine/notejam/app/Presenters/templates/Pad/detail.latte deleted file mode 100644 index b8f233d17..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Pad/detail.latte +++ /dev/null @@ -1,37 +0,0 @@ -{block title}{$pad->name} ({$notes|length} notes){/block} -{block page_title}{$pad->name} ({$notes|length}){/block} - -{block body} - - - - - - - - - - - -
- Note - - - Pad - Last modified - - -
{$note->name} - {if $note->pad} - {$note->pad} - {else} - No pad - {/if} - {$note->updatedAt|date:'d M. Y'}
- -{if !$iterations} -

Create first note in the pad

-{/if} - -New note  -Pad settings diff --git a/nette/doctrine/notejam/app/Presenters/templates/Pad/edit.latte b/nette/doctrine/notejam/app/Presenters/templates/Pad/edit.latte deleted file mode 100644 index 6448a3c4e..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/Pad/edit.latte +++ /dev/null @@ -1,6 +0,0 @@ -{block title}{$pad->name}{/block} -{block page_title}{$pad->name}{/block} - -{block body} - {control editPad-form} - Delete pad diff --git a/nette/doctrine/notejam/app/Presenters/templates/User/forgottenPassword.latte b/nette/doctrine/notejam/app/Presenters/templates/User/forgottenPassword.latte deleted file mode 100644 index e9ab4b29b..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/User/forgottenPassword.latte +++ /dev/null @@ -1,10 +0,0 @@ -{extends '../@user.latte'} - -{block title}Forgot Password?{/block} -{block page_title}Forgot Password?{/block} - -{block body} - diff --git a/nette/doctrine/notejam/app/Presenters/templates/User/settings.latte b/nette/doctrine/notejam/app/Presenters/templates/User/settings.latte deleted file mode 100644 index a33ed1173..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/User/settings.latte +++ /dev/null @@ -1,10 +0,0 @@ -{extends '../@user.latte'} - -{block title}Account Settings{/block} -{block page_title}Account Settings{/block} - -{block body} - diff --git a/nette/doctrine/notejam/app/Presenters/templates/User/signIn.latte b/nette/doctrine/notejam/app/Presenters/templates/User/signIn.latte deleted file mode 100644 index a8f4e16e7..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/User/signIn.latte +++ /dev/null @@ -1,21 +0,0 @@ -{extends '../@user.latte'} - -{block title}Sign In{/block} -{block page_title}Sign In{/block} - -{block body} - diff --git a/nette/doctrine/notejam/app/Presenters/templates/User/signUp.latte b/nette/doctrine/notejam/app/Presenters/templates/User/signUp.latte deleted file mode 100644 index 5b91bc2b9..000000000 --- a/nette/doctrine/notejam/app/Presenters/templates/User/signUp.latte +++ /dev/null @@ -1,20 +0,0 @@ -{extends '../@user.latte'} - -{block title}Sign Up{/block} -{block page_title}Sign Up{/block} - -{block body} - diff --git a/nette/doctrine/notejam/app/bootstrap.php b/nette/doctrine/notejam/app/bootstrap.php deleted file mode 100644 index 8fd851263..000000000 --- a/nette/doctrine/notejam/app/bootstrap.php +++ /dev/null @@ -1,21 +0,0 @@ -setDebugMode('23.75.345.200'); // enable for your remote IP -$configurator->enableDebugger(__DIR__ . '/../log'); - -$configurator->setTempDirectory(__DIR__ . '/../temp'); - -$configurator->createRobotLoader() - ->addDirectory(__DIR__) - ->register(); - -$configurator->addConfig(__DIR__ . '/config/config.neon'); -$configurator->addConfig(__DIR__ . '/config/config.local.neon'); - -$container = $configurator->createContainer(); - -return $container; diff --git a/nette/doctrine/notejam/app/config/config.local.example.neon b/nette/doctrine/notejam/app/config/config.local.example.neon deleted file mode 100644 index 8ef3ce85f..000000000 --- a/nette/doctrine/notejam/app/config/config.local.example.neon +++ /dev/null @@ -1,2 +0,0 @@ -# copy me to config.local.neon -parameters: diff --git a/nette/doctrine/notejam/app/config/config.neon b/nette/doctrine/notejam/app/config/config.neon deleted file mode 100644 index 63a9977a2..000000000 --- a/nette/doctrine/notejam/app/config/config.neon +++ /dev/null @@ -1,42 +0,0 @@ -# WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser! -# https://nette.org/security-warning - -parameters: - srcDir: %appDir%/../src - - -php: - date.timezone: Europe/Prague - - -extensions: - console: Kdyby\Console\DI\ConsoleExtension - events: Kdyby\Events\DI\EventsExtension - annotations: Kdyby\Annotations\DI\AnnotationsExtension - doctrine: Kdyby\Doctrine\DI\OrmExtension - doctrine2identity: Majkl578\NetteAddons\Doctrine2Identity\DI\IdentityExtension - - -application: - errorPresenter: Error - mapping: - *: Notejam\*Module\Presenters\*Presenter - - -session: - expiration: 14 days - - -doctrine: - driver: pdo_sqlite - path: %appDir%/../notejam.db - metadata: - Notejam: %srcDir%/Notejam - - -events: - debugger: off - - -includes: - - services.neon diff --git a/nette/doctrine/notejam/app/config/services.neon b/nette/doctrine/notejam/app/config/services.neon deleted file mode 100644 index 4a04010a4..000000000 --- a/nette/doctrine/notejam/app/config/services.neon +++ /dev/null @@ -1,21 +0,0 @@ -services: - router: Notejam\Http\RouterFactory::createRouter - security.authenticator: Notejam\Users\Authenticator - - latte.latteFactory: - setup: - - addFilter(length, 'Notejam\Templating\RuntimeFilters::length') - - - Notejam\UI\FormFactory - - Notejam\Components\ISignInControlFactory - - Notejam\Components\ISignUpControlFactory - - Notejam\Components\INoteControlFactory - - Notejam\Components\IPadsControlFactory - - Notejam\Components\ISettingsControlFactory - - Notejam\Components\PadsList\IPadsListControlFactory - - Notejam\Components\IForgottenPasswordControlFactory - - Notejam\Components\IConfirmationControlFactory - - - Notejam\Notes\NoteRepository - - Notejam\Pads\PadRepository - - Notejam\Users\UserRepository diff --git a/nette/doctrine/notejam/codeception.yml b/nette/doctrine/notejam/codeception.yml deleted file mode 100644 index 15019d00a..000000000 --- a/nette/doctrine/notejam/codeception.yml +++ /dev/null @@ -1,23 +0,0 @@ -actor: Tester -paths: - tests: tests - log: tests/_output - data: tests/_data - support: tests/_support - envs: tests/_envs -settings: - bootstrap: _bootstrap.php - colors: true - memory_limit: 1024M -extensions: - enabled: - - Codeception\Extension\RunFailed -modules: - config: - Db: - dsn: 'sqlite:notejam.db' - user: - password: - dump: tests/_data/dump.sql - populate: true - cleanup: true diff --git a/nette/doctrine/notejam/composer.json b/nette/doctrine/notejam/composer.json deleted file mode 100644 index 6edba100b..000000000 --- a/nette/doctrine/notejam/composer.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "nette/web-project", - "description": "Nette: Standard Web Project", - "type": "project", - "license": ["MIT", "BSD-3-Clause", "GPL-2.0", "GPL-3.0"], - "require": { - "php": ">= 5.4.0", - "nette/application": "~2.3.6", - "nette/bootstrap": "~2.3.0", - "nette/caching": "~2.3.0", - "nette/di": "~2.3.0", - "nette/finder": "~2.3.0", - "nette/forms": "~2.3.0", - "nette/http": "~2.3.0", - "nette/mail": "~2.3.0", - "nette/robot-loader": "~2.3.0", - "nette/safe-stream": "~2.3.0", - "nette/security": "~2.3.0", - "nette/utils": "~2.3.0", - "latte/latte": "~2.3.0", - "tracy/tracy": "~2.3.0", - "nextras/static-router": "^1.0", - "kdyby/doctrine": "^3.0", - "majkl578/nette-identity-doctrine": "~2.3@rc" - }, - "autoload": { - "classmap": [ - "app/", - "src/Notejam/exceptions.php" - ], - "psr-4": { - "Notejam\\": "src/Notejam" - } - }, - "require-dev": { - "nette/tester": "~1.4", - "codeception/codeception": "^2.0" - } -} diff --git a/nette/doctrine/notejam/composer.lock b/nette/doctrine/notejam/composer.lock deleted file mode 100644 index 42880c42d..000000000 --- a/nette/doctrine/notejam/composer.lock +++ /dev/null @@ -1,3754 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "99a26131a249a67fdc54e59ec1add7b2", - "content-hash": "bb5d12a2b59bf82f1fd5ad6e2252efce", - "packages": [ - { - "name": "doctrine/annotations", - "version": "v1.2.7", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", - "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "php": ">=5.3.2" - }, - "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "4.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Annotations\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "time": "2015-08-31 12:32:49" - }, - { - "name": "doctrine/cache", - "version": "v1.5.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "2b9cec5a5e722010cbebc91713d4c11eaa064d5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/2b9cec5a5e722010cbebc91713d4c11eaa064d5e", - "reference": "2b9cec5a5e722010cbebc91713d4c11eaa064d5e", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "phpunit/phpunit": ">=3.7", - "predis/predis": "~1.0", - "satooshi/php-coveralls": "~0.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "cache", - "caching" - ], - "time": "2015-11-02 18:35:48" - }, - { - "name": "doctrine/collections", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", - "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Collections\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Collections Abstraction library", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "array", - "collections", - "iterator" - ], - "time": "2015-04-14 22:21:58" - }, - { - "name": "doctrine/common", - "version": "v2.5.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "0009b8f0d4a917aabc971fb089eba80e872f83f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/0009b8f0d4a917aabc971fb089eba80e872f83f9", - "reference": "0009b8f0d4a917aabc971fb089eba80e872f83f9", - "shasum": "" - }, - "require": { - "doctrine/annotations": "1.*", - "doctrine/cache": "1.*", - "doctrine/collections": "1.*", - "doctrine/inflector": "1.*", - "doctrine/lexer": "1.*", - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~3.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" - ], - "time": "2015-08-31 13:00:22" - }, - { - "name": "doctrine/dbal", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "01dbcbc5cd0a913d751418e635434a18a2f2a75c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/01dbcbc5cd0a913d751418e635434a18a2f2a75c", - "reference": "01dbcbc5cd0a913d751418e635434a18a2f2a75c", - "shasum": "" - }, - "require": { - "doctrine/common": ">=2.4,<2.6-dev", - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "symfony/console": "2.*" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\DBAL\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Database Abstraction Layer", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "dbal", - "persistence", - "queryobject" - ], - "time": "2015-09-16 16:29:33" - }, - { - "name": "doctrine/inflector", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "4.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" - ], - "time": "2015-11-06 14:35:42" - }, - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14 21:17:01" - }, - { - "name": "doctrine/lexer", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "lexer", - "parser" - ], - "time": "2014-09-09 13:34:57" - }, - { - "name": "doctrine/orm", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/doctrine2.git", - "reference": "464b5fdbfbbeb4a65465ac173c4c5d90960f41ff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/464b5fdbfbbeb4a65465ac173c4c5d90960f41ff", - "reference": "464b5fdbfbbeb4a65465ac173c4c5d90960f41ff", - "shasum": "" - }, - "require": { - "doctrine/cache": "~1.4", - "doctrine/collections": "~1.2", - "doctrine/common": ">=2.5-dev,<2.6-dev", - "doctrine/dbal": ">=2.5-dev,<2.6-dev", - "doctrine/instantiator": "~1.0.1", - "ext-pdo": "*", - "php": ">=5.4", - "symfony/console": "~2.5|~3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "symfony/yaml": "~2.3|~3.0" - }, - "suggest": { - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" - }, - "bin": [ - "bin/doctrine", - "bin/doctrine.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\ORM\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Object-Relational-Mapper for PHP", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "orm" - ], - "time": "2015-11-23 12:44:25" - }, - { - "name": "kdyby/annotations", - "version": "v2.3.0", - "source": { - "type": "git", - "url": "https://github.com/Kdyby/Annotations.git", - "reference": "36cb90e8a28c1f9a23a5c351af2449139c21229d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Kdyby/Annotations/zipball/36cb90e8a28c1f9a23a5c351af2449139c21229d", - "reference": "36cb90e8a28c1f9a23a5c351af2449139c21229d", - "shasum": "" - }, - "require": { - "doctrine/annotations": "~1.2", - "kdyby/doctrine-cache": "~2.4@dev", - "nette/di": "~2.3@dev", - "nette/utils": "~2.3@dev" - }, - "conflict": { - "kdyby/doctrine": "0.9.*" - }, - "require-dev": { - "latte/latte": "~2.3@dev", - "nette/application": "~2.3@dev", - "nette/bootstrap": "~2.3@dev", - "nette/caching": "~2.3@dev", - "nette/component-model": "~2.2@dev", - "nette/database": "~2.3@dev", - "nette/deprecated": "~2.3@dev", - "nette/di": "~2.3@dev", - "nette/finder": "~2.3@dev", - "nette/forms": "~2.3@dev", - "nette/http": "~2.3@dev", - "nette/mail": "~2.3@dev", - "nette/neon": "~2.3@dev", - "nette/php-generator": "~2.3@dev", - "nette/reflection": "~2.3@dev", - "nette/robot-loader": "~2.3@dev", - "nette/safe-stream": "~2.3@dev", - "nette/security": "~2.3@dev", - "nette/tester": "~1.3@rc", - "nette/tokenizer": "~2.2@dev", - "nette/utils": "~2.3@dev", - "tracy/tracy": "~2.3@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-0": { - "Kdyby\\Annotations\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "Filip Procházka", - "email": "filip@prochazka.su", - "homepage": "http://filip-prochazka.com" - }, - { - "name": "Jáchym TouÅ¡ek", - "email": "enumag@gmail.com", - "homepage": "http://enumag.cz" - } - ], - "description": "Doctrine Annotations integration into Nette Framework", - "homepage": "http://kdyby.org", - "keywords": [ - "annotations", - "doctrine", - "kdyby", - "nette" - ], - "time": "2015-10-30 21:04:27" - }, - { - "name": "kdyby/console", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/Kdyby/Console.git", - "reference": "50e9f6ce4db18628d01724d5085d8056056eb9cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Kdyby/Console/zipball/50e9f6ce4db18628d01724d5085d8056056eb9cb", - "reference": "50e9f6ce4db18628d01724d5085d8056056eb9cb", - "shasum": "" - }, - "require": { - "nette/application": "~2.3@dev", - "nette/di": "~2.3@dev", - "nette/http": "~2.3@dev", - "symfony/console": "~2.3" - }, - "require-dev": { - "kdyby/events": "~2.4@dev", - "latte/latte": "~2.3@dev", - "nette/application": "~2.3@dev", - "nette/bootstrap": "~2.3@dev", - "nette/caching": "~2.3@dev", - "nette/component-model": "~2.2@dev", - "nette/database": "~2.3@dev", - "nette/deprecated": "~2.3@dev", - "nette/di": "~2.3@dev", - "nette/finder": "~2.3@dev", - "nette/forms": "~2.3@dev", - "nette/http": "~2.3@dev", - "nette/mail": "~2.3@dev", - "nette/neon": "~2.3@dev", - "nette/php-generator": "~2.3@dev", - "nette/reflection": "~2.3@dev", - "nette/robot-loader": "~2.3@dev", - "nette/safe-stream": "~2.3@dev", - "nette/security": "~2.3@dev", - "nette/tester": "~1.6@rc", - "nette/tokenizer": "~2.2@dev", - "nette/utils": "~2.3@dev", - "symfony/event-dispatcher": "~2.3", - "tracy/tracy": "~2.3@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Kdyby\\Console\\": "src/" - }, - "classmap": [ - "src/Kdyby/Console/CliPresenter.php", - "src/Kdyby/Console/exceptions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "Filip Procházka", - "email": "filip@prochazka.su", - "homepage": "http://filip-prochazka.com" - } - ], - "description": "Symfony Console integration for Kdyby components", - "homepage": "http://kdyby.org", - "keywords": [ - "console", - "kdyby", - "nette" - ], - "time": "2015-10-30 21:57:23" - }, - { - "name": "kdyby/doctrine", - "version": "v3.0.1", - "source": { - "type": "git", - "url": "https://github.com/Kdyby/Doctrine.git", - "reference": "69c63fe943d1fade98d8879a9e3aa8fc9e7b5c4b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Kdyby/Doctrine/zipball/69c63fe943d1fade98d8879a9e3aa8fc9e7b5c4b", - "reference": "69c63fe943d1fade98d8879a9e3aa8fc9e7b5c4b", - "shasum": "" - }, - "require": { - "doctrine/dbal": "~2.5", - "doctrine/orm": "~2.5", - "kdyby/annotations": "~2.3@dev", - "kdyby/console": "~2.5@dev", - "kdyby/doctrine-cache": "~2.5@dev", - "kdyby/events": "~3.0@dev", - "nette/di": "~2.3@dev", - "nette/neon": "~2.3@dev", - "nette/robot-loader": "~2.3@dev", - "nette/utils": "~2.3@dev" - }, - "require-dev": { - "dg/dibi": "~2.0", - "latte/latte": "~2.3@dev", - "nette/application": "~2.3@dev", - "nette/bootstrap": "~2.3@dev", - "nette/caching": "~2.3@dev", - "nette/component-model": "~2.2@dev", - "nette/database": "~2.3@dev", - "nette/deprecated": "~2.2@dev", - "nette/di": "~2.3@dev", - "nette/finder": "~2.3@dev", - "nette/forms": "~2.3@dev", - "nette/http": "~2.3@dev", - "nette/mail": "~2.3@dev", - "nette/neon": "~2.3@dev", - "nette/php-generator": "~2.3@dev", - "nette/reflection": "~2.3@dev", - "nette/robot-loader": "~2.3@dev", - "nette/safe-stream": "~2.3@dev", - "nette/security": "~2.3@dev", - "nette/tester": "~1.3@rc", - "nette/tokenizer": "~2.2@dev", - "nette/utils": "~2.3@dev", - "tracy/tracy": "~2.3@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-0": { - "Kdyby\\Doctrine\\": "src/", - "Kdyby\\Persistence\\": "src/", - "Kdyby\\DibiBridge\\": "src/" - }, - "classmap": [ - "src/Kdyby/Doctrine/exceptions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "Filip Procházka", - "email": "filip@prochazka.su", - "homepage": "http://filip-prochazka.com" - } - ], - "description": "Doctrine integration into Nette Framework", - "homepage": "http://kdyby.org", - "keywords": [ - "dbal", - "doctrine", - "kdyby", - "nette", - "orm" - ], - "time": "2015-11-14 14:11:04" - }, - { - "name": "kdyby/doctrine-cache", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/Kdyby/DoctrineCache.git", - "reference": "01a55db5ab0e0892c77a7f6fa9ea0022dabb9440" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Kdyby/DoctrineCache/zipball/01a55db5ab0e0892c77a7f6fa9ea0022dabb9440", - "reference": "01a55db5ab0e0892c77a7f6fa9ea0022dabb9440", - "shasum": "" - }, - "require": { - "doctrine/cache": "~1.5", - "nette/caching": "~2.3@dev", - "nette/di": "~2.3@dev", - "php": ">=5.4" - }, - "require-dev": { - "latte/latte": "~2.3@dev", - "nette/application": "~2.3@dev", - "nette/bootstrap": "~2.3@dev", - "nette/caching": "~2.3@dev", - "nette/component-model": "~2.2@dev", - "nette/database": "~2.3@dev", - "nette/deprecated": "~2.3@dev", - "nette/di": "~2.3@dev", - "nette/finder": "~2.3@dev", - "nette/forms": "~2.3@dev", - "nette/http": "~2.3@dev", - "nette/mail": "~2.3@dev", - "nette/neon": "~2.3@dev", - "nette/php-generator": "~2.3@dev", - "nette/reflection": "~2.3@dev", - "nette/robot-loader": "~2.3@dev", - "nette/safe-stream": "~2.3@dev", - "nette/security": "~2.3@dev", - "nette/tester": "~1.3@rc", - "nette/tokenizer": "~2.2@dev", - "nette/utils": "~2.3@dev", - "tracy/tracy": "~2.3@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Kdyby\\DoctrineCache\\": "src/" - }, - "classmap": [ - "src/Kdyby/DoctrineCache/exceptions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "Filip Procházka", - "email": "filip@prochazka.su", - "homepage": "http://filip-prochazka.com" - } - ], - "description": "Doctrine Cache bridge for Nette Framework", - "homepage": "http://kdyby.org", - "keywords": [ - "cache", - "doctrine", - "kdyby", - "nette" - ], - "time": "2015-10-30 20:54:56" - }, - { - "name": "kdyby/events", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/Kdyby/Events.git", - "reference": "fc82cd11e3415bb3c30d661948ab6279c40caa04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Kdyby/Events/zipball/fc82cd11e3415bb3c30d661948ab6279c40caa04", - "reference": "fc82cd11e3415bb3c30d661948ab6279c40caa04", - "shasum": "" - }, - "require": { - "nette/di": "~2.3@dev", - "nette/utils": "~2.3@dev" - }, - "require-dev": { - "latte/latte": "~2.3@dev", - "nette/application": "~2.3@dev", - "nette/bootstrap": "~2.3@dev", - "nette/caching": "~2.3@dev", - "nette/component-model": "~2.2@dev", - "nette/database": "~2.3@dev", - "nette/deprecated": "~2.3@dev", - "nette/di": "~2.3@dev", - "nette/finder": "~2.3@dev", - "nette/forms": "~2.3@dev", - "nette/http": "~2.3@dev", - "nette/mail": "~2.3@dev", - "nette/neon": "~2.3@dev", - "nette/php-generator": "~2.3@dev", - "nette/reflection": "~2.3@dev", - "nette/robot-loader": "~2.3@dev", - "nette/safe-stream": "~2.3@dev", - "nette/security": "~2.3@dev", - "nette/tester": "~1.4", - "nette/tokenizer": "~2.2@dev", - "nette/utils": "~2.3@dev", - "symfony/event-dispatcher": "~2.3", - "tracy/tracy": "~2.3@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Kdyby\\Events\\": "src/" - }, - "classmap": [ - "src/Kdyby/Events/exceptions.php" - ], - "files": [ - "src/Doctrine/compatibility.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "Filip Procházka", - "email": "filip@prochazka.su", - "homepage": "http://filip-prochazka.com" - } - ], - "description": "Events for Nette Framework", - "homepage": "http://kdyby.org", - "keywords": [ - "kdyby", - "nette" - ], - "time": "2015-10-30 18:00:28" - }, - { - "name": "latte/latte", - "version": "v2.3.7", - "source": { - "type": "git", - "url": "https://github.com/nette/latte.git", - "reference": "b6e090e461c9cd88d60ae79a7713990b17b1531c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/latte/zipball/b6e090e461c9cd88d60ae79a7713990b17b1531c", - "reference": "b6e090e461c9cd88d60ae79a7713990b17b1531c", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.1" - }, - "require-dev": { - "nette/tester": "~1.3" - }, - "suggest": { - "ext-fileinfo": "to use filter |datastream", - "ext-mbstring": "to use filters like lower, upper, capitalize, ..." - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Latte: the amazing template engine for PHP", - "homepage": "https://latte.nette.org", - "keywords": [ - "templating", - "twig" - ], - "time": "2015-11-07 22:54:05" - }, - { - "name": "majkl578/nette-identity-doctrine", - "version": "v2.3-rc1", - "source": { - "type": "git", - "url": "https://github.com/Majkl578/nette-identity-doctrine.git", - "reference": "6d78821908dcf06e276b34eae7a3123d9fe1fb3a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Majkl578/nette-identity-doctrine/zipball/6d78821908dcf06e276b34eae7a3123d9fe1fb3a", - "reference": "6d78821908dcf06e276b34eae7a3123d9fe1fb3a", - "shasum": "" - }, - "require": { - "doctrine/orm": "~2.3", - "nette/di": "~2.2", - "nette/http": "~2.2", - "nette/security": "~2.2", - "php": ">=5.3.2" - }, - "require-dev": { - "kdyby/doctrine": "~2.0", - "nette/bootstrap": "~2.2", - "phpunit/phpunit": "~4.8", - "tracy/tracy": "~2.2" - }, - "type": "nette-addon", - "autoload": { - "psr-4": { - "Majkl578\\NetteAddons\\Doctrine2Identity\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Moravec" - } - ], - "description": "Integration of entities implementing IIdentity in Nette 2", - "keywords": [ - "Authentication", - "doctrine", - "identity", - "nette", - "orm", - "security" - ], - "time": "2015-11-27 13:47:40" - }, - { - "name": "nette/application", - "version": "v2.3.7", - "source": { - "type": "git", - "url": "https://github.com/nette/application.git", - "reference": "8e87ae81c2098abd7895bfd96d9fac1cd332abc3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/application/zipball/8e87ae81c2098abd7895bfd96d9fac1cd332abc3", - "reference": "8e87ae81c2098abd7895bfd96d9fac1cd332abc3", - "shasum": "" - }, - "require": { - "nette/component-model": "~2.2", - "nette/http": "~2.2", - "nette/reflection": "~2.2", - "nette/security": "~2.2", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "~2.3.0", - "nette/di": "~2.3", - "nette/forms": "~2.2", - "nette/robot-loader": "~2.2", - "nette/tester": "~1.3" - }, - "suggest": { - "latte/latte": "Allows using Latte in templates", - "nette/forms": "Allows to use Nette\\Application\\UI\\Form" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Application MVC Component", - "homepage": "https://nette.org", - "time": "2015-10-13 14:33:28" - }, - { - "name": "nette/bootstrap", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/bootstrap.git", - "reference": "8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/bootstrap/zipball/8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e", - "reference": "8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e", - "shasum": "" - }, - "require": { - "nette/di": "~2.3", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "~2.2", - "nette/application": "~2.3", - "nette/caching": "~2.3", - "nette/database": "~2.3", - "nette/forms": "~2.3", - "nette/http": "~2.3", - "nette/mail": "~2.3", - "nette/robot-loader": "~2.2", - "nette/safe-stream": "~2.2", - "nette/security": "~2.3", - "nette/tester": "~1.3", - "tracy/tracy": "~2.3" - }, - "suggest": { - "nette/robot-loader": "to use Configurator::createRobotLoader()", - "tracy/tracy": "to use Configurator::enableDebugger()" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Bootstrap", - "homepage": "http://nette.org", - "time": "2015-07-11 21:07:11" - }, - { - "name": "nette/caching", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "d4be13806d70c02d53b72cc63e93de6cf813f50f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/d4be13806d70c02d53b72cc63e93de6cf813f50f", - "reference": "d4be13806d70c02d53b72cc63e93de6cf813f50f", - "shasum": "" - }, - "require": { - "nette/finder": "~2.2", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "~2.3.0", - "nette/di": "~2.3", - "nette/tester": "~1.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Caching Component", - "homepage": "http://nette.org", - "time": "2015-07-11 21:09:42" - }, - { - "name": "nette/component-model", - "version": "v2.2.4", - "source": { - "type": "git", - "url": "https://github.com/nette/component-model.git", - "reference": "07bce436051fd92d084642ce7a47f00045e0d1e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/component-model/zipball/07bce436051fd92d084642ce7a47f00045e0d1e5", - "reference": "07bce436051fd92d084642ce7a47f00045e0d1e5", - "shasum": "" - }, - "require": { - "nette/utils": "^2.3.5", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Component Model", - "homepage": "https://nette.org", - "time": "2015-10-06 17:54:05" - }, - { - "name": "nette/di", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/nette/di.git", - "reference": "efa1d13f016b58b4a9200802c9c5b14d10d72e85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/di/zipball/efa1d13f016b58b4a9200802c9c5b14d10d72e85", - "reference": "efa1d13f016b58b4a9200802c9c5b14d10d72e85", - "shasum": "" - }, - "require": { - "nette/neon": "^2.3.3", - "nette/php-generator": "^2.3.3", - "nette/utils": "~2.3", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Dependency Injection Component", - "homepage": "http://nette.org", - "time": "2015-09-14 18:18:24" - }, - { - "name": "nette/finder", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "38f803a03f4cddf352e28af70294c71f7026e516" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/38f803a03f4cddf352e28af70294c71f7026e516", - "reference": "38f803a03f4cddf352e28af70294c71f7026e516", - "shasum": "" - }, - "require": { - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Finder: Files Searching", - "homepage": "http://nette.org", - "time": "2015-07-11 21:13:50" - }, - { - "name": "nette/forms", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/nette/forms.git", - "reference": "5e07a7b7180e5e88db9d44e12f1677e36b4f164b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/forms/zipball/5e07a7b7180e5e88db9d44e12f1677e36b4f164b", - "reference": "5e07a7b7180e5e88db9d44e12f1677e36b4f164b", - "shasum": "" - }, - "require": { - "nette/component-model": "~2.2", - "nette/http": "~2.2", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "~2.3.2", - "nette/di": "~2.3", - "nette/tester": "~1.3", - "tracy/tracy": "~2.2" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Forms: greatly facilitates web forms", - "homepage": "https://nette.org", - "time": "2015-10-19 01:41:55" - }, - { - "name": "nette/http", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/http.git", - "reference": "ff2e4608391bca2444df9af6eaf8666ac853eb02" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/http/zipball/ff2e4608391bca2444df9af6eaf8666ac853eb02", - "reference": "ff2e4608391bca2444df9af6eaf8666ac853eb02", - "shasum": "" - }, - "require": { - "nette/utils": "~2.2, >=2.2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/tester": "~1.4" - }, - "suggest": { - "ext-fileinfo": "to detect type of uploaded files" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette HTTP Component", - "homepage": "http://nette.org", - "time": "2015-07-19 16:17:50" - }, - { - "name": "nette/mail", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/mail.git", - "reference": "4ea303d96c6a80ffe357baf59d387f4fe2cfd412" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/mail/zipball/4ea303d96c6a80ffe357baf59d387f4fe2cfd412", - "reference": "4ea303d96c6a80ffe357baf59d387f4fe2cfd412", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/tester": "~1.3" - }, - "suggest": { - "ext-fileinfo": "to detect type of attached files" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Mail: Sending E-mails", - "homepage": "https://nette.org", - "time": "2015-10-05 12:58:01" - }, - { - "name": "nette/neon", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/neon.git", - "reference": "12bbb0e85ba8521dd291f4df0fe20a1b79aae32c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/neon/zipball/12bbb0e85ba8521dd291f4df0fe20a1b79aae32c", - "reference": "12bbb0e85ba8521dd291f4df0fe20a1b79aae32c", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=5.3.1" - }, - "require-dev": { - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette NEON: parser & generator for Nette Object Notation", - "homepage": "http://ne-on.org", - "time": "2015-08-22 15:23:30" - }, - { - "name": "nette/php-generator", - "version": "v2.3.4", - "source": { - "type": "git", - "url": "https://github.com/nette/php-generator.git", - "reference": "846028e9d885d2d8ec60823d995e1291bbe3eb69" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/846028e9d885d2d8ec60823d995e1291bbe3eb69", - "reference": "846028e9d885d2d8ec60823d995e1291bbe3eb69", - "shasum": "" - }, - "require": { - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette PHP Generator", - "homepage": "https://nette.org", - "time": "2015-10-09 14:34:13" - }, - { - "name": "nette/reflection", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/reflection.git", - "reference": "9c2ed2a29f1f58125a0f19ffc987812d6b17d3e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/reflection/zipball/9c2ed2a29f1f58125a0f19ffc987812d6b17d3e6", - "reference": "9c2ed2a29f1f58125a0f19ffc987812d6b17d3e6", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "nette/caching": "~2.2", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette PHP Reflection Component", - "homepage": "http://nette.org", - "time": "2015-07-11 21:34:53" - }, - { - "name": "nette/robot-loader", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/robot-loader.git", - "reference": "69331d359bbc9e5f911c12b82187cac914d983fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/robot-loader/zipball/69331d359bbc9e5f911c12b82187cac914d983fb", - "reference": "69331d359bbc9e5f911c12b82187cac914d983fb", - "shasum": "" - }, - "require": { - "nette/caching": "~2.2", - "nette/finder": "~2.3", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette RobotLoader: comfortable autoloading", - "homepage": "http://nette.org", - "time": "2015-07-11 21:20:57" - }, - { - "name": "nette/safe-stream", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/safe-stream.git", - "reference": "bf30db367b51a0932c44dcb9a378927644d48b2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/safe-stream/zipball/bf30db367b51a0932c44dcb9a378927644d48b2e", - "reference": "bf30db367b51a0932c44dcb9a378927644d48b2e", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "files": [ - "src/loader.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette SafeStream: Atomic Operations", - "homepage": "http://nette.org", - "time": "2015-07-11 20:59:15" - }, - { - "name": "nette/security", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/security.git", - "reference": "744264a42b506d63009d7e3853ed72b04c99e964" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/security/zipball/744264a42b506d63009d7e3853ed72b04c99e964", - "reference": "744264a42b506d63009d7e3853ed72b04c99e964", - "shasum": "" - }, - "require": { - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/http": "~2.3", - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Security: Access Control Component", - "homepage": "http://nette.org", - "time": "2015-07-11 21:22:53" - }, - { - "name": "nette/utils", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "c9dfaec788eb65d5ef10cefed0ae63bc76febaa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/c9dfaec788eb65d5ef10cefed0ae63bc76febaa8", - "reference": "c9dfaec788eb65d5ef10cefed0ae63bc76febaa8", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.0" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", - "ext-mbstring": "to use Strings::lower() etc..." - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Utility Classes", - "homepage": "https://nette.org", - "time": "2015-10-05 12:18:24" - }, - { - "name": "nextras/static-router", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/nextras/static-router.git", - "reference": "cf4155820b9f2d2cb98705ce5538feb22226e8cc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nextras/static-router/zipball/cf4155820b9f2d2cb98705ce5538feb22226e8cc", - "reference": "cf4155820b9f2d2cb98705ce5538feb22226e8cc", - "shasum": "" - }, - "require": { - "nette/application": "~2.2", - "php": ">=5.3" - }, - "require-dev": { - "nette/tester": "~1.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Nextras\\Routing\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nextras Community", - "homepage": "https://github.com/nextras/static-router/graphs/contributors" - } - ], - "description": "Simple static router for Nette Framework", - "homepage": "https://github.com/nextras/static-router", - "keywords": [ - "nette", - "nextras", - "router" - ], - "time": "2015-06-13 09:05:20" - }, - { - "name": "symfony/console", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "16bb1cb86df43c90931df65f529e7ebd79636750" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/16bb1cb86df43c90931df65f529e7ebd79636750", - "reference": "16bb1cb86df43c90931df65f529e7ebd79636750", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1", - "symfony/process": "~2.1" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2015-11-18 09:54:26" - }, - { - "name": "tracy/tracy", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/nette/tracy.git", - "reference": "79831c75b6f48fcb897d25ccae5deec358cb2142" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/tracy/zipball/79831c75b6f48fcb897d25ccae5deec358cb2142", - "reference": "79831c75b6f48fcb897d25ccae5deec358cb2142", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/tester": "~1.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ], - "files": [ - "src/shortcuts.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Tracy: useful PHP debugger", - "homepage": "https://tracy.nette.org", - "keywords": [ - "debug", - "debugger", - "nette" - ], - "time": "2015-10-28 23:49:21" - } - ], - "packages-dev": [ - { - "name": "codeception/codeception", - "version": "2.1.4", - "source": { - "type": "git", - "url": "https://github.com/Codeception/Codeception.git", - "reference": "6a812e8a0d1b1db939a29b4dc14cb398b21b6112" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/6a812e8a0d1b1db939a29b4dc14cb398b21b6112", - "reference": "6a812e8a0d1b1db939a29b4dc14cb398b21b6112", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "facebook/webdriver": ">=1.0.1", - "guzzlehttp/guzzle": ">=4.1.4 <7.0", - "guzzlehttp/psr7": "~1.0", - "php": ">=5.4.0", - "phpunit/phpunit": "~4.8.0", - "symfony/browser-kit": "~2.4", - "symfony/console": "~2.4", - "symfony/css-selector": "~2.4", - "symfony/dom-crawler": "~2.4,!=2.4.5", - "symfony/event-dispatcher": "~2.4", - "symfony/finder": "~2.4", - "symfony/yaml": "~2.4" - }, - "require-dev": { - "codeception/specify": "~0.3", - "facebook/php-sdk-v4": "~4.0", - "flow/jsonpath": "~0.2", - "monolog/monolog": "~1.8", - "pda/pheanstalk": "~2.0", - "videlalvaro/php-amqplib": "~2.4" - }, - "suggest": { - "codeception/phpbuiltinserver": "Extension to start and stop PHP built-in web server for your tests", - "codeception/specify": "BDD-style code blocks", - "codeception/verify": "BDD-style assertions", - "monolog/monolog": "Log test steps", - "phpseclib/phpseclib": "Extension required to use the SFTP option in the FTP Module." - }, - "bin": [ - "codecept" - ], - "type": "library", - "extra": { - "branch-alias": [] - }, - "autoload": { - "psr-4": { - "Codeception\\": "src\\Codeception", - "Codeception\\Extension\\": "ext" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" - } - ], - "description": "BDD-style testing framework", - "homepage": "http://codeception.com/", - "keywords": [ - "BDD", - "TDD", - "acceptance testing", - "functional testing", - "unit testing" - ], - "time": "2015-11-12 03:57:06" - }, - { - "name": "facebook/webdriver", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "a6e209a309bf7cd71acf15476f40b11a25d5a79d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/a6e209a309bf7cd71acf15476f40b11a25d5a79d", - "reference": "a6e209a309bf7cd71acf15476f40b11a25d5a79d", - "shasum": "" - }, - "require": { - "php": ">=5.3.19" - }, - "require-dev": { - "phpunit/phpunit": "4.6.*" - }, - "suggest": { - "phpdocumentor/phpdocumentor": "2.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "A PHP client for WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" - ], - "time": "2015-11-03 22:17:22" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.1.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "c6851d6e48f63b69357cbfa55bca116448140e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/c6851d6e48f63b69357cbfa55bca116448140e0c", - "reference": "c6851d6e48f63b69357cbfa55bca116448140e0c", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "~1.0", - "guzzlehttp/psr7": "~1.1", - "php": ">=5.5.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "~4.0", - "psr/log": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.1-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2015-11-23 00:47:50" - }, - { - "name": "guzzlehttp/promises", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2015-10-15 22:28:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "4d0bdbe1206df7440219ce14c972aa57cc5e4982" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/4d0bdbe1206df7440219ce14c972aa57cc5e4982", - "reference": "4d0bdbe1206df7440219ce14c972aa57cc5e4982", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "PSR-7 message implementation", - "keywords": [ - "http", - "message", - "stream", - "uri" - ], - "time": "2015-11-03 01:34:55" - }, - { - "name": "nette/tester", - "version": "v1.6.1", - "source": { - "type": "git", - "url": "https://github.com/nette/tester.git", - "reference": "b0f312e7ab9a70bbd5c92568e2a20dd46be9a529" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/tester/zipball/b0f312e7ab9a70bbd5c92568e2a20dd46be9a529", - "reference": "b0f312e7ab9a70bbd5c92568e2a20dd46be9a529", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "bin": [ - "src/tester" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "An easy-to-use PHP unit testing framework.", - "homepage": "https://tester.nette.org", - "keywords": [ - "nette", - "testing", - "unit" - ], - "time": "2015-10-26 05:38:30" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2015-02-03 12:10:50" - }, - { - "name": "phpspec/prophecy", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7", - "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1" - }, - "require-dev": { - "phpspec/phpspec": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2015-08-13 10:07:40" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-10-06 15:47:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2015-06-21 13:08:43" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21 13:50:34" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2015-06-21 08:01:12" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-09-15 10:49:45" - }, - { - "name": "phpunit/phpunit", - "version": "4.8.18", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fa33d4ad96481b91df343d83e8c8aabed6b1dfd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fa33d4ad96481b91df343d83e8c8aabed6b1dfd3", - "reference": "fa33d4ad96481b91df343d83e8c8aabed6b1dfd3", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "~2.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": ">=1.0.6", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "~1.3", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.1|~3.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.8.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2015-11-11 11:32:49" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-10-02 06:51:40" - }, - { - "name": "psr/http-message", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2015-05-04 20:22:00" - }, - { - "name": "sebastian/comparator", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-07-26 15:48:44" - }, - { - "name": "sebastian/diff", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "http://www.github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-02-22 15:13:53" - }, - { - "name": "sebastian/environment", - "version": "1.3.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44", - "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2015-08-03 06:14:51" - }, - { - "name": "sebastian/exporter", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2015-06-21 07:55:53" - }, - { - "name": "sebastian/global-state", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2015-10-12 03:26:01" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "994d4a811bafe801fb06dccbee797863ba2792ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba", - "reference": "994d4a811bafe801fb06dccbee797863ba2792ba", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-06-21 08:04:50" - }, - { - "name": "sebastian/version", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" - }, - { - "name": "symfony/browser-kit", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/browser-kit.git", - "reference": "bd28847ea2193916074c7b11d4fdd78570049694" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/bd28847ea2193916074c7b11d4fdd78570049694", - "reference": "bd28847ea2193916074c7b11d4fdd78570049694", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/dom-crawler": "~2.0,>=2.0.5" - }, - "require-dev": { - "symfony/css-selector": "~2.0,>=2.0.5", - "symfony/process": "~2.3.34|~2.7,>=2.7.6" - }, - "suggest": { - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\BrowserKit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony BrowserKit Component", - "homepage": "https://symfony.com", - "time": "2015-11-02 20:20:53" - }, - { - "name": "symfony/css-selector", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "abb47717fb88aebd9437da2fc8bb01a50a36679f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/abb47717fb88aebd9437da2fc8bb01a50a36679f", - "reference": "abb47717fb88aebd9437da2fc8bb01a50a36679f", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com", - "time": "2015-10-30 20:10:21" - }, - { - "name": "symfony/dom-crawler", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "b33593cbfe1d81b50d48353f338aca76a08658d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b33593cbfe1d81b50d48353f338aca76a08658d8", - "reference": "b33593cbfe1d81b50d48353f338aca76a08658d8", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "symfony/css-selector": "~2.3" - }, - "suggest": { - "symfony/css-selector": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2015-11-02 20:20:53" - }, - { - "name": "symfony/event-dispatcher", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "7e2f9c31645680026c2372edf66f863fc7757af5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7e2f9c31645680026c2372edf66f863fc7757af5", - "reference": "7e2f9c31645680026c2372edf66f863fc7757af5", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.0,>=2.0.5", - "symfony/dependency-injection": "~2.6", - "symfony/expression-language": "~2.6", - "symfony/stopwatch": "~2.3" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2015-10-30 20:10:21" - }, - { - "name": "symfony/finder", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "a06a0c0ff7db3736a50d530c908cca547bf13da9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a06a0c0ff7db3736a50d530c908cca547bf13da9", - "reference": "a06a0c0ff7db3736a50d530c908cca547bf13da9", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2015-10-30 20:10:21" - }, - { - "name": "symfony/yaml", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "4cfcd7a9fceba662b3c036b7d9a91f6197af046c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4cfcd7a9fceba662b3c036b7d9a91f6197af046c", - "reference": "4cfcd7a9fceba662b3c036b7d9a91f6197af046c", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-11-18 13:41:01" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "majkl578/nette-identity-doctrine": 5 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">= 5.4.0" - }, - "platform-dev": [] -} diff --git a/nette/doctrine/notejam/log/.gitignore b/nette/doctrine/notejam/log/.gitignore deleted file mode 100644 index d6b7ef32c..000000000 --- a/nette/doctrine/notejam/log/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/nette/doctrine/notejam/src/Notejam/Http/RouterFactory.php b/nette/doctrine/notejam/src/Notejam/Http/RouterFactory.php deleted file mode 100644 index d3a6d7584..000000000 --- a/nette/doctrine/notejam/src/Notejam/Http/RouterFactory.php +++ /dev/null @@ -1,40 +0,0 @@ - 'signup', - 'User:signIn' => 'signin', - 'User:signOut' => 'signout', - 'User:forgottenPassword' => 'forgot-password', - 'User:settings' => 'settings', - ]); - - $router[] = new Route('pads/[/]', 'Pad:detail'); - $router[] = new Route('pads[/]', 'Pad:default'); - - $router[] = new Route('notes/[/]', 'Note:detail'); - $router[] = new Route('notes[/]', 'Note:'); - $router[] = new Route('[/]', 'Note:default'); - - return $router; - } - -} diff --git a/nette/doctrine/notejam/src/Notejam/Notes/Note.php b/nette/doctrine/notejam/src/Notejam/Notes/Note.php deleted file mode 100644 index 15f73eb96..000000000 --- a/nette/doctrine/notejam/src/Notejam/Notes/Note.php +++ /dev/null @@ -1,168 +0,0 @@ -user = $user; - } - - - - /** - * @param string $name - * @return Note - */ - public function setName($name) - { - $this->name = $name; - return $this; - } - - - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - - - /** - * @param string $text - * @return Note - */ - public function setText($text) - { - $this->text = $text; - return $this; - } - - - - /** - * @return string - */ - public function getText() - { - return $this->text; - } - - - - /** - * @return User - */ - public function getUser() - { - return $this->user; - } - - - - /** - * @return Pad - */ - public function getPad() - { - return $this->pad; - } - - - - /** - * @param Pad pad - * @return Note - */ - public function setPad(Pad $pad = null) - { - $this->pad = $pad; - return $this; - } - - - - /** - * @ORM\PrePersist - * @ORM\PreUpdate - */ - public function setUpdatedAt() - { - $this->updatedAt = new \DateTime('now'); - } - - - - /** - * @return \Datetime - */ - public function getUpdatedAt() - { - return clone $this->updatedAt; - } - - - - /** - * @return string - */ - public function __toString() - { - return $this->getName(); - } -} diff --git a/nette/doctrine/notejam/src/Notejam/Notes/NoteRepository.php b/nette/doctrine/notejam/src/Notejam/Notes/NoteRepository.php deleted file mode 100644 index 913e66baf..000000000 --- a/nette/doctrine/notejam/src/Notejam/Notes/NoteRepository.php +++ /dev/null @@ -1,34 +0,0 @@ - array('name' => 'ASC'), - '-name' => array('name' => 'DESC'), - 'updated_at' => array('updatedAt' => 'ASC'), - '-updated_at' => array('updatedAt' => 'DESC') - ]; - - return isset($ordering[$orderBy]) ? $ordering[$orderBy] : $ordering['name']; - } - -} diff --git a/nette/doctrine/notejam/src/Notejam/Pads/Pad.php b/nette/doctrine/notejam/src/Notejam/Pads/Pad.php deleted file mode 100644 index cdeec9b1a..000000000 --- a/nette/doctrine/notejam/src/Notejam/Pads/Pad.php +++ /dev/null @@ -1,105 +0,0 @@ -user = $user; - $this->notes = new ArrayCollection(); - } - - - - /** - * @param string $name - * @return Pad - */ - public function setName($name) - { - $this->name = $name; - return $this; - } - - - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - - - /** - * @return User - */ - public function getUser() - { - return $this->user; - } - - - - /** - * @param User user - * @return Pad - */ - public function setUser($user) - { - $this->user = $user; - return $this; - } - - - - /** - * @return string - */ - public function __toString() - { - return $this->getName(); - } - -} diff --git a/nette/doctrine/notejam/src/Notejam/Pads/PadRepository.php b/nette/doctrine/notejam/src/Notejam/Pads/PadRepository.php deleted file mode 100644 index 12b36c3cf..000000000 --- a/nette/doctrine/notejam/src/Notejam/Pads/PadRepository.php +++ /dev/null @@ -1,16 +0,0 @@ -setRenderer(new FormRenderer()); - - return $form; - } - -} diff --git a/nette/doctrine/notejam/src/Notejam/UI/FormRenderer.php b/nette/doctrine/notejam/src/Notejam/UI/FormRenderer.php deleted file mode 100644 index 8984181a6..000000000 --- a/nette/doctrine/notejam/src/Notejam/UI/FormRenderer.php +++ /dev/null @@ -1,29 +0,0 @@ -wrappers['error']['container'] = 'ul class=errorlist'; - $this->wrappers['control']['errorcontainer'] = 'ul class=errorlist'; - $this->wrappers['control']['erroritem'] = 'li'; - - // remove rendering in table - $this->wrappers['controls']['container'] = NULL; - $this->wrappers['pair']['container'] = NULL; - $this->wrappers['control']['container'] = NULL; - $this->wrappers['label']['container'] = NULL; - } - -} diff --git a/nette/doctrine/notejam/src/Notejam/Users/Authenticator.php b/nette/doctrine/notejam/src/Notejam/Users/Authenticator.php deleted file mode 100644 index 6634fdd2a..000000000 --- a/nette/doctrine/notejam/src/Notejam/Users/Authenticator.php +++ /dev/null @@ -1,49 +0,0 @@ -userRepository = $userRepository; - } - - - - /** - * Using the given email finds the user and verifies it's password. - * If the user is not fund or if the password is wrong, it throws. - * - * @param array $credentials - * @throws AuthenticationException - * @return User|NULL - */ - public function authenticate(array $credentials) - { - list($username, $password) = $credentials; - - if (!$user = $this->userRepository->findOneBy(['email' => $username])) { - throw new AuthenticationException("User '$username' not found.", self::IDENTITY_NOT_FOUND); - - } elseif (!$user->verifyPassword($password)) { - throw new AuthenticationException('Invalid password.', self::INVALID_CREDENTIAL); - } - - return $user; - } - -} diff --git a/nette/doctrine/notejam/src/Notejam/Users/User.php b/nette/doctrine/notejam/src/Notejam/Users/User.php deleted file mode 100644 index d1348a90c..000000000 --- a/nette/doctrine/notejam/src/Notejam/Users/User.php +++ /dev/null @@ -1,162 +0,0 @@ -email = $email; - $this->password = Passwords::hash($password); - $this->active = true; - - $this->pads = new ArrayCollection(); - $this->notes = new ArrayCollection(); - } - - - - /** - * List of string roles of the user. - * - * @return array - */ - public function getRoles() - { - return array('user'); - } - - - - /** - * @return string - */ - public function getEmail() - { - return $this->email; - } - - - - /** - * @return boolean - */ - public function isActive() - { - return $this->active; - } - - - - /** - * Changes the password, only if the right original password is provided. - * - * @param string $original - * @param string $password - * @throws InvalidPasswordException - */ - public function changePassword($original, $password) - { - if (!$this->verifyPassword($original)) { - throw new InvalidPasswordException('Wrong password'); - } - - $this->password = Passwords::hash($password); - } - - - - /** - * Generates a random password that can be used when the user forgots the orignal. - * In real app, this shouldn't overwrite the current password, - * it should be in another field, or even better a whole new table. - * - * @return string - */ - public function generateRandomPassword() - { - $password = Random::generate(10); - $this->password = Passwords::hash($password); - return $password; - } - - - - /** - * Verifies if given password is the same as the original hashed password. - * - * @param string $password - * @return bool - */ - public function verifyPassword($password) - { - return Passwords::verify($password, $this->password); - } - - - - /** - * If the password was hashed with too small cost, this method can tell you that, - * so you can regenerate the hash with higher cost. - * - * @return bool - */ - public function passwordNeedsRehash() - { - return Passwords::needsRehash($this->password); - } - -} diff --git a/nette/doctrine/notejam/src/Notejam/Users/UserRepository.php b/nette/doctrine/notejam/src/Notejam/Users/UserRepository.php deleted file mode 100644 index 50ce70d6e..000000000 --- a/nette/doctrine/notejam/src/Notejam/Users/UserRepository.php +++ /dev/null @@ -1,16 +0,0 @@ -amOnPage('/signin'); - $this->see('Sign in'); - $this->fillField("Email", $email); - $this->fillField("Password", $password); - $this->click('Sign in', ['css' => 'form.sign-in']); - } - -} diff --git a/nette/doctrine/notejam/tests/_support/FunctionalTester.php b/nette/doctrine/notejam/tests/_support/FunctionalTester.php deleted file mode 100644 index 7e888f8b2..000000000 --- a/nette/doctrine/notejam/tests/_support/FunctionalTester.php +++ /dev/null @@ -1,26 +0,0 @@ -wantTo('see note can be successfully created'); -$I->testLogin(); -$I->amOnPage('/notes/create'); -$I->fillField('Name', 'Example note'); -$I->fillField('Text', 'Lorem ipsum'); -$I->selectOption('Pad', 1); -$I->click('Save'); -$I->see('Example note'); diff --git a/nette/doctrine/notejam/tests/acceptance/CreateNoteFailCept.php b/nette/doctrine/notejam/tests/acceptance/CreateNoteFailCept.php deleted file mode 100644 index 4f768ee29..000000000 --- a/nette/doctrine/notejam/tests/acceptance/CreateNoteFailCept.php +++ /dev/null @@ -1,9 +0,0 @@ -wantTo('see note can not be created without required fields'); -$I->testLogin(); -$I->amOnPage('/notes/create'); -$I->click('Save'); -$I->seeInCurrentUrl('/notes/create'); -$I->see('Name is required'); -$I->see('Text is required'); diff --git a/nette/doctrine/notejam/tests/acceptance/CreatePadCept.php b/nette/doctrine/notejam/tests/acceptance/CreatePadCept.php deleted file mode 100644 index 4926950ba..000000000 --- a/nette/doctrine/notejam/tests/acceptance/CreatePadCept.php +++ /dev/null @@ -1,8 +0,0 @@ -wantTo('see pad can be successfully created'); -$I->testLogin(); -$I->amOnPage('/pads/create'); -$I->fillField('Name', 'Example pad'); -$I->click('Save'); -$I->see('Example pad'); diff --git a/nette/doctrine/notejam/tests/acceptance/CreatePadFailCept.php b/nette/doctrine/notejam/tests/acceptance/CreatePadFailCept.php deleted file mode 100644 index b8f61bbfa..000000000 --- a/nette/doctrine/notejam/tests/acceptance/CreatePadFailCept.php +++ /dev/null @@ -1,9 +0,0 @@ -wantTo('see pad can not be created without required fields'); -$I->testLogin(); -$I->amOnPage('/pads/create'); -$I->click('Save'); -$I->dontSee('Example pad'); -$I->seeInCurrentUrl('/pads/create'); -$I->see('Name is required'); diff --git a/nette/doctrine/notejam/tests/acceptance/DeleteNoteCept.php b/nette/doctrine/notejam/tests/acceptance/DeleteNoteCept.php deleted file mode 100644 index fb718c70c..000000000 --- a/nette/doctrine/notejam/tests/acceptance/DeleteNoteCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see note can be successfully deleted'); -$I->testLogin(); -$I->amOnPage('/notes/1/delete'); -$I->click('Yes, I want to delete this note'); -$I->dontSee('Note 1'); diff --git a/nette/doctrine/notejam/tests/acceptance/DeleteOtherOwnersNoteCept.php b/nette/doctrine/notejam/tests/acceptance/DeleteOtherOwnersNoteCept.php deleted file mode 100644 index f9f262da0..000000000 --- a/nette/doctrine/notejam/tests/acceptance/DeleteOtherOwnersNoteCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see note can not be deleted by not an owner'); -$I->testLogin(); -$I->amOnPage('/notes/5/delete'); -$I->dontSee('Yes, I want to delete this note'); diff --git a/nette/doctrine/notejam/tests/acceptance/DeleteOtherOwnersPadCept.php b/nette/doctrine/notejam/tests/acceptance/DeleteOtherOwnersPadCept.php deleted file mode 100644 index 531887afe..000000000 --- a/nette/doctrine/notejam/tests/acceptance/DeleteOtherOwnersPadCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see pad can not be deleted by not an owner'); -$I->testLogin(); -$I->amOnPage('/pads/4/delete'); -$I->dontSee('Yes, I want to delete this pad'); diff --git a/nette/doctrine/notejam/tests/acceptance/DeletePadCept.php b/nette/doctrine/notejam/tests/acceptance/DeletePadCept.php deleted file mode 100644 index f86354c75..000000000 --- a/nette/doctrine/notejam/tests/acceptance/DeletePadCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see pad can be successfully deleted'); -$I->testLogin(); -$I->amOnPage('/pads/1/delete'); -$I->click('Yes, I want to delete this pad'); -$I->dontSee('Pad 1'); diff --git a/nette/doctrine/notejam/tests/acceptance/EditNoteCept.php b/nette/doctrine/notejam/tests/acceptance/EditNoteCept.php deleted file mode 100644 index 9012a2e35..000000000 --- a/nette/doctrine/notejam/tests/acceptance/EditNoteCept.php +++ /dev/null @@ -1,12 +0,0 @@ -wantTo('see note can be successfully edited'); -$I->testLogin(); -$I->amOnPage('/notes/1/edit'); -$I->fillField('Name', 'Note 1 - edited'); -$I->fillField('Text', 'Lorem ipsum - edited'); -$I->selectOption('Pad', 1); -$I->click('Save'); -$I->see('Note 1 - edited'); -$I->amOnPage('/pads/1'); -$I->see('Note 1 - edited'); diff --git a/nette/doctrine/notejam/tests/acceptance/EditNoteFailCept.php b/nette/doctrine/notejam/tests/acceptance/EditNoteFailCept.php deleted file mode 100644 index f921f1475..000000000 --- a/nette/doctrine/notejam/tests/acceptance/EditNoteFailCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('see note can not be edited without required fields'); -$I->testLogin(); -$I->amOnPage('/notes/1/edit'); -$I->fillField('Name', ''); -$I->fillField('Text', ''); -$I->click('Save'); -$I->seeInCurrentUrl('/notes/1/edit'); -$I->see('Name is required'); -$I->see('Text is required'); diff --git a/nette/doctrine/notejam/tests/acceptance/EditOtherOwnersNoteCept.php b/nette/doctrine/notejam/tests/acceptance/EditOtherOwnersNoteCept.php deleted file mode 100644 index 23d00f608..000000000 --- a/nette/doctrine/notejam/tests/acceptance/EditOtherOwnersNoteCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see note can not be edited by not an owner'); -$I->testLogin(); -$I->amOnPage('/notes/5/edit'); -$I->dontSee('Save', 'input'); diff --git a/nette/doctrine/notejam/tests/acceptance/EditOtherOwnersPadCept.php b/nette/doctrine/notejam/tests/acceptance/EditOtherOwnersPadCept.php deleted file mode 100644 index 227f97916..000000000 --- a/nette/doctrine/notejam/tests/acceptance/EditOtherOwnersPadCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see pad can not be edited by not an owner'); -$I->testLogin(); -$I->amOnPage('/pads/4/edit'); -$I->dontSee('Save', 'input'); diff --git a/nette/doctrine/notejam/tests/acceptance/EditPadCept.php b/nette/doctrine/notejam/tests/acceptance/EditPadCept.php deleted file mode 100644 index 923c9cc95..000000000 --- a/nette/doctrine/notejam/tests/acceptance/EditPadCept.php +++ /dev/null @@ -1,8 +0,0 @@ -wantTo('see pad can be successfully edited'); -$I->testLogin(); -$I->amOnPage('/pads/1/edit'); -$I->fillField('Name', 'Pad 1 - edited'); -$I->click('Save'); -$I->see('Pad 1 - edited'); diff --git a/nette/doctrine/notejam/tests/acceptance/EditPadFailCept.php b/nette/doctrine/notejam/tests/acceptance/EditPadFailCept.php deleted file mode 100644 index a6614b736..000000000 --- a/nette/doctrine/notejam/tests/acceptance/EditPadFailCept.php +++ /dev/null @@ -1,9 +0,0 @@ -wantTo('see pad cannot be edited without required fields'); -$I->testLogin(); -$I->amOnPage('/pads/1/edit'); -$I->fillField('Name', ''); -$I->click('Save'); -$I->seeInCurrentUrl('/pads/1/edit'); -$I->see('Name is required'); diff --git a/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordCept.php b/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordCept.php deleted file mode 100644 index aaeccdc3c..000000000 --- a/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see user can successfully get new password'); -$I->amOnPage('/forgot-password'); -$I->fillField('Email', 'john.doe@example.com'); -$I->click('Get new password'); -$I->see('Sign in'); diff --git a/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordInvalidEmailCept.php b/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordInvalidEmailCept.php deleted file mode 100644 index 2be0e84ab..000000000 --- a/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordInvalidEmailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see user can not successfully get new password with invalid email'); -$I->amOnPage('/forgot-password'); -$I->fillField('Email', 'invalid'); -$I->click('Get new password'); -$I->see('Invalid email'); diff --git a/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordUnregisteredEmailCept.php b/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordUnregisteredEmailCept.php deleted file mode 100644 index 1ef96e58d..000000000 --- a/nette/doctrine/notejam/tests/acceptance/ForgottenPasswordUnregisteredEmailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see user can not successfully get new password with unregistered email'); -$I->amOnPage('/forgot-password'); -$I->fillField('Email', 'invalid@example.com'); -$I->click('Get new password'); -$I->see("User with given email doesn't exist"); diff --git a/nette/doctrine/notejam/tests/acceptance/HomepageCept.php b/nette/doctrine/notejam/tests/acceptance/HomepageCept.php deleted file mode 100644 index c7c7afd42..000000000 --- a/nette/doctrine/notejam/tests/acceptance/HomepageCept.php +++ /dev/null @@ -1,8 +0,0 @@ -wantTo('see notes can be viewed successfully'); -$I->amOnPage('/'); -$I->seeInCurrentUrl('/signin'); -$I->testLogin(); -$I->seeCurrentUrlEquals('/'); -$I->see('My pads'); diff --git a/nette/doctrine/notejam/tests/acceptance/NoteDetailCept.php b/nette/doctrine/notejam/tests/acceptance/NoteDetailCept.php deleted file mode 100644 index 55c890c63..000000000 --- a/nette/doctrine/notejam/tests/acceptance/NoteDetailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see note can be viewed successfully'); -$I->testLogin(); -$I->amOnPage('/notes/1'); -$I->see('Note 1'); -$I->see('Lorem ipsum'); diff --git a/nette/doctrine/notejam/tests/acceptance/OtherOwnersNoteDetailCept.php b/nette/doctrine/notejam/tests/acceptance/OtherOwnersNoteDetailCept.php deleted file mode 100644 index 2e65f0224..000000000 --- a/nette/doctrine/notejam/tests/acceptance/OtherOwnersNoteDetailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see note can not be viewed by not an owner'); -$I->testLogin(); -$I->amOnPage('/notes/5'); -$I->dontSee('Other Note'); -$I->dontSee('Lorem ipsum'); diff --git a/nette/doctrine/notejam/tests/acceptance/OtherOwnersPadDetailCept.php b/nette/doctrine/notejam/tests/acceptance/OtherOwnersPadDetailCept.php deleted file mode 100644 index e169ae94f..000000000 --- a/nette/doctrine/notejam/tests/acceptance/OtherOwnersPadDetailCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see pad can not be viewed by not an owner'); -$I->testLogin(); -$I->amOnPage('/pads/4'); -$I->dontSee('Other Pad'); diff --git a/nette/doctrine/notejam/tests/acceptance/PadDetailCept.php b/nette/doctrine/notejam/tests/acceptance/PadDetailCept.php deleted file mode 100644 index cc00bcf9a..000000000 --- a/nette/doctrine/notejam/tests/acceptance/PadDetailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see pad can be viewed'); -$I->testLogin(); -$I->amOnPage('/pads/1'); -$I->see('Pad 1'); -$I->see('Note 2'); // Note 2 belongs to Pad 1 diff --git a/nette/doctrine/notejam/tests/acceptance/SetNewPasswordCept.php b/nette/doctrine/notejam/tests/acceptance/SetNewPasswordCept.php deleted file mode 100644 index 70c1ed8ef..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SetNewPasswordCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can successfully set new password'); -$I->testLogin(); -$I->amOnPage('/settings'); -$I->fillField('Current password', 'pass'); -$I->fillField('New password', 'qwerty'); -$I->fillField('Confirm', 'qwerty'); -$I->click('Change password'); -$I->see('Account settings'); diff --git a/nette/doctrine/notejam/tests/acceptance/SetNewPasswordFailCept.php b/nette/doctrine/notejam/tests/acceptance/SetNewPasswordFailCept.php deleted file mode 100644 index 26ee270fd..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SetNewPasswordFailCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('see user can not set new password without required fields'); -$I->testLogin(); -$I->amOnPage('/settings'); -$I->fillField('Current password', ''); -$I->fillField('New password', ''); -$I->fillField('Confirm', ''); -$I->click('Change password'); -$I->see('Current password is required'); -$I->see('New password is required'); diff --git a/nette/doctrine/notejam/tests/acceptance/SetNewPasswordInvalidCurrentPasswordCept.php b/nette/doctrine/notejam/tests/acceptance/SetNewPasswordInvalidCurrentPasswordCept.php deleted file mode 100644 index a7aabf0af..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SetNewPasswordInvalidCurrentPasswordCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not set new password with invalid current password'); -$I->testLogin(); -$I->amOnPage('/settings'); -$I->fillField('Current password', 'pls'); -$I->fillField('New password', 'pass'); -$I->fillField('Confirm', 'pass'); -$I->click('Change password'); -$I->see('Invalid current password'); diff --git a/nette/doctrine/notejam/tests/acceptance/SetNewPasswordMismatchCept.php b/nette/doctrine/notejam/tests/acceptance/SetNewPasswordMismatchCept.php deleted file mode 100644 index 1ded09583..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SetNewPasswordMismatchCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not set new password without confirming new password'); -$I->testLogin(); -$I->amOnPage('/settings'); -$I->fillField('Current password', 'pass'); -$I->fillField('New password', 'pls'); -$I->fillField('Confirm', 'pass'); -$I->click('Change password'); -$I->see('New passwords must match'); diff --git a/nette/doctrine/notejam/tests/acceptance/SignInCept.php b/nette/doctrine/notejam/tests/acceptance/SignInCept.php deleted file mode 100644 index bae44a2a5..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignInCept.php +++ /dev/null @@ -1,5 +0,0 @@ -wantTo('see user can successfully sign in'); -$I->testLogin(); -$I->see("My pads"); diff --git a/nette/doctrine/notejam/tests/acceptance/SignInFailCept.php b/nette/doctrine/notejam/tests/acceptance/SignInFailCept.php deleted file mode 100644 index e123b018e..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignInFailCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not sign in without required fields'); -$I->amOnPage('/signin'); -$I->see('Sign in'); -$I->fillField("Email", ''); -$I->fillField("Password", ''); -$I->click('Sign in', ['css' => 'form.sign-in']); -$I->see('Email is required'); -$I->see('Password is required'); diff --git a/nette/doctrine/notejam/tests/acceptance/SignInInvalidEmailCept.php b/nette/doctrine/notejam/tests/acceptance/SignInInvalidEmailCept.php deleted file mode 100644 index 0298b64a8..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignInInvalidEmailCept.php +++ /dev/null @@ -1,5 +0,0 @@ -wantTo('see user can not sign in with invalid email'); -$I->testLogin('invalid@example.com', 'pass'); -$I->see("User 'invalid@example.com' not found."); diff --git a/nette/doctrine/notejam/tests/acceptance/SignInInvalidPasswordCept.php b/nette/doctrine/notejam/tests/acceptance/SignInInvalidPasswordCept.php deleted file mode 100644 index 2e8b58871..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignInInvalidPasswordCept.php +++ /dev/null @@ -1,5 +0,0 @@ -wantTo('see user can not sign in with invalid password'); -$I->testLogin('john.doe@example.com', 'pls'); -$I->see('Invalid password'); diff --git a/nette/doctrine/notejam/tests/acceptance/SignUpAlreadyExistsCept.php b/nette/doctrine/notejam/tests/acceptance/SignUpAlreadyExistsCept.php deleted file mode 100644 index 5e92ec0a7..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignUpAlreadyExistsCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not sign up with already registered email'); -$I->amOnPage('/signup'); -$I->fillField('Email', 'john.doe@example.com'); -$I->fillField('Password', 'pass'); -$I->fillField('confirm', 'pass'); -$I->click('Sign up', ['css' => 'form']); -$I->seeInCurrentUrl('/signup'); -$I->see('Account with this email already exists'); diff --git a/nette/doctrine/notejam/tests/acceptance/SignUpCept.php b/nette/doctrine/notejam/tests/acceptance/SignUpCept.php deleted file mode 100644 index df11ed43e..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignUpCept.php +++ /dev/null @@ -1,13 +0,0 @@ -wantTo('see user can successfully sign up'); -$I->amOnPage('/signup'); -$I->fillField('Email', 'test@example.com'); -$I->fillField('Password', 'qwerty'); -$I->fillField('confirm', 'qwerty'); -$I->click('Sign up', ['css' => 'form']); -$I->seeInCurrentUrl('/signin'); -$I->see('Thank you for registration. Now you can sign in'); -$I->testLogin('test@example.com', 'qwerty'); -$I->seeCurrentUrlEquals('/'); -$I->see('My pads'); diff --git a/nette/doctrine/notejam/tests/acceptance/SignUpFailCept.php b/nette/doctrine/notejam/tests/acceptance/SignUpFailCept.php deleted file mode 100644 index 250b1cd83..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignUpFailCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('see user can not sign up without required fields'); -$I->amOnPage('/signup'); -$I->fillField('Email', ''); -$I->fillField('Password', ''); -$I->fillField('confirm', ''); -$I->click('Sign up', ['css' => 'form']); -$I->seeInCurrentUrl('/signup'); -$I->see('Email is required'); -$I->see('Password is required'); diff --git a/nette/doctrine/notejam/tests/acceptance/SignUpInvalidEmailCept.php b/nette/doctrine/notejam/tests/acceptance/SignUpInvalidEmailCept.php deleted file mode 100644 index 1cc57ad1e..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignUpInvalidEmailCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not sign up with invalid email'); -$I->amOnPage('/signup'); -$I->fillField('Email', 'abcd'); -$I->fillField('Password', 'pass'); -$I->fillField('confirm', 'pass'); -$I->click('Sign up', ['css' => 'form']); -$I->seeInCurrentUrl('/signup'); -$I->see('Please enter a valid email address.'); diff --git a/nette/doctrine/notejam/tests/acceptance/SignUpPasswordMismatchCept.php b/nette/doctrine/notejam/tests/acceptance/SignUpPasswordMismatchCept.php deleted file mode 100644 index e1e083f19..000000000 --- a/nette/doctrine/notejam/tests/acceptance/SignUpPasswordMismatchCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not sign up without confirming password'); -$I->amOnPage('/signup'); -$I->fillField('Email', 'test@example.com'); -$I->fillField('Password', 'pass'); -$I->fillField('confirm', 'pls'); -$I->click('Sign up', ['css' => 'form']); -$I->seeInCurrentUrl('/signup'); -$I->see('Passwords must match'); diff --git a/nette/doctrine/notejam/tests/acceptance/_bootstrap.php b/nette/doctrine/notejam/tests/acceptance/_bootstrap.php deleted file mode 100644 index 8a8855580..000000000 --- a/nette/doctrine/notejam/tests/acceptance/_bootstrap.php +++ /dev/null @@ -1,2 +0,0 @@ - - Options -Indexes - - -# enable cool URL - - RewriteEngine On - # RewriteBase / - - # prevents files starting with dot to be viewed by browser - RewriteRule /\.|^\. - [F] - - # front controller - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L] - - -# enable gzip compression - - - AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json application/xml image/svg+xml - - diff --git a/nette/doctrine/notejam/www/.maintenance.php b/nette/doctrine/notejam/www/.maintenance.php deleted file mode 100644 index 2ff638cb3..000000000 --- a/nette/doctrine/notejam/www/.maintenance.php +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - -Site is temporarily down for maintenance - -

We're Sorry

- -

The site is temporarily down for maintenance. Please try again in a few minutes.

- -div { - display: none; } - - - /* Grid */ - #grid .column, - #grid .columns { - background: #ddd; - height: 25px; - line-height: 25px; - margin-bottom: 10px; - text-align: center; - text-transform: uppercase; - color: #555; - font-size: 12px; - font-weight: bold; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; } - #grid .column:hover, - #grid .columns:hover { - background: #bbb; - color: #333; } - #grid .example-grid { overflow: hidden; } - - .post-button-note, - .post-button-note a { - font-size: 11px; - color: #999; } - - #examples .four.columns a { - text-decoration: none; - } - #examples .four.columns a:hover { - text-decoration: underline; - } - - - .resize { - position: fixed; - bottom: 0; - right: 0; - height: 80px; - width: 80px; - background: url(images/resize.png); } - - - img { - max-width: 100%; - height: auto; } - - .gist-meta { display: none !important;} - - ul ul ul li { margin-bottom: 3px; } - - .twitter-share-button { margin-bottom: -18px; } - - /* Table stylesheets */ - table { - width: 100%; - border-collapse: collapse; - } - - table th, table td { - padding: 10px 10px 9px; - font-size: 13px; - line-height: 18px; - text-align: left; - } - - table td { - vertical-align: top; - border-top: solid 1px #ddd; - } - - table th { - padding-top: 9px; - font-weight: bold; - vertical-align: middle; - } - - table.condensed th, table.condensed td { - padding: 5px 5px 4px; - } - - table.bordered { - border-collapse: separate; - border: solid 1px #ddd; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - } - - table.bordered th + th, - table.bordered th + td, - table.bordered td + td { - border-left: solid 1px #ddd; - } - - .zebra-striped tbody tr:nth-child(odd) td, - .zebra-striped tbody tr:nth-child(odd) th { - background: #f5f5f5; - } - -.carbonad, -.carbonad-image, -.carbonad-text, -.carbonad-tag { - background: none !important; - border: none !important; - margin-left: 0 !important; -} -.carbonad-tag { - margin-top: 6px !important; - padding-top: 0 !important; -} -.carbonad-text { - height: auto !important; -} -.carbonad-image { - margin-top: 0 !important; -} - -.hidden-text { - font-size: 12px; - color: #999; -} - -td.date, th.date { - text-align: right; -} - -td.date { - font-style: italic; -} - -form.note input[type="text"], form.note textarea { - width: 100%; -} - -form hr { - width: 218px; - margin: 10px 0px; -} - -form.note textarea { - height: 250px; -} - -div.content-area { - min-height: 600px; -} - -hr.footer { - margin-bottom: 10px; -} - -div.footer { - margin-bottom: 10px; - text-align: center; - font-size: 12px; -} - -form.sign-in { - margin: 50px 0 0 0; -} - -.sort_arrow { - text-decoration: none; -} - -.sort_arrow:hover { - text-decoration: none; - color: red; -} - -div.sign-in-out-block { - position: absolute; - right: 14px; - top: 8px; - font-size: 12px; -} - -div.sign-in-out-block a { - /*text-decoration: none;*/ -} - -a.small-red { - color: red; - font-size: 12px; -} - -table.notes { - margin: 0 0 20px 0; -} - -table.notes th.note { - width: 72%; -} - -table.notes td.pad { - color: grey; -} - -table.notes td.pad a { - color: grey; - text-decoration: underline; - font-style: normal; -} - - -table.notes td.pad a:hover { - color: black; -} - -p.empty { - color: grey; - font-style: italic; -} - -a.delete-note { - float: right; - font-size: 12px; - color: red; -} - -.red, input.red { - color: red !important; -} - -ul.errorlist, ul.errors { - margin: -18px 0 0 0; -} - -ul.errorlist li, ul.errors li { - color: red; -} - -.alert-area { - text-align: center; -} - -.alert { - padding: 5px 8px; - margin: 0 0 12px 0; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border: 1px solid #d6e9c6; -} - -.alert-error { - color: #b94a48; - background-color: #f2dede; - border: 1px solid #eed3d7; -} - - /* Mobile */ - @media only screen and (max-width: 767px) { - header h1 { font-size: 34px; line-height: 37px; } - nav { position: relative; } - nav ul, - .carbonad { - display: none; - } - #logo { text-align: left; } - #examples .four.columns { - padding-top: 30px; - } - } - - /* Mobile Landscape */ - @media only screen and (min-width: 480px) and (max-width: 767px) { - nav ul { - display: none; - } - } - - /* Non 960 */ - @media only screen and (max-width: 959px) { - #logo { - font-size: 21px; - margin-bottom: 15px; } - nav .button { - padding: 9px 20px 11px; } - } - - /* iPad Portrait/Browser */ - @media only screen and (min-width: 768px) and (max-width: 959px) { - nav { - width: 124px; } - } - - /* Mobile/Browser */ - @media only screen and (max-width: 767px) {} - - /* Mobile Landscape/Browser */ - @media only screen and (min-width: 480px) and (max-width: 767px) {} - - /* Anything smaller than standard 960 */ - @media only screen and (max-width: 959px) {} - - - /* iPad Portrait Only */ - @media only screen and (min-width: 768px) and (max-width: 959px) and (max-device-width: 1000px) {} - - /* Mobile Only */ - @media only screen and (max-width: 767px) and (max-device-width: 1000px) {} - - /* Mobile Landscape Only */ - @media only screen and (min-width: 480px) and (max-width: 767px) and (max-device-width: 1000px) {} - - /* Anything smaller than standard 960 on a device */ - @media only screen and (max-width: 959px) and (max-device-width: 1000px) { - .resize { display: none; } - } - diff --git a/nette/doctrine/notejam/www/favicon.ico b/nette/doctrine/notejam/www/favicon.ico deleted file mode 100644 index b20cfd0f056c1c9d43100f612f4319c66e2adb94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2550 zcmcgsdpy=>6#qV`h?U#SZJVg3NgD48bB$?q*(P0BnsTYks)Y)n7Gs6xwl1`?sD@_U z*mR*3ue;!TGX-%KzT!aoOgA9#8p?H)WL?RL7J%`}#?vCTxIT)jQ5SY=6*49?+ zh&_ole$lYAvxC8Q5iS=MLnsttXlMv`?%ctjEsbHE`WM;pN*(R2gPpQVcsz^BU^|{g zdOB}*utia3=3%>|9bp}tc@~XfN=iy^4Uf>sN#&@~UN&lzy{)*3spzf3^BSR||YZz~*6I;1wF3`8Euwo$so^QQ+fPxAeUii#5Rap}?} zI637bDXAWlCQX8umlyQ(DzI){DFgxmGBPq~J0F>ud>9)Wx9 zfgL;esHkY7xZ6lhPR71{g~-j##nPo0;O%`5H*eOUySp2Q4mF^^zn|iS2n`K|hDI$; zovJ}&<4uS}_n@M34_mgBKvq^3>gwt+H#bLFSs9iuUk*P%KTMxqN_*>}udk1soE*f( z#nC;_e;ul; zt8w}?A7jS!QZIBOE2|m`3JTEH))x21tXZ>QWo3op;$o_0Df094;o;#yaal-9OC!E& zp{go?j7&KuP88z$^;>9YXrMdSVdKV9NJ~poO)8i?c`_KQLVJ5Vi*e)nQB_rs;o(29XHPk%O)EoSARo=m&6HP2wf#l4 zH4*=<7(aeI#SKGEO$`GB1JKmeL|tgHl| z&&T4$i{a|(iW4VJVAZNs@bU41udgpcLP8K89*&rp7&_}APxI`(?@mKQ1HHYy(9+Vvg9i`L z)zw8kr-!?D??PU_7j12A;_p^j`9AIG#>|;BVPaweGcz;P)YQPz(vteE0@l{nm@{V% zN=iy#Z*Nb1a0PSc&P8EiA)K9^k(ZYT7Z(>SS+WFfZf?lV&c@1>E8*$siS+bz>eGGj z_xGpXNy6^kyRmiaR>a1}A}lNn(b3U}jEsboln`Ub3Nc{<$N329V+>PWBGDrZP)!2^ zgH$uuXI=CzePr8-qdwAy^oBz6>qtwft{!^Z9;%1y^ZT^+>g7P{OXUFj7df)}wRucq zmlm@v@hbOa8Ko5wENykg4mNL*D*qf~3xUi}fK4-w!qLe|`Yf=;$Q%fcQ2~x_S{3dI z1exGnPg=`oSp@5O5E7$6zbZYJ`mKgNaD~lBlrvWRaz2EePA_9@`j2`n7s~VV^4Wnj z`nAb@jO`Kl`fYGqwwdB8k@2B3#Tt)Nf%6LZidBEm%>U zIp^f3xWHJNw^!P)mp({kCuGbESuBup*#~gvu}K%ttO=2*{sN2{JA-W!z>@{nZxqL{ zh=QL_y(oY&ani$2@YEN_aY*gFm*aH@{||iK?3yQO>z|YV>W4Sqo9I6p5G09PXfCPx z;&Zb&aX?Vev-kV*{k_d?**5~-RN@c`{2gue-TH}%`ch3}=ROC&rnaYAkVqm}+BD5V za{pA9-^FlZ;_>*&Z%E=g`&+o(oUB|tP7=3%{UlJbB85M$22KZ{7Oda^FYEk~m9tOZv=@F{=&ov#vg;K8};8MS`EFL7E3`erDkr Rce72getByType('Nette\Application\Application')->run(); diff --git a/nette/doctrine/notejam/www/robots.txt b/nette/doctrine/notejam/www/robots.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/nette/native_db/notejam/.gitignore b/nette/native_db/notejam/.gitignore deleted file mode 100644 index 32b40f1f6..000000000 --- a/nette/native_db/notejam/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -log/* -temp/* -vendor/* -!.gitignore -app/config/config.local.neon - -tests/_output/* diff --git a/nette/native_db/notejam/app/bootstrap.php b/nette/native_db/notejam/app/bootstrap.php deleted file mode 100644 index 8fd851263..000000000 --- a/nette/native_db/notejam/app/bootstrap.php +++ /dev/null @@ -1,21 +0,0 @@ -setDebugMode('23.75.345.200'); // enable for your remote IP -$configurator->enableDebugger(__DIR__ . '/../log'); - -$configurator->setTempDirectory(__DIR__ . '/../temp'); - -$configurator->createRobotLoader() - ->addDirectory(__DIR__) - ->register(); - -$configurator->addConfig(__DIR__ . '/config/config.neon'); -$configurator->addConfig(__DIR__ . '/config/config.local.neon'); - -$container = $configurator->createContainer(); - -return $container; diff --git a/nette/native_db/notejam/app/components/Notes/INotesFactory.php b/nette/native_db/notejam/app/components/Notes/INotesFactory.php deleted file mode 100644 index 375c2e520..000000000 --- a/nette/native_db/notejam/app/components/Notes/INotesFactory.php +++ /dev/null @@ -1,18 +0,0 @@ - - - - Note - - - Pad - - Last modified - - - - - {$note->name} - - {if $note->pad_id} - {$note->pad->name} - {else} - No pad - {/if} - - {$note->updated_at|date:'d. M. Y'} - - diff --git a/nette/native_db/notejam/app/components/Notes/Notes.php b/nette/native_db/notejam/app/components/Notes/Notes.php deleted file mode 100644 index 5ebb20fc3..000000000 --- a/nette/native_db/notejam/app/components/Notes/Notes.php +++ /dev/null @@ -1,42 +0,0 @@ -notes = $notes; - $this->pad = $pad; - } - - - /** - * Renders the component. - */ - public function render() - { - $template = $this->createTemplate(); - $template->setFile(__DIR__ . '/Notes.latte'); - $template->notes = $this->notes; - $template->pad = $this->pad; - $template->render(); - } - -} diff --git a/nette/native_db/notejam/app/components/Pads/IPadsFactory.php b/nette/native_db/notejam/app/components/Pads/IPadsFactory.php deleted file mode 100644 index 351e360bd..000000000 --- a/nette/native_db/notejam/app/components/Pads/IPadsFactory.php +++ /dev/null @@ -1,15 +0,0 @@ - - - - diff --git a/nette/native_db/notejam/app/components/Pads/Pads.php b/nette/native_db/notejam/app/components/Pads/Pads.php deleted file mode 100644 index bd7f96bba..000000000 --- a/nette/native_db/notejam/app/components/Pads/Pads.php +++ /dev/null @@ -1,35 +0,0 @@ -pads = $pads; - } - - - /** - * Renders the component. - */ - public function render() - { - $template = $this->createTemplate(); - $template->setFile(__DIR__ . '/Pads.latte'); - $template->pads = $this->pads; - $template->render(); - } - -} diff --git a/nette/native_db/notejam/app/components/UserBar/IUserBarFactory.php b/nette/native_db/notejam/app/components/UserBar/IUserBarFactory.php deleted file mode 100644 index efa689371..000000000 --- a/nette/native_db/notejam/app/components/UserBar/IUserBarFactory.php +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/nette/native_db/notejam/app/components/UserBar/UserBar.php b/nette/native_db/notejam/app/components/UserBar/UserBar.php deleted file mode 100644 index adf2d82e2..000000000 --- a/nette/native_db/notejam/app/components/UserBar/UserBar.php +++ /dev/null @@ -1,35 +0,0 @@ -user = $user; - } - - /** - * Renders the component. - */ - public function render() - { - $template = $this->createTemplate(); - $template->setFile(__DIR__ . '/UserBar.latte'); - $template->render(); - } - -} diff --git a/nette/native_db/notejam/app/config/config.example.neon b/nette/native_db/notejam/app/config/config.example.neon deleted file mode 100644 index 24dfdf1f0..000000000 --- a/nette/native_db/notejam/app/config/config.example.neon +++ /dev/null @@ -1,3 +0,0 @@ -parameters: - database: - dsn: 'sqlite:%appDir%/../notejam.db' diff --git a/nette/native_db/notejam/app/config/config.neon b/nette/native_db/notejam/app/config/config.neon deleted file mode 100644 index d1a5d2533..000000000 --- a/nette/native_db/notejam/app/config/config.neon +++ /dev/null @@ -1,45 +0,0 @@ -# -# WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser! -# https://nette.org/security-warning -# -parameters: - - -php: - date.timezone: Europe/Prague - - -application: - errorPresenter: Error - mapping: - *: App\*Module\Presenters\*Presenter - - -session: - expiration: 14 days - - -database: - dsn: %database.dsn% - options: - lazy: yes - - -services: - - App\Model\UserManager - - App\Model\NoteManager - - App\Model\PadManager - - App\Components\Notes\INotesFactory - - App\Components\Pads\IPadsFactory - - App\Components\UserBar\IUserBarFactory - - App\Forms\Account\AccountSettingsFormFactory - - App\Forms\Note\DeleteNoteFormFactory - - App\Forms\Note\EditNoteFormFactory - - App\Forms\Note\NewNoteFormFactory - - App\Forms\Pad\DeletePadFormFactory - - App\Forms\Pad\EditPadFormFactory - - App\Forms\Pad\NewPadFormFactory - - App\Forms\Sign\ForgottenPasswordFormFactory - - App\Forms\Sign\SignInFormFactory - - App\Forms\Sign\SignUpFormFactory - router: App\RouterFactory::createRouter diff --git a/nette/native_db/notejam/app/forms/Account/AccountSettingsFormFactory.php b/nette/native_db/notejam/app/forms/Account/AccountSettingsFormFactory.php deleted file mode 100644 index 14a3e12f5..000000000 --- a/nette/native_db/notejam/app/forms/Account/AccountSettingsFormFactory.php +++ /dev/null @@ -1,69 +0,0 @@ -userManager = $userManager; - $this->user = $user; - } - - /** - * Creates Account Settings Form. - * @return Form - */ - public function create() - { - $form = new Form; - $form->addPassword('current', 'Current password') - ->setRequired('%label is required'); - - $form->addPassword('new', 'New Password') - ->setRequired('%label is required'); - - $form->addPassword('confirm', 'Confirm New Password') - ->setRequired('New password is required') - ->addRule(Form::EQUAL, 'New passwords must match', $form['new']); - - $form->addSubmit('submit', 'Change Password'); - - $form->onSuccess[] = [$this, 'formSucceeded']; - - return $form; - } - - /** - * Callback for Account Settings Form onSuccess event. - * @param Form $form - * @param ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - if (!$this->userManager->checkPassword($this->user->getId(), $values->current)) { - $form->addError("Invalid current password"); - } - $this->userManager->setNewPassword($this->user->getId(), $values->new); - } - -} diff --git a/nette/native_db/notejam/app/forms/Note/DeleteNoteFormFactory.php b/nette/native_db/notejam/app/forms/Note/DeleteNoteFormFactory.php deleted file mode 100644 index 1adb01b4e..000000000 --- a/nette/native_db/notejam/app/forms/Note/DeleteNoteFormFactory.php +++ /dev/null @@ -1,45 +0,0 @@ -noteManager = $noteManager; - } - - /** - * Creates a DeleteNoteForm. - * @param int $id Id of the note to be deleted. - * @return Form - */ - public function create($id) - { - $form = new Form; - $form->addProtection(); // Adds CSRF protection - - $form->addSubmit('submit', 'Yes, I want to delete this note'); - - $form->onSuccess[] = function (Form $form) use ($id) { - if (!$this->noteManager->delete($id)) { - $form->addError("Failed to delete note"); - } - }; - - return $form; - } - -} diff --git a/nette/native_db/notejam/app/forms/Note/EditNoteFormFactory.php b/nette/native_db/notejam/app/forms/Note/EditNoteFormFactory.php deleted file mode 100644 index 894a43b81..000000000 --- a/nette/native_db/notejam/app/forms/Note/EditNoteFormFactory.php +++ /dev/null @@ -1,65 +0,0 @@ -padManager = $padManager; - $this->noteManager = $noteManager; - } - - /** - * Creates an EditNoteForm. - * @param int $id - * @param string $name - * @param string $text - * @param int $pad - * @return Form - */ - public function create($id, $name, $text, $pad) - { - $form = new Form; - $form->addText('name', 'Name') - ->setDefaultValue($name) - ->setRequired('%label is required'); - - $form->addTextArea('text', 'Text') - ->setDefaultValue($text) - ->setRequired('%label is required'); - - $form->addSelect('pad', 'Pad', $this->padManager->findAll()->fetchPairs('id', 'name')) - ->setPrompt('Select pad') - ->setDefaultValue($pad); - - $form->addSubmit('submit', 'Save'); - - $form->onSuccess[] = function (Form $form, $values) use ($id) { - if (!$this->noteManager->update($id, $values->name, $values->text, $values->pad)) { - $form->addError("Failed to edit pad"); - } - }; - - return $form; - } - -} diff --git a/nette/native_db/notejam/app/forms/Note/NewNoteFormFactory.php b/nette/native_db/notejam/app/forms/Note/NewNoteFormFactory.php deleted file mode 100644 index b99d46fb0..000000000 --- a/nette/native_db/notejam/app/forms/Note/NewNoteFormFactory.php +++ /dev/null @@ -1,68 +0,0 @@ -padManager = $padManager; - $this->noteManager = $noteManager; - } - - /** - * Creates a NewNoteForm. - * @param int|NULL $pad Id of the default pad. Can be NULL. - * @return Form - */ - public function create($pad) - { - $form = new Form; - $form->addText('name', 'Name') - ->setRequired('%label is required'); - - $form->addTextArea('text', 'Text') - ->setRequired('%label is required'); - - $form->addSelect('pad', 'Pad', $this->padManager->findAll()->fetchPairs('id', 'name')) - ->setPrompt('Select pad') - ->setDefaultValue($pad); - - $form->addSubmit('submit', 'Save'); - - $form->onSuccess[] = [$this, 'formSucceeded']; - return $form; - } - - /** - * Callback for NewNoteForm onSuccess event. - * @param Form $form - * @param ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - if (!$this->noteManager->add($values->name, $values->text, $values->pad)) { - $form->addError("Failed to create pad"); - } - } - -} diff --git a/nette/native_db/notejam/app/forms/Pad/DeletePadFormFactory.php b/nette/native_db/notejam/app/forms/Pad/DeletePadFormFactory.php deleted file mode 100644 index ebacdf538..000000000 --- a/nette/native_db/notejam/app/forms/Pad/DeletePadFormFactory.php +++ /dev/null @@ -1,46 +0,0 @@ -padManager = $padManager; - } - - /** - * Creates a DeletePadForm. - * @param int $id Id of the pad to be deleted. - * @return Form - */ - public function create($id) - { - $form = new Form; - $form->addProtection(); // Adds CSRF protection - - $form->addSubmit('submit', 'Yes, I want to delete this pad'); - - $form->onSuccess[] = function (Form $form) use ($id) { - if (!$this->padManager->delete($id)) { - $form->addError("Failed to delete pad"); - } - }; - - return $form; - } - -} diff --git a/nette/native_db/notejam/app/forms/Pad/EditPadFormFactory.php b/nette/native_db/notejam/app/forms/Pad/EditPadFormFactory.php deleted file mode 100644 index 62a9510ad..000000000 --- a/nette/native_db/notejam/app/forms/Pad/EditPadFormFactory.php +++ /dev/null @@ -1,49 +0,0 @@ -padManager = $padManager; - } - - /** - * Creates an EditPadForm. - * @param int $id Id of the pad to be edited. - * @param string $name Current name of the pad. - * @return Form - */ - public function create($id, $name) - { - $form = new Form; - $form->addText('name', 'Name') - ->setDefaultValue($name) - ->setRequired('%label is required'); - - $form->addSubmit('submit', 'Save'); - - $form->onSuccess[] = function (Form $form, $values) use ($id) { - if (!$this->padManager->update($id, $values->name)) { - $form->addError("Failed to edit pad"); - } - }; - - return $form; - } - -} diff --git a/nette/native_db/notejam/app/forms/Pad/NewPadFormFactory.php b/nette/native_db/notejam/app/forms/Pad/NewPadFormFactory.php deleted file mode 100644 index b4ca697ea..000000000 --- a/nette/native_db/notejam/app/forms/Pad/NewPadFormFactory.php +++ /dev/null @@ -1,54 +0,0 @@ -padManager = $padManager; - } - - /** - * Creates a NewPadForm. - * @return Form - */ - public function create() - { - $form = new Form; - $form->addText('name', 'Name') - ->setRequired('%label is required'); - - $form->addSubmit('submit', 'Save'); - - $form->onSuccess[] = [$this, 'formSucceeded']; - return $form; - } - - /** - * Callback for NewPadForm onSuccess event. - * @param Form $form - * @param ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - if (!$this->padManager->add($values->name)) { - $form->addError("Failed to create new pad"); - } - } - -} diff --git a/nette/native_db/notejam/app/forms/Sign/ForgottenPasswordFormFactory.php b/nette/native_db/notejam/app/forms/Sign/ForgottenPasswordFormFactory.php deleted file mode 100644 index 3fb12cabd..000000000 --- a/nette/native_db/notejam/app/forms/Sign/ForgottenPasswordFormFactory.php +++ /dev/null @@ -1,84 +0,0 @@ -userManager = $userManager; - $this->mailer = $mailer; - } - - /** - * Creates a ForgottenPasswordForm. - * @return Form - */ - public function create() - { - $form = new Form; - $form->addText('email', 'Email') - ->setRequired('%label is required') - ->addRule(Form::EMAIL, 'Invalid %label'); - - $form->addSubmit('submit', 'Get new password'); - - $form->onSuccess[] = [$this, 'formSucceeded']; - return $form; - } - - /** - * Callback for ForgottenPasswordForm onSuccess event. - * @param Form $form - * @param ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - $user = $this->userManager->findByEmail($values->email); - if (!$user) { - $form->addError('No user with given email found'); - return; - } - $password = Nette\Utils\Random::generate(10); - $this->userManager->setNewPassword($user->id, $password); - - try { - // !!! Never send passwords through email !!! - // This is only for demonstration purposes of Notejam. - // Ideally, you can create a unique link where user can change his password - // himself for limited amount of time, and then send the link. - $mail = new Nette\Mail\Message(); - $mail->setFrom('noreply@notejamapp.com', 'Notejamapp'); - $mail->addTo($user->email); - $mail->setSubject('New notejam password'); - $mail->setBody(sprintf('Your new password: %s', $password)); - $this->mailer->send($mail); - - } catch (Nette\Mail\SendException $e) { - Debugger::log($e, Debugger::EXCEPTION); - $form->addError('Could not send email with new password'); - } - } - -} diff --git a/nette/native_db/notejam/app/forms/Sign/SignInFormFactory.php b/nette/native_db/notejam/app/forms/Sign/SignInFormFactory.php deleted file mode 100644 index 7737e36db..000000000 --- a/nette/native_db/notejam/app/forms/Sign/SignInFormFactory.php +++ /dev/null @@ -1,60 +0,0 @@ -user = $user; - } - - /** - * Creates a SignInForm. - * @return Form - */ - public function create() - { - $form = new Form; - - $form->addText('email', 'Email') - ->setRequired('%label is required'); - - $form->addPassword('password', 'Password') - ->setRequired('%label is required'); - - $form->addSubmit('submit', 'Sign In'); - - $form->onSuccess[] = [$this, 'formSucceeded']; - return $form; - } - - /** - * Callback for SignInForm onSuccess event. - * @param Form $form - * @param ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - try { - $this->user->login($values->email, $values->password); - } catch (Nette\Security\AuthenticationException $e) { - $form->addError($e->getMessage()); - } - } - -} diff --git a/nette/native_db/notejam/app/forms/Sign/SignUpFormFactory.php b/nette/native_db/notejam/app/forms/Sign/SignUpFormFactory.php deleted file mode 100644 index 06b1d2519..000000000 --- a/nette/native_db/notejam/app/forms/Sign/SignUpFormFactory.php +++ /dev/null @@ -1,65 +0,0 @@ -userManager = $userManager; - } - - /** - * Creates a SignUpForm. - * @return Form - */ - public function create() - { - $form = new Form; - $form->addText('email', 'Email') - ->setRequired('%label is required') - ->addRule(Form::EMAIL, 'Invalid email'); - - $form->addPassword('password', 'Password') - ->setRequired('%label is required'); - - $form->addPassword('confirm', 'Confirm Password') - ->setRequired('%label is required') - ->addRule(Form::EQUAL, 'Passwords must match', $form['password']); - - $form->addSubmit('submit', 'Sign Up'); - - $form->onSuccess[] = [$this, 'formSucceeded']; - return $form; - } - - /** - * Callback for SignUpForm onSuccess event. - * @param Form $form - * @param ArrayHash $values - */ - public function formSucceeded(Form $form, $values) - { - try { - $this->userManager->add($values->email, $values->password); - } catch (DuplicateNameException $e) { - $form->addError($e->getMessage()); - } - } - -} diff --git a/nette/native_db/notejam/app/helpers/OrderHelper.php b/nette/native_db/notejam/app/helpers/OrderHelper.php deleted file mode 100644 index 72d2296ca..000000000 --- a/nette/native_db/notejam/app/helpers/OrderHelper.php +++ /dev/null @@ -1,25 +0,0 @@ - 'name ASC', - '-name' => 'name DESC', - 'updated_at' => 'updated_at ASC', - '-updated_at' => 'updated_at DESC' - ]; - return isset($ordering[$orderBy]) ? $ordering[$orderBy] : $ordering['name']; - } - -} diff --git a/nette/native_db/notejam/app/model/NoteManager.php b/nette/native_db/notejam/app/model/NoteManager.php deleted file mode 100644 index be5c9151b..000000000 --- a/nette/native_db/notejam/app/model/NoteManager.php +++ /dev/null @@ -1,121 +0,0 @@ -database = $database; - $this->user = $user; - } - - /** - * Finds note with given id. - * @param int $id - * @return bool|mixed|Nette\Database\Table\IRow - */ - public function find($id) - { - return $this->findAll()->where('id', $id)->fetch(); - } - - /** - * Finds all notes. - * @return Nette\Database\Table\Selection - */ - public function findAll() - { - return $this->getTable()->where('user_id', $this->user->getId()); - } - - /** - * Finds notes in given pad. - * @param int $padId - * @return Nette\Database\Table\Selection - */ - public function findByPad($padId) - { - return $this->findAll()->where('pad_id', $padId); - } - - /** - * Adds new note. - * @param string $name - * @param string $text - * @param int $padId - * @return bool|int|Nette\Database\Table\IRow - */ - public function add($name, $text, $padId) - { - return $this->getTable()->insert([ - 'name' => $name, - 'text' => $text, - 'pad_id' => $padId, - 'user_id' => $this->user->getId(), - 'created_at' => date('Y-m-d H:i:s'), - 'updated_at' => date('Y-m-d H:i:s'), - ]); - } - - /** - * Updates note with given id. - * @param int $id - * @param string $name - * @param string $text - * @param int $padId - * @return int - */ - public function update($id, $name, $text, $padId) - { - return $this->getTable()->where([ - 'id' => $id, - 'user_id' => $this->user->getId(), - ])->update([ - 'name' => $name, - 'text' => $text, - 'pad_id' => $padId, - 'updated_at' => date('Y-m-d H:i:s'), - ]); - } - - /** - * Deletes note with given id. - * @param int $id - * @return int - */ - public function delete($id) - { - return $this->getTable()->where([ - 'id' => $id, - 'user_id' => $this->user->getId(), - ])->delete(); - } - - /** - * @return Nette\Database\Table\Selection - */ - protected function getTable() - { - return $this->database->table('notes'); - } - -} diff --git a/nette/native_db/notejam/app/model/PadManager.php b/nette/native_db/notejam/app/model/PadManager.php deleted file mode 100644 index 306d8f95f..000000000 --- a/nette/native_db/notejam/app/model/PadManager.php +++ /dev/null @@ -1,100 +0,0 @@ -database = $database; - $this->user = $user; - } - - /** - * Finds pad with given id. - * @param int $id - * @return Nette\Database\Table\IRow|bool The pad or FALSE if not found. - */ - public function find($id) - { - return $this->findAll()->where('id', $id)->fetch(); - } - - /** - * Finds all pads. - * @return Nette\Database\Table\Selection - */ - public function findAll() - { - return $this->getTable()->where('user_id', $this->user->getId()); - } - - /** - * Adds new pad. - * @param string $name - * @return bool|int|Nette\Database\Table\IRow - */ - public function add($name) - { - return $this->getTable()->insert([ - 'name' => $name, - 'user_id' => $this->user->getId(), - ]); - } - - /** - * Updates pad with given id. - * @param int $id - * @param string $name - * @return int - */ - public function update($id, $name) - { - return $this->getTable()->where([ - 'id' => $id, - 'user_id' => $this->user->getId(), - ])->update([ - 'name' => $name, - ]); - } - - /** - * Deletes pad with given id. - * @param int $id - * @return int - */ - public function delete($id) - { - return $this->getTable()->where([ - 'id' => $id, - 'user_id' => $this->user->getId(), - ])->delete(); - } - - /** - * @return Nette\Database\Table\Selection - */ - protected function getTable() - { - return $this->database->table('pads'); - } - -} diff --git a/nette/native_db/notejam/app/model/UserManager.php b/nette/native_db/notejam/app/model/UserManager.php deleted file mode 100644 index 1365a33cb..000000000 --- a/nette/native_db/notejam/app/model/UserManager.php +++ /dev/null @@ -1,123 +0,0 @@ -database = $database; - } - - /** - * Performs an authentication. - * @param array $credentials - * @return Nette\Security\Identity - * @throws Nette\Security\AuthenticationException - */ - public function authenticate(array $credentials) - { - list($email, $password) = $credentials; - - $row = $this->findByEmail($email); - - if (!$row) { - throw new Nette\Security\AuthenticationException(sprintf('Unknown user', $email), self::IDENTITY_NOT_FOUND); - - } elseif (!Passwords::verify($password, $row['password'])) { - throw new Nette\Security\AuthenticationException('Invalid password', self::INVALID_CREDENTIAL); - - } elseif (Passwords::needsRehash($row['password'])) { - $row->update([ - 'password' => Passwords::hash($password), - ]); - } - - $arr = $row->toArray(); - unset($arr['password']); - return new Nette\Security\Identity($row['id'], null, $arr); - } - - - /** - * Adds new user. - * @param string $email - * @param string $password - * @throws DuplicateNameException - */ - public function add($email, $password) - { - if ($this->getTable()->where('email', $email)->count() > 0) { - throw new DuplicateNameException("User with given email already registered"); - } - - $this->getTable()->insert([ - 'email' => $email, - 'password' => Passwords::hash($password), - ]); - } - - /** - * @param $id - * @param $password - * @return bool - */ - public function checkPassword($id, $password) - { - $user = $this->getTable()->get($id); - return $user && Passwords::verify($password, $user->password); - } - - /** - * Changes password of the user with given id. - * @param int $id - * @param string $new - * @return int - */ - public function setNewPassword($id, $new) - { - return $this->getTable()->where('id', $id)->update([ - 'password' => Passwords::hash($new) - ]); - } - - /** - * Finds user by given email. - * @param string $email - * @return bool|mixed|Nette\Database\Table\IRow - */ - public function findByEmail($email) - { - return $this->getTable()->where('email', $email)->fetch(); - } - - /** - * @return Nette\Database\Table\Selection - */ - protected function getTable() - { - return $this->database->table('users'); - } - -} - - -class DuplicateNameException extends \Exception -{ - -} diff --git a/nette/native_db/notejam/app/presenters/AccountPresenter.php b/nette/native_db/notejam/app/presenters/AccountPresenter.php deleted file mode 100644 index 0903c195e..000000000 --- a/nette/native_db/notejam/app/presenters/AccountPresenter.php +++ /dev/null @@ -1,35 +0,0 @@ -formFactory->create(); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('Password is successfully changed', 'success'); - $this->redirect('Homepage:'); - }; - return $form; - } - -} diff --git a/nette/native_db/notejam/app/presenters/BasePresenter.php b/nette/native_db/notejam/app/presenters/BasePresenter.php deleted file mode 100644 index 96d1dacf8..000000000 --- a/nette/native_db/notejam/app/presenters/BasePresenter.php +++ /dev/null @@ -1,47 +0,0 @@ -userBarFactory->create(); - } - - /** - * @return \App\Components\Pads\Pads - */ - protected function createComponentPads() - { - $this->pads = $this->padManager->findAll(); - return $this->padsFactory->create($this->pads); - } - -} diff --git a/nette/native_db/notejam/app/presenters/Error4xxPresenter.php b/nette/native_db/notejam/app/presenters/Error4xxPresenter.php deleted file mode 100644 index c25c651a2..000000000 --- a/nette/native_db/notejam/app/presenters/Error4xxPresenter.php +++ /dev/null @@ -1,21 +0,0 @@ -getCode()}.latte"; - $this->template->setFile(is_file($file) ? $file : __DIR__ . '/templates/Error/4xx.latte'); - } - -} diff --git a/nette/native_db/notejam/app/presenters/ErrorPresenter.php b/nette/native_db/notejam/app/presenters/ErrorPresenter.php deleted file mode 100644 index 6067dee05..000000000 --- a/nette/native_db/notejam/app/presenters/ErrorPresenter.php +++ /dev/null @@ -1,42 +0,0 @@ -logger = $logger; - } - - /** - * @return Nette\Application\IResponse - */ - public function run(Nette\Application\Request $request) - { - $e = $request->getParameter('exception'); - - if ($e instanceof Nette\Application\BadRequestException) { - // $this->logger->log("HTTP code {$e->getCode()}: {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", 'access'); - return new Nette\Application\Responses\ForwardResponse($request->setPresenterName('Error4xx')); - } - - $this->logger->log($e, ILogger::EXCEPTION); - return new Nette\Application\Responses\CallbackResponse(function () { - require __DIR__ . '/templates/Error/500.phtml'; - }); - } - -} diff --git a/nette/native_db/notejam/app/presenters/HomepagePresenter.php b/nette/native_db/notejam/app/presenters/HomepagePresenter.php deleted file mode 100644 index eaeacb42a..000000000 --- a/nette/native_db/notejam/app/presenters/HomepagePresenter.php +++ /dev/null @@ -1,51 +0,0 @@ -notesFactory->create($this->notes); - } - - /** - * Homepage:default. - * @param string $order - */ - public function actionDefault($order) - { - $this->notes = $this->noteManager->findAll(); - if ($order) { - $this->notes->order(OrderHelper::translateParameterToColumns($order)); - } - } - - /** - * Homepage:default render. - */ - public function renderDefault() - { - $this->template->notes = $this->notes; - } - -} diff --git a/nette/native_db/notejam/app/presenters/NotePresenter.php b/nette/native_db/notejam/app/presenters/NotePresenter.php deleted file mode 100644 index ab344412b..000000000 --- a/nette/native_db/notejam/app/presenters/NotePresenter.php +++ /dev/null @@ -1,183 +0,0 @@ -editPadFormFactory->create($this->note->id, $this->note->name, $this->note->text, $this->note->pad_id); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('Note successfully updated', 'success'); - $this->redirect('default', ['id' => $this->id]); - }; - return $form; - } - - /** - * Creates DeleteNoteForm component. - * Called automagically by the framework. - * @return \Nette\Application\UI\Form - */ - protected function createComponentDeleteNoteForm() - { - $form = $this->deletePadFormFactory->create($this->id); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('Note successfully deleted', 'success'); - $this->redirect('Homepage:'); - }; - return $form; - } - - /** - * Creates NewNoteForm component. - * Called automagically by the framework. - * @return \Nette\Application\UI\Form - */ - protected function createComponentNewNoteForm() - { - $form = $this->newPadFormFactory->create($this->padId); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('Note successfully created', 'success'); - $this->redirect('Homepage:'); - }; - return $form; - } - - /** - * Note:default. - * @param int $id - * @throws BadRequestException - */ - public function actionDefault($id) - { - $this->loadNote($id); - $this->notes = $this->noteManager->findByPad($id); - } - - /** - * Note:default render. - */ - public function renderDefault() - { - $this->template->note = $this->note; - } - - /** - * Note:edit. - * @param int $id - * @throws BadRequestException - */ - public function actionEdit($id) - { - $this->loadNote($id); - } - - /** - * Note:edit render. - */ - public function renderEdit() - { - $this->template->note = $this->note; - } - - /** - * Note:delete. - * @param int $id - * @throws BadRequestException - */ - public function actionDelete($id) - { - $this->loadNote($id); - } - - /** - * Note:delete render. - */ - public function renderDelete() - { - $this->template->note = $this->note; - } - - /** - * Note:new. - * @param int $pad - */ - public function actionNew($pad) - { - $this->padId = $pad; - } - - /** - * Loads note with given id and if not found, throws BadRequestException. - * @param int $id - * @throws BadRequestException - */ - private function loadNote($id) - { - $this->id = $id; - $this->note = $this->noteManager->find($this->id); - if (!$this->note) { - throw new BadRequestException("Pad with given id not found"); - } - } - -} diff --git a/nette/native_db/notejam/app/presenters/PadPresenter.php b/nette/native_db/notejam/app/presenters/PadPresenter.php deleted file mode 100644 index c15961cc0..000000000 --- a/nette/native_db/notejam/app/presenters/PadPresenter.php +++ /dev/null @@ -1,189 +0,0 @@ -editPadFormFactory->create($this->id, $this->pad->name); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('Pad successfully updated', 'success'); - $this->redirect('Homepage:'); - }; - return $form; - } - - /** - * Creates DeletePadForm component. - * Called automagically by the framework. - * @return \Nette\Application\UI\Form - */ - protected function createComponentDeletePadForm() - { - $form = $this->deletePadFormFactory->create($this->id); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('Pad successfully deleted', 'success'); - $this->redirect('Homepage:'); - }; - return $form; - } - - /** - * Creates NewPadForm component. - * Called automagically by the framework. - * @return \Nette\Application\UI\Form - */ - protected function createComponentNewPadForm() - { - $form = $this->newPadFormFactory->create(); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('Pad successfully created', 'success'); - $this->redirect('Homepage:'); - }; - return $form; - } - - /** - * Creates Notes component. - * Called automagically by the framework. - * @return \App\Components\Notes\Notes - */ - protected function createComponentNotes() - { - return $this->notesFactory->create($this->notes, $this->pad); - } - - /** - * Pad:default. - * @param int $id - * @param string|null $order - * @throws BadRequestException - */ - public function actionDefault($id, $order) - { - $this->loadPad($id); - $this->notes = $this->noteManager->findByPad($id); - if ($order) { - $this->notes->order(OrderHelper::translateParameterToColumns($order)); - } - } - - /** - * Pad:default render. - */ - public function renderDefault() - { - $this->template->pad = $this->pad; - } - - /** - * Pad:edit. - * @param int $id - * @throws BadRequestException - */ - public function actionEdit($id) - { - $this->loadPad($id); - } - - /** - * Pad:edit render. - */ - public function renderEdit() - { - $this->template->pad = $this->pad; - } - - /** - * Pad:delete. - * @param int $id - * @throws BadRequestException - */ - public function actionDelete($id) - { - $this->loadPad($id); - } - - /** - * Pad:delete render. - */ - public function renderDelete() - { - $this->template->pad = $this->pad; - } - - /** - * Loads pad with given id and if not found, throws BadRequestException. - * @param int $id - * @throws BadRequestException - */ - private function loadPad($id) - { - $this->id = $id; - $this->pad = $this->padManager->find($this->id); - if (!$this->pad) { - throw new BadRequestException("Pad with given id not found"); - } - } - -} diff --git a/nette/native_db/notejam/app/presenters/SecuredBasePresenter.php b/nette/native_db/notejam/app/presenters/SecuredBasePresenter.php deleted file mode 100644 index d9838e6b1..000000000 --- a/nette/native_db/notejam/app/presenters/SecuredBasePresenter.php +++ /dev/null @@ -1,20 +0,0 @@ -user->isLoggedIn()) { - $this->redirect('Sign:in', ['backlink' => $this->storeRequest()]); - } - } - -} diff --git a/nette/native_db/notejam/app/presenters/SignPresenter.php b/nette/native_db/notejam/app/presenters/SignPresenter.php deleted file mode 100644 index 8a51cb89d..000000000 --- a/nette/native_db/notejam/app/presenters/SignPresenter.php +++ /dev/null @@ -1,116 +0,0 @@ -forgottenPasswordFormFactory->create(); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('New password sent to your inbox', 'success'); - $this->redirect('Sign:in'); - }; - return $form; - } - - /** - * Creates SignInForm component. - * Called automagically by the framework. - * @return Nette\Application\UI\Form - */ - protected function createComponentSignInForm() - { - $form = $this->signInFormFactory->create(); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->restoreRequest($this->backlink); - $this->redirect('Homepage:'); - }; - return $form; - } - - - /** - * Creates SignUpForm component. - * Called automagically by the framework. - * @return Nette\Application\UI\Form - */ - protected function createComponentSignUpForm() - { - $form = $this->signUpFormFactory->create(); - $form->onError[] = function ($form) { - foreach ($form->getErrors() as $error) { - $this->flashMessage($error, 'error'); - } - }; - $form->onSuccess[] = function () { - $this->flashMessage('User is successfully created. Now you can sign in.', 'success'); - $this->redirect('Sign:in'); - }; - return $form; - } - - /** - * Sign:in. - */ - public function actionIn() - { - if ($this->user->isLoggedIn()) { - $this->redirect('Homepage:'); - } - } - - /** - * Sign:up. - */ - public function actionUp() - { - if ($this->user->isLoggedIn()) { - $this->redirect('Homepage:'); - } - } - - /** - * Sign:out. - */ - public function actionOut() - { - $this->getUser()->logout(true); - $this->flashMessage('You have been signed out.', 'info'); - $this->redirect('in'); - } - -} diff --git a/nette/native_db/notejam/app/presenters/templates/@layout.latte b/nette/native_db/notejam/app/presenters/templates/@layout.latte deleted file mode 100644 index 57cb82c51..000000000 --- a/nette/native_db/notejam/app/presenters/templates/@layout.latte +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - Notejam{ifset title}: {include title|striptags}{/ifset} - - - - - - - - - - - - - - - -
- {if $user->isLoggedIn()} - {control userBar} - {else} -
- -
- {/if} - -
-

notejam: - {include header} -

-
- - {if $user->isLoggedIn() && !$presenter->isLinkCurrent('Account:settings')} - {control pads} - {/if} - -
-
-
{$flash->message}
-
- {include content} -
- - - -
- - Fork me on GitHub - - - diff --git a/nette/native_db/notejam/app/presenters/templates/Account/settings.latte b/nette/native_db/notejam/app/presenters/templates/Account/settings.latte deleted file mode 100644 index d5e1a7424..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Account/settings.latte +++ /dev/null @@ -1,13 +0,0 @@ -{block title}Account settings{/block} -{block header}Account settings{/block} -{block content} - -{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Error/403.latte b/nette/native_db/notejam/app/presenters/templates/Error/403.latte deleted file mode 100644 index de00328e7..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Error/403.latte +++ /dev/null @@ -1,7 +0,0 @@ -{block content} -

Access Denied

- -

You do not have permission to view this page. Please try contact the web -site administrator if you believe you should be able to view this page.

- -

error 403

diff --git a/nette/native_db/notejam/app/presenters/templates/Error/404.latte b/nette/native_db/notejam/app/presenters/templates/Error/404.latte deleted file mode 100644 index 022001c2a..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Error/404.latte +++ /dev/null @@ -1,8 +0,0 @@ -{block content} -

Page Not Found

- -

The page you requested could not be found. It is possible that the address is -incorrect, or that the page no longer exists. Please use a search engine to find -what you are looking for.

- -

error 404

diff --git a/nette/native_db/notejam/app/presenters/templates/Error/405.latte b/nette/native_db/notejam/app/presenters/templates/Error/405.latte deleted file mode 100644 index d42489233..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Error/405.latte +++ /dev/null @@ -1,6 +0,0 @@ -{block content} -

Method Not Allowed

- -

The requested method is not allowed for the URL.

- -

error 405

diff --git a/nette/native_db/notejam/app/presenters/templates/Error/410.latte b/nette/native_db/notejam/app/presenters/templates/Error/410.latte deleted file mode 100644 index 99bde92c1..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Error/410.latte +++ /dev/null @@ -1,6 +0,0 @@ -{block content} -

Page Not Found

- -

The page you requested has been taken off the site. We apologize for the inconvenience.

- -

error 410

diff --git a/nette/native_db/notejam/app/presenters/templates/Error/4xx.latte b/nette/native_db/notejam/app/presenters/templates/Error/4xx.latte deleted file mode 100644 index d5ce82f19..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Error/4xx.latte +++ /dev/null @@ -1,4 +0,0 @@ -{block content} -

Oops...

- -

Your browser sent a request that this server could not understand or process.

diff --git a/nette/native_db/notejam/app/presenters/templates/Error/500.phtml b/nette/native_db/notejam/app/presenters/templates/Error/500.phtml deleted file mode 100644 index 619611eac..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Error/500.phtml +++ /dev/null @@ -1,20 +0,0 @@ - - - -Server Error - - - -
-

Server Error

- -

We're sorry! The server encountered an internal error and - was unable to complete your request. Please try again later.

- -

error 500

-
diff --git a/nette/native_db/notejam/app/presenters/templates/Homepage/default.latte b/nette/native_db/notejam/app/presenters/templates/Homepage/default.latte deleted file mode 100644 index 616841a40..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Homepage/default.latte +++ /dev/null @@ -1,6 +0,0 @@ -{block title}All notes ({count($notes)}){/block} -{block header}All notes ({count($notes)}){/block} -{block content} - {control notes} - New note -{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Note/default.latte b/nette/native_db/notejam/app/presenters/templates/Note/default.latte deleted file mode 100644 index 3f72e1232..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Note/default.latte +++ /dev/null @@ -1,9 +0,0 @@ -{block title}{$note->name}{/block} -{block header}{$note->name}{/block} -{block content} -

Last edited {$note->updated_at|date:'d. M. Y'}

-

{$note->text}

-
- Edit - Delete it -{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Note/delete.latte b/nette/native_db/notejam/app/presenters/templates/Note/delete.latte deleted file mode 100644 index 1ab2ab7f5..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Note/delete.latte +++ /dev/null @@ -1,9 +0,0 @@ -{block title}{$note->name}{/block} -{block header}{$note->name}{/block} -{block content} -

Are you sure you want to delete the note?

-
-   - Cancel -
-{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Note/edit.latte b/nette/native_db/notejam/app/presenters/templates/Note/edit.latte deleted file mode 100644 index 5066cc048..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Note/edit.latte +++ /dev/null @@ -1,13 +0,0 @@ -{block title}{$note->name}{/block} -{block header}{$note->name}{/block} -{block content} -
- - - - - - - -
-{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Note/new.latte b/nette/native_db/notejam/app/presenters/templates/Note/new.latte deleted file mode 100644 index 4b3f7daba..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Note/new.latte +++ /dev/null @@ -1,13 +0,0 @@ -{block title}New note{/block} -{block header}New note{/block} -{block content} -
- - - - - - - -
-{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Pad/default.latte b/nette/native_db/notejam/app/presenters/templates/Pad/default.latte deleted file mode 100644 index 86e3c6904..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Pad/default.latte +++ /dev/null @@ -1,8 +0,0 @@ -{block title}New pad{/block} -{block header}New pad{/block} -{block content} - {control notes} - New note -   - Pad settings -{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Pad/delete.latte b/nette/native_db/notejam/app/presenters/templates/Pad/delete.latte deleted file mode 100644 index dbc159065..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Pad/delete.latte +++ /dev/null @@ -1,9 +0,0 @@ -{block title}{$pad->name}{/block} -{block header}{$pad->name}{/block} -{block content} -

Are you sure you want to delete the pad?

-
-   - Cancel -
-{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Pad/edit.latte b/nette/native_db/notejam/app/presenters/templates/Pad/edit.latte deleted file mode 100644 index 95decdce9..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Pad/edit.latte +++ /dev/null @@ -1,11 +0,0 @@ -{block title}{$pad->name}{/block} -{block header}{$pad->name}{/block} -{block content} -
- - - - - -
-{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Pad/new.latte b/nette/native_db/notejam/app/presenters/templates/Pad/new.latte deleted file mode 100644 index 70acc715b..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Pad/new.latte +++ /dev/null @@ -1,9 +0,0 @@ -{block title}New pad{/block} -{block header}New pad{/block} -{block content} -
- - - -
-{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Sign/forgotten.latte b/nette/native_db/notejam/app/presenters/templates/Sign/forgotten.latte deleted file mode 100644 index 7f2702b6d..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Sign/forgotten.latte +++ /dev/null @@ -1,9 +0,0 @@ -{block title}Frogot password?{/block} -{block header}Forgot password?{/block} -{block content} - -{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Sign/in.latte b/nette/native_db/notejam/app/presenters/templates/Sign/in.latte deleted file mode 100644 index 0644d8aa9..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Sign/in.latte +++ /dev/null @@ -1,13 +0,0 @@ -{block title}Sign In{/block} -{block header}Sign In{/block} -{block content} - -{/block} diff --git a/nette/native_db/notejam/app/presenters/templates/Sign/up.latte b/nette/native_db/notejam/app/presenters/templates/Sign/up.latte deleted file mode 100644 index b742ab8ee..000000000 --- a/nette/native_db/notejam/app/presenters/templates/Sign/up.latte +++ /dev/null @@ -1,15 +0,0 @@ -{block title}Sign Up{/block} -{block header}Sign Up{/block} -{block content} - -{/block} diff --git a/nette/native_db/notejam/app/router/RouterFactory.php b/nette/native_db/notejam/app/router/RouterFactory.php deleted file mode 100644 index c601dec2a..000000000 --- a/nette/native_db/notejam/app/router/RouterFactory.php +++ /dev/null @@ -1,40 +0,0 @@ -', 'Note:default'); - $router[] = new Route('/notes//edit', 'Note:edit'); - $router[] = new Route('/notes//delete', 'Note:delete'); - - $router[] = new Route('/pads/create', 'Pad:new'); - $router[] = new Route('/pads/', 'Pad:default'); - $router[] = new Route('/pads//edit', 'Pad:edit'); - $router[] = new Route('/pads//delete', 'Pad:delete'); - - $router[] = new Route('[/]', 'Homepage:default'); - return $router; - } - -} diff --git a/nette/native_db/notejam/bin/create-db.php b/nette/native_db/notejam/bin/create-db.php deleted file mode 100644 index 5df629192..000000000 --- a/nette/native_db/notejam/bin/create-db.php +++ /dev/null @@ -1,29 +0,0 @@ -getByType('Nette\Database\Context'); -$db->getConnection()->query(" -CREATE TABLE IF NOT EXISTS users ( - id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - email VARCHAR(75) NOT NULL, - password VARCHAR(128) NOT NULL -);"); - -$db->getConnection()->query(" -CREATE TABLE IF NOT EXISTS pads ( - id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - name VARCHAR(100) NOT NULL, - user_id INTEGER NOT NULL REFERENCES users(id) -);"); - -$db->getConnection()->query(" -CREATE TABLE notes ( - id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - pad_id INTEGER REFERENCES pads(id), - user_id INTEGER NOT NULL REFERENCES users(id), - name VARCHAR(100) NOT NULL, - text text NOT NULL, - created_at DATETIME NOT NULL, - updated_at DATETIME NOT NULL -);"); diff --git a/nette/native_db/notejam/codeception.yml b/nette/native_db/notejam/codeception.yml deleted file mode 100644 index 15019d00a..000000000 --- a/nette/native_db/notejam/codeception.yml +++ /dev/null @@ -1,23 +0,0 @@ -actor: Tester -paths: - tests: tests - log: tests/_output - data: tests/_data - support: tests/_support - envs: tests/_envs -settings: - bootstrap: _bootstrap.php - colors: true - memory_limit: 1024M -extensions: - enabled: - - Codeception\Extension\RunFailed -modules: - config: - Db: - dsn: 'sqlite:notejam.db' - user: - password: - dump: tests/_data/dump.sql - populate: true - cleanup: true diff --git a/nette/native_db/notejam/composer.json b/nette/native_db/notejam/composer.json deleted file mode 100644 index e261b7a05..000000000 --- a/nette/native_db/notejam/composer.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "nette/sandbox", - "description": "The sandbox is a pre-packaged Nette Framework project, basic configured structure for your application.", - "homepage": "https://nette.org", - "type": "project", - "license": ["BSD-3-Clause", "GPL-2.0", "GPL-3.0"], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "require": { - "php": ">= 5.3.7", - "nette/application": "~2.3.6", - "nette/bootstrap": "~2.3.0", - "nette/caching": "~2.3.0", - "nette/database": "~2.3.0", - "nette/di": "~2.3.0", - "nette/finder": "~2.3.0", - "nette/forms": "~2.3.0", - "nette/http": "~2.3.0", - "nette/mail": "~2.3.0", - "nette/robot-loader": "~2.3.0", - "nette/safe-stream": "~2.3.0", - "nette/security": "~2.3.0", - "nette/utils": "~2.3.0", - "latte/latte": "~2.3.0", - "tracy/tracy": "~2.3.0", - "dg/adminer-custom": "~1.6" - }, - "require-dev": { - "codeception/codeception": "*" - } -} diff --git a/nette/native_db/notejam/composer.lock b/nette/native_db/notejam/composer.lock deleted file mode 100644 index ca68de2e1..000000000 --- a/nette/native_db/notejam/composer.lock +++ /dev/null @@ -1,2697 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "42813a0174e5fbe7e251f6af01ccfeba", - "content-hash": "9f640b3bb59ce0b58222c5594953b85f", - "packages": [ - { - "name": "dg/adminer-custom", - "version": "v1.6.4", - "source": { - "type": "git", - "url": "https://github.com/dg/adminer-custom.git", - "reference": "5215a1fa29ae9fc4304a867ce972f252b12921b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dg/adminer-custom/zipball/5215a1fa29ae9fc4304a867ce972f252b12921b0", - "reference": "5215a1fa29ae9fc4304a867ce972f252b12921b0", - "shasum": "" - }, - "type": "project", - "notification-url": "https://packagist.org/downloads/", - "description": "Customization for the best database management tool written in PHP, Adminer", - "time": "2015-09-07 07:29:02" - }, - { - "name": "latte/latte", - "version": "v2.3.7", - "source": { - "type": "git", - "url": "https://github.com/nette/latte.git", - "reference": "b6e090e461c9cd88d60ae79a7713990b17b1531c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/latte/zipball/b6e090e461c9cd88d60ae79a7713990b17b1531c", - "reference": "b6e090e461c9cd88d60ae79a7713990b17b1531c", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.1" - }, - "require-dev": { - "nette/tester": "~1.3" - }, - "suggest": { - "ext-fileinfo": "to use filter |datastream", - "ext-mbstring": "to use filters like lower, upper, capitalize, ..." - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Latte: the amazing template engine for PHP", - "homepage": "https://latte.nette.org", - "keywords": [ - "templating", - "twig" - ], - "time": "2015-11-07 22:54:05" - }, - { - "name": "nette/application", - "version": "v2.3.7", - "source": { - "type": "git", - "url": "https://github.com/nette/application.git", - "reference": "8e87ae81c2098abd7895bfd96d9fac1cd332abc3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/application/zipball/8e87ae81c2098abd7895bfd96d9fac1cd332abc3", - "reference": "8e87ae81c2098abd7895bfd96d9fac1cd332abc3", - "shasum": "" - }, - "require": { - "nette/component-model": "~2.2", - "nette/http": "~2.2", - "nette/reflection": "~2.2", - "nette/security": "~2.2", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "~2.3.0", - "nette/di": "~2.3", - "nette/forms": "~2.2", - "nette/robot-loader": "~2.2", - "nette/tester": "~1.3" - }, - "suggest": { - "latte/latte": "Allows using Latte in templates", - "nette/forms": "Allows to use Nette\\Application\\UI\\Form" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Application MVC Component", - "homepage": "https://nette.org", - "time": "2015-10-13 14:33:28" - }, - { - "name": "nette/bootstrap", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/bootstrap.git", - "reference": "8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/bootstrap/zipball/8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e", - "reference": "8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e", - "shasum": "" - }, - "require": { - "nette/di": "~2.3", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "~2.2", - "nette/application": "~2.3", - "nette/caching": "~2.3", - "nette/database": "~2.3", - "nette/forms": "~2.3", - "nette/http": "~2.3", - "nette/mail": "~2.3", - "nette/robot-loader": "~2.2", - "nette/safe-stream": "~2.2", - "nette/security": "~2.3", - "nette/tester": "~1.3", - "tracy/tracy": "~2.3" - }, - "suggest": { - "nette/robot-loader": "to use Configurator::createRobotLoader()", - "tracy/tracy": "to use Configurator::enableDebugger()" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Bootstrap", - "homepage": "http://nette.org", - "time": "2015-07-11 21:07:11" - }, - { - "name": "nette/caching", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "d4be13806d70c02d53b72cc63e93de6cf813f50f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/d4be13806d70c02d53b72cc63e93de6cf813f50f", - "reference": "d4be13806d70c02d53b72cc63e93de6cf813f50f", - "shasum": "" - }, - "require": { - "nette/finder": "~2.2", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "~2.3.0", - "nette/di": "~2.3", - "nette/tester": "~1.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Caching Component", - "homepage": "http://nette.org", - "time": "2015-07-11 21:09:42" - }, - { - "name": "nette/component-model", - "version": "v2.2.4", - "source": { - "type": "git", - "url": "https://github.com/nette/component-model.git", - "reference": "07bce436051fd92d084642ce7a47f00045e0d1e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/component-model/zipball/07bce436051fd92d084642ce7a47f00045e0d1e5", - "reference": "07bce436051fd92d084642ce7a47f00045e0d1e5", - "shasum": "" - }, - "require": { - "nette/utils": "^2.3.5", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Component Model", - "homepage": "https://nette.org", - "time": "2015-10-06 17:54:05" - }, - { - "name": "nette/database", - "version": "v2.3.7", - "source": { - "type": "git", - "url": "https://github.com/nette/database.git", - "reference": "32ab8af7abb405c6415ef335d3395dea9d575859" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/database/zipball/32ab8af7abb405c6415ef335d3395dea9d575859", - "reference": "32ab8af7abb405c6415ef335d3395dea9d575859", - "shasum": "" - }, - "require": { - "ext-pdo": "*", - "nette/caching": "~2.2", - "nette/utils": "^2.3.5", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "mockery/mockery": "~0.9.1", - "nette/di": "~2.3", - "nette/tester": "~1.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Database Component", - "homepage": "https://nette.org", - "time": "2015-10-05 13:16:36" - }, - { - "name": "nette/di", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/nette/di.git", - "reference": "efa1d13f016b58b4a9200802c9c5b14d10d72e85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/di/zipball/efa1d13f016b58b4a9200802c9c5b14d10d72e85", - "reference": "efa1d13f016b58b4a9200802c9c5b14d10d72e85", - "shasum": "" - }, - "require": { - "nette/neon": "^2.3.3", - "nette/php-generator": "^2.3.3", - "nette/utils": "~2.3", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Dependency Injection Component", - "homepage": "http://nette.org", - "time": "2015-09-14 18:18:24" - }, - { - "name": "nette/finder", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "38f803a03f4cddf352e28af70294c71f7026e516" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/38f803a03f4cddf352e28af70294c71f7026e516", - "reference": "38f803a03f4cddf352e28af70294c71f7026e516", - "shasum": "" - }, - "require": { - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Finder: Files Searching", - "homepage": "http://nette.org", - "time": "2015-07-11 21:13:50" - }, - { - "name": "nette/forms", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/nette/forms.git", - "reference": "5e07a7b7180e5e88db9d44e12f1677e36b4f164b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/forms/zipball/5e07a7b7180e5e88db9d44e12f1677e36b4f164b", - "reference": "5e07a7b7180e5e88db9d44e12f1677e36b4f164b", - "shasum": "" - }, - "require": { - "nette/component-model": "~2.2", - "nette/http": "~2.2", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "~2.3.2", - "nette/di": "~2.3", - "nette/tester": "~1.3", - "tracy/tracy": "~2.2" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Forms: greatly facilitates web forms", - "homepage": "https://nette.org", - "time": "2015-10-19 01:41:55" - }, - { - "name": "nette/http", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/http.git", - "reference": "ff2e4608391bca2444df9af6eaf8666ac853eb02" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/http/zipball/ff2e4608391bca2444df9af6eaf8666ac853eb02", - "reference": "ff2e4608391bca2444df9af6eaf8666ac853eb02", - "shasum": "" - }, - "require": { - "nette/utils": "~2.2, >=2.2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/tester": "~1.4" - }, - "suggest": { - "ext-fileinfo": "to detect type of uploaded files" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette HTTP Component", - "homepage": "http://nette.org", - "time": "2015-07-19 16:17:50" - }, - { - "name": "nette/mail", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/mail.git", - "reference": "4ea303d96c6a80ffe357baf59d387f4fe2cfd412" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/mail/zipball/4ea303d96c6a80ffe357baf59d387f4fe2cfd412", - "reference": "4ea303d96c6a80ffe357baf59d387f4fe2cfd412", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/tester": "~1.3" - }, - "suggest": { - "ext-fileinfo": "to detect type of attached files" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Mail: Sending E-mails", - "homepage": "https://nette.org", - "time": "2015-10-05 12:58:01" - }, - { - "name": "nette/neon", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/nette/neon.git", - "reference": "12bbb0e85ba8521dd291f4df0fe20a1b79aae32c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/neon/zipball/12bbb0e85ba8521dd291f4df0fe20a1b79aae32c", - "reference": "12bbb0e85ba8521dd291f4df0fe20a1b79aae32c", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=5.3.1" - }, - "require-dev": { - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette NEON: parser & generator for Nette Object Notation", - "homepage": "http://ne-on.org", - "time": "2015-08-22 15:23:30" - }, - { - "name": "nette/php-generator", - "version": "v2.3.4", - "source": { - "type": "git", - "url": "https://github.com/nette/php-generator.git", - "reference": "846028e9d885d2d8ec60823d995e1291bbe3eb69" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/846028e9d885d2d8ec60823d995e1291bbe3eb69", - "reference": "846028e9d885d2d8ec60823d995e1291bbe3eb69", - "shasum": "" - }, - "require": { - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette PHP Generator", - "homepage": "https://nette.org", - "time": "2015-10-09 14:34:13" - }, - { - "name": "nette/reflection", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/reflection.git", - "reference": "9c2ed2a29f1f58125a0f19ffc987812d6b17d3e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/reflection/zipball/9c2ed2a29f1f58125a0f19ffc987812d6b17d3e6", - "reference": "9c2ed2a29f1f58125a0f19ffc987812d6b17d3e6", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "nette/caching": "~2.2", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette PHP Reflection Component", - "homepage": "http://nette.org", - "time": "2015-07-11 21:34:53" - }, - { - "name": "nette/robot-loader", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/robot-loader.git", - "reference": "69331d359bbc9e5f911c12b82187cac914d983fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/robot-loader/zipball/69331d359bbc9e5f911c12b82187cac914d983fb", - "reference": "69331d359bbc9e5f911c12b82187cac914d983fb", - "shasum": "" - }, - "require": { - "nette/caching": "~2.2", - "nette/finder": "~2.3", - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette RobotLoader: comfortable autoloading", - "homepage": "http://nette.org", - "time": "2015-07-11 21:20:57" - }, - { - "name": "nette/safe-stream", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/safe-stream.git", - "reference": "bf30db367b51a0932c44dcb9a378927644d48b2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/safe-stream/zipball/bf30db367b51a0932c44dcb9a378927644d48b2e", - "reference": "bf30db367b51a0932c44dcb9a378927644d48b2e", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "files": [ - "src/loader.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette SafeStream: Atomic Operations", - "homepage": "http://nette.org", - "time": "2015-07-11 20:59:15" - }, - { - "name": "nette/security", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/security.git", - "reference": "744264a42b506d63009d7e3853ed72b04c99e964" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/security/zipball/744264a42b506d63009d7e3853ed72b04c99e964", - "reference": "744264a42b506d63009d7e3853ed72b04c99e964", - "shasum": "" - }, - "require": { - "nette/utils": "~2.2", - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/http": "~2.3", - "nette/tester": "~1.4" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "http://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "http://nette.org/contributors" - } - ], - "description": "Nette Security: Access Control Component", - "homepage": "http://nette.org", - "time": "2015-07-11 21:22:53" - }, - { - "name": "nette/utils", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "c9dfaec788eb65d5ef10cefed0ae63bc76febaa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/c9dfaec788eb65d5ef10cefed0ae63bc76febaa8", - "reference": "c9dfaec788eb65d5ef10cefed0ae63bc76febaa8", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~1.0" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", - "ext-mbstring": "to use Strings::lower() etc..." - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Utility Classes", - "homepage": "https://nette.org", - "time": "2015-10-05 12:18:24" - }, - { - "name": "tracy/tracy", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/nette/tracy.git", - "reference": "79831c75b6f48fcb897d25ccae5deec358cb2142" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/tracy/zipball/79831c75b6f48fcb897d25ccae5deec358cb2142", - "reference": "79831c75b6f48fcb897d25ccae5deec358cb2142", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "require-dev": { - "nette/di": "~2.3", - "nette/tester": "~1.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ], - "files": [ - "src/shortcuts.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Tracy: useful PHP debugger", - "homepage": "https://tracy.nette.org", - "keywords": [ - "debug", - "debugger", - "nette" - ], - "time": "2015-10-28 23:49:21" - } - ], - "packages-dev": [ - { - "name": "codeception/codeception", - "version": "2.1.4", - "source": { - "type": "git", - "url": "https://github.com/Codeception/Codeception.git", - "reference": "6a812e8a0d1b1db939a29b4dc14cb398b21b6112" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/6a812e8a0d1b1db939a29b4dc14cb398b21b6112", - "reference": "6a812e8a0d1b1db939a29b4dc14cb398b21b6112", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "facebook/webdriver": ">=1.0.1", - "guzzlehttp/guzzle": ">=4.1.4 <7.0", - "guzzlehttp/psr7": "~1.0", - "php": ">=5.4.0", - "phpunit/phpunit": "~4.8.0", - "symfony/browser-kit": "~2.4", - "symfony/console": "~2.4", - "symfony/css-selector": "~2.4", - "symfony/dom-crawler": "~2.4,!=2.4.5", - "symfony/event-dispatcher": "~2.4", - "symfony/finder": "~2.4", - "symfony/yaml": "~2.4" - }, - "require-dev": { - "codeception/specify": "~0.3", - "facebook/php-sdk-v4": "~4.0", - "flow/jsonpath": "~0.2", - "monolog/monolog": "~1.8", - "pda/pheanstalk": "~2.0", - "videlalvaro/php-amqplib": "~2.4" - }, - "suggest": { - "codeception/phpbuiltinserver": "Extension to start and stop PHP built-in web server for your tests", - "codeception/specify": "BDD-style code blocks", - "codeception/verify": "BDD-style assertions", - "monolog/monolog": "Log test steps", - "phpseclib/phpseclib": "Extension required to use the SFTP option in the FTP Module." - }, - "bin": [ - "codecept" - ], - "type": "library", - "extra": { - "branch-alias": [] - }, - "autoload": { - "psr-4": { - "Codeception\\": "src\\Codeception", - "Codeception\\Extension\\": "ext" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" - } - ], - "description": "BDD-style testing framework", - "homepage": "http://codeception.com/", - "keywords": [ - "BDD", - "TDD", - "acceptance testing", - "functional testing", - "unit testing" - ], - "time": "2015-11-12 03:57:06" - }, - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14 21:17:01" - }, - { - "name": "facebook/webdriver", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "a6e209a309bf7cd71acf15476f40b11a25d5a79d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/a6e209a309bf7cd71acf15476f40b11a25d5a79d", - "reference": "a6e209a309bf7cd71acf15476f40b11a25d5a79d", - "shasum": "" - }, - "require": { - "php": ">=5.3.19" - }, - "require-dev": { - "phpunit/phpunit": "4.6.*" - }, - "suggest": { - "phpdocumentor/phpdocumentor": "2.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "A PHP client for WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" - ], - "time": "2015-11-03 22:17:22" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.1.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "c6851d6e48f63b69357cbfa55bca116448140e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/c6851d6e48f63b69357cbfa55bca116448140e0c", - "reference": "c6851d6e48f63b69357cbfa55bca116448140e0c", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "~1.0", - "guzzlehttp/psr7": "~1.1", - "php": ">=5.5.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "~4.0", - "psr/log": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.1-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2015-11-23 00:47:50" - }, - { - "name": "guzzlehttp/promises", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2015-10-15 22:28:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "4d0bdbe1206df7440219ce14c972aa57cc5e4982" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/4d0bdbe1206df7440219ce14c972aa57cc5e4982", - "reference": "4d0bdbe1206df7440219ce14c972aa57cc5e4982", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "PSR-7 message implementation", - "keywords": [ - "http", - "message", - "stream", - "uri" - ], - "time": "2015-11-03 01:34:55" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2015-02-03 12:10:50" - }, - { - "name": "phpspec/prophecy", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7", - "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1" - }, - "require-dev": { - "phpspec/phpspec": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2015-08-13 10:07:40" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-10-06 15:47:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2015-06-21 13:08:43" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21 13:50:34" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2015-06-21 08:01:12" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-09-15 10:49:45" - }, - { - "name": "phpunit/phpunit", - "version": "4.8.18", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fa33d4ad96481b91df343d83e8c8aabed6b1dfd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fa33d4ad96481b91df343d83e8c8aabed6b1dfd3", - "reference": "fa33d4ad96481b91df343d83e8c8aabed6b1dfd3", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "~2.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": ">=1.0.6", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "~1.3", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.1|~3.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.8.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2015-11-11 11:32:49" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-10-02 06:51:40" - }, - { - "name": "psr/http-message", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2015-05-04 20:22:00" - }, - { - "name": "sebastian/comparator", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-07-26 15:48:44" - }, - { - "name": "sebastian/diff", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "http://www.github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-02-22 15:13:53" - }, - { - "name": "sebastian/environment", - "version": "1.3.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44", - "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2015-08-03 06:14:51" - }, - { - "name": "sebastian/exporter", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2015-06-21 07:55:53" - }, - { - "name": "sebastian/global-state", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2015-10-12 03:26:01" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "994d4a811bafe801fb06dccbee797863ba2792ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba", - "reference": "994d4a811bafe801fb06dccbee797863ba2792ba", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-06-21 08:04:50" - }, - { - "name": "sebastian/version", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" - }, - { - "name": "symfony/browser-kit", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/browser-kit.git", - "reference": "bd28847ea2193916074c7b11d4fdd78570049694" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/bd28847ea2193916074c7b11d4fdd78570049694", - "reference": "bd28847ea2193916074c7b11d4fdd78570049694", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/dom-crawler": "~2.0,>=2.0.5" - }, - "require-dev": { - "symfony/css-selector": "~2.0,>=2.0.5", - "symfony/process": "~2.3.34|~2.7,>=2.7.6" - }, - "suggest": { - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\BrowserKit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony BrowserKit Component", - "homepage": "https://symfony.com", - "time": "2015-11-02 20:20:53" - }, - { - "name": "symfony/console", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "16bb1cb86df43c90931df65f529e7ebd79636750" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/16bb1cb86df43c90931df65f529e7ebd79636750", - "reference": "16bb1cb86df43c90931df65f529e7ebd79636750", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1", - "symfony/process": "~2.1" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2015-11-18 09:54:26" - }, - { - "name": "symfony/css-selector", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "abb47717fb88aebd9437da2fc8bb01a50a36679f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/abb47717fb88aebd9437da2fc8bb01a50a36679f", - "reference": "abb47717fb88aebd9437da2fc8bb01a50a36679f", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com", - "time": "2015-10-30 20:10:21" - }, - { - "name": "symfony/dom-crawler", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "b33593cbfe1d81b50d48353f338aca76a08658d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b33593cbfe1d81b50d48353f338aca76a08658d8", - "reference": "b33593cbfe1d81b50d48353f338aca76a08658d8", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "symfony/css-selector": "~2.3" - }, - "suggest": { - "symfony/css-selector": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2015-11-02 20:20:53" - }, - { - "name": "symfony/event-dispatcher", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "7e2f9c31645680026c2372edf66f863fc7757af5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7e2f9c31645680026c2372edf66f863fc7757af5", - "reference": "7e2f9c31645680026c2372edf66f863fc7757af5", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.0,>=2.0.5", - "symfony/dependency-injection": "~2.6", - "symfony/expression-language": "~2.6", - "symfony/stopwatch": "~2.3" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2015-10-30 20:10:21" - }, - { - "name": "symfony/finder", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "a06a0c0ff7db3736a50d530c908cca547bf13da9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a06a0c0ff7db3736a50d530c908cca547bf13da9", - "reference": "a06a0c0ff7db3736a50d530c908cca547bf13da9", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2015-10-30 20:10:21" - }, - { - "name": "symfony/yaml", - "version": "v2.7.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "4cfcd7a9fceba662b3c036b7d9a91f6197af046c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4cfcd7a9fceba662b3c036b7d9a91f6197af046c", - "reference": "4cfcd7a9fceba662b3c036b7d9a91f6197af046c", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-11-18 13:41:01" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">= 5.3.7" - }, - "platform-dev": [] -} diff --git a/nette/native_db/notejam/tests/_bootstrap.php b/nette/native_db/notejam/tests/_bootstrap.php deleted file mode 100644 index 243f9c85b..000000000 --- a/nette/native_db/notejam/tests/_bootstrap.php +++ /dev/null @@ -1,2 +0,0 @@ -amOnPage('/signin'); - $this->see('Sign in'); - $this->fillField("Email", $email); - $this->fillField("Password", $password); - $this->click('Sign In'); - } - -} diff --git a/nette/native_db/notejam/tests/_support/FunctionalTester.php b/nette/native_db/notejam/tests/_support/FunctionalTester.php deleted file mode 100644 index 7e888f8b2..000000000 --- a/nette/native_db/notejam/tests/_support/FunctionalTester.php +++ /dev/null @@ -1,26 +0,0 @@ -wantTo('see note can be successfully created'); -$I->testLogin(); -$I->amOnPage('/notes/create'); -$I->fillField('Name', 'Example note'); -$I->fillField('Text', 'Lorem ipsum'); -$I->selectOption('Pad', 1); -$I->click('Save'); -$I->see('Example note'); diff --git a/nette/native_db/notejam/tests/acceptance/CreateNoteFailCept.php b/nette/native_db/notejam/tests/acceptance/CreateNoteFailCept.php deleted file mode 100644 index 4f768ee29..000000000 --- a/nette/native_db/notejam/tests/acceptance/CreateNoteFailCept.php +++ /dev/null @@ -1,9 +0,0 @@ -wantTo('see note can not be created without required fields'); -$I->testLogin(); -$I->amOnPage('/notes/create'); -$I->click('Save'); -$I->seeInCurrentUrl('/notes/create'); -$I->see('Name is required'); -$I->see('Text is required'); diff --git a/nette/native_db/notejam/tests/acceptance/CreatePadCept.php b/nette/native_db/notejam/tests/acceptance/CreatePadCept.php deleted file mode 100644 index 4926950ba..000000000 --- a/nette/native_db/notejam/tests/acceptance/CreatePadCept.php +++ /dev/null @@ -1,8 +0,0 @@ -wantTo('see pad can be successfully created'); -$I->testLogin(); -$I->amOnPage('/pads/create'); -$I->fillField('Name', 'Example pad'); -$I->click('Save'); -$I->see('Example pad'); diff --git a/nette/native_db/notejam/tests/acceptance/CreatePadFailCept.php b/nette/native_db/notejam/tests/acceptance/CreatePadFailCept.php deleted file mode 100644 index b8f61bbfa..000000000 --- a/nette/native_db/notejam/tests/acceptance/CreatePadFailCept.php +++ /dev/null @@ -1,9 +0,0 @@ -wantTo('see pad can not be created without required fields'); -$I->testLogin(); -$I->amOnPage('/pads/create'); -$I->click('Save'); -$I->dontSee('Example pad'); -$I->seeInCurrentUrl('/pads/create'); -$I->see('Name is required'); diff --git a/nette/native_db/notejam/tests/acceptance/DeleteNoteCept.php b/nette/native_db/notejam/tests/acceptance/DeleteNoteCept.php deleted file mode 100644 index fb718c70c..000000000 --- a/nette/native_db/notejam/tests/acceptance/DeleteNoteCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see note can be successfully deleted'); -$I->testLogin(); -$I->amOnPage('/notes/1/delete'); -$I->click('Yes, I want to delete this note'); -$I->dontSee('Note 1'); diff --git a/nette/native_db/notejam/tests/acceptance/DeleteOtherOwnersNoteCept.php b/nette/native_db/notejam/tests/acceptance/DeleteOtherOwnersNoteCept.php deleted file mode 100644 index f9f262da0..000000000 --- a/nette/native_db/notejam/tests/acceptance/DeleteOtherOwnersNoteCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see note can not be deleted by not an owner'); -$I->testLogin(); -$I->amOnPage('/notes/5/delete'); -$I->dontSee('Yes, I want to delete this note'); diff --git a/nette/native_db/notejam/tests/acceptance/DeleteOtherOwnersPadCept.php b/nette/native_db/notejam/tests/acceptance/DeleteOtherOwnersPadCept.php deleted file mode 100644 index 531887afe..000000000 --- a/nette/native_db/notejam/tests/acceptance/DeleteOtherOwnersPadCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see pad can not be deleted by not an owner'); -$I->testLogin(); -$I->amOnPage('/pads/4/delete'); -$I->dontSee('Yes, I want to delete this pad'); diff --git a/nette/native_db/notejam/tests/acceptance/DeletePadCept.php b/nette/native_db/notejam/tests/acceptance/DeletePadCept.php deleted file mode 100644 index f86354c75..000000000 --- a/nette/native_db/notejam/tests/acceptance/DeletePadCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see pad can be successfully deleted'); -$I->testLogin(); -$I->amOnPage('/pads/1/delete'); -$I->click('Yes, I want to delete this pad'); -$I->dontSee('Pad 1'); diff --git a/nette/native_db/notejam/tests/acceptance/EditNoteCept.php b/nette/native_db/notejam/tests/acceptance/EditNoteCept.php deleted file mode 100644 index 9012a2e35..000000000 --- a/nette/native_db/notejam/tests/acceptance/EditNoteCept.php +++ /dev/null @@ -1,12 +0,0 @@ -wantTo('see note can be successfully edited'); -$I->testLogin(); -$I->amOnPage('/notes/1/edit'); -$I->fillField('Name', 'Note 1 - edited'); -$I->fillField('Text', 'Lorem ipsum - edited'); -$I->selectOption('Pad', 1); -$I->click('Save'); -$I->see('Note 1 - edited'); -$I->amOnPage('/pads/1'); -$I->see('Note 1 - edited'); diff --git a/nette/native_db/notejam/tests/acceptance/EditNoteFailCept.php b/nette/native_db/notejam/tests/acceptance/EditNoteFailCept.php deleted file mode 100644 index f921f1475..000000000 --- a/nette/native_db/notejam/tests/acceptance/EditNoteFailCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('see note can not be edited without required fields'); -$I->testLogin(); -$I->amOnPage('/notes/1/edit'); -$I->fillField('Name', ''); -$I->fillField('Text', ''); -$I->click('Save'); -$I->seeInCurrentUrl('/notes/1/edit'); -$I->see('Name is required'); -$I->see('Text is required'); diff --git a/nette/native_db/notejam/tests/acceptance/EditOtherOwnersNoteCept.php b/nette/native_db/notejam/tests/acceptance/EditOtherOwnersNoteCept.php deleted file mode 100644 index 23d00f608..000000000 --- a/nette/native_db/notejam/tests/acceptance/EditOtherOwnersNoteCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see note can not be edited by not an owner'); -$I->testLogin(); -$I->amOnPage('/notes/5/edit'); -$I->dontSee('Save', 'input'); diff --git a/nette/native_db/notejam/tests/acceptance/EditOtherOwnersPadCept.php b/nette/native_db/notejam/tests/acceptance/EditOtherOwnersPadCept.php deleted file mode 100644 index 227f97916..000000000 --- a/nette/native_db/notejam/tests/acceptance/EditOtherOwnersPadCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see pad can not be edited by not an owner'); -$I->testLogin(); -$I->amOnPage('/pads/4/edit'); -$I->dontSee('Save', 'input'); diff --git a/nette/native_db/notejam/tests/acceptance/EditPadCept.php b/nette/native_db/notejam/tests/acceptance/EditPadCept.php deleted file mode 100644 index 923c9cc95..000000000 --- a/nette/native_db/notejam/tests/acceptance/EditPadCept.php +++ /dev/null @@ -1,8 +0,0 @@ -wantTo('see pad can be successfully edited'); -$I->testLogin(); -$I->amOnPage('/pads/1/edit'); -$I->fillField('Name', 'Pad 1 - edited'); -$I->click('Save'); -$I->see('Pad 1 - edited'); diff --git a/nette/native_db/notejam/tests/acceptance/EditPadFailCept.php b/nette/native_db/notejam/tests/acceptance/EditPadFailCept.php deleted file mode 100644 index a6614b736..000000000 --- a/nette/native_db/notejam/tests/acceptance/EditPadFailCept.php +++ /dev/null @@ -1,9 +0,0 @@ -wantTo('see pad cannot be edited without required fields'); -$I->testLogin(); -$I->amOnPage('/pads/1/edit'); -$I->fillField('Name', ''); -$I->click('Save'); -$I->seeInCurrentUrl('/pads/1/edit'); -$I->see('Name is required'); diff --git a/nette/native_db/notejam/tests/acceptance/ForgottenPasswordCept.php b/nette/native_db/notejam/tests/acceptance/ForgottenPasswordCept.php deleted file mode 100644 index aaeccdc3c..000000000 --- a/nette/native_db/notejam/tests/acceptance/ForgottenPasswordCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see user can successfully get new password'); -$I->amOnPage('/forgot-password'); -$I->fillField('Email', 'john.doe@example.com'); -$I->click('Get new password'); -$I->see('Sign in'); diff --git a/nette/native_db/notejam/tests/acceptance/ForgottenPasswordInvalidEmailCept.php b/nette/native_db/notejam/tests/acceptance/ForgottenPasswordInvalidEmailCept.php deleted file mode 100644 index 2be0e84ab..000000000 --- a/nette/native_db/notejam/tests/acceptance/ForgottenPasswordInvalidEmailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see user can not successfully get new password with invalid email'); -$I->amOnPage('/forgot-password'); -$I->fillField('Email', 'invalid'); -$I->click('Get new password'); -$I->see('Invalid email'); diff --git a/nette/native_db/notejam/tests/acceptance/ForgottenPasswordUnregisteredEmailCept.php b/nette/native_db/notejam/tests/acceptance/ForgottenPasswordUnregisteredEmailCept.php deleted file mode 100644 index 83702e1d2..000000000 --- a/nette/native_db/notejam/tests/acceptance/ForgottenPasswordUnregisteredEmailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see user can not successfully get new password with unregistered email'); -$I->amOnPage('/forgot-password'); -$I->fillField('Email', 'invalid@example.com'); -$I->click('Get new password'); -$I->see('No user with given email found'); diff --git a/nette/native_db/notejam/tests/acceptance/HomepageCept.php b/nette/native_db/notejam/tests/acceptance/HomepageCept.php deleted file mode 100644 index c7c7afd42..000000000 --- a/nette/native_db/notejam/tests/acceptance/HomepageCept.php +++ /dev/null @@ -1,8 +0,0 @@ -wantTo('see notes can be viewed successfully'); -$I->amOnPage('/'); -$I->seeInCurrentUrl('/signin'); -$I->testLogin(); -$I->seeCurrentUrlEquals('/'); -$I->see('My pads'); diff --git a/nette/native_db/notejam/tests/acceptance/NoteDetailCept.php b/nette/native_db/notejam/tests/acceptance/NoteDetailCept.php deleted file mode 100644 index 55c890c63..000000000 --- a/nette/native_db/notejam/tests/acceptance/NoteDetailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see note can be viewed successfully'); -$I->testLogin(); -$I->amOnPage('/notes/1'); -$I->see('Note 1'); -$I->see('Lorem ipsum'); diff --git a/nette/native_db/notejam/tests/acceptance/OtherOwnersNoteDetailCept.php b/nette/native_db/notejam/tests/acceptance/OtherOwnersNoteDetailCept.php deleted file mode 100644 index 2e65f0224..000000000 --- a/nette/native_db/notejam/tests/acceptance/OtherOwnersNoteDetailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see note can not be viewed by not an owner'); -$I->testLogin(); -$I->amOnPage('/notes/5'); -$I->dontSee('Other Note'); -$I->dontSee('Lorem ipsum'); diff --git a/nette/native_db/notejam/tests/acceptance/OtherOwnersPadDetailCept.php b/nette/native_db/notejam/tests/acceptance/OtherOwnersPadDetailCept.php deleted file mode 100644 index e169ae94f..000000000 --- a/nette/native_db/notejam/tests/acceptance/OtherOwnersPadDetailCept.php +++ /dev/null @@ -1,6 +0,0 @@ -wantTo('see pad can not be viewed by not an owner'); -$I->testLogin(); -$I->amOnPage('/pads/4'); -$I->dontSee('Other Pad'); diff --git a/nette/native_db/notejam/tests/acceptance/PadDetailCept.php b/nette/native_db/notejam/tests/acceptance/PadDetailCept.php deleted file mode 100644 index cc00bcf9a..000000000 --- a/nette/native_db/notejam/tests/acceptance/PadDetailCept.php +++ /dev/null @@ -1,7 +0,0 @@ -wantTo('see pad can be viewed'); -$I->testLogin(); -$I->amOnPage('/pads/1'); -$I->see('Pad 1'); -$I->see('Note 2'); // Note 2 belongs to Pad 1 diff --git a/nette/native_db/notejam/tests/acceptance/SetNewPasswordCept.php b/nette/native_db/notejam/tests/acceptance/SetNewPasswordCept.php deleted file mode 100644 index 5b4a95f91..000000000 --- a/nette/native_db/notejam/tests/acceptance/SetNewPasswordCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can successfully set new password'); -$I->testLogin(); -$I->amOnPage('/settings'); -$I->fillField('Current password', 'pass'); -$I->fillField('New Password', 'qwerty'); -$I->fillField('Confirm New Password', 'qwerty'); -$I->click('Change Password'); -$I->see('Account settings'); diff --git a/nette/native_db/notejam/tests/acceptance/SetNewPasswordFailCept.php b/nette/native_db/notejam/tests/acceptance/SetNewPasswordFailCept.php deleted file mode 100644 index 76160c170..000000000 --- a/nette/native_db/notejam/tests/acceptance/SetNewPasswordFailCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('see user can not set new password without required fields'); -$I->testLogin(); -$I->amOnPage('/settings'); -$I->fillField('Current password', ''); -$I->fillField('New Password', ''); -$I->fillField('Confirm New Password', ''); -$I->click('Change Password'); -$I->see('Current password is required'); -$I->see('New password is required'); diff --git a/nette/native_db/notejam/tests/acceptance/SetNewPasswordInvalidCurrentPasswordCept.php b/nette/native_db/notejam/tests/acceptance/SetNewPasswordInvalidCurrentPasswordCept.php deleted file mode 100644 index 44decd705..000000000 --- a/nette/native_db/notejam/tests/acceptance/SetNewPasswordInvalidCurrentPasswordCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not set new password with invalid current password'); -$I->testLogin(); -$I->amOnPage('/settings'); -$I->fillField('Current password', 'pls'); -$I->fillField('New Password', 'pass'); -$I->fillField('Confirm New Password', 'pass'); -$I->click('Change Password'); -$I->see('Invalid current password'); diff --git a/nette/native_db/notejam/tests/acceptance/SetNewPasswordMismatchCept.php b/nette/native_db/notejam/tests/acceptance/SetNewPasswordMismatchCept.php deleted file mode 100644 index a229a0ecd..000000000 --- a/nette/native_db/notejam/tests/acceptance/SetNewPasswordMismatchCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not set new password without confirming new password'); -$I->testLogin(); -$I->amOnPage('/settings'); -$I->fillField('Current password', 'pass'); -$I->fillField('New Password', 'pls'); -$I->fillField('Confirm New Password', 'pass'); -$I->click('Change Password'); -$I->see('New passwords must match'); diff --git a/nette/native_db/notejam/tests/acceptance/SignInCept.php b/nette/native_db/notejam/tests/acceptance/SignInCept.php deleted file mode 100644 index bae44a2a5..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignInCept.php +++ /dev/null @@ -1,5 +0,0 @@ -wantTo('see user can successfully sign in'); -$I->testLogin(); -$I->see("My pads"); diff --git a/nette/native_db/notejam/tests/acceptance/SignInFailCept.php b/nette/native_db/notejam/tests/acceptance/SignInFailCept.php deleted file mode 100644 index 99645b64f..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignInFailCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not sign in without required fields'); -$I->amOnPage('/signin'); -$I->see('Sign in'); -$I->fillField("Email", ''); -$I->fillField("Password", ''); -$I->click('Sign In'); -$I->see('Email is required'); -$I->see('Password is required'); diff --git a/nette/native_db/notejam/tests/acceptance/SignInInvalidEmailCept.php b/nette/native_db/notejam/tests/acceptance/SignInInvalidEmailCept.php deleted file mode 100644 index 606afc3c2..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignInInvalidEmailCept.php +++ /dev/null @@ -1,5 +0,0 @@ -wantTo('see user can not sign in with invalid email'); -$I->testLogin('invalid@example.com', 'pass'); -$I->see("Unknown user"); diff --git a/nette/native_db/notejam/tests/acceptance/SignInInvalidPasswordCept.php b/nette/native_db/notejam/tests/acceptance/SignInInvalidPasswordCept.php deleted file mode 100644 index 2e8b58871..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignInInvalidPasswordCept.php +++ /dev/null @@ -1,5 +0,0 @@ -wantTo('see user can not sign in with invalid password'); -$I->testLogin('john.doe@example.com', 'pls'); -$I->see('Invalid password'); diff --git a/nette/native_db/notejam/tests/acceptance/SignUpAlreadyExistsCept.php b/nette/native_db/notejam/tests/acceptance/SignUpAlreadyExistsCept.php deleted file mode 100644 index f8e100b0f..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignUpAlreadyExistsCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not sign up with already registered email'); -$I->amOnPage('/signup'); -$I->fillField('Email', 'john.doe@example.com'); -$I->fillField('Password', 'pass'); -$I->fillField('confirm', 'pass'); -$I->click('Sign Up'); -$I->seeInCurrentUrl('/signup'); -$I->see('User with given email already registered'); diff --git a/nette/native_db/notejam/tests/acceptance/SignUpCept.php b/nette/native_db/notejam/tests/acceptance/SignUpCept.php deleted file mode 100644 index 4c6f190ac..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignUpCept.php +++ /dev/null @@ -1,13 +0,0 @@ -wantTo('see user can successfully sign up'); -$I->amOnPage('/signup'); -$I->fillField('Email', 'test@example.com'); -$I->fillField('Password', 'qwerty'); -$I->fillField('confirm', 'qwerty'); -$I->click('Sign Up'); -$I->seeInCurrentUrl('/signin'); -$I->see('User is successfully created. Now you can sign in.'); -$I->testLogin('test@example.com', 'qwerty'); -$I->seeCurrentUrlEquals('/'); -$I->see('My pads'); diff --git a/nette/native_db/notejam/tests/acceptance/SignUpFailCept.php b/nette/native_db/notejam/tests/acceptance/SignUpFailCept.php deleted file mode 100644 index 2581fb91e..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignUpFailCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('see user can not sign up without required fields'); -$I->amOnPage('/signup'); -$I->fillField('Email', ''); -$I->fillField('Password', ''); -$I->fillField('confirm', ''); -$I->click('Sign Up'); -$I->seeInCurrentUrl('/signup'); -$I->see('Email is required'); -$I->see('Password is required'); diff --git a/nette/native_db/notejam/tests/acceptance/SignUpInvalidEmailCept.php b/nette/native_db/notejam/tests/acceptance/SignUpInvalidEmailCept.php deleted file mode 100644 index 97b4bfef8..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignUpInvalidEmailCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not sign up with invalid email'); -$I->amOnPage('/signup'); -$I->fillField('Email', 'abcd'); -$I->fillField('Password', 'pass'); -$I->fillField('confirm', 'pass'); -$I->click('Sign Up'); -$I->seeInCurrentUrl('/signup'); -$I->see('Invalid email'); diff --git a/nette/native_db/notejam/tests/acceptance/SignUpPasswordMismatchCept.php b/nette/native_db/notejam/tests/acceptance/SignUpPasswordMismatchCept.php deleted file mode 100644 index 1e6a470fb..000000000 --- a/nette/native_db/notejam/tests/acceptance/SignUpPasswordMismatchCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('see user can not sign up without confirming password'); -$I->amOnPage('/signup'); -$I->fillField('Email', 'test@example.com'); -$I->fillField('Password', 'pass'); -$I->fillField('confirm', 'pls'); -$I->click('Sign Up'); -$I->seeInCurrentUrl('/signup'); -$I->see('Passwords must match'); diff --git a/nette/native_db/notejam/tests/acceptance/_bootstrap.php b/nette/native_db/notejam/tests/acceptance/_bootstrap.php deleted file mode 100644 index 8a8855580..000000000 --- a/nette/native_db/notejam/tests/acceptance/_bootstrap.php +++ /dev/null @@ -1,2 +0,0 @@ - - - - - - - - -Site is temporarily down for maintenance - -

We're Sorry

- -

The site is temporarily down for maintenance. Please try again in a few minutes.

- -div { - display: none; } - - -/* Grid */ -#grid .column, -#grid .columns { - background: #ddd; - height: 25px; - line-height: 25px; - margin-bottom: 10px; - text-align: center; - text-transform: uppercase; - color: #555; - font-size: 12px; - font-weight: bold; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; } -#grid .column:hover, -#grid .columns:hover { - background: #bbb; - color: #333; } -#grid .example-grid { overflow: hidden; } - -.post-button-note, -.post-button-note a { - font-size: 11px; - color: #999; } - -#examples .four.columns a { - text-decoration: none; -} -#examples .four.columns a:hover { - text-decoration: underline; -} - - -.resize { - position: fixed; - bottom: 0; - right: 0; - height: 80px; - width: 80px; - background: url(images/resize.png); } - - -img { - max-width: 100%; - height: auto; } - -.gist-meta { display: none !important;} - -ul ul ul li { margin-bottom: 3px; } - -.twitter-share-button { margin-bottom: -18px; } - -/* Table stylesheets */ -table { - width: 100%; - border-collapse: collapse; -} - -table th, table td { - padding: 10px 10px 9px; - font-size: 13px; - line-height: 18px; - text-align: left; -} - -table td { - vertical-align: top; - border-top: solid 1px #ddd; -} - -table th { - padding-top: 9px; - font-weight: bold; - vertical-align: middle; -} - -table.condensed th, table.condensed td { - padding: 5px 5px 4px; -} - -table.bordered { - border-collapse: separate; - border: solid 1px #ddd; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; -} - -table.bordered th + th, -table.bordered th + td, -table.bordered td + td { - border-left: solid 1px #ddd; -} - -.zebra-striped tbody tr:nth-child(odd) td, -.zebra-striped tbody tr:nth-child(odd) th { - background: #f5f5f5; -} - -.carbonad, -.carbonad-image, -.carbonad-text, -.carbonad-tag { - background: none !important; - border: none !important; - margin-left: 0 !important; -} -.carbonad-tag { - margin-top: 6px !important; - padding-top: 0 !important; -} -.carbonad-text { - height: auto !important; -} -.carbonad-image { - margin-top: 0 !important; -} - -.hidden-text { - font-size: 12px; - color: #999; -} - -td.date, th.date { - text-align: right; -} - -td.date { - font-style: italic; -} - -form.note input[type="text"], form.note textarea { - width: 100%; -} - -form hr { - width: 218px; - margin: 10px 0px; -} - -form.note textarea { - height: 250px; -} - -div.content-area { - min-height: 600px; -} - -hr.footer { - margin-bottom: 10px; -} - -div.footer { - margin-bottom: 10px; - text-align: center; - font-size: 12px; -} - -form.sign-in { - margin: 50px 0 0 0; -} - -.sort_arrow { - text-decoration: none; -} - -.sort_arrow:hover { - text-decoration: none; - color: red; -} - -div.sign-in-out-block { - position: absolute; - right: 14px; - top: 8px; - font-size: 12px; -} - -div.sign-in-out-block a { - /*text-decoration: none;*/ -} - -a.small-red { - color: red; - font-size: 12px; -} - -table.notes { - margin: 0 0 20px 0; -} - -table.notes th.note { - width: 72%; -} - -table.notes td.pad { - color: grey; -} - -table.notes td.pad a { - color: grey; - text-decoration: underline; - font-style: normal; -} - - -table.notes td.pad a:hover { - color: black; -} - -p.empty { - color: grey; - font-style: italic; -} - -a.delete-note { - float: right; - font-size: 12px; - color: red; -} - -.red, input.red { - color: red !important; -} - -ul.errorlist, ul.errors { - margin: -18px 0 0 0; -} - -ul.errorlist li, ul.errors li { - color: red; -} - -.alert-area { - text-align: center; -} - -.alert { - padding: 5px 8px; - margin: 0 0 12px 0; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border: 1px solid #d6e9c6; -} - -.alert-error { - color: #b94a48; - background-color: #f2dede; - border: 1px solid #eed3d7; -} - -/* Mobile */ -@media only screen and (max-width: 767px) { - header h1 { font-size: 34px; line-height: 37px; } - nav { position: relative; } - nav ul, - .carbonad { - display: none; - } - #logo { text-align: left; } - #examples .four.columns { - padding-top: 30px; - } -} - -/* Mobile Landscape */ -@media only screen and (min-width: 480px) and (max-width: 767px) { - nav ul { - display: none; - } -} - -/* Non 960 */ -@media only screen and (max-width: 959px) { - #logo { - font-size: 21px; - margin-bottom: 15px; } - nav .button { - padding: 9px 20px 11px; } -} - -/* iPad Portrait/Browser */ -@media only screen and (min-width: 768px) and (max-width: 959px) { - nav { - width: 124px; } -} - -/* Mobile/Browser */ -@media only screen and (max-width: 767px) {} - -/* Mobile Landscape/Browser */ -@media only screen and (min-width: 480px) and (max-width: 767px) {} - -/* Anything smaller than standard 960 */ -@media only screen and (max-width: 959px) {} - - -/* iPad Portrait Only */ -@media only screen and (min-width: 768px) and (max-width: 959px) and (max-device-width: 1000px) {} - -/* Mobile Only */ -@media only screen and (max-width: 767px) and (max-device-width: 1000px) {} - -/* Mobile Landscape Only */ -@media only screen and (min-width: 480px) and (max-width: 767px) and (max-device-width: 1000px) {} - -/* Anything smaller than standard 960 on a device */ -@media only screen and (max-width: 959px) and (max-device-width: 1000px) { - .resize { display: none; } -} diff --git a/nette/native_db/notejam/www/favicon.ico b/nette/native_db/notejam/www/favicon.ico deleted file mode 100644 index b20cfd0f056c1c9d43100f612f4319c66e2adb94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2550 zcmcgsdpy=>6#qV`h?U#SZJVg3NgD48bB$?q*(P0BnsTYks)Y)n7Gs6xwl1`?sD@_U z*mR*3ue;!TGX-%KzT!aoOgA9#8p?H)WL?RL7J%`}#?vCTxIT)jQ5SY=6*49?+ zh&_ole$lYAvxC8Q5iS=MLnsttXlMv`?%ctjEsbHE`WM;pN*(R2gPpQVcsz^BU^|{g zdOB}*utia3=3%>|9bp}tc@~XfN=iy^4Uf>sN#&@~UN&lzy{)*3spzf3^BSR||YZz~*6I;1wF3`8Euwo$so^QQ+fPxAeUii#5Rap}?} zI637bDXAWlCQX8umlyQ(DzI){DFgxmGBPq~J0F>ud>9)Wx9 zfgL;esHkY7xZ6lhPR71{g~-j##nPo0;O%`5H*eOUySp2Q4mF^^zn|iS2n`K|hDI$; zovJ}&<4uS}_n@M34_mgBKvq^3>gwt+H#bLFSs9iuUk*P%KTMxqN_*>}udk1soE*f( z#nC;_e;ul; zt8w}?A7jS!QZIBOE2|m`3JTEH))x21tXZ>QWo3op;$o_0Df094;o;#yaal-9OC!E& zp{go?j7&KuP88z$^;>9YXrMdSVdKV9NJ~poO)8i?c`_KQLVJ5Vi*e)nQB_rs;o(29XHPk%O)EoSARo=m&6HP2wf#l4 zH4*=<7(aeI#SKGEO$`GB1JKmeL|tgHl| z&&T4$i{a|(iW4VJVAZNs@bU41udgpcLP8K89*&rp7&_}APxI`(?@mKQ1HHYy(9+Vvg9i`L z)zw8kr-!?D??PU_7j12A;_p^j`9AIG#>|;BVPaweGcz;P)YQPz(vteE0@l{nm@{V% zN=iy#Z*Nb1a0PSc&P8EiA)K9^k(ZYT7Z(>SS+WFfZf?lV&c@1>E8*$siS+bz>eGGj z_xGpXNy6^kyRmiaR>a1}A}lNn(b3U}jEsboln`Ub3Nc{<$N329V+>PWBGDrZP)!2^ zgH$uuXI=CzePr8-qdwAy^oBz6>qtwft{!^Z9;%1y^ZT^+>g7P{OXUFj7df)}wRucq zmlm@v@hbOa8Ko5wENykg4mNL*D*qf~3xUi}fK4-w!qLe|`Yf=;$Q%fcQ2~x_S{3dI z1exGnPg=`oSp@5O5E7$6zbZYJ`mKgNaD~lBlrvWRaz2EePA_9@`j2`n7s~VV^4Wnj z`nAb@jO`Kl`fYGqwwdB8k@2B3#Tt)Nf%6LZidBEm%>U zIp^f3xWHJNw^!P)mp({kCuGbESuBup*#~gvu}K%ttO=2*{sN2{JA-W!z>@{nZxqL{ zh=QL_y(oY&ani$2@YEN_aY*gFm*aH@{||iK?3yQO>z|YV>W4Sqo9I6p5G09PXfCPx z;&Zb&aX?Vev-kV*{k_d?**5~-RN@c`{2gue-TH}%`ch3}=ROC&rnaYAkVqm}+BD5V za{pA9-^FlZ;_>*&Z%E=g`&+o(oUB|tP7=3%{UlJbB85M$22KZ{7Oda^FYEk~m9tOZv=@F{=&ov#vg;K8};8MS`EFL7E3`erDkr Rce72<)P%rko!0<@1$nAsLG*SvM{)7lvk zaRoYpCW7o00k;d}PB?fjEU=VGa9-rlU?A7(d@|@!i{G*<>O9q*xJw&z%YwlkWE zj3xr|KLT$T)SYnPY%CDuNN`SCNUVvHhxQ}~XrG^m>PE>eg4{cRZqx&s$WWjulHjb= zNUVvK=k_QDXt$!dk@t&$cm>dnaVH!)4;Cm208L~d)9a6Cw?iIJ!FI0a~PqM0cBMUdG7=xaV;%qSEXN+dWxN+8xm&l7u=252*) z`I>W!fbgetByType('Nette\Application\Application')->run(); diff --git a/nette/native_db/notejam/www/js/main.js b/nette/native_db/notejam/www/js/main.js deleted file mode 100644 index f5aaa4205..000000000 --- a/nette/native_db/notejam/www/js/main.js +++ /dev/null @@ -1,2 +0,0 @@ -$(function () { -}); diff --git a/nette/native_db/notejam/www/robots.txt b/nette/native_db/notejam/www/robots.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/nette/native_db/readme.rst b/nette/native_db/readme.rst deleted file mode 100644 index b68fe3fe8..000000000 --- a/nette/native_db/readme.rst +++ /dev/null @@ -1,99 +0,0 @@ -************** -Notejam: Nette -************** - -Notejam application implemented using `Nette framework `_. - -Nette version: 2.3 - -The application is maintained by `@klimesf `_. - -========================== -Installation and launching -========================== - ------ -Clone ------ - -Clone the repo: - -.. code-block:: bash - - $ git clone git@github.com:komarserjio/notejam.git YOUR_PROJECT_DIR/ - -------- -Install -------- - -Install `composer `_ - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/native_db/notejam - $ curl -s https://getcomposer.org/installer | php - -Install dependencies - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/native_db/notejam - $ php composer.phar install - -Create your copy of ``config.local.neon`` - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/native_db/notejam - $ cp app/config/config.example.neon app/config/config.local.neon - -Create database schema - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/native_db/notejam - $ php ./bin/create-db.php - - ------- -Launch ------- - -Start built-in php web server: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/native_db/notejam/www/ - $ php -t `pwd` -S 127.0.0.1:8000 `pwd`/index.php - -Go to http://localhost:8000/ in your browser. - ---------- -Run tests ---------- - -Run tests: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/nette/native_db/notejam/www/ - $ php -t `pwd` -S 127.0.0.1:8000 `pwd`/index.php - $ cd ../ - $ ./vendor/bin/codecept run - - -============ -Contribution -============ - - -Do you have php/nette experience? Help the app to follow php and Nette Framework best practices. - -Please send your pull requests in the ``master`` branch. -Always prepend your commits with framework name: - -.. code-block:: bash - - Nette: Implemented sign in functionality - -Read `contribution guide `_ for details. diff --git a/padrino/README.rst b/padrino/README.rst deleted file mode 100644 index 37221a864..000000000 --- a/padrino/README.rst +++ /dev/null @@ -1,73 +0,0 @@ -**************** -Notejam: Padrino -**************** - -Notejam application implemented using `Padrino `_ framework. - -========================== -Installation and launching -========================== - ------ -Clone ------ - -Clone the repo: - -.. code-block:: bash - - $ git clone git@github.com:komarserjio/notejam.git YOUR_PROJECT_DIR/ - -------- -Install -------- - -Use `RVM `_ or `rbenv `_ -for environment management. - -Install dependencies: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/padrino/notejam/ - $ bundle install - ------- -Launch ------- - -Start built-in web server: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/padrino/notejam/ - $ padrino start - -Go to http://127.0.0.1:3000/ in your browser. - - ---------- -Run tests ---------- - -Start functional and unit tests: - -.. code-block:: bash - - $ cd YOUR_PROJECT_DIR/padrino/notejam/ - $ padrino rake spec - - -============ -Contribution -============ -Do you have ruby/padrino experience? Help the app to follow ruby and padrino best practices. - -Please send your pull requests in the ``master`` branch. -Always prepend your commits with framework name: - -.. code-block:: bash - - Padrino: Implemented sign in functionality - -Read `contribution guide `_ for details. diff --git a/padrino/notejam/.components b/padrino/notejam/.components deleted file mode 100644 index 9e717cd7c..000000000 --- a/padrino/notejam/.components +++ /dev/null @@ -1,10 +0,0 @@ ---- -:orm: datamapper -:test: rspec -:mock: none -:script: none -:renderer: erb -:stylesheet: none -:namespace: Notejam -:migration_format: number -:admin_renderer: erb diff --git a/padrino/notejam/.gitignore b/padrino/notejam/.gitignore deleted file mode 100644 index 9fa1cf0a7..000000000 --- a/padrino/notejam/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.DS_Store -log/**/* -tmp/**/* -bin/* -vendor/gems/* -!vendor/gems/cache/ -.sass-cache/* -db/*.db -.*.sw* diff --git a/padrino/notejam/Gemfile b/padrino/notejam/Gemfile deleted file mode 100644 index 0745cf8d3..000000000 --- a/padrino/notejam/Gemfile +++ /dev/null @@ -1,43 +0,0 @@ -source 'https://rubygems.org' - -# Distribute your app as a gem -# gemspec - -# Server requirements -# gem 'thin' # or mongrel -# gem 'trinidad', :platform => 'jruby' - -# Optional JSON codec (faster performance) -# gem 'oj' - -# Project requirements -gem 'rake' - -# Component requirements -gem 'bcrypt' -gem 'erubis', '~> 2.7.0' -gem 'dm-sqlite-adapter' -gem 'dm-validations' -gem 'dm-timestamps' -gem 'dm-migrations' -gem 'dm-constraints' -gem 'dm-aggregates' -gem 'dm-types' -gem 'dm-core' - -# Test requirements -gem 'rspec', :group => 'test' -gem 'rack-test', :require => 'rack/test', :group => 'test' - -gem 'database_cleaner' - -# Padrino Stable Gem -gem 'padrino', '0.12.2' - -# Or Padrino Edge -# gem 'padrino', :github => 'padrino/padrino-framework' - -# Or Individual Gems -# %w(core support gen helpers cache mailer admin).each do |g| -# gem 'padrino-' + g, '0.12.2' -# end diff --git a/padrino/notejam/Gemfile.lock b/padrino/notejam/Gemfile.lock deleted file mode 100644 index ced4f9db8..000000000 --- a/padrino/notejam/Gemfile.lock +++ /dev/null @@ -1,144 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (4.1.1) - i18n (~> 0.6, >= 0.6.9) - json (~> 1.7, >= 1.7.7) - minitest (~> 5.1) - thread_safe (~> 0.1) - tzinfo (~> 1.1) - addressable (2.3.6) - bcrypt (3.1.7) - bcrypt-ruby (3.1.5) - bcrypt (>= 3.1.3) - data_objects (0.10.14) - addressable (~> 2.1) - database_cleaner (0.9.1) - diff-lcs (1.2.5) - dm-aggregates (1.2.0) - dm-core (~> 1.2.0) - dm-constraints (1.2.0) - dm-core (~> 1.2.0) - dm-core (1.2.1) - addressable (~> 2.3) - dm-do-adapter (1.2.0) - data_objects (~> 0.10.6) - dm-core (~> 1.2.0) - dm-migrations (1.2.0) - dm-core (~> 1.2.0) - dm-sqlite-adapter (1.2.0) - dm-do-adapter (~> 1.2.0) - do_sqlite3 (~> 0.10.6) - dm-timestamps (1.2.0) - dm-core (~> 1.2.0) - dm-types (1.2.2) - bcrypt-ruby (~> 3.0) - dm-core (~> 1.2.0) - fastercsv (~> 1.5) - json (~> 1.6) - multi_json (~> 1.0) - stringex (~> 1.4) - uuidtools (~> 2.1) - dm-validations (1.2.0) - dm-core (~> 1.2.0) - do_sqlite3 (0.10.14) - data_objects (= 0.10.14) - erubis (2.7.0) - fastercsv (1.5.5) - http_router (0.11.1) - rack (>= 1.0.0) - url_mount (~> 0.2.1) - i18n (0.6.9) - json (1.8.1) - mail (2.5.4) - mime-types (~> 1.16) - treetop (~> 1.4.8) - mime-types (1.25.1) - minitest (5.3.4) - moneta (0.7.20) - multi_json (1.10.1) - padrino (0.12.2) - padrino-admin (= 0.12.2) - padrino-cache (= 0.12.2) - padrino-core (= 0.12.2) - padrino-gen (= 0.12.2) - padrino-helpers (= 0.12.2) - padrino-mailer (= 0.12.2) - padrino-support (= 0.12.2) - padrino-admin (0.12.2) - padrino-core (= 0.12.2) - padrino-helpers (= 0.12.2) - padrino-cache (0.12.2) - moneta (~> 0.7.0) - padrino-core (= 0.12.2) - padrino-helpers (= 0.12.2) - padrino-core (0.12.2) - activesupport (>= 3.1) - http_router (~> 0.11.0) - padrino-support (= 0.12.2) - rack-protection (>= 1.5.0) - sinatra (~> 1.4.2) - thor (~> 0.18.0) - padrino-gen (0.12.2) - bundler (~> 1.0) - padrino-core (= 0.12.2) - padrino-helpers (0.12.2) - i18n (~> 0.6, >= 0.6.7) - padrino-support (= 0.12.2) - tilt (~> 1.4.1) - padrino-mailer (0.12.2) - mail (~> 2.5.3) - padrino-core (= 0.12.2) - padrino-support (0.12.2) - activesupport (>= 3.1) - polyglot (0.3.4) - rack (1.5.2) - rack-protection (1.5.3) - rack - rack-test (0.6.2) - rack (>= 1.0) - rake (10.3.2) - rspec (2.14.1) - rspec-core (~> 2.14.0) - rspec-expectations (~> 2.14.0) - rspec-mocks (~> 2.14.0) - rspec-core (2.14.8) - rspec-expectations (2.14.5) - diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.14.6) - sinatra (1.4.5) - rack (~> 1.4) - rack-protection (~> 1.4) - tilt (~> 1.3, >= 1.3.4) - stringex (1.5.1) - thor (0.18.1) - thread_safe (0.3.3) - tilt (1.4.1) - treetop (1.4.15) - polyglot - polyglot (>= 0.3.1) - tzinfo (1.1.0) - thread_safe (~> 0.1) - url_mount (0.2.1) - rack - uuidtools (2.1.4) - -PLATFORMS - ruby - -DEPENDENCIES - bcrypt - database_cleaner - dm-aggregates - dm-constraints - dm-core - dm-migrations - dm-sqlite-adapter - dm-timestamps - dm-types - dm-validations - erubis (~> 2.7.0) - padrino (= 0.12.2) - rack-test - rake - rspec diff --git a/padrino/notejam/Rakefile b/padrino/notejam/Rakefile deleted file mode 100644 index 98c59df4b..000000000 --- a/padrino/notejam/Rakefile +++ /dev/null @@ -1,6 +0,0 @@ -require 'bundler/setup' -require 'padrino-core/cli/rake' - -PadrinoTasks.use(:database) -PadrinoTasks.use(:datamapper) -PadrinoTasks.init diff --git a/padrino/notejam/admin/app.rb b/padrino/notejam/admin/app.rb deleted file mode 100644 index 1e960c1ea..000000000 --- a/padrino/notejam/admin/app.rb +++ /dev/null @@ -1,43 +0,0 @@ -module Notejam - class Admin < Padrino::Application - register Padrino::Mailer - register Padrino::Helpers - register Padrino::Admin::AccessControl - - ## - # Application configuration options - # - # set :raise_errors, true # Raise exceptions (will stop application) (default for test) - # set :dump_errors, true # Exception backtraces are written to STDERR (default for production/development) - # set :show_exceptions, true # Shows a stack trace in browser (default for development) - # set :logging, true # Logging in STDOUT for development and file for production (default only for development) - # set :public_folder, "foo/bar" # Location for static assets (default root/public) - # set :reload, false # Reload application files (default in development) - # set :default_builder, "foo" # Set a custom form builder (default 'StandardFormBuilder') - # set :locale_path, "bar" # Set path for I18n translations (default your_app/locales) - # disable :sessions # Disabled sessions by default (enable if needed) - # disable :flash # Disables sinatra-flash (enabled by default if Sinatra::Flash is defined) - # layout :my_layout # Layout can be in views/layouts/foo.ext or views/foo.ext (default :application) - # - - set :admin_model, 'Account' - set :login_page, '/sessions/new' - - enable :sessions - disable :store_location - - access_control.roles_for :any do |role| - role.protect '/' - role.allow '/sessions' - end - - access_control.roles_for :admin do |role| - role.project_module :accounts, '/accounts' - end - - # Custom error management - error(403) { @title = "Error 403"; render('errors/403', :layout => :error) } - error(404) { @title = "Error 404"; render('errors/404', :layout => :error) } - error(500) { @title = "Error 500"; render('errors/500', :layout => :error) } - end -end diff --git a/padrino/notejam/admin/controllers/accounts.rb b/padrino/notejam/admin/controllers/accounts.rb deleted file mode 100644 index c5230d05f..000000000 --- a/padrino/notejam/admin/controllers/accounts.rb +++ /dev/null @@ -1,90 +0,0 @@ -Notejam::Admin.controllers :accounts do - get :index do - @title = "Accounts" - @accounts = Account.all - render 'accounts/index' - end - - get :new do - @title = pat(:new_title, :model => 'account') - @account = Account.new - render 'accounts/new' - end - - post :create do - @account = Account.new(params[:account]) - if @account.save - @title = pat(:create_title, :model => "account #{@account.id}") - flash[:success] = pat(:create_success, :model => 'Account') - params[:save_and_continue] ? redirect(url(:accounts, :index)) : redirect(url(:accounts, :edit, :id => @account.id)) - else - @title = pat(:create_title, :model => 'account') - flash.now[:error] = pat(:create_error, :model => 'account') - render 'accounts/new' - end - end - - get :edit, :with => :id do - @title = pat(:edit_title, :model => "account #{params[:id]}") - @account = Account.get(params[:id]) - if @account - render 'accounts/edit' - else - flash[:warning] = pat(:create_error, :model => 'account', :id => "#{params[:id]}") - halt 404 - end - end - - put :update, :with => :id do - @title = pat(:update_title, :model => "account #{params[:id]}") - @account = Account.get(params[:id]) - if @account - if @account.update(params[:account]) - flash[:success] = pat(:update_success, :model => 'Account', :id => "#{params[:id]}") - params[:save_and_continue] ? - redirect(url(:accounts, :index)) : - redirect(url(:accounts, :edit, :id => @account.id)) - else - flash.now[:error] = pat(:update_error, :model => 'account') - render 'accounts/edit' - end - else - flash[:warning] = pat(:update_warning, :model => 'account', :id => "#{params[:id]}") - halt 404 - end - end - - delete :destroy, :with => :id do - @title = "Accounts" - account = Account.get(params[:id]) - if account - if account != current_account && account.destroy - flash[:success] = pat(:delete_success, :model => 'Account', :id => "#{params[:id]}") - else - flash[:error] = pat(:delete_error, :model => 'account') - end - redirect url(:accounts, :index) - else - flash[:warning] = pat(:delete_warning, :model => 'account', :id => "#{params[:id]}") - halt 404 - end - end - - delete :destroy_many do - @title = "Accounts" - unless params[:account_ids] - flash[:error] = pat(:destroy_many_error, :model => 'account') - redirect(url(:accounts, :index)) - end - ids = params[:account_ids].split(',').map(&:strip) - accounts = Account.all(:id => ids) - - if accounts.include? current_account - flash[:error] = pat(:delete_error, :model => 'account') - elsif accounts.destroy - - flash[:success] = pat(:destroy_many_success, :model => 'Accounts', :ids => "#{ids.to_sentence}") - end - redirect url(:accounts, :index) - end -end diff --git a/padrino/notejam/admin/controllers/base.rb b/padrino/notejam/admin/controllers/base.rb deleted file mode 100644 index 22e502e59..000000000 --- a/padrino/notejam/admin/controllers/base.rb +++ /dev/null @@ -1,5 +0,0 @@ -Notejam::Admin.controllers :base do - get :index, :map => "/" do - render "base/index" - end -end diff --git a/padrino/notejam/admin/controllers/sessions.rb b/padrino/notejam/admin/controllers/sessions.rb deleted file mode 100644 index 7bc4491f4..000000000 --- a/padrino/notejam/admin/controllers/sessions.rb +++ /dev/null @@ -1,25 +0,0 @@ -Notejam::Admin.controllers :sessions do - get :new do - render "/sessions/new", nil, :layout => false - end - - post :create do - if account = Account.authenticate(params[:email], params[:password]) - set_current_account(account) - redirect url(:base, :index) - elsif Padrino.env == :development && params[:bypass] - account = Account.first - set_current_account(account) - redirect url(:base, :index) - else - params[:email] = h(params[:email]) - flash.now[:error] = pat('login.error') - render "/sessions/new", nil, :layout => false - end - end - - delete :destroy do - set_current_account(nil) - redirect url(:sessions, :new) - end -end diff --git a/padrino/notejam/admin/views/accounts/_form.erb b/padrino/notejam/admin/views/accounts/_form.erb deleted file mode 100644 index 8f5c1fedd..000000000 --- a/padrino/notejam/admin/views/accounts/_form.erb +++ /dev/null @@ -1,57 +0,0 @@ -<% error = @account.errors.key?(:name) && @account.errors[:name].count > 0 %> -
'> - <%= f.label :name, :class => 'control-label' %> -
- <%= f.text_field :name, :class => 'form-control input-xlarge input-with-feedback', :autofocus => true %> - <%= error ? f.error_message_on(:name) : "Ex: a simple text" %> -
-
-<% error = @account.errors.key?(:surname) && @account.errors[:surname].count > 0 %> -
'> - <%= f.label :surname, :class => 'control-label' %> -
- <%= f.text_field :surname, :class => 'form-control input-xlarge input-with-feedback' %> - <%= error ? f.error_message_on(:surname) : "Ex: a simple text" %> -
-
-<% error = @account.errors.key?(:email) && @account.errors[:email].count > 0 %> -
'> - <%= f.label :email, :class => 'control-label' %> -
- <%= f.text_field :email, :class => 'form-control input-xlarge input-with-feedback' %> - <%= error ? f.error_message_on(:email) : "Ex: a simple text" %> -
-
-<% error = @account.errors.key?(:password) && @account.errors[:password].count > 0 %> -
'> - <%= f.label :password, :class => 'control-label' %> -
- <%= f.password_field :password, :class => 'form-control input-xlarge input-with-feedback' %> - <%= error ? f.error_message_on(:password) : "Ex: a simple text" %> -
-
-<% error = @account.errors.key?(:password_confirmation) && @account.errors[:password_confirmation].count > 0 %> -
'> - <%= f.label :password_confirmation, :class => 'control-label' %> -
- <%= f.password_field :password_confirmation, :class => 'form-control input-xlarge input-with-feedback' %> - <%= error ? f.error_message_on(:password_confirmation) : "Ex: a simple text" %> -
-
-<% error = @account.errors.key?(:role) && @account.errors[:role].count > 0 %> -
'> - <%= f.label :role, :class => 'control-label' %> -
- <%= f.text_field :role, :class => 'form-control input-xlarge input-with-feedback' %> - <%= error ? f.error_message_on(:role) : "Ex: a simple text" %> -
-
- - -
- <%= f.submit pat(:save), :class => 'btn btn-primary' %> -   - <%= f.submit pat(:save_and_continue), :class => 'btn btn-info', :name => 'save_and_continue' %> -   - <%= link_to pat(:cancel), url(:accounts, :index), :class => 'btn btn-default' %> -
\ No newline at end of file diff --git a/padrino/notejam/admin/views/accounts/edit.erb b/padrino/notejam/admin/views/accounts/edit.erb deleted file mode 100644 index 9adf99f14..000000000 --- a/padrino/notejam/admin/views/accounts/edit.erb +++ /dev/null @@ -1,10 +0,0 @@ - -
- <% form_for :account, url(:accounts, :update, :id => @account.id), :method => :put, :class => 'form-horizontal' do |f| %> - <%= partial 'accounts/form', :locals => { :f => f } %> - <% end %> -
diff --git a/padrino/notejam/admin/views/accounts/index.erb b/padrino/notejam/admin/views/accounts/index.erb deleted file mode 100644 index c12efdc4c..000000000 --- a/padrino/notejam/admin/views/accounts/index.erb +++ /dev/null @@ -1,74 +0,0 @@ - -
- - - - - - - - - - - - - <% @accounts.each do |account| %> - - - - - - - - <% end %> - -
- - <%= mat(:account, :id) %> <%= mat(:account, :name) %> <%= mat(:account, :surname) %> <%= mat(:account, :email) %>
- <%= check_box_tag 'account_ids[]', :value => account.id, :class => 'list-selectable-checkbox' %> - <%= account.id %> <%= account.name %> <%= account.surname %> <%= account.email %> -
- <%= link_to tag_icon(:edit), :href => url(:accounts, :edit, :id => account.id), :rel => :tooltip, :title => "#{pat(:edit)} account", :class => 'list-row-action-wrapper-link' %> - <%= link_to tag_icon(:trash), :rel => :tooltip, :title => "#{pat(:delete)} account", :class => 'list-row-action-delete-one list-row-action-wrapper-link' %> -
-
-

<%= pat(:delete, :model => "account") %>

-
- <%- form_tag url(:accounts, :destroy, :id => account.id), :method => :delete do %> - <%= submit_tag pat(:delete), :class =>'list-row-action-popover-delete-one-btn btn btn-danger btn-small' %> -
<%= pat(:cancel) %>
- <% end %> -
-
-
-
\ No newline at end of file diff --git a/padrino/notejam/admin/views/accounts/new.erb b/padrino/notejam/admin/views/accounts/new.erb deleted file mode 100644 index d0222f1dd..000000000 --- a/padrino/notejam/admin/views/accounts/new.erb +++ /dev/null @@ -1,9 +0,0 @@ - -
- <% form_for :account, url(:accounts, :create), :class => 'form-horizontal' do |f| %> - <%= partial 'accounts/form', :locals => { :f => f } %> - <% end %> -
diff --git a/padrino/notejam/admin/views/base/index.erb b/padrino/notejam/admin/views/base/index.erb deleted file mode 100644 index fcfdbb224..000000000 --- a/padrino/notejam/admin/views/base/index.erb +++ /dev/null @@ -1,15 +0,0 @@ -
-

Padrino is a ruby framework built upon the Sinatra web library.

-

It was created to make it fun and easy to code more advanced web applications while still adhering to the spirit that makes Sinatra great!

-

Padrino comes shipped with a slick and beautiful Admin Interface, with the following features:

-
- -
-
-
<%= tag_icon("cogs icon-2x", "Orm Agnostic") %>
-
<%= tag_icon("group icon-2x", "Authentication") %>
-
<%= tag_icon("tasks icon-2x", "Template Agnostic") %>
-
<%= tag_icon("flag icon-2x", "Multi Language") %>
-
<%= tag_icon("magic icon-2x", "Scaffold") %>
-
-
diff --git a/padrino/notejam/admin/views/errors/403.erb b/padrino/notejam/admin/views/errors/403.erb deleted file mode 100644 index 4ceaca627..000000000 --- a/padrino/notejam/admin/views/errors/403.erb +++ /dev/null @@ -1,3 +0,0 @@ -

<%= tag_icon 'minus-sign icon-3x' %>

-

<%= pat('custom_errors.403.title') %>

-

<%= pat('custom_errors.403.description') %>

diff --git a/padrino/notejam/admin/views/errors/404.erb b/padrino/notejam/admin/views/errors/404.erb deleted file mode 100644 index 630469e15..000000000 --- a/padrino/notejam/admin/views/errors/404.erb +++ /dev/null @@ -1,3 +0,0 @@ -

<%= tag_icon 'warning-sign icon-3x' %>

-

<%= pat('custom_errors.404.title') %>

-

<%= pat('custom_errors.404.description') %>

diff --git a/padrino/notejam/admin/views/errors/500.erb b/padrino/notejam/admin/views/errors/500.erb deleted file mode 100644 index 8c44b9a27..000000000 --- a/padrino/notejam/admin/views/errors/500.erb +++ /dev/null @@ -1,3 +0,0 @@ -

<%= tag_icon 'beaker icon-3x' %>

-

<%= pat('custom_errors.500.title') %>

-

<%= pat('custom_errors.500.description') %>

diff --git a/padrino/notejam/admin/views/layouts/application.erb b/padrino/notejam/admin/views/layouts/application.erb deleted file mode 100644 index 49c251e25..000000000 --- a/padrino/notejam/admin/views/layouts/application.erb +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - <%= @title.present? ? "#{@title} | Padrino Admin" : "Padrino Admin" %> - <%= favicon_tag "favicon.ico" %> - - <%= stylesheet_link_tag 'bootstrap', 'application' %> - - - - -
-
- <%= {:error => 'danger', :warning => 'warning', :success => 'success', :notice => 'info'}.map { |type, class_name| flash_tag(type, :class => "alert alert-#{class_name} fade in", :bootstrap => true) }.join.html_safe %> -
<%= yield %>
-
-
-
- -
- -
- - <%= javascript_include_tag 'jquery-1.9.0.min', (Padrino.env == :production ? 'bootstrap/bootstrap.min' : %w[bootstrap/affix bootstrap/alert bootstrap/button bootstrap/carousel bootstrap/collapse bootstrap/dropdown bootstrap/tooltip bootstrap/transition bootstrap/modal bootstrap/popover bootstrap/scrollspy bootstrap/tab]), :application %> - - diff --git a/padrino/notejam/admin/views/layouts/error.erb b/padrino/notejam/admin/views/layouts/error.erb deleted file mode 100644 index d2cce35f2..000000000 --- a/padrino/notejam/admin/views/layouts/error.erb +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - <%= @title.present? ? "#{@title} | Padrino Admin" : "#{pat(:custom_errors.title)} | Padrino Admin" %> - <%= favicon_tag "favicon.ico" %> - - <%= stylesheet_link_tag 'bootstrap', 'application' %> - - -
-
<%= yield %>
- -
- - \ No newline at end of file diff --git a/padrino/notejam/admin/views/sessions/new.erb b/padrino/notejam/admin/views/sessions/new.erb deleted file mode 100644 index 45cf67e31..000000000 --- a/padrino/notejam/admin/views/sessions/new.erb +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - <%= @title.present? ? "#{@title} | Padrino Admin" : "#{pat('login.title')} | Padrino Admin" %> - <%= favicon_tag "favicon.ico" %> - <%= stylesheet_link_tag "bootstrap", "application" %> - - - <% form_tag url(:sessions, :create), :class=>"login form-horizontal" do %> - - - - <% end %> - <%= javascript_include_tag 'jquery-1.9.0.min', (Padrino.env == :production ? 'bootstrap/bootstrap.min' : %w[bootstrap/affix bootstrap/alert bootstrap/button bootstrap/carousel bootstrap/collapse bootstrap/dropdown bootstrap/tooltip bootstrap/transition bootstrap/modal bootstrap/popover bootstrap/scrollspy bootstrap/tab]), :application %> - - diff --git a/padrino/notejam/app/app.rb b/padrino/notejam/app/app.rb deleted file mode 100644 index fd6bceeb7..000000000 --- a/padrino/notejam/app/app.rb +++ /dev/null @@ -1,84 +0,0 @@ -module Notejam - class App < Padrino::Application - register Padrino::Admin::AccessControl - register Padrino::Mailer - register Padrino::Helpers - - enable :sessions - - enable :authentication - enable :store_location - set :login_page, "/signin" - - access_control.roles_for :any do |role| - role.protect '/' - role.allow '/signin' - role.allow '/signup' - role.allow '/forgot-password' - role.allow '/set-session-variable' - end - - set :delivery_method, :test - - ## - # Caching support. - # - # register Padrino::Cache - # enable :caching - # - # You can customize caching store engines: - # - # set :cache, Padrino::Cache.new(:LRUHash) # Keeps cached values in memory - # set :cache, Padrino::Cache.new(:Memcached) # Uses default server at localhost - # set :cache, Padrino::Cache.new(:Memcached, '127.0.0.1:11211', :exception_retry_limit => 1) - # set :cache, Padrino::Cache.new(:Memcached, :backend => memcached_or_dalli_instance) - # set :cache, Padrino::Cache.new(:Redis) # Uses default server at localhost - # set :cache, Padrino::Cache.new(:Redis, :host => '127.0.0.1', :port => 6379, :db => 0) - # set :cache, Padrino::Cache.new(:Redis, :backend => redis_instance) - # set :cache, Padrino::Cache.new(:Mongo) # Uses default server at localhost - # set :cache, Padrino::Cache.new(:Mongo, :backend => mongo_client_instance) - # set :cache, Padrino::Cache.new(:File, :dir => Padrino.root('tmp', app_name.to_s, 'cache')) # default choice - # - - ## - # Application configuration options. - # - # set :raise_errors, true # Raise exceptions (will stop application) (default for test) - # set :dump_errors, true # Exception backtraces are written to STDERR (default for production/development) - # set :show_exceptions, true # Shows a stack trace in browser (default for development) - # set :logging, true # Logging in STDOUT for development and file for production (default only for development) - # set :public_folder, 'foo/bar' # Location for static assets (default root/public) - # set :reload, false # Reload application files (default in development) - # set :default_builder, 'foo' # Set a custom form builder (default 'StandardFormBuilder') - # set :locale_path, 'bar' # Set path for I18n translations (default your_apps_root_path/locale) - # disable :sessions # Disabled sessions by default (enable if needed) - # disable :flash # Disables sinatra-flash (enabled by default if Sinatra::Flash is defined) - # layout :my_layout # Layout can be in views/layouts/foo.ext or views/foo.ext (default :application) - # - - ## - # You can configure for a specified environment like: - # - # configure :development do - # set :foo, :bar - # disable :asset_stamp # no asset timestamping for dev - # end - # - configure :test do - set :protect_from_csrf, false - end - - ## - # You can manage errors like: - # - # error 404 do - # render 'errors/404' - # end - # - # error 505 do - # render 'errors/505' - # end - # - DataMapper.auto_upgrade! - end -end diff --git a/padrino/notejam/app/controllers/note.rb b/padrino/notejam/app/controllers/note.rb deleted file mode 100644 index dae4210bf..000000000 --- a/padrino/notejam/app/controllers/note.rb +++ /dev/null @@ -1,72 +0,0 @@ -Notejam::App.controllers :note do - - layout :layout - - get :all_notes, :map => '/' do - @notes = Note.all( - :user_id => current_account.id, :order => order_param(params) - ) - render "note/list" - end - - get :create, :map => '/notes/create' do - render "note/create" - end - - post :create, :map => '/notes/create' do - # @TODO datamapper validation issue? - if params[:note][:pad_id] == "0" - params[:note].delete("pad_id") - else - @pad = get_or_404(current_account.pads, params[:note][:pad_id]) - end - - @note = Note.new(params[:note]) - current_account.notes << @note - if @note.save - flash[:success] = 'Note is successfully created.' - redirect url(:note, :view, :id => @note.id) - end - render "note/create" - end - - get :edit, :map => '/notes/:id/edit' do - @note = get_or_404(current_account.notes, params[:id]) - render "note/edit" - end - - post :edit, :map => '/notes/:id/edit' do - @note = get_or_404(current_account.notes, params[:id]) - - # @TODO datamapper validation issue? - if params[:note][:pad_id] == "0" - params[:note].delete("pad_id") - end - - @note.update(params[:note]) - if @note.save - flash[:success] = 'Note is successfully updated.' - redirect url(:note, :view, :id => @note.id) - end - render "note/edit" - end - - get :view, :map => '/notes/:id' do - @note = get_or_404(current_account.notes, params[:id]) - render "note/view" - end - - get :delete, :map => '/notes/:id/delete' do - @note = get_or_404(current_account.notes, params[:id]) - render "note/delete" - end - - post :delete, :map => '/notes/:id/delete' do - @note = get_or_404(current_account.notes, params[:id]) - @note.destroy - flash[:success] = 'Note is successfully deleted.' - redirect url(:note, :all_notes) - end - -end - diff --git a/padrino/notejam/app/controllers/pad.rb b/padrino/notejam/app/controllers/pad.rb deleted file mode 100644 index a0fec2b44..000000000 --- a/padrino/notejam/app/controllers/pad.rb +++ /dev/null @@ -1,56 +0,0 @@ -Notejam::App.controllers :pad do - - layout :layout - - get :create, :map => '/pads/create' do - render "pad/create" - end - - post :create, :map => '/pads/create' do - @pad = Pad.new(params[:pad]) - current_account.pads << @pad - if @pad.save - flash[:success] = 'Pad is created!' - redirect url(:pad, :view, :id => @pad.id) - end - @pad.destroy - render "pad/create" - end - - get :edit, :map => '/pads/:id/edit' do - @pad = get_or_404(current_account.pads, params[:id]) - render "pad/edit" - end - - post :edit, :map => '/pads/:id/edit' do - @pad = get_or_404(current_account.pads, params[:id]) - @pad.update(params[:pad]) - if @pad.save - flash[:success] = 'Pad is updated!' - redirect url(:pad, :view, :id => @pad.id) - end - render "pad/edit" - end - - get :delete, :map => '/pads/:id/delete' do - @pad = get_or_404(current_account.pads, params[:id]) - render "pad/delete" - end - - post :delete, :map => '/pads/:id/delete' do - @pad = get_or_404(current_account.pads, params[:id]) - @pad.destroy - flash[:success] = 'Pad is deleted!' - redirect url(:note, :all_notes) - end - - get :view, :map => '/pads/:id' do - @pad = get_or_404(current_account.pads, params[:id]) - @notes = Note.all( - :pad_id => @pad.id, :order => order_param(params) - ) - render "pad/view" - end -end - - diff --git a/padrino/notejam/app/controllers/user.rb b/padrino/notejam/app/controllers/user.rb deleted file mode 100644 index 4f8b78b2e..000000000 --- a/padrino/notejam/app/controllers/user.rb +++ /dev/null @@ -1,79 +0,0 @@ -Notejam::App.controllers :user do - - layout :user - - get :signup, :map => '/signup' do - render "user/signup" - end - - post :signup, :map => '/signup' do - @user = User.new(params[:user]) - if @user.save - flash[:success] = 'Account is created. Now you can sign in.' - redirect url(:user, :signin) - end - render "user/signup" - end - - get :signin, :map => '/signin' do - render "user/signin" - end - - post :signin, :map => '/signin' do - if user = User.authenticate(params[:email], params[:password]) - set_current_account(user) - redirect url(:note, :all_notes) - else - params[:email] = h(params[:email]) - flash.now[:error] = "Wrong email or password." - render "user/signin" - end - end - - get :signout, :map => '/signout' do - set_current_account nil - redirect url(:pad, :create) - end - - get :settings, :map => '/settings' do - @user = current_account - render "user/settings" - end - - post :settings, :map => '/settings' do - @user = current_account - if @user.has_password? params[:current_password] - params[:user][:crypted_password] = nil - @user.update(params[:user]) - if @user.save - flash[:success] = 'Password was successfully changed.' - redirect url(:note, :all_notes) - end - else - flash[:error] = 'Entered current password is incorrect.' - redirect url(:user, :settings) - end - - render "user/settings" - end - - get :forgot_password, :map => '/forgot-password' do - render "user/forgot-password" - end - - post :forgot_password, :map => '/forgot-password' do - @user = User.first(:email => params[:email]) - if @user - new_password = generate_password - @user.password = new_password - @user.save - - deliver(:mailer, :new_password_email, @user.email, new_password) - - flash[:success] = 'New password sent to your email.' - redirect url(:user, :signin) - end - flash[:error] = 'No users found' - redirect url(:user, :forgot_password) - end -end diff --git a/padrino/notejam/app/helpers.rb b/padrino/notejam/app/helpers.rb deleted file mode 100644 index 30145873f..000000000 --- a/padrino/notejam/app/helpers.rb +++ /dev/null @@ -1,47 +0,0 @@ -# Helper methods defined here can be accessed in any controller or view in the application - -module Notejam - class App - def get_or_404(model, id) - model.get(id) or halt 404, "Page not found" - end - - def smart_date(datetime) - diff = Date.today - datetime.to_date - days = diff.to_i - if days == 0 - 'Today at ' + datetime.strftime("%H:%M") - elsif days == 1 - 'Yesterday' - elsif days > 1 && days <= 7 - days.to_s + " days ago" - else - datetime.strftime("%d %b %Y") - end - end - - def field_errors(field, model) - if model && model.errors[field].any? - errors = "
    " - model.errors[field].each do |message| - errors << "
  • #{message}
  • " - end - errors << "
" - errors.html_safe - end - end - - def order_param(params) - order = params[:order] || "-updated_at" - {"name" => :name.asc, - "-name" => :name.desc, - "updated_at" => :updated_at.asc, - "-updated_at" => :updated_at.desc}[order] - end - - def generate_password - # weak password generation - (0...8).map { ('a'..'z').to_a[rand(26)] }.join - end - end -end diff --git a/padrino/notejam/app/helpers/user_helper.rb b/padrino/notejam/app/helpers/user_helper.rb deleted file mode 100644 index 6ae8670de..000000000 --- a/padrino/notejam/app/helpers/user_helper.rb +++ /dev/null @@ -1,10 +0,0 @@ -# Helper methods defined here can be accessed in any controller or view in the application - -module Notejam - class App - module UserHelper - end - - helpers UserHelper - end -end diff --git a/padrino/notejam/app/mailers.rb b/padrino/notejam/app/mailers.rb deleted file mode 100644 index 08739db6f..000000000 --- a/padrino/notejam/app/mailers.rb +++ /dev/null @@ -1,44 +0,0 @@ -## -# Mailer methods can be defined using the simple format: -# -# email :registration_email do |name, user| -# from 'admin@site.com' -# to user.email -# subject 'Welcome to the site!' -# locals :name => name -# content_type 'text/html' # optional, defaults to plain/text -# via :sendmail # optional, to smtp if defined, otherwise sendmail -# render 'registration_email' -# end -# -# You can set the default delivery settings from your app through: -# -# set :delivery_method, :smtp => { -# :address => 'smtp.yourserver.com', -# :port => '25', -# :user_name => 'user', -# :password => 'pass', -# :authentication => :plain, # :plain, :login, :cram_md5, no auth by default -# :domain => "localhost.localdomain" # the HELO domain provided by the client to the server -# } -# -# or sendmail (default): -# -# set :delivery_method, :sendmail -# -# or for tests: -# -# set :delivery_method, :test -# -# or storing emails locally: -# -# set :delivery_method, :file => { -# :location => "#{Padrino.root}/tmp/emails", -# } -# -# and then all delivered mail will use these settings unless otherwise specified. -# - -Notejam::App.mailer :notifier do - # Message definitions here ... -end diff --git a/padrino/notejam/app/mailers/mailer.rb b/padrino/notejam/app/mailers/mailer.rb deleted file mode 100644 index 51101ee5f..000000000 --- a/padrino/notejam/app/mailers/mailer.rb +++ /dev/null @@ -1,11 +0,0 @@ -Notejam::App.mailer :mailer do - - email :new_password_email do |email, password| - from 'noreply@notejamapp.com' - to email - subject 'New notejam password' - locals :password => password, :email => email - render 'mailer/new_password_email' - end - -end diff --git a/padrino/notejam/app/views/layouts/layout.html.erb b/padrino/notejam/app/views/layouts/layout.html.erb deleted file mode 100644 index 15e0edb51..000000000 --- a/padrino/notejam/app/views/layouts/layout.html.erb +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - <%= yield_content(:page_title) %> - - - - - - - - <%= stylesheet_link_tag "http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/base.min.css", media: "all" %> - <%= stylesheet_link_tag "http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/skeleton.min.css", media: "all" %> - <%= stylesheet_link_tag "http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/layout.css", media: "all" %> - <%= stylesheet_link_tag "style", media: "all" %> - - - <%= csrf_meta_tags %> - - - - -
-
- -
-
-

- notejam: - <%= yield_content(:page_title) %> -

-
- <% if content_for?(:pad_menu) %> - <%= yield_content(:pad_menu) %> - <% else %> -
- - -
- <% end %> -
-
- <% flash.each do |name, msg| -%> -
<%= msg %>
- <% end -%> -
- <%= content_for?(:content) ? yield_content(:content) : yield %> -
- - -
- Fork me on GitHub - - diff --git a/padrino/notejam/app/views/layouts/user.html.erb b/padrino/notejam/app/views/layouts/user.html.erb deleted file mode 100644 index 34579b994..000000000 --- a/padrino/notejam/app/views/layouts/user.html.erb +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - <%= yield_content(:page_title) %> - - - - - - - - <%= stylesheet_link_tag "http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/base.min.css", media: "all" %> - <%= stylesheet_link_tag "http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/skeleton.min.css", media: "all" %> - <%= stylesheet_link_tag "http://cdnjs.cloudflare.com/ajax/libs/skeleton/1.2/layout.css", media: "all" %> - <%= stylesheet_link_tag "style", media: "all" %> - - - <%= csrf_meta_tags %> - - - - -
-
- -
-
-

- notejam: - <%= yield_content(:page_title) %> -

-
-
-
- <% flash.each do |name, msg| -%> -
<%= msg %>
- <% end -%> -
- <%= content_for?(:content) ? yield_content(:content) : yield %> -
- - -
- Fork me on GitHub - - diff --git a/padrino/notejam/app/views/mailers/mailer/new_password_email.erb b/padrino/notejam/app/views/mailers/mailer/new_password_email.erb deleted file mode 100644 index 3d48fc0b9..000000000 --- a/padrino/notejam/app/views/mailers/mailer/new_password_email.erb +++ /dev/null @@ -1,5 +0,0 @@ -Hi, <%= @email %> -========================================= -  -Your new password is <%= @password %> - diff --git a/padrino/notejam/app/views/note/create.html.erb b/padrino/notejam/app/views/note/create.html.erb deleted file mode 100644 index 8aa32eeea..000000000 --- a/padrino/notejam/app/views/note/create.html.erb +++ /dev/null @@ -1,18 +0,0 @@ -<% content_for :page_title do %>New note<% end %> - -<% form_for :note, url(:note, :create), {:class => "note"} do |f| %> - <%= f.label :name %> - <%= f.text_field :name %> - <%= field_errors :name, @note %> - - <%= f.label :text %> - <%= f.text_area :text %> - <%= field_errors :text, @note %> - - <%= f.label :pad %> - <%= f.select :pad_id, :collection => current_account.pads, :fields => ['name', 'id'], :include_blank => ['-------', 0], :selected => params[:pad] %> - - <%= f.submit "Create" %> -<% end %> - - diff --git a/padrino/notejam/app/views/note/delete.html.erb b/padrino/notejam/app/views/note/delete.html.erb deleted file mode 100644 index fff921148..000000000 --- a/padrino/notejam/app/views/note/delete.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% content_for :page_title do %><%= @note.name %><% end %> - -

Are you sure you want to delete <%= @note.name %>?

-<% form_for :note, url(:note, :delete, :id => @note.id) do |f| %> - <%= f.submit "Yes, I want to delete this note", :class => "red" %> - <%= link_to "Cancel", url(:note, :view, {:id => @note.id}) %> -<% end %> - - diff --git a/padrino/notejam/app/views/note/edit.html.erb b/padrino/notejam/app/views/note/edit.html.erb deleted file mode 100644 index a734442fa..000000000 --- a/padrino/notejam/app/views/note/edit.html.erb +++ /dev/null @@ -1,19 +0,0 @@ -<% content_for :page_title do %><%= @note.name %><% end %> - -<% form_for :note, url(:note, :edit, {:id => @note.id}), {:class => "note"} do |f| %> - <%= f.label :name %> - <%= f.text_field :name %> - <%= field_errors :name, @note %> - - <%= f.label :text %> - <%= f.text_area :text %> - <%= field_errors :text, @note %> - - <%= f.label :pad %> - <%= f.select :pad_id, :collection => current_account.pads, :fields => ['name', 'id'], :include_blank => ['-------', 0], :selected => params[:pad] %> - - <%= f.submit "Save" %> -<% end %> - - - diff --git a/padrino/notejam/app/views/note/list.html.erb b/padrino/notejam/app/views/note/list.html.erb deleted file mode 100644 index 9d435d93e..000000000 --- a/padrino/notejam/app/views/note/list.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<% content_for :page_title do %>All notes (<%= @notes.count %>)<% end %> -<% if @notes.count.nonzero? %> - - - - - - - <% @notes.each do |note| -%> - - - - - - <% end -%> -
Note " class="sort_arrow">↑" class="sort_arrow">↓PadLast modified " class="sort_arrow">↑" class="sort_arrow">↓
<%= link_to note.name, url(:note, :view, :id => note.id) %> - <% if note.pad %> - <%= link_to note.pad.name, url(:pad, :view, :id => note.pad.id) %> - <% else %> - No pad - <% end %> - <%= smart_date note.updated_at %>
-<% else %> -

Create your first note.

-<% end %> -<%= link_to "New note", url(:note, :create), :class => "button" %> - diff --git a/padrino/notejam/app/views/note/view.html.erb b/padrino/notejam/app/views/note/view.html.erb deleted file mode 100644 index 8675c97cd..000000000 --- a/padrino/notejam/app/views/note/view.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -<% content_for :page_title do %><%= @note.name %><% end %> - -

Last edited: <%= smart_date @note.updated_at %>

-
-

- <%= @note.text %> -

-
-<%= link_to "Edit", url(:note, :edit, :id => @note.id), {:class => "button"} %> -<%= link_to "Delete", url(:note, :delete, :id => @note.id), {:class => "delete-note"} %> - diff --git a/padrino/notejam/app/views/pad/create.html.erb b/padrino/notejam/app/views/pad/create.html.erb deleted file mode 100644 index 34de38d99..000000000 --- a/padrino/notejam/app/views/pad/create.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -<% content_for :page_title do %>New pad<% end %> - -<% form_for :pad, url(:pad, :create) do |f| %> - <%= f.label :name %> - <%= f.text_field :name %> - <%= field_errors :name, @pad %> - - <%= f.submit "Create" %> -<% end %> - diff --git a/padrino/notejam/app/views/pad/delete.html.erb b/padrino/notejam/app/views/pad/delete.html.erb deleted file mode 100644 index 5388b1086..000000000 --- a/padrino/notejam/app/views/pad/delete.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<% content_for :page_title do %>Delete pad: <%= @pad.name %><% end %> - -

Are you sure you want to delete <%= @pad.name %>?

-<% form_for :pad, url(:pad, :delete, :id => @pad.id) do |f| %> - <%= f.submit "Yes, I want to delete this pad", :class => "red" %> - <%= link_to "Cancel", url(:pad, :edit, :id => @pad.id) %> -<% end %> - diff --git a/padrino/notejam/app/views/pad/edit.html.erb b/padrino/notejam/app/views/pad/edit.html.erb deleted file mode 100644 index 16100c5f4..000000000 --- a/padrino/notejam/app/views/pad/edit.html.erb +++ /dev/null @@ -1,12 +0,0 @@ -<% content_for :page_title do %><%= @pad.name %><% end %> - -<% form_for :pad, url(:pad, :edit, :id => @pad.id) do |f| %> - <%= f.label :name %> - <%= f.text_field :name %> - <%= field_errors :name, @pad %> - - <%= f.submit "Save" %> - <%= link_to "Delete pad", url(:pad, :delete, {:id => @pad.id}), :class => "red" %> -<% end %> - - diff --git a/padrino/notejam/app/views/pad/view.html.erb b/padrino/notejam/app/views/pad/view.html.erb deleted file mode 100644 index de5345b2d..000000000 --- a/padrino/notejam/app/views/pad/view.html.erb +++ /dev/null @@ -1,19 +0,0 @@ -<% content_for :page_title do %><%= @pad.name %> (<%= @notes.count %>)<% end %> -<% if @notes.count.nonzero? %> - - - - - - <% @notes.each do |note| -%> - - - - - <% end -%> -
Note " class="sort_arrow">↑" class="sort_arrow">↓Last modified " class="sort_arrow">↑" class="sort_arrow">↓
<%= link_to note.name, url(:note, :view, :id => note.id) %><%= smart_date note.updated_at %>
-<% else %> -

Create first note in the pad.

-<% end %> -<%= link_to "Create a note", url(:note, :create, {:pad => @pad.id}), :class => "button" %> -<%= link_to "Pad settings", url(:pad, :edit, {:id => @pad.id}) %> diff --git a/padrino/notejam/app/views/user/forgot-password.html.erb b/padrino/notejam/app/views/user/forgot-password.html.erb deleted file mode 100644 index 63c58028a..000000000 --- a/padrino/notejam/app/views/user/forgot-password.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -<% content_for :page_title do %>Forgot password?<% end %> - -<% form_tag({}, {:class => "offset-by-six sign-in"}) do %> - <%= label_tag :email %> - <%= text_field_tag :email, :required => true %> - - <%= submit_tag "Generate password" %> -<% end %> - - diff --git a/padrino/notejam/app/views/user/settings.html.erb b/padrino/notejam/app/views/user/settings.html.erb deleted file mode 100644 index 3379ffdbb..000000000 --- a/padrino/notejam/app/views/user/settings.html.erb +++ /dev/null @@ -1,17 +0,0 @@ -<% content_for :page_title do %>Account Settings<% end %> - -<% form_for :user, url(:user, :settings), :class => "offset-by-six sign-in" do |f| %> - <%= label_tag :current_password %> - <%= password_field_tag :current_password %> - - <%= f.label "New password" %> - <%= f.password_field :password %> - <%= field_errors :password, @user %> - - <%= f.label :password_confirmation %> - <%= f.password_field :password_confirmation %> - <%= field_errors :password_confirmation, @user %> - - <%= f.submit "Change Password" %> -<% end %> - diff --git a/padrino/notejam/app/views/user/signin.html.erb b/padrino/notejam/app/views/user/signin.html.erb deleted file mode 100644 index fd292056a..000000000 --- a/padrino/notejam/app/views/user/signin.html.erb +++ /dev/null @@ -1,14 +0,0 @@ -<% content_for :page_title do %>Sign In<% end %> - -<% form_tag({}, {:class => "offset-by-six sign-in"}) do %> - <%= label_tag :email %> - <%= text_field_tag :email, :required => true %> - - <%= label_tag :password %> - <%= password_field_tag :password %> - - <%= submit_tag "Sign In" %> or Sign Up -
- Forgot password? -<% end %> - diff --git a/padrino/notejam/app/views/user/signup.html.erb b/padrino/notejam/app/views/user/signup.html.erb deleted file mode 100644 index 510f35e0f..000000000 --- a/padrino/notejam/app/views/user/signup.html.erb +++ /dev/null @@ -1,17 +0,0 @@ -<% content_for :page_title do %>Sign Up<% end %> - -<% form_for :user, '/signup', {:class => "offset-by-six sign-in"} do |f| %> - <%= f.label :email %> - <%= f.text_field :email %> - <%= field_errors :email, @user %> - - <%= f.label :password %> - <%= f.password_field :password %> - <%= field_errors :password, @user %> - - <%= f.label :password_confirmation %> - <%= f.password_field :password_confirmation %> - <%= field_errors :password_confirmation, @user %> - - <%= f.submit "Sign Up" %> or Sign In -<% end %> diff --git a/padrino/notejam/config.ru b/padrino/notejam/config.ru deleted file mode 100644 index 63045a023..000000000 --- a/padrino/notejam/config.ru +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env rackup -# encoding: utf-8 - -# This file can be used to start Padrino, -# just execute it from the command line. - -require File.expand_path("../config/boot.rb", __FILE__) - -run Padrino.application diff --git a/padrino/notejam/config/apps.rb b/padrino/notejam/config/apps.rb deleted file mode 100644 index 665a82fc8..000000000 --- a/padrino/notejam/config/apps.rb +++ /dev/null @@ -1,39 +0,0 @@ -## -# This file mounts each app in the Padrino project to a specified sub-uri. -# You can mount additional applications using any of these commands below: -# -# Padrino.mount('blog').to('/blog') -# Padrino.mount('blog', :app_class => 'BlogApp').to('/blog') -# Padrino.mount('blog', :app_file => 'path/to/blog/app.rb').to('/blog') -# -# You can also map apps to a specified host: -# -# Padrino.mount('Admin').host('admin.example.org') -# Padrino.mount('WebSite').host(/.*\.?example.org/) -# Padrino.mount('Foo').to('/foo').host('bar.example.org') -# -# Note 1: Mounted apps (by default) should be placed into the project root at '/app_name'. -# Note 2: If you use the host matching remember to respect the order of the rules. -# -# By default, this file mounts the primary app which was generated with this project. -# However, the mounted app can be modified as needed: -# -# Padrino.mount('AppName', :app_file => 'path/to/file', :app_class => 'BlogApp').to('/') -# - -## -# Setup global project settings for your apps. These settings are inherited by every subapp. You can -# override these settings in the subapps as needed. -# -Padrino.configure_apps do - # enable :sessions - set :session_secret, '8c96fce57ed6f0b8e5d2eeb3dc635f959a9b092df8e3485080a2c944f25118bc' - set :protection, :except => :path_traversal - set :protect_from_csrf, true - set :admin_model, 'User' -end - -# Mounts the core application for this project - -Padrino.mount("Notejam::Admin", :app_file => Padrino.root('admin/app.rb')).to("/admin") -Padrino.mount('Notejam::App', :app_file => Padrino.root('app/app.rb')).to('/') diff --git a/padrino/notejam/config/boot.rb b/padrino/notejam/config/boot.rb deleted file mode 100644 index 4d17cacae..000000000 --- a/padrino/notejam/config/boot.rb +++ /dev/null @@ -1,47 +0,0 @@ -# Defines our constants -RACK_ENV = ENV['RACK_ENV'] ||= 'development' unless defined?(RACK_ENV) -PADRINO_ROOT = File.expand_path('../..', __FILE__) unless defined?(PADRINO_ROOT) - -# Load our dependencies -require 'rubygems' unless defined?(Gem) -require 'bundler/setup' -Bundler.require(:default, RACK_ENV) - -## -# ## Enable devel logging -# -# Padrino::Logger::Config[:development][:log_level] = :devel -# Padrino::Logger::Config[:development][:log_static] = true -# -# ## Configure your I18n -# -# I18n.default_locale = :en -# I18n.enforce_available_locales = false -# -# ## Configure your HTML5 data helpers -# -# Padrino::Helpers::TagHelpers::DATA_ATTRIBUTES.push(:dialog) -# text_field :foo, :dialog => true -# Generates: -# -# ## Add helpers to mailer -# -# Mail::Message.class_eval do -# include Padrino::Helpers::NumberHelpers -# include Padrino::Helpers::TranslationHelpers -# end - -## -# Add your before (RE)load hooks here -# -Padrino.before_load do -end - -## -# Add your after (RE)load hooks here -# -Padrino.after_load do - DataMapper.finalize -end - -Padrino.load! diff --git a/padrino/notejam/config/database.rb b/padrino/notejam/config/database.rb deleted file mode 100644 index 4ac6dca24..000000000 --- a/padrino/notejam/config/database.rb +++ /dev/null @@ -1,40 +0,0 @@ -## -# A MySQL connection: -# DataMapper.setup(:default, 'mysql://user:password@localhost/the_database_name') -# -# # A Postgres connection: -# DataMapper.setup(:default, 'postgres://user:password@localhost/the_database_name') -# -# # A Sqlite3 connection -# DataMapper.setup(:default, "sqlite3://" + Padrino.root('db', "development.db")) -# -# # Setup DataMapper using config/database.yml -# DataMapper.setup(:default, YAML.load_file(Padrino.root('config/database.yml'))[RACK_ENV]) -# -# config/database.yml file: -# -# --- -# development: &defaults -# adapter: mysql -# database: example_development -# username: user -# password: Pa55w0rd -# host: 127.0.0.1 -# -# test: -# <<: *defaults -# database: example_test -# -# production: -# <<: *defaults -# database: example_production -# - -DataMapper.logger = logger -DataMapper::Property::String.length(255) - -case Padrino.env - when :development then DataMapper.setup(:default, "sqlite3://" + Padrino.root('db', "notejam.db")) - when :production then DataMapper.setup(:default, "sqlite3://" + Padrino.root('db', "notejam_production.db")) - when :test then DataMapper.setup(:default, "sqlite::memory:") -end diff --git a/padrino/notejam/db/migrate/001_create_users.rb b/padrino/notejam/db/migrate/001_create_users.rb deleted file mode 100644 index 3688f23d9..000000000 --- a/padrino/notejam/db/migrate/001_create_users.rb +++ /dev/null @@ -1,14 +0,0 @@ -migration 1, :create_users do - up do - create_table :users do - column :id, Integer, :serial => true - column :email, DataMapper::Property::String, :length => 255 - column :crypted_password, DataMapper::Property::String, :length => 255 - column :role, DataMapper::Property::String, :length => 255 - end - end - - down do - drop_table :users - end -end diff --git a/padrino/notejam/db/seeds.rb b/padrino/notejam/db/seeds.rb deleted file mode 100644 index b230f549c..000000000 --- a/padrino/notejam/db/seeds.rb +++ /dev/null @@ -1,28 +0,0 @@ -# Seed add you the ability to populate your db. -# We provide you a basic shell for interaction with the end user. -# So try some code like below: -# -# name = shell.ask("What's your name?") -# shell.say name -# -email = shell.ask "Which email do you want use for logging into admin?" -password = shell.ask "Tell me the password to use:" - -shell.say "" - -account = Account.create(:email => email, :name => "Foo", :surname => "Bar", :password => password, :password_confirmation => password, :role => "admin") - -if account.valid? - shell.say "=================================================================" - shell.say "Account has been successfully created, now you can login with:" - shell.say "=================================================================" - shell.say " email: #{email}" - shell.say " password: #{password}" - shell.say "=================================================================" -else - shell.say "Sorry but some thing went wrong!" - shell.say "" - account.errors.full_messages.each { |m| shell.say " - #{m}" } -end - -shell.say "" diff --git a/padrino/notejam/models/note.rb b/padrino/notejam/models/note.rb deleted file mode 100644 index 13edfc386..000000000 --- a/padrino/notejam/models/note.rb +++ /dev/null @@ -1,21 +0,0 @@ -class Note - include DataMapper::Resource - include DataMapper::Validate - - # Properties - property :id, Serial - property :name, String - property :text, Text - - belongs_to :user - belongs_to :pad, :required => false - - property :created_at, DateTime - property :updated_at, DateTime - - # Validations - validates_presence_of :name - validates_presence_of :text -end - - diff --git a/padrino/notejam/models/pad.rb b/padrino/notejam/models/pad.rb deleted file mode 100644 index c4d6c3de1..000000000 --- a/padrino/notejam/models/pad.rb +++ /dev/null @@ -1,16 +0,0 @@ -class Pad - include DataMapper::Resource - include DataMapper::Validate - - # Properties - property :id, Serial - property :name, String - - belongs_to :user - - has n, :notes - - # Validations - validates_presence_of :name -end - diff --git a/padrino/notejam/models/user.rb b/padrino/notejam/models/user.rb deleted file mode 100644 index 11e5a73c1..000000000 --- a/padrino/notejam/models/user.rb +++ /dev/null @@ -1,56 +0,0 @@ -class User - include DataMapper::Resource - include DataMapper::Validate - attr_accessor :password, :password_confirmation - - # Properties - property :id, Serial - property :email, String - property :crypted_password, String, :length => 70 - property :role, String - - has n, :pads - has n, :notes - - # Validations - validates_presence_of :email - validates_format_of :email, :with => :email_address - validates_uniqueness_of :email - validates_presence_of :password, :if => :password_required - validates_presence_of :password_confirmation, :if => :password_required - validates_length_of :password, :min => 6, :max => 32, :if => :password_required - validates_confirmation_of :password, :if => :password_required - - - # Callbacks - before :save, :encrypt_password - - ## - # This method is for authentication purpose. - # - def self.authenticate(email, password) - account = first(:conditions => ["lower(email) = lower(?)", email]) if email.present? - account && account.has_password?(password) ? account : nil - end - - ## - # This method is used by AuthenticationHelper - # - def self.find_by_id(id) - get(id) rescue nil - end - - def has_password?(password) - ::BCrypt::Password.new(crypted_password) == password - end - - private - - def password_required - crypted_password.blank? || password.present? - end - - def encrypt_password - self.crypted_password = ::BCrypt::Password.create(password) if password.present? - end -end diff --git a/padrino/notejam/public/admin/images/favicon.ico b/padrino/notejam/public/admin/images/favicon.ico deleted file mode 100644 index 4e26b1989902dcfd1644229471b18fd981860f1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3784 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 diff --git a/padrino/notejam/public/admin/images/font/fontawesome-webfont.eot b/padrino/notejam/public/admin/images/font/fontawesome-webfont.eot deleted file mode 100644 index 0662cb96bfb78cb2603df4bc9995314bd6806312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37405 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�-A&iY%khEsGVMaq&$BJA^QAs8x>7-g_ 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 k3oQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/padrino/notejam/public/admin/images/font/fontawesome-webfont.ttf b/padrino/notejam/public/admin/images/font/fontawesome-webfont.ttf deleted file mode 100644 index d3659246915cacb0c9204271f1f9fc5f77049eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79076 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 diff --git a/padrino/notejam/public/admin/images/logo.png b/padrino/notejam/public/admin/images/logo.png deleted file mode 100644 index 984fe449d505d927a96b5da9015d4b42e56640e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29343 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 etpd=(>Hh;93KgszUSvf80000 0) { - setTimeout(function() { $('.alert').alert('close'); }, alertTimeout); - } - - // Only process list-related JavaScript if there's a list! - if (list.length > 0) { - listCheckboxes = list.find(listCheckboxesSelector); - listCheckboxesLength = listCheckboxes.length; - - // Confirm before deleting one item - $('.list-row-action-delete-one').on('click', function(ev) { - ev.preventDefault(); - $(this).addClass('list-row-action-wrapper-link-active') - .siblings('.list-row-action-popover-delete-one').first().show() - .find('.cancel').on('click', function() { - - $(this).parents('.list-row-action-popover-delete-one').hide() - .siblings('.list-row-action-delete-one').removeClass('list-row-action-wrapper-link-active'); - }); - }); - - // Select/deselect record on row's click - list.find('.list-row').on('click', function(ev) { - var checkbox, willBeChecked; - ev.stopPropagation(); - - if (ev.currentTarget.tagName == 'TR') { - checkbox = $(this).find('.list-selectable-checkbox'); - willBeChecked = !checkbox.prop('checked'); - checkbox.prop('checked', willBeChecked); - $(this)[willBeChecked ? 'addClass' : 'removeClass']('list-row-selected'); - generalToggle(); - } - }); - // Select all action - $('#select-all').on('click', function(ev) { - ev.preventDefault(); - ev.stopPropagation(); - if ($(this).is('.list-menu-link-disabled')) return; - - // We assume we want to stay on the dropdown to delete all perhaps - ev.stopPropagation(); - checkAll(list, true); - toggleAction('#select-all', true); - toggleAction('#deselect-all', false); - }); - // Deselect all action - $('#deselect-all').on('click', function(ev) { - ev.preventDefault(); - if ($(this).is('.list-menu-link-disabled')) return; - - checkAll(list, false); - toggleAction('#deselect-all', true); - toggleAction('#select-all', false); - }); - // Delete selected - $('#delete-selected').on('click', function(ev) { - ev.preventDefault(); - ev.stopPropagation(); - if ($(this).is('.list-menu-link-disabled')) return; - - // Open the popup to confirm deletion - $(this).parent().addClass('active').parent('.dropdown').addClass('open'); - $(this).addClass('active') - .siblings('.list-menu-popover-delete-selected').first().show() - .find('.cancel').on('click', function() { - - // Hide the popover on cancel - $(this).parents('.list-menu-popover-delete-selected').hide() - .siblings('#delete-selected').removeClass('active').parent().removeClass('active'); - // and close the dropdown - $(this).parents('.dropdown').removeClass('open'); - }); - - $(this).siblings('.list-menu-popover-delete-selected').find(':hidden[data-delete-many-ids=true]'). - val(listCheckboxes.filter(':checked').map(function() { return $(this).val(); }).toArray().join(',')); - }); - - // Catch checkboxes check/uncheck and enable/disable the delete selected functionality - listCheckboxes.on('click', function(ev) { - ev.stopPropagation(); - - $(this).parent('.list-row')[$(this).is(':checked') ? 'addClass' : 'removeClass']('list-row-selected'); - - generalToggle(); - }); - } - - // Autofocus first field with an error. (usability) - var error_input; - if (error_input = $('.has-error :input').first()) { error_input.focus(); } - }); -}(window.jQuery); diff --git a/padrino/notejam/public/admin/javascripts/bootstrap/affix.js b/padrino/notejam/public/admin/javascripts/bootstrap/affix.js deleted file mode 100644 index c7be96e1d..000000000 --- a/padrino/notejam/public/admin/javascripts/bootstrap/affix.js +++ /dev/null @@ -1,126 +0,0 @@ -/* ======================================================================== - * Bootstrap: affix.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#affix - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // AFFIX CLASS DEFINITION - // ====================== - - var Affix = function (element, options) { - this.options = $.extend({}, Affix.DEFAULTS, options) - this.$window = $(window) - .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) - - this.$element = $(element) - this.affixed = - this.unpin = null - - this.checkPosition() - } - - Affix.RESET = 'affix affix-top affix-bottom' - - Affix.DEFAULTS = { - offset: 0 - } - - Affix.prototype.checkPositionWithEventLoop = function () { - setTimeout($.proxy(this.checkPosition, this), 1) - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - var scrollTop = this.$window.scrollTop() - var position = this.$element.offset() - var offset = this.options.offset - var offsetTop = offset.top - var offsetBottom = offset.bottom - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : - offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : - offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false - - if (this.affixed === affix) return - if (this.unpin) this.$element.css('top', '') - - this.affixed = affix - this.unpin = affix == 'bottom' ? position.top - scrollTop : null - - this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : '')) - - if (affix == 'bottom') { - this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() }) - } - } - - - // AFFIX PLUGIN DEFINITION - // ======================= - - var old = $.fn.affix - - $.fn.affix = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.affix') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix - - - // AFFIX NO CONFLICT - // ================= - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - // AFFIX DATA-API - // ============== - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - var data = $spy.data() - - data.offset = data.offset || {} - - if (data.offsetBottom) data.offset.bottom = data.offsetBottom - if (data.offsetTop) data.offset.top = data.offsetTop - - $spy.affix(data) - }) - }) - -}(window.jQuery); diff --git a/padrino/notejam/public/admin/javascripts/bootstrap/alert.js b/padrino/notejam/public/admin/javascripts/bootstrap/alert.js deleted file mode 100644 index 663029ed8..000000000 --- a/padrino/notejam/public/admin/javascripts/bootstrap/alert.js +++ /dev/null @@ -1,98 +0,0 @@ -/* ======================================================================== - * Bootstrap: alert.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#alerts - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent.trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one($.support.transition.end, removeElement) - .emulateTransitionEnd(150) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(window.jQuery); diff --git a/padrino/notejam/public/admin/javascripts/bootstrap/bootstrap.min.js b/padrino/notejam/public/admin/javascripts/bootstrap/bootstrap.min.js deleted file mode 100644 index 1765631f4..000000000 --- a/padrino/notejam/public/admin/javascripts/bootstrap/bootstrap.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** -* bootstrap.js v3.0.0 by @fat and @mdo -* Copyright 2013 Twitter Inc. -* http://www.apache.org/licenses/LICENSE-2.0 -*/ -if(!jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(window.jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]');if(a.length){var b=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===b.prop("type")&&a.find(".active").removeClass("active")}this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(window.jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('

'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery); \ No newline at end of file diff --git a/padrino/notejam/public/admin/javascripts/bootstrap/button.js b/padrino/notejam/public/admin/javascripts/bootstrap/button.js deleted file mode 100644 index fc73b555f..000000000 --- a/padrino/notejam/public/admin/javascripts/bootstrap/button.js +++ /dev/null @@ -1,109 +0,0 @@ -/* ======================================================================== - * Bootstrap: button.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#buttons - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - } - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state = state + 'Text' - - if (!data.resetText) $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d); - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - .prop('checked', !this.$element.hasClass('active')) - .trigger('change') - if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') - } - - this.$element.toggleClass('active') - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - e.preventDefault() - }) - -}(window.jQuery); diff --git a/padrino/notejam/public/admin/javascripts/bootstrap/carousel.js b/padrino/notejam/public/admin/javascripts/bootstrap/carousel.js deleted file mode 100644 index d8c4c243c..000000000 --- a/padrino/notejam/public/admin/javascripts/bootstrap/carousel.js +++ /dev/null @@ -1,217 +0,0 @@ -/* ======================================================================== - * Bootstrap: carousel.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#carousel - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null - - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.DEFAULTS = { - interval: 5000 - , pause: 'hover' - , wrap: true - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getActiveIndex = function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - - return this.$items.index(this.$active) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getActiveIndex() - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - this.sliding = true - - isCycling && this.pause() - - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - .emulateTransitionEnd(600) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - $carousel.carousel($carousel.data()) - }) - }) - -}(window.jQuery); diff --git a/padrino/notejam/public/admin/javascripts/bootstrap/collapse.js b/padrino/notejam/public/admin/javascripts/bootstrap/collapse.js deleted file mode 100644 index 92cc0bc76..000000000 --- a/padrino/notejam/public/admin/javascripts/bootstrap/collapse.js +++ /dev/null @@ -1,179 +0,0 @@ -/* ======================================================================== - * Bootstrap: collapse.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#collapse - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing') - [dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('in') - [dimension]('auto') - this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - $target.collapse(option) - }) - -}(window.jQuery); diff --git a/padrino/notejam/public/admin/javascripts/bootstrap/dropdown.js b/padrino/notejam/public/admin/javascripts/bootstrap/dropdown.js deleted file mode 100644 index 6093f11a8..000000000 --- a/padrino/notejam/public/admin/javascripts/bootstrap/dropdown.js +++ /dev/null @@ -1,154 +0,0 @@ -/* ======================================================================== - * Bootstrap: dropdown.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#dropdowns - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' - var Dropdown = function (element) { - var $el = $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we we use a backdrop because click events don't delegate - $('