mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 05:58:50 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			160 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Invoice Ninja (https://invoiceninja.com)
 | 
						|
 *
 | 
						|
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
						|
 *
 | 
						|
 * @copyright Copyright (c) 2019. Invoice Ninja LLC (https://invoiceninja.com)
 | 
						|
 *
 | 
						|
 * @license https://opensource.org/licenses/AAL
 | 
						|
 */
 | 
						|
 | 
						|
namespace App\Repositories;
 | 
						|
 | 
						|
use App\Utils\Traits\MakesHash;
 | 
						|
 | 
						|
/**
 | 
						|
 * 
 | 
						|
 */
 | 
						|
class BaseRepository 
 | 
						|
{
 | 
						|
    use MakesHash;
 | 
						|
    /**
 | 
						|
     * @return null
 | 
						|
     */
 | 
						|
    public function getClassName()
 | 
						|
    {
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    private function getInstance()
 | 
						|
    {
 | 
						|
        $className = $this->getClassName();
 | 
						|
 | 
						|
        return new $className();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $entity
 | 
						|
     * @param $type
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    private function getEventClass($entity, $type)
 | 
						|
    {
 | 
						|
        return 'App\Events\\' . ucfirst(class_basename($entity)) . 'Was' . $type;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $entity
 | 
						|
     */
 | 
						|
    public function archive($entity)
 | 
						|
    {
 | 
						|
        if ($entity->trashed()) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        $entity->delete();
 | 
						|
 | 
						|
        $className = $this->getEventClass($entity, 'Archived');
 | 
						|
 | 
						|
        if (class_exists($className)) {
 | 
						|
            event(new $className($entity));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $entity
 | 
						|
     */
 | 
						|
    public function restore($entity)
 | 
						|
    {
 | 
						|
        if (! $entity->trashed()) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        $fromDeleted = false;
 | 
						|
        $entity->restore();
 | 
						|
 | 
						|
        if ($entity->is_deleted) {
 | 
						|
            $fromDeleted = true;
 | 
						|
            $entity->is_deleted = false;
 | 
						|
            $entity->save();
 | 
						|
        }
 | 
						|
 | 
						|
        $className = $this->getEventClass($entity, 'Restored');
 | 
						|
 | 
						|
        if (class_exists($className)) {
 | 
						|
            event(new $className($entity, $fromDeleted));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $entity
 | 
						|
     */
 | 
						|
    public function delete($entity)
 | 
						|
    {
 | 
						|
        if ($entity->is_deleted) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        $entity->is_deleted = true;
 | 
						|
        $entity->save();
 | 
						|
 | 
						|
        $entity->delete();
 | 
						|
 | 
						|
        $className = $this->getEventClass($entity, 'Deleted');
 | 
						|
 | 
						|
        if (class_exists($className)) {
 | 
						|
            event(new $className($entity));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $ids
 | 
						|
     * @param $action
 | 
						|
     *
 | 
						|
     * @return int
 | 
						|
     */
 | 
						|
    public function bulk($ids, $action)
 | 
						|
    {
 | 
						|
        if (! $ids) {
 | 
						|
            return 0;
 | 
						|
        }
 | 
						|
 | 
						|
        $ids = $this->transformKeys($ids);
 | 
						|
 | 
						|
        $entities = $this->findByPublicIdsWithTrashed($ids);
 | 
						|
 | 
						|
        foreach ($entities as $entity) {
 | 
						|
            if (auth()->user()->can('edit', $entity)) {
 | 
						|
                $this->$action($entity);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return count($entities);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $ids
 | 
						|
     *
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    public function findByPublicIds($ids)
 | 
						|
    {
 | 
						|
        return $this->getInstance()->scope($ids)->get();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $ids
 | 
						|
     *
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    public function findByPublicIdsWithTrashed($ids)
 | 
						|
    {
 | 
						|
        return $this->getInstance()->scope($ids)->withTrashed()->get();
 | 
						|
    }	
 | 
						|
 | 
						|
} |