Exemple #1
0
 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;
 }
Exemple #2
0
            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 == '') {
Exemple #3
0
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;
}