state == '') { // Für die Veröffentlichung vormerken $this->changeState('PENDING'); } break; // Der Post soll nicht veröffentlicht werden case false: // Der Post kann nur zurückgezogen werden, wenn er noch nicht veröffenttlicht wurde if($this->published_at == null && $this->state == 'PENDING') { $this->changeState(''); } default: break; } } public function isPending() { if($this->state == 'PENDING') { return true; } else { return false; } } public function isPublished() { if($this->state != '' && $this->state != 'PENDING') { return true; } else { return false; } } public function publishIfReady() { if($this->date_to_publish <= Carbon::now() && $this->published_at == null && $this->state == 'PENDING' && $this->post->published == 1) { $postURL = URLHelper::create($this->post); $result = $this->state; $this->published_at = Carbon::now(); switch($this->platform) { case 'facebook': if(getenv('APP_ENV', 'development') == 'development') { $result = '123456'; } else { $result = SocialMediaManager::postLinkOnFacebook($postURL); } break; case 'twitter': if(getenv('APP_ENV', 'development') == 'development') { $result = '654321'; } else { $result = SocialMediaManager::postLinkOnTwitter($postURL); } break; case 'stadtanzeiger': $result = 'published'; break; default: break; } $this->changeState($result); } } public function setPublishDate(Carbon $date) { switch($this->platform) { case 'stadtanzeiger': // Bei Stadtanzeigerbeiträgen findet die Veröffentlichung zusätzlich zum vorgegebenen Veröffentlichkeitsdatum // immer noch einen Sonntag vorher statt $this->date_to_publish = $date->startOfWeek(); // Wenn das Datum in der Vergangenheit liegt, wird es auf den nächsten Temrin gelegt, an dem der Stadtanzeiger erscheint. if($this->date_to_publish < Carbon::now()) { $this->date_to_publish = Carbon::now()->addWeek()->startOfWeek(); } break; default: $this->date_to_publish = $date; break; } } public function post() { return $this->belongsTo('App\Models\Post'); } public function getState() { return $this->state; } public function stateHasChanged() { return $this->stateChanged; } private function changeState($newState) { $this->state = $newState; $this->stateChanged = true; } /**********/ /* Scopes */ /**********/ public function scopeJustValidPosts($query) { $query = $query->join('posts as posts999', function($join) { $join->on('post_id', '=', 'posts999.id'); $join->where('posts999.deleted_at', '=', null); $join->where('posts999.published', '=', '1'); }); return $query; } }