/************************* Change History *****************************
07/12/2006 - Jian Wu
- Created this file.
************************************************************************/
?>
define("FATAL", E_USER_ERROR);
define("ERROR", E_USER_WARNING);
define("WARNING", E_USER_NOTICE);
require(__DIR__ . '/../../../vendor/autoload.php');
use Orchard\Mysqli\QueryData;
use Orchard\Mysqli\Wrapper as MysqliWrapper;
use Orchard\QueryWrapper;
function metadataErrorHandler($errno, $errstr, $errfile, $errline){
global $upc;
echo "
\n\n$upc -- \t";
echo echoErrorNo($errno, $errstr);
}
function productOrderErrorHandler($errno, $errstr, $errfile, $errline){
global $upc;
echo "
\n\nPO_ORC_{$upc}.xml ";
echoErrorNo($errno, $errstr);
}
function echoErrorNo($errno, $errstr){
switch ($errno) {
case FATAL:
$err = "FATAL\t [$errno] $errstr
\n";
$err .= " Fatal error in line $errline of file $errfile";
$err .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")\n";
$err .= "Aborting..\n";
exit(1);
break;
case ERROR:
$err = "ERROR\t [$errno] $errstr";
break;
case WARNING:
$err = "WARNING\t [$errno] $errstr";
break;
case DOM_INDEX_SIZE_ERR: //#1
$err = "INDEX OR SIZE IS DOES NOT MATCH SCHEMA\t [$errno] $errstr";
break;
case DOMSTRING_SIZE_ERR: //#2
$err = "INVALID STRING SIZE\t [$errno] $errstr";
break;
case DOM_HIERARCHY_REQUEST_ERR: // #3
$err = "NODE PLACEMENT DOES NOT MATCH SCHEMA\t [$errno] $errstr";
break;
case DOM_INVALID_CHARACTER_ERR: // #5
$err = "INVALID/ILLEGAL CHARACTER HAS BEEN SPECIFIED \t [$errno] $errstr";
break;
case DOM_NO_DATA_ALLOWED_ERR: // #6
$err = "DATA SPECIFIED FOR THE NODE DOES NOT MATCH SCHEMA\t [$errno] $errstr";
break;
case DOM_INVALID_CHARACTER_ERR: // #5
$err = "INVALID/ ILLEGAL CHARACTER HAS BEEN SPECIFIED \t [$errno] $errstr";
break;
default:
$err = "UNKNOW ERROR TYPE\t [$errno] $errstr";
break;
}
return $err;
}
function check_upc_existence ($upc, QueryWrapper $wrapperObj) {
$sql = 'SELECT upc
FROM releases
WHERE release_status = "in_content" AND deletions <> "Y" AND artist_id > 0 AND upc = ?';
$chk_result = $wrapperObj->executeQuery($sql, [$upc]);
if ($chk_result === false) {
show_pdo_error($sql, $wrapperObj->getLastStatement());
}
if (count($chk_result) > 0) {
return true;
}
return false;
}
function check_product_type ($upc, QueryWrapper $wrapperObj) {
$sql = 'SELECT upc
FROM releases
WHERE product_type_id = 1 AND upc = ?';
$chk_result = $wrapperObj->executeQuery($sql, [$upc]);
if ($chk_result === false) {
show_pdo_error($sql, $wrapperObj->getLastStatement());
}
if (count($chk_result) > 0) {
return true;
}
return false;
}
function checkDmsProductTypeSupport($upc, $dmsMasterId, QueryWrapper $wrapperObj) {
$sql = 'SELECT dmpt.customer_master_master_id
FROM dms_master_product_type dmpt
INNER JOIN releases r ON r.product_type_id = dmpt.product_type_id
WHERE r.upc = ? AND dmpt.customer_master_master_id = ?';
$dataParams = [];
$dataParams[] = $upc;
$dataParams[] = $dmsMasterId;
$resultSet = $wrapperObj->executeQuery($sql, $dataParams);
if ($resultSet === false) {
show_pdo_error($sql, $wrapperObj->getLastStatement());
}
if (count( $resultSet ) > 0) {
return true;
}
return false;
}
function is_duplicate(&$arr, $var){
if(in_array($var, $arr)){
$arr[] = $var;
return true;
}else{
$arr[] = $var;
return false;
}
}
function map_artist_role($artist_role, $dms_master_master_id) {
switch ($dms_master_master_id) {
case 330:
switch ($artist_role) {
case 'arranger':
$mapped_role = 'ARRANGER';
break;
case 'composer':
$mapped_role = 'COMPOSER';
break;
case 'conductor':
$mapped_role = 'CONDUCTOR';
break;
case 'engineer':
$mapped_role = 'ENGINEER';
break;
case 'ensemble':
case 'orchestra':
$mapped_role = 'ENSEMBLE_ORCHESTRA';
break;
case 'featuring':
$mapped_role = 'FEATURED_ARTIST';
break;
case 'alto':
case 'bandoneon':
case 'baritone':
case 'bass':
case 'bass guitar':
case 'bassoon':
case 'cello':
case 'choir':
case 'chorus':
case 'clarinet':
case 'drums':
case 'flute':
case 'french horn':
case 'guitar':
case 'harmonica':
case 'harp':
case 'harpsichord':
case 'horn':
case 'keyboards':
case 'mezzo soprano':
case 'natural horn':
case 'oboe':
case 'organ':
case 'percussion':
case 'performer':
case 'piano':
case 'recorder':
case 'saxophone':
case 'singer':
case 'soprano':
case 'string bass':
case 'tenor':
case 'timpani drum':
case 'traverso':
case 'trombone':
case 'trumpet':
case 'tuba':
case 'viola':
case 'violin':
case 'violoncello':
case 'vocals':
case 'lyricist':
case 'songwriter':
case 'recording artist':
$mapped_role = 'PERFORMER';
break;
case 'producer':
case 'remixer':
$mapped_role = 'PRODUCER';
break;
case 'soloist':
$mapped_role = 'SOLOIST';
break;
default:
$mapped_role = 'PERFORMER';
}
break;
}
return $mapped_role;
}
function getCombinedTrackName( $trackName, $trackVersion ) {
$newTrackName = $trackName;
if ( !empty( $trackVersion ) ) {
if ( strpos( $newTrackName, ')' ) === false )
$newTrackName .= ' (' . $trackVersion . ')';
else
$newTrackName .= '[' . $trackVersion . ']';
}
return $newTrackName;
}
function validateXML( DOMDocument $xmlDoc, $schemaFilename ) {
$validateResult = array( "isValid" => false, "errorMsg" => "" );
$validationFile = __DIR__ . '/../metadata/validation/' . $schemaFilename;
$xmlDoc->loadXML( $xmlDoc->saveXML() );
// buffer output
set_error_handler('metadataErrorHandler');
ob_start();
if ( substr( $schemaFilename, -3 ) === 'rng' )
$validateResult["isValid"] = $xmlDoc->relaxNGValidate( $validationFile );
else
$validateResult["isValid"] = $xmlDoc->schemaValidate( $validationFile );
$validateResult["errorMsg"] = ob_get_clean();
restore_error_handler();
return $validateResult;
}
function exceptionalMetadataErrorHandler($errno, $errstr, $errfile, $errline) {
if(stristr($errstr, "Unimplemented block at xmlschemas.c") or stristr($errstr, "Unimplemented block at xmlschemastypes.c"))
return;
metadataErrorHandler($errno, $errstr, $errfile, $errline);
}
function utf8_to_ascii(string $in) {
return iconv('UTF-8', 'ASCII//IGNORE', $in);
}
function formatText( $text ) {
// First, replace UTF-8 characters.
$text = str_replace(
array("\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x93", "\xe2\x80\x94", "\xe2\x80\xa6"),
array("'", "'", '"', '"', '-', '--', '...'),
$text);
// Next, replace their Windows-1252 equivalents.
$text = str_replace(
array(chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(133)),
array("'", "'", '"', '"', '-', '--', '...'),
$text);
return $text;
}
function get_signed_int($in) {
$int_max = pow(2, 31)-1;
if ($in > $int_max){
$out = $in - $int_max * 2 - 2;
}
else {
$out = $in;
}
return $out;
}
?>