29 import(
'Dataface/QuickForm.php');
37 $this->message = df_translate(
'actions.copy_replace.default_success_message',
"Records successfully updated.");
42 $query =&
$app->getQuery();
46 $records = df_get_selected_records($query);
47 if ( count($records) == 0 ){
52 $records =& df_get_records_array($query[
'-table'], $q);
61 $field_options = array(0=>df_translate(
'actions.copy_replace.options.select_field_to_change',
'Select field to change...'));
63 $field_options[$field[
'name']] = $field[
'widget'][
'label'];
71 $this->form =
new HTML_QuickForm(
'copy_replace_form',
'POST');
77 $form->addElement(
'hidden',
'-copy_replace:fields');
78 $el =&
$form->addElement(
'hidden',
'-copy_replace:copy');
79 if ( @$query[
'--copy']) {
80 $form->setDefaults(array(
'-copy_replace:copy'=>1));
81 $message = df_translate(
'actions.copy_replace.copy_message',
83 This form allows you to copy the selected records and update the
84 values of particular fields in the copies.
87 $title = df_translate(
'actions.copy_replace.copy_form_title',
"Copy Records Form");
89 $warning = df_translate(
'actions.copy_replace.copy_warning_message',
91 Proceeding with
this action will make copies of all selected records.
92 Use caution and care when
using this form.
96 $message = df_translate(
'actions.copy_replace.update_message',
98 This form allows you to perform batch updates on all of the selected
99 records. Use the form below to specify values to be placed in
103 $warning = df_translate(
'actions.copy_replace.update_warning_message',
105 Proceeding with
this action will update ALL selected records. You may not be able to undo these changes. Use caution
106 and care when
using this form.
109 $title = df_translate(
'actions.copy_replace.update_form_title',
"Find/Replace Form");
112 foreach ($query as $key=>$val){
113 $res =
$form->addElement(
'hidden',$key);
114 $form->setDefaults(array($key=>$val));
117 $form->addElement(
'hidden',
'-copy_replace:submit');
118 $form->setDefaults(array(
'-copy_replace:submit'=>1));
120 $submit =&
$form->addElement(
'submit',
'-copy_replace:submit_btn', df_translate(
121 'actions.copy_replace.submit_label',
128 if ( @$_POST[
'-copy_replace:submit'] and
$form->validate() ){
129 $res =
$form->process(array(&$this,
'process'),
true);
132 foreach ( array_keys($query) as $key){
134 if ( strstr($key,
'-copy_replace:') == $key or strstr($key,
'-copy_replace_form:') == $key){
139 if ( isset($query[
'-from']) ){
140 $q[
'-action'] = $query[
'-from'];
143 else $q[
'-action']=
'list';
145 $url =
$app->url($q);
146 $app->redirect($url.
'&--msg='.urlencode($this->message));
151 $form->accept($this->renderer);
152 $out = $this->renderer->toHtml();
155 $jt->import(
'xataface/copy_replace.js');
157 df_display( array(
'title'=>$title,
'message'=>
$message,
'warning'=>$warning,
'records'=>$records,
'columns'=>$this->
getKeysForRecord($records[0]),
'form'=>
$out,
'context'=>&$this,
'field_options'=>$field_options),
'copy_replace.html');
177 $query =&
$app->getQuery();
178 $this->renderer =&
$form->defaultRenderer();
181 if (
$fields[$fieldname][
'widget'][
'type'] ==
'hidden' )
continue;
183 $el = $builder->_buildWidget(
$fields[$fieldname]);
184 $el->setName(
'-copy_replace_form:replace['.$el->getName().
']');
185 $form->addElement($el);
187 df_display(array(
'fieldname'=>$fieldname,
'field'=>&
$fields[$fieldname],
'table'=>&
$table),
'copy_replace_quickform_element_template.html');
188 $tpl = ob_get_contents();
190 $this->renderer->setElementTemplate($tpl, $el->getName());
198 if ( is_a($record,
'Dataface_Record') ){
199 $fields = $record->_table->fields();
201 if ( @
$f[
'visibility'][
'update'] ==
'hidden' ){
206 }
else if ( is_a($record,
'Dataface_RelatedRecord') ){
208 $fieldnames = $record->_relationship->_schema[
'short_columns'];
210 $t =& $record->_relationship->getTable($fieldname);
212 if ( @
$fields[$fieldname][
'visibility'][
'update'] ==
'hidden' ){
222 if ( is_a($record,
'Dataface_Record') ){
223 return $record->_table->keys();
224 }
else if ( is_a($record,
'Dataface_RelatedRecord') ){
225 $r =& $record->toRecord();
226 return $r->_table->keys();
234 import(
'Dataface/CopyTool.php');
236 $query =&
$app->getQuery();
241 $orig_replacements = $values[
'-copy_replace_form:replace'];
242 $update_fields = explode(
'-',$values[
'-copy_replace:fields']);
244 $replacements = array();
245 foreach($update_fields as $fld){
246 if ( !$fld )
continue;
247 $replacements[$fld] = $orig_replacements[$fld];
253 $blanks = @$_POST[
'-copy_replace:blank_flag'];
254 if ( !$blanks ) $blanks = array();
255 foreach ($blanks as $key=>$val){
257 $replacements[$key] = null;
262 if ( !is_array($replacements) ){
264 'actions.copy_replace.no_fields_selected_to_change',
265 "No fields were selected to change."
268 $records = df_get_selected_records($query);
269 if (count($records) == 0 ) {
271 $q[
'-limit'] = 99999;
273 $records =& df_get_records_array($q[
'-table'], $q);
281 foreach ($replacements as $key=>$val){
283 if ( strpos($val,
'=') === 0 ){
288 $val = $dummyForm->pushValue($key, $metaValues, $this->form->getElement(
'-copy_replace_form:replace['.$key.
']'));
291 if ( $val ===
'' and !@$blanks[$key]){
292 unset($replacements[$key]);
294 $replacements[$key] = $val;
302 foreach ($records as $record){
303 if ( @$values[
'-copy_replace:copy'] ){
305 $res = $copyTool->copy($record, $replacements);
310 $messages[] = sprintf(
312 'actions.copy_replace.successfully_copied_record_x_as_record_y',
313 "Successfully copied record '%s' as record '%s'"
319 $warnings = array_merge($warnings, $copyTool->warnings);
322 if ( !$record->checkPermission(
'edit') ){
326 'actions.copy_replace.could_not_update_record_x_insufficient_permissions',
327 "Could not update record '%s' because of insufficient permissions."
335 foreach ($replacements as $key=>$val){
336 if ( !$record->checkPermission(
'edit', array(
'field'=>$key)) ){
340 'actions.copy_replace.could_not_update_record_x_insufficient_permissions_on_field_y',
341 "Could not update record '%s' because of insufficient permissions on field '%s'."
350 if ( $failed )
continue;
351 foreach ($replacements as $k=>$v){
353 if ( strpos($v,
'=') === 0 ){
354 $replacements[$k] = $copyTool->evaluate($v, $k, $record);
357 $record->setValues($replacements);
358 $res = $record->save();
362 $messages[] = sprintf(
364 'actions.copy_replace.successfully_updated_title',
365 "Successfully updated '%s'"
373 if ( @$values[
'-copy_replace:copy'] ){
378 $this->message = sprintf(
380 'actions.copy_replace.x_records_y_successfully_count_warnings',
381 '%d records %s successfully. %d warnings.'
389 if ( count($warnings) ) {
390 $warning_msgs = array();
391 foreach ($warnings as $warning){
392 $warning_msgs[] = $warning->getMessage();
396 $warning_msgs = array();
399 $this->message .=
'<br>'.implode(
'<br>', $warning_msgs);