home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / t2xmlchk.php < prev    next >
PHP Script  |  2008-07-02  |  4KB  |  130 lines

  1. #!/usr/bin/php -q
  2. <?php
  3. /**
  4.  * Check XML files intended to be used with Translation2
  5.  *
  6.  * @category  Internationalization
  7.  * @package   Translation2
  8.  * @author    Olivier Guilyardi <ylf@xung.org>
  9.  * @copyright 2004-2007 Olivier Guilyardi
  10.  * @license   http://www.debian.org/misc/bsd.license  BSD License (3 Clause)
  11.  * @version   CVS: $Id: t2xmlchk.php,v 1.5 2007/10/29 21:10:02 quipo Exp $
  12.  * @link      http://pear.php.net/package/Translation2
  13.  */
  14. //error_reporting (E_ALL);
  15.  
  16. if (substr(phpversion(), 0, 1) != '4') {
  17.     exit("Sorry, this script will only run under PHP4 (that is: not PHP5)\n");
  18. }
  19.  
  20. function print_usage()
  21. {
  22.     echo "t2xmlchk checks and validates XML files intended to be used with \n" . 
  23.          "the Translation2 internationalization package.\n" . 
  24.          "Usage: t2xmlchk <xml filename>\n";
  25. }
  26.  
  27. require_once 'Translation2/Container/xml.php';
  28. require_once 'XML/DTD/XmlValidator.php';
  29.  
  30. if (!$xml_file = $argv[1]) {
  31.     echo "ERROR : No xml filename provided\n\n";
  32.     print_usage();
  33.     exit("\n");
  34. }
  35.  
  36. if (!is_readable($xml_file)) {
  37.     echo "ERROR : No such file : \"$xml_file\"\n\n";
  38.     print_usage();
  39.     exit("\n");
  40. }
  41.  
  42. $validator =& new XML_DTD_XmlValidator();
  43.  
  44. $dtd_file = tempnam('/tmp', 't2');
  45. $fp = fopen($dtd_file, 'w');
  46. fwrite($fp, TRANSLATION2_DTD);
  47. fclose($fp);
  48.  
  49. echo "Performing DTD validation... ";
  50. $test = $validator->isValid($dtd_file, $xml_file);
  51. unlink($dtd_file);
  52. if ($test) {
  53.     echo "OK\n";
  54. } else {
  55.     exit("FAILED : " . $validator->getMessage() . "\n");
  56. }
  57.  
  58. echo "Unserializing... ";
  59.  
  60. $keyAttr = array(
  61.     'lang'   => 'id',
  62.     'page'   => 'key',
  63.     'string' => 'key',
  64.     'tr'     => 'lang'
  65. );
  66. $unserializer = &new XML_Unserializer(array('keyAttribute' => $keyAttr));
  67. if (PEAR::isError($status = $unserializer->unserialize($xml_file, true))) {
  68.     exit("FAILED : " .  $status->getMessage() . "\n");
  69. } else {
  70.     echo "OK\n";
  71. }
  72.  
  73. $data = $unserializer->getUnserializedData();
  74. Translation2_Container_xml::fixEmptySets($data);
  75.  
  76. // This should be done by XML_DTD :
  77. echo "Checking lang IDs... ";
  78.  
  79. $known_langs = array();
  80.  
  81. foreach ($data['languages'] as $lang => $spec) {
  82.     echo "$lang ";
  83.     $known_langs[] = $lang;
  84.     if (isset($spec[0])) {
  85.         exit("FAILED : Found lang duplicate for \"$lang\"\n");
  86.     }
  87. }
  88.  
  89. echo "OK\n";
  90.  
  91. echo "Checking string duplicates... ";
  92.  
  93. foreach ($data['pages'] as $pagename => $pagedata) {
  94.     foreach ($pagedata as $stringname => $stringvalues) {
  95.         if (is_array(array_pop($stringvalues))) {
  96.             exit("FAILED : found duplicate in page \"$pagename\" for string \"stringname\"\n");
  97.         }
  98.     }
  99. }
  100.  
  101. echo "OK\n";
  102.  
  103. // This should be done by XML_DTD :
  104. echo "Checking lang IDREFs... ";
  105.  
  106. foreach ($data['pages'] as $pagename => $pagedata) {
  107.     foreach ($pagedata as $stringname => $stringvalues) {
  108.         foreach ($stringvalues as $lang => $translation) {
  109.             if (!in_array($lang, $known_langs)) {
  110.                 exit("FAILED : Unknow lang \"$lang\" in page \"$pagename\" at string \"$stringname\"\n");
  111.             }
  112.         }
  113.     }
  114. }
  115.  
  116. echo "OK\n";
  117. echo "Checking translation duplicates... ";
  118.  
  119. foreach ($data['pages'] as $pagename => $pagedata) {
  120.     foreach ($pagedata as $stringname => $stringvalues) {
  121.         foreach ($stringvalues as $lang => $translation) {
  122.             if (is_array($translation)) {
  123.                 exit("FAILED : found duplicate in page \"$pagename\" for string \"stringname\" with lang \"$lang\"\n");
  124.             }
  125.         }
  126.     }
  127. }
  128.  
  129. echo "OK\n";
  130. ?>