Source of file ReplaceVimeoAndYouTubeEmbedCodeTask.php
Size: 4,217 Bytes - Last Modified: 2021-12-23T10:41:38+00:00
/var/www/docs.ssmods.com/process/src/src/Tasks/ReplaceVimeoAndYouTubeEmbedCodeTask.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | <?php namespace Sunnysideup\FixVideosForSS4\Tasks; use DOMDocument; use SilverStripe\Dev\BuildTask; use SilverStripe\Core\ClassInfo; use SilverStripe\Core\Config\Config; use SilverStripe\ORM\DB; use SilverStripe\ORM\DataObject; use Sunnysideup\FixVideosForSS4\Api\ReplaceVimeoAndYouTubeEmbedCode; class ReplaceVimeoAndYouTubeEmbedCodeTask extends BuildTask { protected $forReal = false; protected $title = 'Fix legacy YouTube and Vimeo'; protected $description = 'Runs through all the HTMLText fields.'; public function run($request) { $api = new ReplaceVimeoAndYouTubeEmbedCode(); $objectsChanged = []; $objectsFieldsChanged = []; $completed = []; // Get class names for page types that are not virtual pages or redirector pages $classes = ClassInfo::subclassesFor(DataObject::class); foreach($classes as $className) { $fields = Config::inst()->get($className, 'db'); foreach($fields as $fieldName => $fieldType) { if($fieldType === 'HTMLText') { $filter = [$fieldName.':PartialMatch' => 'iframe']; $objects = $className::get()->filter($filter); if($objects->count()) { foreach($objects as $object) { $objectKey = $object->ClassName.'-'.$object->ID; $objectFieldKey = $objectKey.'-'.$fieldName; if(isset($completed[$objectFieldKey])) { continue; } DB::alteration_message('-----------------------------'); DB::alteration_message('Checking: '.$object->getTitle().' ('.$objectKey.')'); DB::alteration_message('-----------------------------'); $isPublished = $object->isPublished(); $htmlOld = $object->$fieldName; if($htmlOld) { $htmlNew = $api->oldToNewHTML($htmlOld); if($htmlNew) { echo 'FROM: ' . $htmlOld; DB::alteration_message('-----------------------------'); echo 'TO: ' . $htmlNew; DB::alteration_message('-----------------------------'); $object->$fieldName = $htmlNew; if($this->forReal) { $object->write(); } if(!isset($classesChanged[$className])) { $classesChanged[$className] = 0; } $classesChanged[$className]++; $objectsChanged[$objectKey] = $objectKey; $objectsFieldsChanged[$objectFieldKey] = $objectFieldKey; if($isPublished) { if($this->forReal) { $object->publishRecursive(); } } } } $completed[$objectFieldKey] = true; } } } } } DB::alteration_message('-----------------------------'); DB::alteration_message('-----------------------------'); DB::alteration_message('-----------------------------'); DB::alteration_message('Classes changed '.print_r($classesChanged, 1)); DB::alteration_message('Number of objects changed '.count($objectsChanged)); DB::alteration_message('Number of objects fields changed '.count($objectsFieldsChanged)); DB::alteration_message('-----------------------------'); } } |