mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
61 lines
2.0 KiB
PHP
61 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace SilverStripe\CMS\Tasks;
|
|
|
|
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.
|
|
*/
|
|
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('SilverStripe\\CMS\\Model\\SiteTree');
|
|
$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('SilverStripe\\CMS\\Model\\SiteTree', $childID);
|
|
|
|
// 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++;
|
|
}
|
|
}
|
|
|
|
echo "Rewrote $links link(s) on $pages page(s) to use shortcodes.\n";
|
|
}
|
|
}
|