From cb670bb27dca2800758814a5bf9b0b196e9a7170 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 24 Dec 2014 12:32:18 +0100 Subject: [PATCH] Update, edit and delete currencies. --- app/controllers/CurrencyController.php | 151 +++++- .../TransactionCurrency.php | 83 +++- app/models/TransactionCurrency.php | 18 + app/routes.php | 457 +++++++++--------- app/views/currency/create.blade.php | 40 ++ app/views/currency/delete.blade.php | 25 + app/views/currency/edit.blade.php | 40 ++ app/views/currency/index.blade.php | 15 +- composer.lock | 96 ++-- 9 files changed, 645 insertions(+), 280 deletions(-) create mode 100644 app/views/currency/create.blade.php create mode 100644 app/views/currency/delete.blade.php create mode 100644 app/views/currency/edit.blade.php diff --git a/app/controllers/CurrencyController.php b/app/controllers/CurrencyController.php index db7bf651fb..f8381e2600 100644 --- a/app/controllers/CurrencyController.php +++ b/app/controllers/CurrencyController.php @@ -1,26 +1,173 @@ _repository = $repository; + + View::share('title', 'Currencies'); View::share('mainTitleIcon', 'fa-usd'); } + /** + * @return \Illuminate\View\View + */ + public function create() + { + $subTitleIcon = 'fa-plus'; + $subTitle = 'Create a new currency'; + + return View::make('currency.create', compact('subTitleIcon', 'subTitle')); + } + + /** + * @param TransactionCurrency $currency + * + * @return \Illuminate\Http\RedirectResponse + */ + public function defaultCurrency(TransactionCurrency $currency) + { + /** @var \FireflyIII\Shared\Preferences\Preferences $preferences */ + $preferences = App::make('FireflyIII\Shared\Preferences\Preferences'); + + $currencyPreference = $preferences->get('currencyPreference', 'EUR'); + $currencyPreference->data = $currency->code; + $currencyPreference->save(); + Cache::forget('FFCURRENCYSYMBOL'); + Cache::forget('FFCURRENCYCODE'); + + return Redirect::route('currency.index'); + + } + + /** + * @param TransactionCurrency $currency + */ + public function delete(TransactionCurrency $currency) + { + if ($currency->transactionJournals()->count() > 0) { + Session::flash('error', 'Cannot delete ' . e($currency->name) . ' because there are still transactions attached to it.'); + + return Redirect::route('currency.index'); + } + + + return View::make('currency.delete', compact('currency')); + } + + public function destroy(TransactionCurrency $currency) + { + Session::flash('success', 'Currency "' . e($currency->name) . '" deleted'); + + $this->_repository->destroy($currency); + + return Redirect::route('currency.index'); + } + + /** + * @param TransactionCurrency $currency + * + * @return \Illuminate\View\View + */ + public function edit(TransactionCurrency $currency) + { + $subTitleIcon = 'fa-pencil'; + $subTitle = 'Edit currency "' . e($currency->name) . '"'; + $currency->symbol = htmlentities($currency->symbol); + + return View::make('currency.edit', compact('currency', 'subTitle', 'subTitleIcon')); + + } + public function index() { $currencies = $this->_repository->get(); - return View::make('currency.index',compact('currencies')); + /** @var \FireflyIII\Shared\Preferences\Preferences $preferences */ + $preferences = App::make('FireflyIII\Shared\Preferences\Preferences'); + + $currencyPreference = $preferences->get('currencyPreference', 'EUR'); + $defaultCurrency = $this->_repository->findByCode($currencyPreference->data); + + + return View::make('currency.index', compact('currencies', 'defaultCurrency')); + } + + public function store() + { + $data = Input::except('_token'); + + // always validate: + $messages = $this->_repository->validate($data); + + // flash messages: + Session::flash('warnings', $messages['warnings']); + Session::flash('successes', $messages['successes']); + Session::flash('errors', $messages['errors']); + if ($messages['errors']->count() > 0) { + Session::flash('error', 'Could not store currency: ' . $messages['errors']->first()); + } + + // return to create screen: + if ($data['post_submit_action'] == 'validate_only' || $messages['errors']->count() > 0) { + return Redirect::route('currency.create')->withInput(); + } + + // store: + $this->_repository->store($data); + Session::flash('success', 'Currency "' . e($data['name']) . '" stored.'); + if ($data['post_submit_action'] == 'store') { + return Redirect::route('currency.index'); + } + + return Redirect::route('currency.create')->withInput(); + + } + + public function update(TransactionCurrency $currency) + { + $data = Input::except('_token'); + + // always validate: + $messages = $this->_repository->validate($data); + + // flash messages: + Session::flash('warnings', $messages['warnings']); + Session::flash('successes', $messages['successes']); + Session::flash('errors', $messages['errors']); + if ($messages['errors']->count() > 0) { + Session::flash('error', 'Could not update currency: ' . $messages['errors']->first()); + } + + // return to update screen: + if ($data['post_submit_action'] == 'validate_only' || $messages['errors']->count() > 0) { + return Redirect::route('currency.edit', $currency->id)->withInput(); + } + + // update + $this->_repository->update($currency, $data); + Session::flash('success', 'Currency "' . e($data['name']) . '" updated.'); + + // go back to list + if ($data['post_submit_action'] == 'update') { + return Redirect::route('currency.index'); + } + + return Redirect::route('currency.edit', $currency->id)->withInput(['post_submit_action' => 'return_to_edit']); + } } \ No newline at end of file diff --git a/app/lib/FireflyIII/Database/TransactionCurrency/TransactionCurrency.php b/app/lib/FireflyIII/Database/TransactionCurrency/TransactionCurrency.php index b5244a2c5e..2e3648604f 100644 --- a/app/lib/FireflyIII/Database/TransactionCurrency/TransactionCurrency.php +++ b/app/lib/FireflyIII/Database/TransactionCurrency/TransactionCurrency.php @@ -1,26 +1,85 @@ first(); + $model->delete(); + } + + /** + * @param array $data + * + * @return Eloquent + */ + public function store(array $data) + { + $currency = new \TransactionCurrency($data); + $currency->save(); + return $currency; + } + + /** + * @param Eloquent $model + * @param array $data + * + * @return bool + */ + public function update(Eloquent $model, array $data) + { + $model->symbol = $data['symbol']; + $model->code = $data['code']; + $model->name = $data['name']; + $model->save(); + + return true; + } + + /** + * Validates an array. Returns an array containing MessageBags + * errors/warnings/successes. + * + * @param array $model + * + * @return array + */ + public function validate(array $model) + { + $warnings = new MessageBag; + $successes = new MessageBag; + + $currency = new \TransactionCurrency($model); + $currency->isValid(); + $errors = $currency->getErrors(); + + $fields = ['name', 'code', 'symbol']; + foreach ($fields as $field) { + if (!$errors->has($field)) { + $successes->add($field, 'OK'); + } + } + + return ['errors' => $errors, 'warnings' => $warnings, 'successes' => $successes]; } /** @@ -56,7 +115,7 @@ class TransactionCurrency implements TransactionCurrencyInterface, CommonDatabas */ public function get() { - return \TransactionCurrency::orderBy('code','ASC')->get(); + return \TransactionCurrency::orderBy('code', 'ASC')->get(); } /** @@ -69,4 +128,14 @@ class TransactionCurrency implements TransactionCurrencyInterface, CommonDatabas // TODO: Implement getByIds() method. throw new NotImplementedException; } + + /** + * @param string $code + * + * @return \TransactionCurrency|null + */ + public function findByCode($code) + { + return \TransactionCurrency::whereCode($code)->first(); + } } \ No newline at end of file diff --git a/app/models/TransactionCurrency.php b/app/models/TransactionCurrency.php index d7319c6b5f..4a15900633 100644 --- a/app/models/TransactionCurrency.php +++ b/app/models/TransactionCurrency.php @@ -2,6 +2,7 @@ use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Eloquent\SoftDeletingTrait; use Watson\Validating\ValidatingTrait; + /** * Class TransactionCurrency */ @@ -10,6 +11,23 @@ class TransactionCurrency extends Eloquent use SoftDeletingTrait, ValidatingTrait; + protected $fillable = ['name', 'symbol', 'code']; + protected $rules + = [ + 'creating' => [ + 'code' => 'required|min:3|max:3|alpha|unique:transaction_currencies,code', + 'name' => 'required|min:3|max:48|unique:transaction_currencies,name', + 'symbol' => 'required|min:1|max:8|unique:transaction_currencies,symbol', + ], + + 'updating' => [ + 'code' => 'required|min:3|max:3|alpha', + 'name' => 'required|min:3|max:48', + 'symbol' => 'required|min:1|max:8', + ], + + ]; + /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ diff --git a/app/routes.php b/app/routes.php index 4221bb6fe1..463bd66dd2 100644 --- a/app/routes.php +++ b/app/routes.php @@ -18,123 +18,129 @@ Route::bind( Route::bind( 'accountname', function ($value, $route) { - if (Auth::check()) { - return Account:: - leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')->where('account_types.editable', 1)->where('name', $value)->where( - 'user_id', Auth::user()->id - )->first(); - } - - return null; + if (Auth::check()) { + return Account:: + leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')->where('account_types.editable', 1)->where('name', $value)->where( + 'user_id', Auth::user()->id + )->first(); } + + return null; +} ); Route::bind( 'recurring', function ($value, $route) { - if (Auth::check()) { - return RecurringTransaction:: - where('id', $value)->where('user_id', Auth::user()->id)->first(); - } - - return null; + if (Auth::check()) { + return RecurringTransaction:: + where('id', $value)->where('user_id', Auth::user()->id)->first(); } + + return null; +} ); Route::bind( 'budget', function ($value, $route) { - if (Auth::check()) { - return Budget:: - where('id', $value)->where('user_id', Auth::user()->id)->first(); - } - - return null; + if (Auth::check()) { + return Budget:: + where('id', $value)->where('user_id', Auth::user()->id)->first(); } + + return null; +} ); Route::bind( 'component', function ($value, $route) { - if (Auth::check()) { - return Component:: - where('id', $value)->where('user_id', Auth::user()->id)->first(); - } - - return null; + if (Auth::check()) { + return Component:: + where('id', $value)->where('user_id', Auth::user()->id)->first(); } + + return null; +} ); Route::bind( 'reminder', function ($value, $route) { - if (Auth::check()) { - return Reminder:: - where('id', $value)->where('user_id', Auth::user()->id)->first(); - } - - return null; + if (Auth::check()) { + return Reminder:: + where('id', $value)->where('user_id', Auth::user()->id)->first(); } + + return null; +} ); Route::bind( 'category', function ($value, $route) { - if (Auth::check()) { - return Category:: - where('id', $value)->where('user_id', Auth::user()->id)->first(); - } - - return null; + if (Auth::check()) { + return Category:: + where('id', $value)->where('user_id', Auth::user()->id)->first(); } + + return null; +} ); Route::bind( 'tj', function ($value, $route) { - if (Auth::check()) { - return TransactionJournal:: - where('id', $value)->where('user_id', Auth::user()->id)->first(); - } - - return null; + if (Auth::check()) { + return TransactionJournal:: + where('id', $value)->where('user_id', Auth::user()->id)->first(); } + + return null; +} +); + +Route::bind( + 'currency', function ($value, $route) { + return TransactionCurrency::find($value); +} ); Route::bind( 'limitrepetition', function ($value, $route) { - if (Auth::check()) { - return LimitRepetition::where('limit_repetitions.id', $value) - ->leftjoin('budget_limits', 'budget_limits.id', '=', 'limit_repetitions.budget_limit_id') - ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') - ->where('budgets.user_id', Auth::user()->id) - ->first(['limit_repetitions.*']); - } - - return null; + if (Auth::check()) { + return LimitRepetition::where('limit_repetitions.id', $value) + ->leftjoin('budget_limits', 'budget_limits.id', '=', 'limit_repetitions.budget_limit_id') + ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') + ->where('budgets.user_id', Auth::user()->id) + ->first(['limit_repetitions.*']); } + + return null; +} ); Route::bind( 'piggybank', function ($value, $route) { - if (Auth::check()) { - return Piggybank:: - where('piggybanks.id', $value) - ->leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id') - ->where('accounts.user_id', Auth::user()->id) - ->where('repeats', 0)->first(['piggybanks.*']); - } - - return null; + if (Auth::check()) { + return Piggybank:: + where('piggybanks.id', $value) + ->leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id') + ->where('accounts.user_id', Auth::user()->id) + ->where('repeats', 0)->first(['piggybanks.*']); } + + return null; +} ); Route::bind( 'repeated', function ($value, $route) { - if (Auth::check()) { - return Piggybank:: - where('piggybanks.id', $value) - ->leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id') - ->where('accounts.user_id', Auth::user()->id) - ->where('repeats', 1)->first(['piggybanks.*']); - } - - return null; + if (Auth::check()) { + return Piggybank:: + where('piggybanks.id', $value) + ->leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id') + ->where('accounts.user_id', Auth::user()->id) + ->where('repeats', 1)->first(['piggybanks.*']); } + + return null; +} ); // protected routes: @@ -142,207 +148,216 @@ Route::group( ['before' => 'auth'], function () { - // some date routes used for (well duh) date-based navigation. - Route::get('/prev', ['uses' => 'HomeController@sessionPrev', 'as' => 'sessionPrev']); - //Route::get('/repair', ['uses' => 'HomeController@repair']); - Route::get('/next', ['uses' => 'HomeController@sessionNext', 'as' => 'sessionNext']); - Route::get('/jump/{range}', ['uses' => 'HomeController@rangeJump', 'as' => 'rangeJump']); + // some date routes used for (well duh) date-based navigation. + Route::get('/prev', ['uses' => 'HomeController@sessionPrev', 'as' => 'sessionPrev']); + //Route::get('/repair', ['uses' => 'HomeController@repair']); + Route::get('/next', ['uses' => 'HomeController@sessionNext', 'as' => 'sessionNext']); + Route::get('/jump/{range}', ['uses' => 'HomeController@rangeJump', 'as' => 'rangeJump']); - // account controller: - Route::get('/accounts/{what}', ['uses' => 'AccountController@index', 'as' => 'accounts.index'])->where('what', 'revenue|asset|expense'); - Route::get('/accounts/create/{what}', ['uses' => 'AccountController@create', 'as' => 'accounts.create'])->where('what', 'revenue|asset|expense'); - Route::get('/accounts/edit/{account}', ['uses' => 'AccountController@edit', 'as' => 'accounts.edit']); - Route::get('/accounts/delete/{account}', ['uses' => 'AccountController@delete', 'as' => 'accounts.delete']); - Route::get('/accounts/show/{account}/{view?}', ['uses' => 'AccountController@show', 'as' => 'accounts.show']); + // account controller: + Route::get('/accounts/{what}', ['uses' => 'AccountController@index', 'as' => 'accounts.index'])->where('what', 'revenue|asset|expense'); + Route::get('/accounts/create/{what}', ['uses' => 'AccountController@create', 'as' => 'accounts.create'])->where('what', 'revenue|asset|expense'); + Route::get('/accounts/edit/{account}', ['uses' => 'AccountController@edit', 'as' => 'accounts.edit']); + Route::get('/accounts/delete/{account}', ['uses' => 'AccountController@delete', 'as' => 'accounts.delete']); + Route::get('/accounts/show/{account}/{view?}', ['uses' => 'AccountController@show', 'as' => 'accounts.show']); - // budget controller: - Route::get('/budgets', ['uses' => 'BudgetController@index', 'as' => 'budgets.index']); - Route::get('/budgets/income', ['uses' => 'BudgetController@updateIncome', 'as' => 'budgets.income']); # extra. - Route::get('/budgets/create', ['uses' => 'BudgetController@create', 'as' => 'budgets.create']); - Route::get('/budgets/edit/{budget}', ['uses' => 'BudgetController@edit', 'as' => 'budgets.edit']); - Route::get('/budgets/delete/{budget}', ['uses' => 'BudgetController@delete', 'as' => 'budgets.delete']); - Route::get('/budgets/show/{budget}/{limitrepetition?}', ['uses' => 'BudgetController@show', 'as' => 'budgets.show']); + // budget controller: + Route::get('/budgets', ['uses' => 'BudgetController@index', 'as' => 'budgets.index']); + Route::get('/budgets/income', ['uses' => 'BudgetController@updateIncome', 'as' => 'budgets.income']); # extra. + Route::get('/budgets/create', ['uses' => 'BudgetController@create', 'as' => 'budgets.create']); + Route::get('/budgets/edit/{budget}', ['uses' => 'BudgetController@edit', 'as' => 'budgets.edit']); + Route::get('/budgets/delete/{budget}', ['uses' => 'BudgetController@delete', 'as' => 'budgets.delete']); + Route::get('/budgets/show/{budget}/{limitrepetition?}', ['uses' => 'BudgetController@show', 'as' => 'budgets.show']); - // category controller: - Route::get('/categories', ['uses' => 'CategoryController@index', 'as' => 'categories.index']); - Route::get('/categories/create', ['uses' => 'CategoryController@create', 'as' => 'categories.create']); - Route::get('/categories/edit/{category}', ['uses' => 'CategoryController@edit', 'as' => 'categories.edit']); - Route::get('/categories/delete/{category}', ['uses' => 'CategoryController@delete', 'as' => 'categories.delete']); - Route::get('/categories/show/{category}', ['uses' => 'CategoryController@show', 'as' => 'categories.show']); + // category controller: + Route::get('/categories', ['uses' => 'CategoryController@index', 'as' => 'categories.index']); + Route::get('/categories/create', ['uses' => 'CategoryController@create', 'as' => 'categories.create']); + Route::get('/categories/edit/{category}', ['uses' => 'CategoryController@edit', 'as' => 'categories.edit']); + Route::get('/categories/delete/{category}', ['uses' => 'CategoryController@delete', 'as' => 'categories.delete']); + Route::get('/categories/show/{category}', ['uses' => 'CategoryController@show', 'as' => 'categories.show']); - // currency controller - Route::get('/currency',['uses' => 'CurrencyController@index','as' => 'currency.index']); + // currency controller + Route::get('/currency', ['uses' => 'CurrencyController@index', 'as' => 'currency.index']); + Route::get('/currency/create', ['uses' => 'CurrencyController@create', 'as' => 'currency.create']); + Route::get('/currency/edit/{currency}', ['uses' => 'CurrencyController@edit', 'as' => 'currency.edit']); + Route::get('/currency/delete/{currency}', ['uses' => 'CurrencyController@delete', 'as' => 'currency.delete']); + Route::get('/currency/default/{currency}', ['uses' => 'CurrencyController@defaultCurrency', 'as' => 'currency.default']); - // google chart controller - Route::get('/chart/home/account', ['uses' => 'GoogleChartController@allAccountsBalanceChart']); - Route::get('/chart/home/budgets', ['uses' => 'GoogleChartController@allBudgetsHomeChart']); - Route::get('/chart/home/categories', ['uses' => 'GoogleChartController@allCategoriesHomeChart']); - Route::get('/chart/home/recurring', ['uses' => 'GoogleChartController@recurringTransactionsOverview']); - Route::get('/chart/account/{account}/{view?}', ['uses' => 'GoogleChartController@accountBalanceChart']); - Route::get('/chart/reports/income-expenses/{year}', ['uses' => 'GoogleChartController@yearInExp']); - Route::get('/chart/reports/income-expenses-sum/{year}', ['uses' => 'GoogleChartController@yearInExpSum']); - Route::get('/chart/recurring/{recurring}', ['uses' => 'GoogleChartController@recurringOverview']); - Route::get('/chart/budget/{budget}/{limitrepetition}', ['uses' => 'GoogleChartController@budgetLimitSpending']); - Route::get('/chart/piggyhistory/{piggybank}', ['uses' => 'GoogleChartController@piggyBankHistory']); + // google chart controller + Route::get('/chart/home/account', ['uses' => 'GoogleChartController@allAccountsBalanceChart']); + Route::get('/chart/home/budgets', ['uses' => 'GoogleChartController@allBudgetsHomeChart']); + Route::get('/chart/home/categories', ['uses' => 'GoogleChartController@allCategoriesHomeChart']); + Route::get('/chart/home/recurring', ['uses' => 'GoogleChartController@recurringTransactionsOverview']); + Route::get('/chart/account/{account}/{view?}', ['uses' => 'GoogleChartController@accountBalanceChart']); + Route::get('/chart/reports/income-expenses/{year}', ['uses' => 'GoogleChartController@yearInExp']); + Route::get('/chart/reports/income-expenses-sum/{year}', ['uses' => 'GoogleChartController@yearInExpSum']); + Route::get('/chart/recurring/{recurring}', ['uses' => 'GoogleChartController@recurringOverview']); + Route::get('/chart/budget/{budget}/{limitrepetition}', ['uses' => 'GoogleChartController@budgetLimitSpending']); + Route::get('/chart/piggyhistory/{piggybank}', ['uses' => 'GoogleChartController@piggyBankHistory']); - // google chart for components (categories + budgets combined) - Route::get('/chart/budget/{budget}/spending/{year}', ['uses' => 'GoogleChartController@budgetsAndSpending']); - Route::get('/chart/category/{category}/spending/{year}', ['uses' => 'GoogleChartController@categoriesAndSpending']); + // google chart for components (categories + budgets combined) + Route::get('/chart/budget/{budget}/spending/{year}', ['uses' => 'GoogleChartController@budgetsAndSpending']); + Route::get('/chart/category/{category}/spending/{year}', ['uses' => 'GoogleChartController@categoriesAndSpending']); - // help controller - Route::get('/help/{route}', ['uses' => 'HelpController@show', 'as' => 'help.show']); + // help controller + Route::get('/help/{route}', ['uses' => 'HelpController@show', 'as' => 'help.show']); - // home controller - Route::get('/', ['uses' => 'HomeController@index', 'as' => 'index']); - Route::get('/flush', ['uses' => 'HomeController@flush', 'as' => 'flush']); # even though nothing is cached. + // home controller + Route::get('/', ['uses' => 'HomeController@index', 'as' => 'index']); + Route::get('/flush', ['uses' => 'HomeController@flush', 'as' => 'flush']); # even though nothing is cached. - // JSON controller - Route::get('/json/expense-accounts', ['uses' => 'JsonController@expenseAccounts', 'as' => 'json.expense-accounts']); - Route::get('/json/revenue-accounts', ['uses' => 'JsonController@revenueAccounts', 'as' => 'json.revenue-accounts']); - Route::get('/json/categories', ['uses' => 'JsonController@categories', 'as' => 'json.categories']); + // JSON controller + Route::get('/json/expense-accounts', ['uses' => 'JsonController@expenseAccounts', 'as' => 'json.expense-accounts']); + Route::get('/json/revenue-accounts', ['uses' => 'JsonController@revenueAccounts', 'as' => 'json.revenue-accounts']); + Route::get('/json/categories', ['uses' => 'JsonController@categories', 'as' => 'json.categories']); - // piggy bank controller - Route::get('/piggybanks', ['uses' => 'PiggybankController@index', 'as' => 'piggybanks.index']); - Route::get('/piggybanks/add/{piggybank}', ['uses' => 'PiggybankController@add']); # add money - Route::get('/piggybanks/remove/{piggybank}', ['uses' => 'PiggybankController@remove']); #remove money + // piggy bank controller + Route::get('/piggybanks', ['uses' => 'PiggybankController@index', 'as' => 'piggybanks.index']); + Route::get('/piggybanks/add/{piggybank}', ['uses' => 'PiggybankController@add']); # add money + Route::get('/piggybanks/remove/{piggybank}', ['uses' => 'PiggybankController@remove']); #remove money - Route::get('/piggybanks/create', ['uses' => 'PiggybankController@create', 'as' => 'piggybanks.create']); - Route::get('/piggybanks/edit/{piggybank}', ['uses' => 'PiggybankController@edit', 'as' => 'piggybanks.edit']); - Route::get('/piggybanks/delete/{piggybank}', ['uses' => 'PiggybankController@delete', 'as' => 'piggybanks.delete']); - Route::get('/piggybanks/show/{piggybank}', ['uses' => 'PiggybankController@show', 'as' => 'piggybanks.show']); + Route::get('/piggybanks/create', ['uses' => 'PiggybankController@create', 'as' => 'piggybanks.create']); + Route::get('/piggybanks/edit/{piggybank}', ['uses' => 'PiggybankController@edit', 'as' => 'piggybanks.edit']); + Route::get('/piggybanks/delete/{piggybank}', ['uses' => 'PiggybankController@delete', 'as' => 'piggybanks.delete']); + Route::get('/piggybanks/show/{piggybank}', ['uses' => 'PiggybankController@show', 'as' => 'piggybanks.show']); - // preferences controller - Route::get('/preferences', ['uses' => 'PreferencesController@index', 'as' => 'preferences']); + // preferences controller + Route::get('/preferences', ['uses' => 'PreferencesController@index', 'as' => 'preferences']); - //profile controller - Route::get('/profile', ['uses' => 'ProfileController@index', 'as' => 'profile']); - Route::get('/profile/change-password', ['uses' => 'ProfileController@changePassword', 'as' => 'change-password']); + //profile controller + Route::get('/profile', ['uses' => 'ProfileController@index', 'as' => 'profile']); + Route::get('/profile/change-password', ['uses' => 'ProfileController@changePassword', 'as' => 'change-password']); - // recurring transactions controller - Route::get('/recurring', ['uses' => 'RecurringController@index', 'as' => 'recurring.index']); - Route::get('/recurring/rescan/{recurring}', ['uses' => 'RecurringController@rescan', 'as' => 'recurring.rescan']); # rescan for matching. - Route::get('/recurring/create', ['uses' => 'RecurringController@create', 'as' => 'recurring.create']); - Route::get('/recurring/edit/{recurring}', ['uses' => 'RecurringController@edit', 'as' => 'recurring.edit']); - Route::get('/recurring/delete/{recurring}', ['uses' => 'RecurringController@delete', 'as' => 'recurring.delete']); - Route::get('/recurring/show/{recurring}', ['uses' => 'RecurringController@show', 'as' => 'recurring.show']); + // recurring transactions controller + Route::get('/recurring', ['uses' => 'RecurringController@index', 'as' => 'recurring.index']); + Route::get('/recurring/rescan/{recurring}', ['uses' => 'RecurringController@rescan', 'as' => 'recurring.rescan']); # rescan for matching. + Route::get('/recurring/create', ['uses' => 'RecurringController@create', 'as' => 'recurring.create']); + Route::get('/recurring/edit/{recurring}', ['uses' => 'RecurringController@edit', 'as' => 'recurring.edit']); + Route::get('/recurring/delete/{recurring}', ['uses' => 'RecurringController@delete', 'as' => 'recurring.delete']); + Route::get('/recurring/show/{recurring}', ['uses' => 'RecurringController@show', 'as' => 'recurring.show']); - // repeated expenses controller: - Route::get('/repeatedexpenses', ['uses' => 'RepeatedExpenseController@index', 'as' => 'repeated.index']); - Route::get('/repeatedexpenses/create', ['uses' => 'RepeatedExpenseController@create', 'as' => 'repeated.create']); - Route::get('/repeatedexpenses/show/{repeated}', ['uses' => 'RepeatedExpenseController@show', 'as' => 'repeated.show']); + // repeated expenses controller: + Route::get('/repeatedexpenses', ['uses' => 'RepeatedExpenseController@index', 'as' => 'repeated.index']); + Route::get('/repeatedexpenses/create', ['uses' => 'RepeatedExpenseController@create', 'as' => 'repeated.create']); + Route::get('/repeatedexpenses/show/{repeated}', ['uses' => 'RepeatedExpenseController@show', 'as' => 'repeated.show']); - // report controller: - Route::get('/reports', ['uses' => 'ReportController@index', 'as' => 'reports.index']); - Route::get('/reports/{year}', ['uses' => 'ReportController@year', 'as' => 'reports.year']); - Route::get('/reports/unbalanced/{year}/{month}', ['uses' => 'ReportController@unbalanced', 'as' => 'reports.unbalanced']); + // report controller: + Route::get('/reports', ['uses' => 'ReportController@index', 'as' => 'reports.index']); + Route::get('/reports/{year}', ['uses' => 'ReportController@year', 'as' => 'reports.year']); + Route::get('/reports/unbalanced/{year}/{month}', ['uses' => 'ReportController@unbalanced', 'as' => 'reports.unbalanced']); - // reminder controller - Route::get('/reminders/{reminder}', ['uses' => 'ReminderController@show', 'as' => 'reminders.show']); - Route::get('/reminders/{reminder}/dismiss', ['uses' => 'ReminderController@dismiss', 'as' => 'reminders.dismiss']); - Route::get('/reminders/{reminder}/notnow', ['uses' => 'ReminderController@notnow', 'as' => 'reminders.notnow']); - Route::get('/reminders/{reminder}/act', ['uses' => 'ReminderController@act', 'as' => 'reminders.act']); + // reminder controller + Route::get('/reminders/{reminder}', ['uses' => 'ReminderController@show', 'as' => 'reminders.show']); + Route::get('/reminders/{reminder}/dismiss', ['uses' => 'ReminderController@dismiss', 'as' => 'reminders.dismiss']); + Route::get('/reminders/{reminder}/notnow', ['uses' => 'ReminderController@notnow', 'as' => 'reminders.notnow']); + Route::get('/reminders/{reminder}/act', ['uses' => 'ReminderController@act', 'as' => 'reminders.act']); - // search controller: - Route::get('/search', ['uses' => 'SearchController@index', 'as' => 'search']); + // search controller: + Route::get('/search', ['uses' => 'SearchController@index', 'as' => 'search']); - // transaction controller: - Route::get('/transactions/{what}', ['uses' => 'TransactionController@index', 'as' => 'transactions.index'])->where( - ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers'] - ); - Route::get('/transactions/create/{what}', ['uses' => 'TransactionController@create', 'as' => 'transactions.create'])->where( - ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers'] - ); - Route::get('/transaction/edit/{tj}', ['uses' => 'TransactionController@edit', 'as' => 'transactions.edit']); - Route::get('/transaction/delete/{tj}', ['uses' => 'TransactionController@delete', 'as' => 'transactions.delete']); - Route::get('/transaction/show/{tj}', ['uses' => 'TransactionController@show', 'as' => 'transactions.show']); - Route::get('/transaction/relate/{tj}', ['uses' => 'TransactionController@relate', 'as' => 'transactions.relate']); - Route::post('/transactions/relatedSearch/{tj}', ['uses' => 'TransactionController@relatedSearch', 'as' => 'transactions.relatedSearch']); - Route::post('/transactions/alreadyRelated/{tj}', ['uses' => 'TransactionController@alreadyRelated', 'as' => 'transactions.alreadyRelated']); - Route::post('/transactions/doRelate', ['uses' => 'TransactionController@doRelate', 'as' => 'transactions.doRelate']); - Route::any('/transactions/unrelate/{tj}', ['uses' => 'TransactionController@unrelate', 'as' => 'transactions.unrelate']); + // transaction controller: + Route::get('/transactions/{what}', ['uses' => 'TransactionController@index', 'as' => 'transactions.index'])->where( + ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers'] + ); + Route::get('/transactions/create/{what}', ['uses' => 'TransactionController@create', 'as' => 'transactions.create'])->where( + ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers'] + ); + Route::get('/transaction/edit/{tj}', ['uses' => 'TransactionController@edit', 'as' => 'transactions.edit']); + Route::get('/transaction/delete/{tj}', ['uses' => 'TransactionController@delete', 'as' => 'transactions.delete']); + Route::get('/transaction/show/{tj}', ['uses' => 'TransactionController@show', 'as' => 'transactions.show']); + Route::get('/transaction/relate/{tj}', ['uses' => 'TransactionController@relate', 'as' => 'transactions.relate']); + Route::post('/transactions/relatedSearch/{tj}', ['uses' => 'TransactionController@relatedSearch', 'as' => 'transactions.relatedSearch']); + Route::post('/transactions/alreadyRelated/{tj}', ['uses' => 'TransactionController@alreadyRelated', 'as' => 'transactions.alreadyRelated']); + Route::post('/transactions/doRelate', ['uses' => 'TransactionController@doRelate', 'as' => 'transactions.doRelate']); + Route::any('/transactions/unrelate/{tj}', ['uses' => 'TransactionController@unrelate', 'as' => 'transactions.unrelate']); - // user controller - Route::get('/logout', ['uses' => 'UserController@logout', 'as' => 'logout']); + // user controller + Route::get('/logout', ['uses' => 'UserController@logout', 'as' => 'logout']); - Route::post('budgets/amount/{budget}', ['uses' => 'BudgetController@amount']); + Route::post('budgets/amount/{budget}', ['uses' => 'BudgetController@amount']); - } +} ); // protected + csrf routes (POST) Route::group( ['before' => 'csrf|auth'], function () { - // account controller: - Route::post('/accounts/store', ['uses' => 'AccountController@store', 'as' => 'accounts.store']); - Route::post('/accounts/update/{account}', ['uses' => 'AccountController@update', 'as' => 'accounts.update']); - Route::post('/accounts/destroy/{account}', ['uses' => 'AccountController@destroy', 'as' => 'accounts.destroy']); + // account controller: + Route::post('/accounts/store', ['uses' => 'AccountController@store', 'as' => 'accounts.store']); + Route::post('/accounts/update/{account}', ['uses' => 'AccountController@update', 'as' => 'accounts.update']); + Route::post('/accounts/destroy/{account}', ['uses' => 'AccountController@destroy', 'as' => 'accounts.destroy']); - // budget controller: - Route::post('/budgets/income', ['uses' => 'BudgetController@postUpdateIncome', 'as' => 'budgets.postIncome']); - Route::post('/budgets/store', ['uses' => 'BudgetController@store', 'as' => 'budgets.store']); - Route::post('/budgets/update/{budget}', ['uses' => 'BudgetController@update', 'as' => 'budgets.update']); - Route::post('/budgets/destroy/{budget}', ['uses' => 'BudgetController@destroy', 'as' => 'budgets.destroy']); + // budget controller: + Route::post('/budgets/income', ['uses' => 'BudgetController@postUpdateIncome', 'as' => 'budgets.postIncome']); + Route::post('/budgets/store', ['uses' => 'BudgetController@store', 'as' => 'budgets.store']); + Route::post('/budgets/update/{budget}', ['uses' => 'BudgetController@update', 'as' => 'budgets.update']); + Route::post('/budgets/destroy/{budget}', ['uses' => 'BudgetController@destroy', 'as' => 'budgets.destroy']); - // category controller - Route::post('/categories/store', ['uses' => 'CategoryController@store', 'as' => 'categories.store']); - Route::post('/categories/update/{category}', ['uses' => 'CategoryController@update', 'as' => 'categories.update']); - Route::post('/categories/destroy/{category}', ['uses' => 'CategoryController@destroy', 'as' => 'categories.destroy']); + // category controller + Route::post('/categories/store', ['uses' => 'CategoryController@store', 'as' => 'categories.store']); + Route::post('/categories/update/{category}', ['uses' => 'CategoryController@update', 'as' => 'categories.update']); + Route::post('/categories/destroy/{category}', ['uses' => 'CategoryController@destroy', 'as' => 'categories.destroy']); - // piggy bank controller - Route::post('/piggybanks/store', ['uses' => 'PiggybankController@store', 'as' => 'piggybanks.store']); - Route::post('/piggybanks/update/{piggybank}', ['uses' => 'PiggybankController@update', 'as' => 'piggybanks.update']); - Route::post('/piggybanks/destroy/{piggybank}', ['uses' => 'PiggybankController@destroy', 'as' => 'piggybanks.destroy']); - Route::post('/piggybanks/add/{piggybank}', ['uses' => 'PiggybankController@postAdd', 'as' => 'piggybanks.add']); # add money - Route::post('/piggybanks/remove/{piggybank}', ['uses' => 'PiggybankController@postRemove', 'as' => 'piggybanks.remove']); # remove money. + // currency controller + Route::post('/currency/store', ['uses' => 'CurrencyController@store', 'as' => 'currency.store']); + Route::post('/currency/update/{currency}', ['uses' => 'CurrencyController@update', 'as' => 'currency.update']); + Route::post('/currency/destroy/{currency}', ['uses' => 'CurrencyController@destroy', 'as' => 'currency.destroy']); - // repeated expense controller - Route::post('/repeatedexpense/store', ['uses' => 'RepeatedExpenseController@store', 'as' => 'repeated.store']); + // piggy bank controller + Route::post('/piggybanks/store', ['uses' => 'PiggybankController@store', 'as' => 'piggybanks.store']); + Route::post('/piggybanks/update/{piggybank}', ['uses' => 'PiggybankController@update', 'as' => 'piggybanks.update']); + Route::post('/piggybanks/destroy/{piggybank}', ['uses' => 'PiggybankController@destroy', 'as' => 'piggybanks.destroy']); + Route::post('/piggybanks/add/{piggybank}', ['uses' => 'PiggybankController@postAdd', 'as' => 'piggybanks.add']); # add money + Route::post('/piggybanks/remove/{piggybank}', ['uses' => 'PiggybankController@postRemove', 'as' => 'piggybanks.remove']); # remove money. - // preferences controller - Route::post('/preferences', ['uses' => 'PreferencesController@postIndex']); + // repeated expense controller + Route::post('/repeatedexpense/store', ['uses' => 'RepeatedExpenseController@store', 'as' => 'repeated.store']); - // profile controller - Route::post('/profile/change-password', ['uses' => 'ProfileController@postChangePassword']); + // preferences controller + Route::post('/preferences', ['uses' => 'PreferencesController@postIndex']); - // recurring controller - Route::post('/recurring/store', ['uses' => 'RecurringController@store', 'as' => 'recurring.store']); - Route::post('/recurring/update/{recurring}', ['uses' => 'RecurringController@update', 'as' => 'recurring.update']); - Route::post('/recurring/destroy/{recurring}', ['uses' => 'RecurringController@destroy', 'as' => 'recurring.destroy']); + // profile controller + Route::post('/profile/change-password', ['uses' => 'ProfileController@postChangePassword']); - // transaction controller: - Route::post('/transactions/store/{what}', ['uses' => 'TransactionController@store', 'as' => 'transactions.store'])->where( - ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers'] - ); - Route::post('/transaction/update/{tj}', ['uses' => 'TransactionController@update', 'as' => 'transactions.update']); - Route::post('/transaction/destroy/{tj}', ['uses' => 'TransactionController@destroy', 'as' => 'transactions.destroy']); + // recurring controller + Route::post('/recurring/store', ['uses' => 'RecurringController@store', 'as' => 'recurring.store']); + Route::post('/recurring/update/{recurring}', ['uses' => 'RecurringController@update', 'as' => 'recurring.update']); + Route::post('/recurring/destroy/{recurring}', ['uses' => 'RecurringController@destroy', 'as' => 'recurring.destroy']); - } + // transaction controller: + Route::post('/transactions/store/{what}', ['uses' => 'TransactionController@store', 'as' => 'transactions.store'])->where( + ['what' => 'expenses|revenue|withdrawal|deposit|transfer|transfers'] + ); + Route::post('/transaction/update/{tj}', ['uses' => 'TransactionController@update', 'as' => 'transactions.update']); + Route::post('/transaction/destroy/{tj}', ['uses' => 'TransactionController@destroy', 'as' => 'transactions.destroy']); + +} ); // guest routes: Route::group( ['before' => 'guest'], function () { - // user controller - Route::get('/login', ['uses' => 'UserController@login', 'as' => 'login']); - Route::get('/register', ['uses' => 'UserController@register', 'as' => 'register']); - Route::get('/reset/{reset}', ['uses' => 'UserController@reset', 'as' => 'reset']); - Route::get('/remindme', ['uses' => 'UserController@remindme', 'as' => 'remindme']); + // user controller + Route::get('/login', ['uses' => 'UserController@login', 'as' => 'login']); + Route::get('/register', ['uses' => 'UserController@register', 'as' => 'register']); + Route::get('/reset/{reset}', ['uses' => 'UserController@reset', 'as' => 'reset']); + Route::get('/remindme', ['uses' => 'UserController@remindme', 'as' => 'remindme']); - } +} ); // guest + csrf routes: Route::group( ['before' => 'csrf|guest'], function () { - // user controller - Route::post('/login', ['uses' => 'UserController@postLogin','as' => 'login.post']); - Route::post('/register', ['uses' => 'UserController@postRegister','as' => 'register.post']); - Route::post('/remindme', ['uses' => 'UserController@postRemindme','as' => 'remindme.post']); - } + // user controller + Route::post('/login', ['uses' => 'UserController@postLogin', 'as' => 'login.post']); + Route::post('/register', ['uses' => 'UserController@postRegister', 'as' => 'register.post']); + Route::post('/remindme', ['uses' => 'UserController@postRemindme', 'as' => 'remindme.post']); +} ); \ No newline at end of file diff --git a/app/views/currency/create.blade.php b/app/views/currency/create.blade.php new file mode 100644 index 0000000000..4ce88ea5a0 --- /dev/null +++ b/app/views/currency/create.blade.php @@ -0,0 +1,40 @@ +@extends('layouts.default') +@section('content') +{{ Breadcrumbs::renderIfExists(Route::getCurrentRoute()->getName()) }} +{{Form::open(['class' => 'form-horizontal','id' => 'store','route' => 'currency.store'])}} +
+
+
+
+ Mandatory fields +
+
+ {{Form::ffText('name',null,['maxlength' => 48])}} + {{Form::ffText('symbol',null,['maxlength' => 8])}} + {{Form::ffText('code',null,['maxlength' => 3])}} +
+
+

+ +

+
+ +
+ + +
+
+ Options +
+
+ {{Form::ffOptionsList('create','currency')}} +
+
+ +
+
+ +{{Form::close()}} +@stop \ No newline at end of file diff --git a/app/views/currency/delete.blade.php b/app/views/currency/delete.blade.php new file mode 100644 index 0000000000..ea333c6641 --- /dev/null +++ b/app/views/currency/delete.blade.php @@ -0,0 +1,25 @@ +@extends('layouts.default') +@section('content') +{{ Breadcrumbs::renderIfExists(Route::getCurrentRoute()->getName(), $currency) }} +{{Form::open(['class' => 'form-horizontal','id' => 'destroy','url' => route('currency.destroy',$currency->id)])}} +
+
+
+
+ Delete currency "{{{$currency->name}}}" +
+
+

+ Are you sure? +

+

+ + Cancel +

+
+
+
+
+ +{{Form::close()}} +@stop \ No newline at end of file diff --git a/app/views/currency/edit.blade.php b/app/views/currency/edit.blade.php new file mode 100644 index 0000000000..56792058a7 --- /dev/null +++ b/app/views/currency/edit.blade.php @@ -0,0 +1,40 @@ +@extends('layouts.default') +@section('content') +{{ Breadcrumbs::renderIfExists(Route::getCurrentRoute()->getName()) }} +{{Form::model($currency, ['class' => 'form-horizontal','id' => 'store','url' => route('currency.update',$currency->id)])}} +
+
+
+
+ Mandatory fields +
+
+ {{Form::ffText('name',null,['maxlength' => 48])}} + {{Form::ffText('symbol',null,['maxlength' => 8])}} + {{Form::ffText('code',null,['maxlength' => 3])}} +
+
+

+ +

+
+ +
+ + +
+
+ Options +
+
+ {{Form::ffOptionsList('update','currency')}} +
+
+ +
+
+ +{{Form::close()}} +@stop \ No newline at end of file diff --git a/app/views/currency/index.blade.php b/app/views/currency/index.blade.php index 8f5bc6a0bc..f7f3a09367 100644 --- a/app/views/currency/index.blade.php +++ b/app/views/currency/index.blade.php @@ -16,12 +16,19 @@ @if(count($currencies) > 0) @foreach($currencies as $currency)
  • - - - {{{$currency->name}}} ({{{$currency->code}}}) ({{{$currency->symbol}}})
  • + + + {{{$currency->name}}} ({{{$currency->code}}}) ({{{$currency->symbol}}}) + @if($currency->id == $defaultCurrency->id) + default + @else + make default + + @endif + @endforeach @endif -
  • Add another currency
  • +
  • Add another currency
  • diff --git a/composer.lock b/composer.lock index 1610b87348..20676b73a9 100644 --- a/composer.lock +++ b/composer.lock @@ -324,16 +324,16 @@ }, { "name": "laravel/framework", - "version": "v4.2.12", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "70a60f2ff9b96b3fcd88a68ef5382557733fe671" + "reference": "31fe6a5747bbe3c2df21dc4cc8f291e75ab6144f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/70a60f2ff9b96b3fcd88a68ef5382557733fe671", - "reference": "70a60f2ff9b96b3fcd88a68ef5382557733fe671", + "url": "https://api.github.com/repos/laravel/framework/zipball/31fe6a5747bbe3c2df21dc4cc8f291e75ab6144f", + "reference": "31fe6a5747bbe3c2df21dc4cc8f291e75ab6144f", "shasum": "" }, "require": { @@ -435,7 +435,7 @@ "framework", "laravel" ], - "time": "2014-12-11 17:14:36" + "time": "2014-12-22 20:56:10" }, { "name": "michelf/php-markdown", @@ -1984,16 +1984,16 @@ }, { "name": "codeception/codeception", - "version": "2.0.8", + "version": "2.0.9", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "0f9de6de9788912a289214a020193eac0a9a05e8" + "reference": "0094191ac0d6e87821fba41de002103ebe79a279" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/0f9de6de9788912a289214a020193eac0a9a05e8", - "reference": "0f9de6de9788912a289214a020193eac0a9a05e8", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/0094191ac0d6e87821fba41de002103ebe79a279", + "reference": "0094191ac0d6e87821fba41de002103ebe79a279", "shasum": "" }, "require": { @@ -2015,6 +2015,7 @@ "codeception/specify": "~0.3", "codegyre/robo-ci": "@dev", "facebook/php-sdk": "~3.2", + "flow/jsonpath": "~0.1", "monolog/monolog": "~1.8", "pda/pheanstalk": "~2.0", "phpseclib/phpseclib": "~0.3.6", @@ -2061,7 +2062,7 @@ "functional testing", "unit testing" ], - "time": "2014-11-18 00:48:50" + "time": "2014-12-19 23:54:20" }, { "name": "codeception/phpbuiltinserver", @@ -2105,16 +2106,16 @@ }, { "name": "doctrine/annotations", - "version": "v1.2.1", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "6a6bec0670bb6e71a263b08bc1b98ea242928633" + "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/6a6bec0670bb6e71a263b08bc1b98ea242928633", - "reference": "6a6bec0670bb6e71a263b08bc1b98ea242928633", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/eeda578cbe24a170331a1cfdf78be723412df7a4", + "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4", "shasum": "" }, "require": { @@ -2169,7 +2170,7 @@ "docblock", "parser" ], - "time": "2014-09-25 16:45:30" + "time": "2014-12-20 20:49:38" }, { "name": "doctrine/cache", @@ -2459,22 +2460,30 @@ }, { "name": "doctrine/inflector", - "version": "v1.0", + "version": "v1.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "54b8333d2a5682afdc690060c1cf384ba9f47f08" + "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/54b8333d2a5682afdc690060c1cf384ba9f47f08", - "reference": "54b8333d2a5682afdc690060c1cf384ba9f47f08", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/0bcb2e79d8571787f18b7eb036ed3d004908e604", + "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604", "shasum": "" }, "require": { "php": ">=5.3.2" }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-0": { "Doctrine\\Common\\Inflector\\": "lib/" @@ -2485,17 +2494,6 @@ "MIT" ], "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/", - "role": "Creator" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -2504,22 +2502,28 @@ "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", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "email": "schmittjoh@gmail.com" } ], "description": "Common String Manipulations with regard to casing and singular/plural rules.", "homepage": "http://www.doctrine-project.org", "keywords": [ "inflection", - "pluarlize", - "singuarlize", + "pluralize", + "singularize", "string" ], - "time": "2013-01-10 21:49:15" + "time": "2014-12-20 21:24:13" }, { "name": "doctrine/instantiator", @@ -2810,16 +2814,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "5.0.3", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "6c72627de1d66832e4270e36e56acdb0d1d8f282" + "reference": "f1085bb4e023766a66b7b051914ec73bdf7202b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/6c72627de1d66832e4270e36e56acdb0d1d8f282", - "reference": "6c72627de1d66832e4270e36e56acdb0d1d8f282", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f1085bb4e023766a66b7b051914ec73bdf7202b5", + "reference": "f1085bb4e023766a66b7b051914ec73bdf7202b5", "shasum": "" }, "require": { @@ -2864,7 +2868,7 @@ "rest", "web service" ], - "time": "2014-11-04 07:09:15" + "time": "2014-12-19 20:27:15" }, { "name": "guzzlehttp/ringphp", @@ -3085,16 +3089,16 @@ }, { "name": "mockery/mockery", - "version": "0.9.2", + "version": "0.9.3", "source": { "type": "git", "url": "https://github.com/padraic/mockery.git", - "reference": "95a4855380dc70176c51807c678fb3bd6198529a" + "reference": "686f85fa5b3b079cc0157d7cd3e9adb97f0b41e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/padraic/mockery/zipball/95a4855380dc70176c51807c678fb3bd6198529a", - "reference": "95a4855380dc70176c51807c678fb3bd6198529a", + "url": "https://api.github.com/repos/padraic/mockery/zipball/686f85fa5b3b079cc0157d7cd3e9adb97f0b41e1", + "reference": "686f85fa5b3b079cc0157d7cd3e9adb97f0b41e1", "shasum": "" }, "require": { @@ -3147,7 +3151,7 @@ "test double", "testing" ], - "time": "2014-09-03 10:11:10" + "time": "2014-12-22 10:06:19" }, { "name": "phpdocumentor/reflection-docblock",