public function testGets() { $vm_ret = $this->opt_loan_in->get('ca_loans.related'); $this->assertEquals('New Loan Out', $vm_ret); $va_items = $this->opt_loan_in->getRelatedItems('ca_loans'); $vn_relation_id = array_shift(caExtractArrayValuesFromArrayOfArrays($va_items, 'relation_id')); // The relationship we created is Loan Out <-> Loan In, so evaluating with loan in as primary ID should give us the loan out $va_opts = array('resolveLinksUsing' => 'ca_loans', 'primaryIDs' => array('ca_loans' => array($this->opt_loan_in->getPrimaryKey()))); $vm_ret = caProcessTemplateForIDs("^ca_loans.preferred_labels", 'ca_loans_x_loans', array($vn_relation_id), $va_opts); $this->assertEquals('New Loan Out', $vm_ret); // Now for the other side ... $va_opts = array('resolveLinksUsing' => 'ca_loans', 'primaryIDs' => array('ca_loans' => array($this->opt_loan_out->getPrimaryKey()))); $vm_ret = caProcessTemplateForIDs("^ca_loans.preferred_labels", 'ca_loans_x_loans', array($vn_relation_id), $va_opts); $this->assertEquals('New Loan In', $vm_ret); }
/** * */ public function getRelatedBundleFormValues($po_request, $ps_form_name, $ps_related_table, $ps_placement_code = null, $pa_bundle_settings = null, $pa_options = null) { if (!is_array($pa_bundle_settings)) { $pa_bundle_settings = array(); } if (!is_array($pa_options)) { $pa_options = array(); } $t_item = $this->getAppDatamodel()->getTableInstance($ps_related_table); $vb_is_many_many = false; $va_path = array_keys($this->getAppDatamodel()->getPath($this->tableName(), $ps_related_table)); if ($this->tableName() == $ps_related_table) { // self relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); $vb_is_many_many = true; } else { switch (sizeof($va_path)) { case 3: // many-many relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); $vb_is_many_many = true; break; case 2: // many-one relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); break; default: $t_item_rel = null; break; } } $va_get_related_opts = array_merge($pa_options, $pa_bundle_settings); if (isset($pa_bundle_settings['restrictToTermsRelatedToCollection']) && $pa_bundle_settings['restrictToTermsRelatedToCollection']) { $va_get_related_opts['restrict_to_relationship_types'] = $pa_bundle_settings['restrictToTermsOnCollectionUseRelationshipType']; } if ($pa_bundle_settings['sort']) { $va_get_related_opts['sort'] = $pa_bundle_settings['sort']; $va_get_related_opts['sortDirection'] = $pa_bundle_settings['sortDirection']; } if (sizeof($va_items = $this->getRelatedItems($ps_related_table, $va_get_related_opts))) { $t_rel = $this->getAppDatamodel()->getInstanceByTableName($ps_related_table, true); $vs_rel_pk = $t_rel->primaryKey(); $va_opts = array('relatedItems' => $va_items, 'stripTags' => true); if ($vb_is_many_many) { $va_ids = caExtractArrayValuesFromArrayOfArrays($va_items, 'relation_id'); $qr_rel_items = $t_item->makeSearchResult($t_item_rel->tableNum(), $va_ids); $va_opts['table'] = $t_rel->tableName(); $va_opts['primaryKey'] = $t_rel->primaryKey(); } else { $va_ids = caExtractArrayValuesFromArrayOfArrays($va_items, $vs_rel_pk); $qr_rel_items = $t_item->makeSearchResult($t_rel->tableNum(), $va_ids); } $va_opts['template'] = caGetBundleDisplayTemplate($this, $ps_related_table, $pa_bundle_settings); $va_opts['primaryIDs'] = array($this->tableName() => array($this->getPrimaryKey())); $va_opts['request'] = $po_request; $va_vals = caProcessRelationshipLookupLabel($qr_rel_items, $t_item_rel, $va_opts); return $va_vals; } return array(); }
/** * */ public function getRelatedHTMLFormBundle($po_request, $ps_form_name, $ps_related_table, $ps_placement_code = null, $pa_bundle_settings = null, $pa_options = null) { global $g_ui_locale; AssetLoadManager::register('sortableUI'); if (!is_array($pa_bundle_settings)) { $pa_bundle_settings = array(); } if (!is_array($pa_options)) { $pa_options = array(); } $vs_view_path = isset($pa_options['viewPath']) && $pa_options['viewPath'] ? $pa_options['viewPath'] : $po_request->getViewsDirectoryPath(); $o_view = new View($po_request, "{$vs_view_path}/bundles/"); $t_item = $this->getAppDatamodel()->getTableInstance($ps_related_table); $vb_is_many_many = false; $va_path = array_keys($this->getAppDatamodel()->getPath($this->tableName(), $ps_related_table)); if ($this->tableName() == $ps_related_table) { // self relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); $vb_is_many_many = true; } else { switch (sizeof($va_path)) { case 3: // many-many relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); $vb_is_many_many = true; break; case 2: // many-one relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); break; default: $t_item_rel = null; break; } } $o_view->setVar('id_prefix', $ps_form_name); $o_view->setVar('t_instance', $this); $o_view->setVar('t_item', $t_item); $o_view->setVar('t_item_rel', $t_item_rel); $vb_read_only = $po_request->user->getBundleAccessLevel($this->tableName(), $ps_related_table) == __CA_BUNDLE_ACCESS_READONLY__ ? true : false; if (!$pa_bundle_settings['readonly']) { $pa_bundle_settings['readonly'] = !isset($pa_bundle_settings['readonly']) || !$pa_bundle_settings['readonly'] ? $vb_read_only : true; } // pass bundle settings $o_view->setVar('settings', $pa_bundle_settings); $o_view->setVar('graphicsPath', $pa_options['graphicsPath']); // pass placement code $o_view->setVar('placement_code', $ps_placement_code); $o_view->setVar('add_label', isset($pa_bundle_settings['add_label'][$g_ui_locale]) ? $pa_bundle_settings['add_label'][$g_ui_locale] : null); $t_label = null; if ($t_item->getLabelTableName()) { $t_label = $this->_DATAMODEL->getInstanceByTableName($t_item->getLabelTableName(), true); } if (method_exists($t_item_rel, 'getRelationshipTypes')) { $o_view->setVar('relationship_types', $t_item_rel->getRelationshipTypes(null, null, array_merge($pa_options, $pa_bundle_settings))); $o_view->setVar('relationship_types_by_sub_type', $t_item_rel->getRelationshipTypesBySubtype($this->tableName(), $this->get('type_id'), array_merge($pa_options, $pa_bundle_settings))); } $o_view->setVar('t_subject', $this); $va_initial_values = array(); $va_get_related_opts = array_merge($pa_options, $pa_bundle_settings); if (isset($pa_bundle_settings['restrictToTermsRelatedToCollection']) && $pa_bundle_settings['restrictToTermsRelatedToCollection']) { $va_get_related_opts['restrict_to_relationship_types'] = $pa_bundle_settings['restrictToTermsOnCollectionUseRelationshipType']; } if ($pa_bundle_settings['sort']) { $va_get_related_opts['sort'] = $pa_bundle_settings['sort']; $va_get_related_opts['sortDirection'] = $pa_bundle_settings['sortDirection']; } if (sizeof($va_items = $this->getRelatedItems($ps_related_table, $va_get_related_opts))) { $t_rel = $this->getAppDatamodel()->getInstanceByTableName($ps_related_table, true); $vs_rel_pk = $t_rel->primaryKey(); $va_opts = array('stripTags' => true); if ($vb_is_many_many) { $va_ids = caExtractArrayValuesFromArrayOfArrays($va_items, 'relation_id'); $qr_rel_items = $t_item->makeSearchResult($t_item_rel->tableNum(), $va_ids); $va_opts['table'] = $t_rel->tableName(); $va_opts['primaryKey'] = $t_rel->primaryKey(); $va_opts['relatedItems'] = $va_items; } else { $va_ids = caExtractArrayValuesFromArrayOfArrays($va_items, $vs_rel_pk); $qr_rel_items = $t_item->makeSearchResult($t_rel->tableNum(), $va_ids); } $va_opts['template'] = caGetBundleDisplayTemplate($this, $ps_related_table, $pa_bundle_settings); $va_opts['primaryIDs'] = array($this->tableName() => array($this->getPrimaryKey())); $va_opts['request'] = $po_request; $va_initial_values = caProcessRelationshipLookupLabel($qr_rel_items, $t_item_rel, $va_opts); } $va_force_new_values = array(); if (isset($pa_options['force']) && is_array($pa_options['force'])) { foreach ($pa_options['force'] as $vn_id) { if ($t_item->load($vn_id)) { $va_item = $t_item->getFieldValuesArray(); if ($t_label) { $va_item[$t_label->getDisplayField()] = $t_item->getLabelForDisplay(); } $va_force_new_values[$vn_id] = array_merge($va_item, array('id' => $vn_id, 'idno' => ($vn_idno = $t_item->get('idno')) ? $vn_idno : null, 'idno_stub' => ($vn_idno_stub = $t_item->get('idno_stub')) ? $vn_idno_stub : null, 'relationship_type_id' => null)); } } } $o_view->setVar('defaultRepresentationUploadType', $po_request->user->getVar('defaultRepresentationUploadType')); $o_view->setVar('initialValues', $va_initial_values); $o_view->setVar('forceNewValues', $va_force_new_values); $o_view->setVar('batch', (bool) (isset($pa_options['batch']) && $pa_options['batch'])); return $o_view->render($ps_related_table . '.php'); }
/** * @param RequestHTTP $po_request * @param string $ps_form_name * @param string $ps_related_table * @param null|string $ps_placement_code * @param null|array $pa_bundle_settings * @param null|arrau $pa_options * @return array|mixed */ public function getRelatedBundleFormValues($po_request, $ps_form_name, $ps_related_table, $ps_placement_code = null, $pa_bundle_settings = null, $pa_options = null) { if (!is_array($pa_bundle_settings)) { $pa_bundle_settings = array(); } if (!is_array($pa_options)) { $pa_options = array(); } /** @var BundlableLabelableBaseModelWithAttributes $t_item */ $t_item = $this->getAppDatamodel()->getTableInstance($ps_related_table); $vb_is_many_many = false; $va_path = array_keys($this->getAppDatamodel()->getPath($this->tableName(), $ps_related_table)); if ($this->tableName() == $ps_related_table) { // self relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); $vb_is_many_many = true; } else { switch (sizeof($va_path)) { case 3: // many-many relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); $vb_is_many_many = true; break; case 2: // many-one relationship $t_item_rel = $this->getAppDatamodel()->getTableInstance($va_path[1]); break; default: $t_item_rel = null; break; } } $va_get_related_opts = array_merge($pa_options, $pa_bundle_settings); if (isset($pa_bundle_settings['restrictToTermsRelatedToCollection']) && $pa_bundle_settings['restrictToTermsRelatedToCollection']) { $va_get_related_opts['restrict_to_relationship_types'] = $pa_bundle_settings['restrictToTermsOnCollectionUseRelationshipType']; } if ($pa_bundle_settings['sort']) { $va_get_related_opts['sort'] = $pa_bundle_settings['sort']; $va_get_related_opts['sortDirection'] = $pa_bundle_settings['sortDirection']; } if ($ps_related_table == 'ca_sets') { $t_set = new ca_sets(); $va_items = caExtractValuesByUserLocale($t_set->getSetsForItem($this->tableNum(), $this->getPrimaryKey(), $va_get_related_opts)); // sort if ($ps_sort = caGetOption('sort', $va_get_related_opts, null)) { $va_items = caSortArrayByKeyInValue($va_items, array($ps_sort), caGetOption('sortDirectio ', $va_get_related_opts, 'ASC')); } $va_vals = array(); $vs_template = caGetBundleDisplayTemplate($this, 'ca_sets', $pa_bundle_settings); if (is_array($va_items) && sizeof($va_items)) { foreach ($va_items as $vn_id => $va_item) { $va_item['_display'] = caProcessTemplateForIDs($vs_template, 'ca_sets', array($vn_id)); $va_vals[$vn_id] = $va_item; } } return $va_vals; } else { if (sizeof($va_items = $this->getRelatedItems($ps_related_table, $va_get_related_opts))) { $t_rel = $this->getAppDatamodel()->getInstanceByTableName($ps_related_table, true); $vs_rel_pk = $t_rel->primaryKey(); $va_opts = array('relatedItems' => $va_items, 'stripTags' => true); if ($vb_is_many_many) { $va_ids = caExtractArrayValuesFromArrayOfArrays($va_items, 'relation_id'); $qr_rel_items = $t_item->makeSearchResult($t_item_rel->tableNum(), $va_ids); $va_opts['table'] = $t_rel->tableName(); $va_opts['primaryKey'] = $t_rel->primaryKey(); } else { $va_ids = caExtractArrayValuesFromArrayOfArrays($va_items, $vs_rel_pk); $qr_rel_items = $t_item->makeSearchResult($t_rel->tableNum(), $va_ids); } $va_opts['template'] = caGetBundleDisplayTemplate($this, $ps_related_table, $pa_bundle_settings); $va_opts['primaryIDs'] = array($this->tableName() => array($this->getPrimaryKey())); $va_opts['request'] = $po_request; $va_vals = caProcessRelationshipLookupLabel($qr_rel_items, $t_item_rel, $va_opts); return $va_vals; } } return array(); }