Source of file BuildVFI.php
Size: 3,426 Bytes - Last Modified: 2021-12-23T10:03:27+00:00
/var/www/docs.ssmods.com/process/src/tasks/BuildVFI.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | <?php /** * Rebuilds all VirtualFieldIndexes * * @author Mark Guinn <mark@adaircreative.com> * @date 9.26.13 * @package shop_search * @subpackage tasks */ class BuildVFI extends BuildTask { protected $title = 'Rebuild Virtual Field Indexes'; protected $description = 'Rebuild all VFI fields on all tables and records.'; static $recordsPerRequest = 200; function old_run($request) { $classes = VirtualFieldIndex::get_classes_with_vfi(); ini_set('memory_limit', '1G'); $start = (int)$request->requestVar('start'); $n = $start; // rebuild the indexes foreach ($classes as $c) { echo "Rebuilding $c..."; $list = DataObject::get($c); $count = $list->count(); for ($i = $n; $i < $count; $i += 10) { $chunk = $list->limit(10, $i); if (Controller::curr() instanceof TaskRunner) echo "Processing VFI #$i...\n"; foreach ($chunk as $rec) $rec->rebuildVFI(); } VirtualFieldIndex::build($c); // echo "Republishing changed records..."; // $list = DataObject::get($c); // $count = $list->count(); // for ($i = 0; $i < $count; $i += 10) { // $chunk = $list->limit(10, $i); // foreach ($chunk as $rec) { // if ($rec->isPublished()) { // $rec->publish('Stage', 'Live'); // $rec->flushCache(); // } // } // } echo "<br>\n"; } echo "Task complete.\n\n"; } function run($request) { increase_time_limit_to(); $self = get_class($this); $verbose = isset($_GET['verbose']); if (isset($_GET['class']) && isset($_GET['id'])) { $item = DataObject::get($_GET['class'])->byID($_GET['id']); if (!$item || !$item->exists()) die('not found: ' . $_GET['id']); $item->rebuildVFI(); echo "done"; return; } if (isset($_GET['link'])) { $item = SiteTree::get_by_link($_GET['link']); if (!$item || !$item->exists()) die('not found: ' . $_GET['link']); $item->rebuildVFI(); echo "done"; return; } if (isset($_GET['start'])) { $this->runFrom($_GET['class'], $_GET['start'], $_GET['field']); } else { foreach(array('framework','sapphire') as $dirname) { $script = sprintf("%s%s$dirname%scli-script.php", BASE_PATH, DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR); if(file_exists($script)) { break; } } $classes = VirtualFieldIndex::get_classes_with_vfi(); foreach ($classes as $class) { if (isset($_GET['class']) && $class != $_GET['class']) continue; $singleton = singleton($class); $query = $singleton->get($class); $dtaQuery = $query->dataQuery(); $sqlQuery = $dtaQuery->getFinalisedQuery(); $singleton->extend('augmentSQL',$sqlQuery,$dtaQuery); $total = $query->count(); $startFrom = isset($_GET['startfrom']) ? $_GET['startfrom'] : 0; $field = isset($_GET['field']) ? $_GET['field'] : ''; echo "Class: $class, total: $total\n\n"; for ($offset = $startFrom; $offset < $total; $offset += $this->stat('recordsPerRequest')) { echo "$offset.."; $cmd = "php $script dev/tasks/$self class=$class start=$offset field=$field"; if($verbose) echo "\n Running '$cmd'\n"; $res = $verbose ? passthru($cmd) : `$cmd`; if($verbose) echo " ".preg_replace('/\r\n|\n/', '$0 ', $res)."\n"; } } } } protected function runFrom($class, $start, $field) { $items = DataList::create($class)->limit($this->stat('recordsPerRequest'), $start); foreach ($items as $item) { $item->rebuildVFI($field); } } } |