Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Modules\Monitoring;
- use App\Controllers\Controller;
- use App\Models\Monitoring;
- use App\Models\MonitoringKeyword;
- use Carbon\Carbon;
- use App\Models\MonitoringKeywordList;
- use App\Models\MonitoringSite;
- use App\Models\MonitoringSiteKeyword;
- use App\Models\MonitoringSearchParam;
- use App\Models\MonitoringGoogleDomain;
- class Manager extends Controller{
- use ResultsTrait;
- public function getBy($field, $value){
- return Monitoring::with(['keywords.list', 'keywords.relations.site', 'sites', 'params.language', 'params.country'])
- -> where($field, $value)
- -> first();
- }
- public function getById($id){
- return $this -> getBy('id', $id);
- }
- public function updateById($id, $field, $value = null){
- if(is_null($value) && is_array($field)){
- return Monitoring::where('id', $id)
- -> update($field);
- }
- return Monitoring::where('id', $id)
- -> update([$field = $value]);
- }
- public function calculateOrderAmount($keywords, $payments){
- $base = count($keywords) * 0.7;
- if($payments == 'month'){
- return $base;
- }
- return 10 * $base;
- }
- public function calculateOrderDueDate($payment_type){
- $now = Carbon::now();
- if($payment_type == 'month'){
- $now -> addMonth();
- }
- if($payment_type == 'year'){
- $now -> addYear();
- }
- return $now;
- }
- public function resolveKeywordListItem($keyword, $delete = false){
- $item = MonitoringKeywordList::withTrashed()
- -> where('keyword', $keyword)
- -> first();
- if(!$delete){
- if($item){
- $item -> restore();
- return $item -> id;
- }
- return MonitoringKeywordList::create([
- 'keyword' => $keyword
- ]) -> id;
- }
- $same_items = MonitoringKeyword::where('keyword_id', $item -> id)
- -> count();
- if($same_items == 0){
- $item -> delete();
- }
- }
- public function newOrder($data){
- $monitoring = Monitoring::create([
- 'user_id' => $this -> user -> get('id'),
- 'max_keywords' => count($data['keywords']),
- 'auto_renewal' => $data['auto_renewal'],
- 'due_date' => $this -> calculateOrderDueDate($data['payments'])
- ]);
- foreach($data['keywords'] as $item){
- MonitoringKeyword::create([
- 'monitoring_id' => $monitoring -> id,
- 'keyword_id' => $this -> resolveKeywordListItem($item['keyword'])
- ]);
- }
- $this -> setSearchParams('monitoring', $monitoring -> id);
- }
- public function removeKeyword($keyword_id){
- $item = MonitoringKeyword::with('list')
- -> whereHas('monitoring', function($query){
- $query -> where('user_id', $this -> user -> get('id'));
- })
- -> where('id', $keyword_id)
- -> first();
- if($item){
- $item -> delete();
- $this -> resolveKeywordListItem($item -> list -> keyword, true);
- }
- }
- public function removeSite($site_id){
- $item = MonitoringSite::where('id', $site_id)
- -> whereHas('monitoring', function($query){
- $query -> where('user_id', $this -> user -> get('id'));
- })
- -> first();
- if($item){
- $item -> delete();
- MonitoringSiteKeyword::where('site_id', $site_id)
- -> delete();
- }
- }
- public function addKeyword($keyword){
- $item = MonitoringKeyword::create([
- 'monitoring_id' => $this -> getBy('user_id', $this -> user -> get('id')) -> id,
- 'keyword_id' => $this -> resolveKeywordListItem($keyword)
- ]);
- return $item -> id;
- }
- public function addSite($site){
- $exists = MonitoringSite::where('site', $site)
- -> whereHas('monitoring', function($query){
- $query -> where('user_id', $this -> user -> get('id'));
- })
- -> exists();
- if(!$exists){
- $item = MonitoringSite::create([
- 'site' => prepareUrl($site),
- 'monitoring_id' => $this -> getBy('user_id', $this -> user -> get('id')) -> id
- ]);
- return $item -> id;
- }
- }
- public function endMonitoring(){
- $item = $this -> getBy('user_id', $this -> user -> get('id'));
- if($item){
- $item -> delete();
- return true;
- }
- return false;
- }
- public function sitesAutocomplete($query, $additional){
- $data = $this -> search -> autocomplete(
- $query,
- MonitoringSite::class,
- '',
- ['site'],
- ['site'],
- 'id',
- function($q) use ($additional, $query){
- return $q -> whereHas('monitoring', function($q){
- $q -> where('user_id', $this -> user -> get('id'));
- })
- -> whereDoesntHave('relation', function($q) use ($additional, $query){
- $q -> where('keyword_id', $additional);
- $q -> whereHas('site', function($q) use ($query){
- $search = $this -> search -> getSearchValue('site', $query, 'like');
- $q -> where($search['field'], $search['operator'], $search['value']);
- });
- });
- }
- );
- return $data;
- }
- public function newRelation($keyword_id, $site_id){
- $row = [
- 'keyword_id' => $keyword_id,
- 'site_id' => $site_id
- ];
- $item = MonitoringSiteKeyword::where($row)
- -> exists();
- if(!$item){
- return MonitoringSiteKeyword::create($row) -> id;
- }
- }
- public function deleteRelation($relation_id){
- MonitoringSiteKeyword::where('id', $relation_id)
- -> delete();
- }
- public function setSearchParams($type, $id, $params = []){
- if(count($params) == 0){
- $params = [
- 'language_id' => 165,
- 'country_id' => 165,
- 'is_mobile' => false
- ];
- }
- $item = $type == 'monitoring' ? Monitoring::where('id', $id) -> first() : MonitoringKeyword::where('id', $id) -> first();
- if($item){
- $search_params = MonitoringSearchParam::create($params);
- $item -> search_params_id = $search_params -> id;
- $item -> save();
- }
- }
- public function getGoogleDomains(){
- $domains = MonitoringGoogleDomain::get();
- return $domains;
- }
- public function saveMonitoringDetails($data){
- $monitoring = $this -> getBy('user_id', $this -> user -> get('id'));
- $monitoring -> auto_renewal = $data['auto_renewal'];
- $monitoring -> save();
- $params = MonitoringSearchParam::where('id', $monitoring -> search_params_id)
- -> first();
- $params -> language_id = $data['language_id'];
- $params -> country_id = $data['country_id'];
- $params -> is_mobile = $data['is_mobile'];
- $params -> save();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement