Advertisement
Guest User

Untitled

a guest
Sep 20th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.54 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Modules\Monitoring;
  4.  
  5. use App\Controllers\Controller;
  6. use App\Models\Monitoring;
  7. use App\Models\MonitoringKeyword;
  8. use Carbon\Carbon;
  9. use App\Models\MonitoringKeywordList;
  10. use App\Models\MonitoringSite;
  11. use App\Models\MonitoringSiteKeyword;
  12. use App\Models\MonitoringSearchParam;
  13. use App\Models\MonitoringGoogleDomain;
  14.  
  15.  
  16. class Manager extends Controller{
  17.   use ResultsTrait;
  18.   public function getBy($field, $value){
  19.     return Monitoring::with(['keywords.list', 'keywords.relations.site', 'sites', 'params.language', 'params.country'])
  20.       -> where($field, $value)
  21.       -> first();
  22.   }
  23.  
  24.   public function getById($id){
  25.     return $this -> getBy('id', $id);
  26.   }
  27.  
  28.   public function updateById($id, $field, $value = null){
  29.     if(is_null($value) && is_array($field)){
  30.       return Monitoring::where('id', $id)
  31.         -> update($field);
  32.     }
  33.  
  34.     return Monitoring::where('id', $id)
  35.       -> update([$field = $value]);
  36.   }
  37.  
  38.   public function calculateOrderAmount($keywords, $payments){
  39.     $base = count($keywords) * 0.7;
  40.  
  41.     if($payments == 'month'){
  42.       return $base;
  43.     }
  44.  
  45.     return 10 * $base;
  46.   }
  47.  
  48.   public function calculateOrderDueDate($payment_type){
  49.     $now = Carbon::now();
  50.  
  51.     if($payment_type == 'month'){
  52.       $now -> addMonth();
  53.     }
  54.  
  55.     if($payment_type == 'year'){
  56.       $now -> addYear();
  57.     }
  58.  
  59.     return $now;
  60.   }
  61.  
  62.   public function resolveKeywordListItem($keyword, $delete = false){
  63.     $item = MonitoringKeywordList::withTrashed()
  64.       -> where('keyword', $keyword)
  65.       -> first();
  66.  
  67.     if(!$delete){
  68.       if($item){
  69.         $item -> restore();
  70.         return $item -> id;
  71.       }
  72.  
  73.       return MonitoringKeywordList::create([
  74.         'keyword' => $keyword
  75.       ]) -> id;
  76.     }
  77.  
  78.     $same_items = MonitoringKeyword::where('keyword_id', $item -> id)
  79.       -> count();
  80.  
  81.     if($same_items == 0){
  82.       $item -> delete();
  83.     }
  84.   }
  85.  
  86.   public function newOrder($data){
  87.     $monitoring = Monitoring::create([
  88.       'user_id' => $this -> user -> get('id'),
  89.       'max_keywords' => count($data['keywords']),
  90.       'auto_renewal' => $data['auto_renewal'],
  91.       'due_date' => $this -> calculateOrderDueDate($data['payments'])
  92.     ]);
  93.  
  94.     foreach($data['keywords'] as $item){
  95.       MonitoringKeyword::create([
  96.         'monitoring_id' => $monitoring -> id,
  97.         'keyword_id' => $this -> resolveKeywordListItem($item['keyword'])
  98.       ]);
  99.     }
  100.  
  101.     $this -> setSearchParams('monitoring', $monitoring -> id);
  102.   }
  103.  
  104.   public function removeKeyword($keyword_id){
  105.     $item = MonitoringKeyword::with('list')
  106.       -> whereHas('monitoring', function($query){
  107.         $query -> where('user_id', $this -> user -> get('id'));
  108.       })
  109.       -> where('id', $keyword_id)
  110.       -> first();
  111.  
  112.     if($item){
  113.       $item -> delete();
  114.  
  115.       $this -> resolveKeywordListItem($item -> list -> keyword, true);
  116.     }
  117.   }
  118.  
  119.   public function removeSite($site_id){
  120.     $item = MonitoringSite::where('id', $site_id)
  121.       -> whereHas('monitoring', function($query){
  122.         $query -> where('user_id', $this -> user -> get('id'));
  123.       })
  124.       -> first();
  125.  
  126.     if($item){
  127.       $item -> delete();
  128.  
  129.       MonitoringSiteKeyword::where('site_id', $site_id)
  130.         -> delete();
  131.     }
  132.   }
  133.  
  134.   public function addKeyword($keyword){
  135.     $item = MonitoringKeyword::create([
  136.       'monitoring_id' => $this -> getBy('user_id', $this -> user -> get('id')) -> id,
  137.       'keyword_id' => $this -> resolveKeywordListItem($keyword)
  138.     ]);
  139.  
  140.     return $item -> id;
  141.   }
  142.  
  143.   public function addSite($site){
  144.     $exists = MonitoringSite::where('site', $site)
  145.       -> whereHas('monitoring', function($query){
  146.         $query -> where('user_id', $this -> user -> get('id'));
  147.       })
  148.       -> exists();
  149.  
  150.     if(!$exists){
  151.       $item = MonitoringSite::create([
  152.         'site' => prepareUrl($site),
  153.         'monitoring_id' => $this -> getBy('user_id', $this -> user -> get('id')) -> id
  154.       ]);
  155.  
  156.       return $item -> id;
  157.     }
  158.  
  159.   }
  160.  
  161.   public function endMonitoring(){
  162.     $item = $this -> getBy('user_id', $this -> user -> get('id'));
  163.  
  164.     if($item){
  165.       $item -> delete();
  166.  
  167.       return true;
  168.     }
  169.  
  170.     return false;
  171.   }
  172.  
  173.   public function sitesAutocomplete($query, $additional){
  174.     $data = $this -> search -> autocomplete(
  175.       $query,
  176.       MonitoringSite::class,
  177.       '',
  178.       ['site'],
  179.       ['site'],
  180.       'id',
  181.       function($q) use ($additional, $query){
  182.         return $q -> whereHas('monitoring', function($q){
  183.           $q -> where('user_id', $this -> user -> get('id'));
  184.         })
  185.         -> whereDoesntHave('relation', function($q) use ($additional, $query){
  186.           $q -> where('keyword_id', $additional);
  187.           $q -> whereHas('site', function($q) use ($query){
  188.             $search = $this -> search -> getSearchValue('site', $query, 'like');
  189.             $q -> where($search['field'], $search['operator'], $search['value']);
  190.           });
  191.         });
  192.       }
  193.     );
  194.  
  195.     return $data;
  196.   }
  197.  
  198.   public function newRelation($keyword_id, $site_id){
  199.     $row = [
  200.       'keyword_id' => $keyword_id,
  201.       'site_id' => $site_id
  202.     ];
  203.  
  204.     $item = MonitoringSiteKeyword::where($row)
  205.       -> exists();
  206.  
  207.     if(!$item){
  208.       return MonitoringSiteKeyword::create($row) -> id;
  209.     }
  210.   }
  211.  
  212.   public function deleteRelation($relation_id){
  213.     MonitoringSiteKeyword::where('id', $relation_id)
  214.       -> delete();
  215.   }
  216.  
  217.   public function setSearchParams($type, $id, $params = []){
  218.     if(count($params) == 0){
  219.       $params = [
  220.         'language_id' => 165,
  221.         'country_id' => 165,
  222.         'is_mobile' => false
  223.       ];
  224.     }
  225.  
  226.     $item = $type == 'monitoring' ? Monitoring::where('id', $id) -> first() : MonitoringKeyword::where('id', $id) -> first();
  227.  
  228.     if($item){
  229.       $search_params = MonitoringSearchParam::create($params);
  230.       $item -> search_params_id = $search_params -> id;
  231.       $item -> save();
  232.     }
  233.   }
  234.  
  235.   public function getGoogleDomains(){
  236.     $domains = MonitoringGoogleDomain::get();
  237.  
  238.     return $domains;
  239.   }
  240.  
  241.   public function saveMonitoringDetails($data){
  242.     $monitoring = $this -> getBy('user_id', $this -> user -> get('id'));
  243.     $monitoring -> auto_renewal = $data['auto_renewal'];
  244.     $monitoring -> save();
  245.  
  246.     $params = MonitoringSearchParam::where('id', $monitoring -> search_params_id)
  247.       -> first();
  248.  
  249.     $params -> language_id = $data['language_id'];
  250.     $params -> country_id = $data['country_id'];
  251.     $params -> is_mobile = $data['is_mobile'];
  252.     $params -> save();
  253.   }
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement