private function parserMdMapping($data, $con) { $pos1 = strpos($data, '@'); $pos2 = strpos($data, ' ', $pos1); if ($pos1 === FALSE || $pos2 === FALSE) { $this->setQueryError($data); return $data; } $mapping = trim(substr($data, $pos1 + 1, $pos2 - ($pos1 + 1))); if ($mapping == 'keyword' && stripos($data, '|') !== FALSE) { $data = $this->parserThesaurusKeyword($data); if ($data != '') { $rs = array(); $rs['con'] = $con; $rs['sql'] = $data; $this->query_out_value[] = $rs; } return $data; } elseif ($mapping == 'innaco' && stripos($data, ':') !== FALSE) { $data = $this->parserIndividualNameContact($data); if ($data != '') { $rs = array(); $rs['con'] = $con; $rs['sql'] = $data; $this->query_out_value[] = $rs; } return $data; } elseif ($mapping == 'mdinnaco' && stripos($data, ':') !== FALSE) { $data = $this->parserMdIndividualNameContact($data); if ($data != '') { $rs = array(); $rs['con'] = $con; $rs['sql'] = $data; $this->query_out_value[] = $rs; } return $data; } $type = $this->getTypeMapping($mapping); //echo $type; exit; $pos0 = stripos($data, 'LIKE'); if ($pos0 === FALSE) { $data = str_replace("@{$mapping}", $type . 'md_values.md_value', $data); if (strpos($data, "= ''") !== FALSE || strpos($data, "=''") !== FALSE) { $data = "SELECT md.recno, md.last_update_date, md.title FROM md LEFT JOIN md_values ON {$type} md.recno=md_values.recno WHERE md_values.md_value IS NULL"; } if (DB_DRIVER == 'mssql') { if (substr_count($data, '>') == 0 && substr_count($data, '<') == 0) { //pokud je jenom = $data = str_replace('=', 'LIKE', $data); } } } else { $pos1 = strpos($data, "'", $pos0); $pos2 = strpos($data, "'", $pos1 + 1); $pom_like = substr($data, $pos1, $pos2 - $pos1 + 1); $pom_b = substr($data, 0, $pos0); $pom_e = substr($data, $pos2 + 1); if ($pom_like == "'.%'") { // odstranit? $data = '(' . $pom_b . 'md_values.md_value IS NOT NULL)'; } elseif ($pom_like != "'%'") { $data = $pom_b . setSqlLike('md_values.md_value', $pom_like) . $pom_e; } $data = str_replace("@{$mapping}", $type, $data); } if ($mapping == 'denom') { if (stripos($data, 'null') !== FALSE) { $data = str_replace(" AND md_values.md_value = null", '', $data); $data = str_replace('=', '!=', $data); //$data = $mapping; } else { switch (DB_DRIVER) { case 'oracle': $data = str_replace("md_values.md_value", 'TO_NUMBER(md_values.md_value)', $data); break; case 'postgre': $maska = '999999999'; // max. velikost měřítka $pos1 = strpos($data, "'"); $pos2 = strrpos($data, "'"); $mapping = trim(substr($data, $pos1 + 1, $pos2 - ($pos1 + 1))); $data = str_replace("md_values.md_value", "TO_NUMBER(md_values.md_value, '{$maska}')", $data); break; } } } if (substr_count($data, "'%'") > 0) { $data = str_replace("=", '', $data); $data = str_replace("'%'", ' IS NOT NULL', $data); } elseif (substr_count($data, "'% '") > 0) { $data = str_replace("=", '', $data); $data = str_replace("'% '", ' IS NOT NULL', $data); } elseif (substr_count($data, "'%%'") > 0) { $data = str_replace("=", '', $data); $data = str_replace("'%%'", ' IS NOT NULL', $data); } if ($data != '') { if (stripos($data, 'null') !== FALSE) { $data = str_replace(" AND md_values.md_value = null", '', $data); $data = str_replace('=', '!=', $data); //$data = $mapping; } if (stripos($data, '!=') !== FALSE) { $data = "SELECT DISTINCT md.recno, md.last_update_date, md.title FROM md WHERE (SELECT count(*) FROM md_values WHERE md.recno=md_values.recno AND {$data})=0"; $data = str_replace("!=", '=', $data); } $rs = array(); $rs['con'] = $con; $rs['sql'] = $data; $this->query_out_value[] = $rs; } return $data; }
array_push($sql, "AND m.md_id=1047 AND m.md_value=%s", $contact_role); } else { array_push($sql, "AND m.md_id=1047 AND m.md_value IS NOT NULL"); } array_push($sql, "\n UNION\n SELECT md_values.recno, md_values.md_path, md_values.md_value, md_values.lang\n FROM (md JOIN md_values ON md.recno=md_values.recno) LEFT JOIN md_values m ON({$substring}(md_values.md_path, 1,32)={$substring}(m.md_path, 1,32) AND md_values.recno=m.recno)\n WHERE md_values.md_id=%i AND md.data_type>0\n ", $md_id_cont_md); if ($creator != '') { if ($creator == $user) { array_push($sql, "AND md.create_user=%s", $creator); } else { array_push($sql, "AND md.create_user=%s AND (md.view_group IN({$group}) OR md.edit_group IN({$group}) OR md.data_type>0))", $creator); } } else { array_push($sql, "AND {$right}"); } if ($query != '') { array_push($sql, " AND " . setSqlLike('md_values.md_value', "'%" . $query . "%'")); } if ($contact_role != '') { array_push($sql, "AND m.md_id=5038 AND m.md_value=%s ", $contact_role); } else { array_push($sql, "AND m.md_id=5038 AND m.md_value IS NOT NULL"); } //array_push($sql, "ORDER BY md_values.md_value"); break; } $result = _executeSql('select', $sql, array('all')); $firs_record = TRUE; $org_lang = ''; $org_eng = ''; $org_ost = ''; if ($query_lang == '') {
function replaceMdValue($mode, $replaceEl, $pathEl, $valueFind, $replaceAll, $valueReplace) { $rs = array(); $rs['replaceRecords'] = 0; $rs['affectedRecords'] = 0; $rs['records'] = array(); switch ($replaceEl) { case 'email': $md_id = array(); $sql = array(); $sql[] = 'SELECT md_id FROM tree WHERE ' . setSqlLike('md_path_el', "'%electronicMailAddress'"); $row_md_id = _executeSql('select', $sql, array('all')); if (is_array($row_md_id) && count($row_md_id) > 0) { foreach ($row_md_id as $row) { $md_id[] = $row['MD_ID']; } } else { return $rs; } break; case 'name_md': $md_id = array(152); break; case 'name_data': $md_id = array(186, 5028); break; case 'title': $md_id = array(11, 5063); break; case 'any': $md_id = array(); break; case 'optional': $sql = array(); array_push($sql, 'SELECT md_id FROM tree WHERE md_path_el LIKE %s', $pathEl . '%'); $row_md_id = _executeSql('select', $sql, array('all')); if (is_array($row_md_id) && count($row_md_id) > 0) { foreach ($row_md_id as $row) { $md_id[] = $row['MD_ID']; } } else { return $rs; } break; default: return $rs; } $sql_equality = '='; if (strpos($valueFind, '*') !== FALSE) { //$sql_equality = DB_DRIVER == 'postgre' ? ' ILIKE ' : ' LIKE '; $sql_equality = ' LIKE '; $valueFind = str_replace('*', '%', $valueFind); } $sql = array(); array_push($sql, 'SELECT DISTINCT md.recno, md.uuid, md.title, md.md_standard'); array_push($sql, 'FROM md INNER JOIN md_values ON md.recno=md_values.recno'); array_push($sql, 'WHERE md_values.md_value' . $sql_equality . '%s', $valueFind); if (count($md_id) > 0) { array_push($sql, 'AND md_values.md_id IN %in', $md_id); } array_push($sql, 'ORDER BY md.recno'); $replaceRecords = _executeSql('select', $sql, array('all')); if ($mode == 'replace' && $valueReplace != '') { $sql = array(); if ($replaceAll === TRUE) { array_push($sql, 'UPDATE md_values SET md_value=%s', $valueReplace); } else { array_push($sql, 'UPDATE md_values SET md_value=REPLACE(md_value,%s,%s)', getValueFind($valueFind), $valueReplace); } array_push($sql, 'WHERE md_values.md_value' . $sql_equality . '%s', $valueFind); if (count($md_id) > 0) { array_push($sql, 'AND md_id IN %in', $md_id); } $rs['affectedRecords'] = _executeSql('update', $sql, array('all')); // aktualizace XML $md_record = new MdRecord(); foreach ($replaceRecords as $row) { //$result = $md_record->updateOnlyXmlData($row['UUID'], $row['RECNO']); $md_record->setStopDatestamp(FALSE); $result = $md_record->updateTableMd('uuid', $row['UUID']); } } if ($replaceRecords == '') { $replaceRecords = array(); } $rs['replaceRecords'] = 0; $rs['records'] = $replaceRecords; //my_print_r($rs); return $rs; }