Edit and update tags.

This commit is contained in:
James Cole
2015-04-28 10:36:13 +02:00
parent 51ae130922
commit ce933b1f06
19 changed files with 312 additions and 101 deletions

View File

@@ -4,10 +4,12 @@ namespace FireflyIII\Repositories\Journal;
use App;
use Auth;
use DB;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\Budget;
use FireflyIII\Models\Category;
use FireflyIII\Models\Tag;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType;
@@ -82,6 +84,20 @@ class JournalRepository implements JournalRepositoryInterface
return TransactionType::whereType($type)->first();
}
/**
* @param TransactionJournal $journal
* @param array $array
*
* @return void
*/
public function saveTags(TransactionJournal $journal, array $array)
{
foreach ($array as $name) {
$tag = Tag::firstOrCreateEncrypted(['tag' => $name, 'user_id' => $journal->user_id]);
$journal->tags()->save($tag);
}
}
/**
* @param string $query
* @param TransactionJournal $journal
@@ -157,6 +173,10 @@ class JournalRepository implements JournalRepositoryInterface
);
$journal->save();
if (isset($data['tags']) && is_array($data['tags'])) {
$this->saveTags($journal, $data['tags']);
}
// store or get category
if (strlen($data['category']) > 0) {
@@ -246,9 +266,44 @@ class JournalRepository implements JournalRepositoryInterface
$journal->save();
// update tags:
if (isset($data['tags']) && is_array($data['tags'])) {
$this->updateTags($journal, $data['tags']);
}
return $journal;
}
/**
* @param TransactionJournal $journal
* @param array $array
*
* @return void
*/
public function updateTags(TransactionJournal $journal, array $array)
{
// find or create all tags:
$tags = [];
$ids = [];
foreach ($array as $name) {
$tag = Tag::firstOrCreateEncrypted(['tag' => $name, 'user_id' => $journal->user_id]);
$tags[] = $tag;
$ids[] = $tag->id;
}
// delete all tags connected to journal not in this array:
if (count($ids) > 0) {
DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal->id)->whereNotIn('tag_id', $ids)->delete();
}
// connect each tag to journal (if not yet connected):
foreach($tags as $tag) {
if(!$journal->tags()->find($tag->id)) {
$journal->tags()->save($tag);
}
}
}
/**
* @param TransactionType $type
* @param array $data

View File

@@ -31,6 +31,23 @@ interface JournalRepositoryInterface
*/
public function getAssetAccount(TransactionJournal $journal);
/**
* @param TransactionJournal $journal
* @param array $array
*
* @return void
*/
public function updateTags(TransactionJournal $journal, array $array);
/**
* @param TransactionJournal $journal
* @param array $array
*
* @return void
*/
public function saveTags(TransactionJournal $journal, array $array);
/**
* @param TransactionType $dbType
*