Beispiel #1
0
 private function processRelationshipTypesForTable($po_relationship_types, $pn_table_num, $ps_left_table, $ps_right_table, $pn_parent_id, $pa_list_item_ids)
 {
     $o_dm = Datamodel::load();
     // nuke caches to be safe
     ca_relationship_types::$s_relationship_type_id_cache = array();
     ca_relationship_types::$s_relationship_type_table_cache = array();
     ca_relationship_types::$s_relationship_type_id_to_code_cache = array();
     $t_rel_type = new ca_relationship_types();
     $t_rel_type->setMode(ACCESS_WRITE);
     $vn_rank_default = (int) $t_rel_type->getFieldInfo('rank', 'DEFAULT');
     foreach ($po_relationship_types->children() as $vo_type) {
         $vs_type_code = self::getAttribute($vo_type, "code");
         $vn_default = self::getAttribute($vo_type, "default");
         $vn_rank = (int) self::getAttribute($vo_type, "rank");
         $t_rel_type = $this->opb_updating ? ca_relationship_types::find(array('type_code' => $vs_type_code, 'table_num' => $pn_table_num, 'parent_id' => $pn_parent_id), array('returnAs' => 'firstModelInstance')) : false;
         $t_rel_type = $t_rel_type ? $t_rel_type : new ca_relationship_types();
         $t_rel_type->setMode(ACCESS_WRITE);
         $t_rel_type->set('table_num', $pn_table_num);
         $t_rel_type->set('type_code', $vs_type_code);
         $t_rel_type->set('parent_id', $pn_parent_id);
         $t_rel_type->set('is_default', $vn_default ? 1 : 0);
         if ($vn_rank > 0) {
             $t_rel_type->set("rank", $vn_rank);
         } else {
             $t_rel_type->set("rank", $vn_rank_default);
         }
         if ($t_rel_type->getPrimaryKey()) {
             $t_rel_type->update();
         } else {
             $t_rel_type->insert();
         }
         if (trim($vs_left_subtype_code = (string) $vo_type->subTypeLeft)) {
             $t_obj = $o_dm->getTableInstance($ps_left_table);
             $vs_list_code = $t_obj->getFieldListCode($t_obj->getTypeFieldName());
             if (isset($pa_list_item_ids[$vs_list_code][$vs_left_subtype_code])) {
                 $t_rel_type->set('sub_type_left_id', $pa_list_item_ids[$vs_list_code][$vs_left_subtype_code]);
                 $t_rel_type->update();
             }
         }
         if (trim($vs_right_subtype_code = (string) $vo_type->subTypeRight)) {
             $t_obj = $o_dm->getTableInstance($ps_right_table);
             $vs_list_code = $t_obj->getFieldListCode($t_obj->getTypeFieldName());
             if (isset($pa_list_item_ids[$vs_list_code][$vs_right_subtype_code])) {
                 $t_rel_type->set('sub_type_right_id', $pa_list_item_ids[$vs_list_code][$vs_right_subtype_code]);
                 $t_rel_type->update();
             }
         }
         if ($t_rel_type->numErrors()) {
             $this->addError("Errors inserting relationship {$vs_type_code}: " . join("; ", $t_rel_type->getErrors()));
             return false;
         }
         self::addLabelsFromXMLElement($t_rel_type, $vo_type->labels, $this->opa_locales);
         if ($vo_type->types) {
             $this->processRelationshipTypesForTable($vo_type->types, $pn_table_num, $ps_left_table, $ps_right_table, $t_rel_type->getPrimaryKey(), $pa_list_item_ids);
         }
     }
 }