Skip to content

Instantly share code, notes, and snippets.

@ajshort
Created October 12, 2009 09:50
Show Gist options
  • Select an option

  • Save ajshort/208292 to your computer and use it in GitHub Desktop.

Select an option

Save ajshort/208292 to your computer and use it in GitHub Desktop.
<?php
/**
*
*
* @package sapphire
* @subpackage tasks
*/
class MigrateSiteTreeLinkingTask extends BuildTask {
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;
$linked = DataObject::get (
'SiteTree',
'EXISTS(SELECT "ID" FROM "SiteTree_LinkTracking" WHERE "SiteTree_LinkTracking"."SiteTreeID" = "SiteTree"."ID")'
);
if($linked) foreach($linked as $page) {
$tracking = DB::query(sprintf (
'SELECT "SiteTreeID", "FieldName" FROM "SiteTree_LinkTracking" WHERE "SiteTreeID" = %d',
$page->ID
));
foreach($tracking as $link) {
$linked = DataObject::get_by_id('SiteTree', $link['SiteTreeID']);
$page->{$link['FieldName']} = preg_replace (
'/ href=(["\']?)' . preg_quote(trim($linked->RelativeLink(true), '/')) . '\/?/i',
"href=$1[sitetree_link id={$linked->ID}]",
$page->{$link['FieldName']},
-1,
$replaced
);
if($replaced) {
$page->write();
$links += $replaced;
}
}
$pages++;
}
echo "Rewrote $links link(s) on $pages page(s) to use shortcodes.\n";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment