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; }