Пример #1
0
 /**
  * @param string $ps_table
  * @param string $ps_content_fieldname
  * @return \ElasticSearch\FieldTypes\FieldType
  */
 public static function getInstance($ps_table, $ps_content_fieldname)
 {
     if ($ps_table == 'created' || $ps_table == 'modified') {
         return new Timestamp($ps_table);
     }
     // if this is an indexing field name, rewrite it
     if (preg_match("/^(I|A)[0-9]+\$/", $ps_content_fieldname)) {
         if ($ps_content_fieldname[0] === 'A') {
             // Metadata attribute
             $vn_field_num_proc = (int) substr($ps_content_fieldname, 1);
             $t_element = new \ca_metadata_elements($vn_field_num_proc);
             if (!$t_element->getPrimaryKey()) {
                 return null;
             }
             $ps_content_fieldname = $t_element->get('element_code');
         } else {
             // Plain intrinsic
             $vn_field_num_proc = (int) substr($ps_content_fieldname, 1);
             $ps_content_fieldname = \Datamodel::load()->getFieldName($ps_table, $vn_field_num_proc);
         }
     }
     if ($vn_datatype = \ca_metadata_elements::getDataTypeForElementCode($ps_content_fieldname)) {
         switch ($vn_datatype) {
             case 2:
                 return new DateRange($ps_table, $ps_content_fieldname);
             case 4:
                 return new Geocode($ps_table, $ps_content_fieldname);
             case 6:
                 return new Currency($ps_table, $ps_content_fieldname);
             case 8:
                 return new Length($ps_table, $ps_content_fieldname);
             case 9:
                 return new Weight($ps_table, $ps_content_fieldname);
             case 10:
                 return new Timecode($ps_table, $ps_content_fieldname);
             case 11:
                 return new Integer($ps_table, $ps_content_fieldname);
             case 12:
                 return new Float($ps_table, $ps_content_fieldname);
             default:
                 return new GenericElement($ps_table, $ps_content_fieldname);
         }
     } else {
         return new Intrinsic($ps_table, $ps_content_fieldname);
     }
 }