/** * Return info via ajax on selected object */ public function SaveTransaction() { $pn_user_id = $this->request->getParameter('user_id', pInteger); $ps_item_list = $this->request->getParameter('item_list', pString); $pa_item_list = json_decode($ps_item_list, true); $t_checkout = ca_object_checkouts::newCheckoutTransaction(); $va_ret = array('status' => 'OK', 'total' => sizeof($pa_item_list), 'errors' => array(), 'checkouts' => array()); $t_object = new ca_objects(); foreach ($pa_item_list as $vn_i => $va_item) { if (!$t_object->load(array('object_id' => $va_item['object_id'], 'deleted' => 0))) { continue; } $vs_name = $t_object->getWithTemplate("^ca_objects.preferred_labels.name (^ca_objects.idno)"); if ($va_checkout_info = $t_checkout->objectIsOut($va_item['object_id'])) { if ($va_checkout_info['user_id'] == $pn_user_id) { // user already has item so skip it $va_ret['errors'][$va_item['object_id']] = _t('User already has <em>%1</em>', $vs_name); continue; } try { $vb_res = $t_checkout->reserve($va_item['object_id'], $pn_user_id, $va_item['note'], array('request' => $this->request)); if ($vb_res) { $va_ret['checkouts'][$va_item['object_id']] = _t('Reserved <em>%1</em>', $vs_name); } else { $va_ret['errors'][$va_item['object_id']] = _t('Could not reserve <em>%1</em>: %2', $vs_name, join('; ', $t_checkout->getErrors())); } } catch (Exception $e) { $va_ret['errors'][$va_item['object_id']] = _t('Could not reserve <em>%1</em>: %2', $vs_name, $e->getMessage()); } } else { try { $vb_res = $t_checkout->checkout($va_item['object_id'], $pn_user_id, $va_item['note'], $va_item['due_date'], array('request' => $this->request)); if ($vb_res) { $va_ret['checkouts'][$va_item['object_id']] = _t('Checked out <em>%1</em>; due date is %2', $vs_name, $va_item['due_date']); } else { $va_ret['errors'][$va_item['object_id']] = _t('Could not check out <em>%1</em>: %2', $vs_name, join('; ', $t_checkout->getErrors())); } } catch (Exception $e) { $va_ret['errors'][$va_item['object_id']] = _t('Could not check out <em>%1</em>: %2', $vs_name, $e->getMessage()); } } } $this->view->setVar('data', $va_ret); $this->render('checkout/ajax_data_json.php'); }