Example #1
0
 /**
  * @return Twig_SimpleFunction
  */
 public function journalCategories() : Twig_SimpleFunction
 {
     return new Twig_SimpleFunction('journalCategories', function (TransactionJournal $journal) : string {
         $cache = new CacheProperties();
         $cache->addProperty($journal->id);
         $cache->addProperty('transaction-journal');
         $cache->addProperty('category-string');
         if ($cache->has()) {
             return $cache->get();
         }
         $categories = [];
         // get all categories for the journal itself (easy):
         foreach ($journal->categories as $category) {
             $categories[] = '<a href="' . route('categories.show', [$category->id]) . '" title="' . e($category->name) . '">' . e($category->name) . '</a>';
         }
         if (count($categories) === 0) {
             $set = Category::distinct()->leftJoin('category_transaction', 'categories.id', '=', 'category_transaction.category_id')->leftJoin('transactions', 'category_transaction.transaction_id', '=', 'transactions.id')->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')->where('categories.user_id', $journal->user_id)->where('transaction_journals.id', $journal->id)->get(['categories.*']);
             /** @var Category $category */
             foreach ($set as $category) {
                 $categories[] = '<a href="' . route('categories.show', [$category->id]) . '" title="' . e($category->name) . '">' . e($category->name) . '</a>';
             }
         }
         $string = join(', ', array_unique($categories));
         $cache->store($string);
         return $string;
     });
 }