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