Пример #1
0
 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();
 }