Bulk update image TVs added to your modmore gallery resources to include the first image (or one of its crop images) of each gallery.
<tr class='warning'>
<th>[[+i]]</th>
<th>[[+docid]]</th>
<td>Gallery did not return an image.</td>
<td><a target='_blank' href='[[+url]]'>Link</a></td>
<td><a target='_blank' href='[[++site_url]]manager/?a=resource/update&id=[[+docid]]'>Link</a></td>
</tr>
<tr class='success'>
<th>[[+i]]</th>
<th>[[+docid]]</th>
<td>TV updated! New value: <i>[[+file]]</i></td>
<td><a target='_blank' href='[[+url]]'>Link</a></td>
<td><a target='_blank' href='[[++site_url]]manager/?a=resource/update&id=[[+docid]]'>Link</a></td>
</tr>
<div class='container'>
<h1>updateGalleryTVs status report</h1>
<p>Parameters</p>
<ul>
<li>templates = [[+params.templates]]</li>
<li>field = [[+params.field]]</li>
<li>basename = [[+params.basename]]</li>
<li>tvId = [[+params.tvId]]</li>
</ul>
<p>Updated [[+i]] resources in [[+exec]] seconds</p>
<table class='table table-striped table-condensed'>
<thead>
<tr><th>No.</th><th>ID</th><th>Message</th><th>View</th><th>Edit</th></tr>
</thead>
<tbody>
[[+output]]
</tbody>
</table>
</div>
<?php
/*
If you are using a thumbnailTV for your @modmore #moreGallery resources, updateGalleryTVs might safe you time: https://goo.gl/SjIs5p
Bulk update image TVs added to your modmore gallery resources
to include the first image (or one of its crop images) of each gallery
Changelog:
----------
2015-06-23_01:30 Initial release
2015-06-23_09:59 Fixed missing updateTV for file_urls
Usage:
------
1. Backup your database (always a good thing to do...)
2. Update the variables below.
3. Add this snippet to a resource of your choice.
4. View it in your browser.
Variables:
$templates (array) Comma delimited list of template ids that you want to include.
$field (string) Expects either "file_url" or the name of any of your crop images.
$basename (bolean) If you work with media sources, set it to true. If you don't, set it to false
$tvId (int) Id of the TV you want to update
*/
$templates = array(2);
$field = 'file_url';
$basename = true;
$tvId = 23;
$tplSuccess = "updateGalleryTVs_tplSuccess";
$tplWarning = "updateGalleryTVs_tplWarning";
$tplOuter = "updateGalleryTVs_tplOuter";
/* Don't change anything below this line unless you know what you are doing... */
$output = "";
$startTime = microtime(true);
$site_url = $modx->getOption('site_url');
$docArray = $modx->getCollection(
'modResource'
,array(
'class_key' => 'mgResource'
,'template:IN' => $templates
)
);
$i = 0;
/* --------------------------------------------------------------------------------------- */
/* Some basic styling.... */
$modx->regClientCSS('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css');
$modx->regClientScript('https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js');
$modx->regClientScript('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js');
/* --------------------------------------------------------------------------------------- */
foreach($docArray as $doc){
$i++;
// Props for templating
$props = array();
$props['i'] = $i;
$props['docid'] = $doc->get('id');
$props['url'] = $site_url . $modx->makeUrl($props['docid']);;
$c = $modx->newQuery('mgImage');
$c->where(array(
'resource' => $props['docid']
));
$c->sortby('sortorder', 'ASC');
$c->limit('1');
$image = $modx->getObject('mgImage', $c);
if($image){
if($field == 'file_url') {
$image = $image->toArray();
$props['file'] = $image['file_url'];
$tpl = $tplSuccess;
}
else {
$crops = $image->getCropsAsArray();
if(isset($crops[$field])){
$props['file'] = $crops[$field]['thumbnail_url'];
if(!empty($props['file'])){
if($basename){
$props['file'] = basename($props['file']);
}
$doc->setTVValue($tvId, $props['file']);
$doc->save();
$tpl = $tplSuccess;
}
}
else {
return "Error: This gallery doesn't have a crop named '$field'.";
}
}
}
else {
$tpl = $tplWarning;
}
$output .= $modx->getChunk($tpl , $props);
}
$tpl = $tplOuter;
$props = array();
$props['i'] = $i;
$props['output'] = $output;
$props['exec'] = microtime(true) - $startTime;
$props['params']['templates'] = implode( ',' , $templates );
$props['params']['field'] = $field;
$props['params']['basename'] = $basename;
$props['params']['tvId'] = $tvId;
$output = $modx->getChunk($tpl , $props);
return $output;