/** * Returns HTML form bundle for location contents * * @param HTTPRequest $po_request The current request * @param string $ps_form_name * @param string $ps_placement_code * @param array $pa_bundle_settings * @param array $pa_options Array of options. Options include: * None yet. * * @return string Rendered HTML bundle */ public function getLocationContentsHTMLFormBundle($po_request, $ps_form_name, $ps_placement_code, $pa_bundle_settings = null, $pa_options = null) { require_once __CA_MODELS_DIR__ . "/ca_movements.php"; require_once __CA_MODELS_DIR__ . "/ca_movements_x_objects.php"; require_once __CA_MODELS_DIR__ . "/ca_objects_x_storage_locations.php"; global $g_ui_locale; $o_view = new View($po_request, $po_request->getViewsDirectoryPath() . '/bundles/'); if (!is_array($pa_options)) { $pa_options = array(); } $vs_display_template = caGetOption('displayTemplate', $pa_bundle_settings, _t('No template defined')); $o_view->setVar('id_prefix', $ps_form_name); $o_view->setVar('placement_code', $ps_placement_code); // pass placement code $o_view->setVar('settings', $pa_bundle_settings); $o_view->setVar('add_label', isset($pa_bundle_settings['add_label'][$g_ui_locale]) ? $pa_bundle_settings['add_label'][$g_ui_locale] : null); $o_view->setVar('t_subject', $this); $o_view->setVar('mode', $vs_mode = caGetOption('locationTrackingMode', $pa_bundle_settings, 'ca_movements')); switch ($vs_mode) { case 'ca_storage_locations': // Get current storage locations $o_view->setVar('t_subject_rel', new ca_objects_x_storage_locations()); // Get current objects for location $va_object_ids = $this->getRelatedItems('ca_objects', array('idsOnly' => true)); if (is_array($va_object_ids) && sizeof($va_object_ids)) { // check each object for current location // ... then get the list of objects for which the *current* movement is one of ours $t_object = new ca_objects(); $va_current_locations_ids = $t_object->getRelatedItems('ca_storage_locations', array('idsOnly' => false, 'showCurrentOnly' => true, 'row_ids' => $va_object_ids)); $va_object_rels = array(); foreach ($va_current_locations_ids as $vn_relation_id => $va_location_info) { if ($va_location_info['location_id'] == $this->getPrimaryKey()) { $va_object_rels[] = $vn_relation_id; } } $o_view->setVar('qr_result', sizeof($va_object_rels) ? caMakeSearchResult('ca_objects_x_storage_locations', $va_object_rels) : null); } break; case 'ca_movements': default: // Get current movements for location $va_movement_ids = $this->getRelatedItems('ca_movements', array('idsOnly' => true)); if (is_array($va_movement_ids) && sizeof($va_movement_ids)) { // get list of objects on these movements... $t_movement = new ca_movements(); $va_object_ids = $t_movement->getRelatedItems('ca_objects', array('idsOnly' => true, 'showCurrentOnly' => true, 'row_ids' => $va_movement_ids)); // ... then get the list of objects for which the *current* movement is one of ours $t_object = new ca_objects(); $va_current_movement_ids = $t_object->getRelatedItems('ca_movements', array('idsOnly' => false, 'showCurrentOnly' => true, 'row_ids' => $va_object_ids)); $va_movement_rels = array(); foreach ($va_current_movement_ids as $vn_relation_id => $va_movement_info) { if (in_array($va_movement_info['movement_id'], $va_movement_ids)) { $va_movement_rels[] = $vn_relation_id; } } $o_view->setVar('qr_result', sizeof($va_movement_rels) ? caMakeSearchResult('ca_movements_x_objects', $va_movement_rels) : null); } $o_view->setVar('t_subject_rel', new ca_movements_x_objects()); break; } return $o_view->render('ca_storage_locations_contents.php'); }