You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							132 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
	
	
							132 lines
						
					
					
						
							3.6 KiB
						
					
					
				<?php | 
						|
 | 
						|
namespace common\modules\blog\helpers; | 
						|
 | 
						|
use common\modules\blog\entities\BlogPost; | 
						|
use common\modules\blog\forms\BlogPostForm; | 
						|
use common\modules\blog\repositories\BlogRepository; | 
						|
use common\modules\blog\repositories\read\BlogPostReadRepository; | 
						|
use common\modules\blog\services\BlogPostManageService; | 
						|
use core\dispatchers\DeferredEventDispatcher; | 
						|
use core\entities\post\Post; | 
						|
use core\services\TransactionManager; | 
						|
use yii\helpers\ArrayHelper; | 
						|
use yii\helpers\Html; | 
						|
use Yii; | 
						|
 | 
						|
class BlogPostHelper | 
						|
{ | 
						|
	public static function statusList(): array | 
						|
    { | 
						|
        return [ | 
						|
            Post::STATUS_DRAFT => Yii::t('blog', 'Draft'), | 
						|
            Post::STATUS_ACTIVE => Yii::t('blog', 'Active'), | 
						|
        ]; | 
						|
    } | 
						|
 | 
						|
    public static function statusName($status): string | 
						|
    { | 
						|
        return ArrayHelper::getValue(self::statusList(), $status); | 
						|
    } | 
						|
 | 
						|
    public static function statusLabel($status): string | 
						|
    { | 
						|
        switch ($status) { | 
						|
            case Post::STATUS_DRAFT: | 
						|
                $class = 'label label-default'; | 
						|
                break; | 
						|
            case Post::STATUS_ACTIVE: | 
						|
                $class = 'label label-success'; | 
						|
                break; | 
						|
            default: | 
						|
                $class = 'label label-default'; | 
						|
        } | 
						|
 | 
						|
        return Html::tag('span', ArrayHelper::getValue(self::statusList(), $status), [ | 
						|
            'class' => $class, | 
						|
        ]); | 
						|
    } | 
						|
 | 
						|
	public static function parseYoutubeUrl($url) | 
						|
	{ | 
						|
		$urls = parse_url($url); | 
						|
		//url is http://youtu.be/xxxx | 
						|
		if($urls['host'] == 'youtu.be'){ | 
						|
			$id = ltrim($urls['path'],'/'); | 
						|
		} | 
						|
		//url is http://www.youtube.com/embed/xxxx | 
						|
		else if(strpos($urls['path'],'embed') == 1){ | 
						|
			$id = end(explode('/',$urls['path'])); | 
						|
		} | 
						|
		//url is xxxx only | 
						|
		else if(strpos($url,'/')===false){ | 
						|
			$id = $url; | 
						|
		} | 
						|
		//http://www.youtube.com/watch?feature=player_embedded&v=m-t4pcO99gI | 
						|
		//url is http://www.youtube.com/watch?v=xxxx | 
						|
		else{ | 
						|
			parse_str($urls['query']); | 
						|
			/* @var $v */ | 
						|
			$id = $v; | 
						|
			if(!empty($feature)){ | 
						|
				$id = end(explode('v=',$urls['query'])); | 
						|
			} | 
						|
		} | 
						|
		return $id; | 
						|
	} | 
						|
 | 
						|
	public static function saveRevision1(BlogPost $model) { | 
						|
		if (!$model->revision_id) { | 
						|
 | 
						|
			$blogForm = new BlogPostForm($model); | 
						|
			$blog = BlogPost::create( | 
						|
				$blogForm, | 
						|
				$model->category_id, | 
						|
				$model->slug, | 
						|
				$model->published_at, | 
						|
				$model->video, | 
						|
				$model->type | 
						|
			); | 
						|
			$blog->type = BlogPost::TYPE_REVISION; | 
						|
			$blog->revision_at = $model->updated_at; | 
						|
			$blog->revision_id = $model->id; | 
						|
 | 
						|
			foreach ($model->tags as $tag) { | 
						|
				$blog->assignTag($tag->id); | 
						|
			} | 
						|
 | 
						|
			$blog->save(); | 
						|
 | 
						|
			if ($model->image) { | 
						|
				$path  = Yii::getAlias( '@staticRoot/origin/posts' ); | 
						|
				$parts = pathinfo( $model->image ); | 
						|
				copy( $path . '/' . $model->id . '.' . $parts['extension'], $path . '/' . $blog->id . '.' . $parts['extension'] ); | 
						|
			} | 
						|
		} | 
						|
	} | 
						|
 | 
						|
	public static function saveRevision(BlogPost $model) { | 
						|
		if (!$model->revision_id) { | 
						|
			$revision                      = clone $model; | 
						|
			$revision->id                  = null; | 
						|
			$revision->isNewRecord         = true; | 
						|
			$revision->revision_at         = $revision->updated_at; | 
						|
			$revision->revision_id         = $model->id; | 
						|
			$revision->type                = BlogPost::TYPE_REVISION; | 
						|
			$revision->_form               = new BlogPostForm($model); | 
						|
			$revision->save(); | 
						|
 | 
						|
			// tags | 
						|
			foreach ($model->tags as $tag) { | 
						|
				$revision->assignTag($tag->id); | 
						|
			} | 
						|
			$revision->save(); | 
						|
 | 
						|
			if ($model->image) { | 
						|
				$path  = Yii::getAlias( '@staticRoot/origin/posts' ); | 
						|
				$parts = pathinfo( $model->image ); | 
						|
				copy( $path . '/' . $model->id . '.' . $parts['extension'], $path . '/' . $revision->id . '.' . $parts['extension'] ); | 
						|
			} | 
						|
		} | 
						|
	} | 
						|
} |