silverstripe-cms/code/Tasks/MigrateSiteTreeLinkingTask.php

62 lines
1.9 KiB
PHP
Raw Normal View History

<?php
2016-08-10 06:08:39 +02:00
namespace SilverStripe\CMS\Tasks;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Dev\BuildTask;
use SilverStripe\ORM\DataList;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DB;
/**
* Rewrites plain internal HTML links into shortcode form, using existing link tracking information.
*/
2017-01-25 21:59:25 +01:00
class MigrateSiteTreeLinkingTask extends BuildTask
{
private static $segment = 'MigrateSiteTreeLinkingTask';
protected $title = 'Migrate SiteTree Linking Task';
protected $description = 'Rewrites plain internal HTML links into shortcode form, using existing link tracking information.';
public function run($request)
{
$pages = 0;
$links = 0;
$linkedPages = new DataList(SiteTree::class);
2017-01-25 21:59:25 +01:00
$linkedPages = $linkedPages->innerJoin('SiteTree_LinkTracking', '"SiteTree_LinkTracking"."SiteTreeID" = "SiteTree"."ID"');
if ($linkedPages) {
foreach ($linkedPages as $page) {
$tracking = DB::prepared_query(
'SELECT "ChildID", "FieldName" FROM "SiteTree_LinkTracking" WHERE "SiteTreeID" = ?',
array($page->ID)
)->map();
foreach ($tracking as $childID => $fieldName) {
$linked = DataObject::get_by_id(SiteTree::class, $childID);
2017-01-25 21:59:25 +01:00
// TOOD: Replace in all HTMLText fields
$page->Content = preg_replace(
"/href *= *([\"']?){$linked->URLSegment}\/?/i",
"href=$1[sitetree_link,id={$linked->ID}]",
$page->Content,
-1,
$replaced
);
if ($replaced) {
$links += $replaced;
}
}
$page->write();
$pages++;
2017-01-25 21:59:25 +01:00
}
}
echo "Rewrote $links link(s) on $pages page(s) to use shortcodes.\n";
}
}