I am building a site that includes a page where visitors can upload an image. There will be a moderation page where an authenticated user (administrator) will be able to see the uploaded images and set an accepted / declined flag for each image.
What I would like to be able to do is update all the records shown on the page in one go, as opposed to iterating through the dataobjects and calling write() on each one. The code I am using follows. All seems to work fine except $mediaItems->write();. Is there a better way to achieve this or is it acceptable to call write() within the for loop?
MediaDataObject.php
class MediaDataObject extends DataObject {
static $db = array(
'MediaURL' => 'Text',
'CreatorId' => 'Int',
'IsApproved' => 'Int'
);
}
MediaPage.ss
<form action="media/doModerate" method="POST">
<table>
<% control mediaList %>
<tr>
<td><img src="$MediaURL" /></td>
<td>$Created.Nice</td>
<td>
<input type="radio" name="video[$ID]" value="0" <% if IsApproved==0 %>checked='checked'<% end_if %> />
<input type="radio" name="video[$ID]" value="1" <% if IsApproved==1 %>checked='checked'<% end_if %> />
<input type="radio" name="video[$ID]" value="2" <% if IsApproved==2 %>checked='checked'<% end_if %> />
</td>
</tr>
<% end_control %>
</table>
MediaPage.php
class MediaPage_Controller extends Page_Controller {
function init(){
parent::init();
}
function mediaList() {
$allMedialDataObjects = DataObject::get('MediaDataObject');
return $allMedialDataObjects;
}
function doModerate(SS_HTTPRequest $request) {
$vars = $request->postVars();
$approvals = $vars['video'];
$mediaItems = DataObject::get('MediaDataObject');
foreach ($mediaItems as $mediaItem) {
$mediaItem->IsApproved = $approvals[$mediaItem->ID] ;
//$mediaItem->write();
}
$mediaItems->write();
}
}