diff options
Diffstat (limited to 'vendor/sabre/vobject/bin/vobjectvalidate.php')
-rwxr-xr-x | vendor/sabre/vobject/bin/vobjectvalidate.php | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/vendor/sabre/vobject/bin/vobjectvalidate.php b/vendor/sabre/vobject/bin/vobjectvalidate.php new file mode 100755 index 000000000..e0b2a479f --- /dev/null +++ b/vendor/sabre/vobject/bin/vobjectvalidate.php @@ -0,0 +1,139 @@ +#!/usr/bin/env php +<?php + +namespace Sabre\VObject; + +// This sucks.. we have to try to find the composer autoloader. But chances +// are, we can't find it this way. So we'll do our bestest +$paths = array( + __DIR__ . '/../vendor/autoload.php', // In case vobject is cloned directly + __DIR__ . '/../../../autoload.php', // In case vobject is a composer dependency. +); + +foreach($paths as $path) { + if (file_exists($path)) { + include $path; + break; + } +} + +if (!class_exists('Sabre\\VObject\\Version')) { + fwrite(STDERR, "Composer autoloader could not be properly loaded.\n"); + die(1); +} + +fwrite(STDERR, "SabreTooth VObject validator " . Version::VERSION . "\n"); + + +$repair = false; +$posArgs = array(); + +// Argument parsing: +foreach($argv as $k=>$v) { + + if ($k===0) { + continue; + } + if (substr($v,0,2)==='--') { + switch($v) { + case '--repair' : + $repair = true; + break; + default : + throw new InvalidArgumentException('Unknown option: ' . $v); + break; + } + continue; + } + $posArgs[] = $v; + +} + +function help() { + + global $argv; + + fwrite(STDERR, <<<HELP +Usage instructions: + + {$argv[0]} [--repair] inputfile [outputfile] + + inputfile Input .vcf or .ics file. + outputfile Output .vcf or .ics file. This is only used with --repair. + --repair Attempt to automatically repair broken files. + +For both the output- and inputfile "-" can be specified, to use STDIN and STDOUT +respectively. + +All other output from this script is sent to STDERR. + +https://github.com/fruux/sabre-vobject + +HELP +); + +} + +if (count($posArgs) < 1) { + help(); + die(); +} + +if ($posArgs[0]!=='-') { + $input = fopen($posArgs[0],'r'); +} else { + $input = STDIN; +} + +if (isset($posArgs[1]) && $posArgs[1]!=='-') { + $output = fopen($posArgs[1],'w'); +} else { + $output = STDOUT; +} + +// This is a bit of a hack to easily support multiple objects in a single file. +$inputStr = "BEGIN:X-SABRE-WRAPPER\r\n" . stream_get_contents($input); + +$inputStr = rtrim($inputStr, "\r\n") . "\r\nEND:X-SABRE-WRAPPER\r\n"; + +// Now the actual work. +$vObj = Reader::read($inputStr); + +$objects = $vObj->children(); + +foreach($objects as $child) { + + switch($child->name) { + case 'VCALENDAR' : + fwrite(STDERR, "iCalendar: " . (string)$child->VERSION . "\n"); + break; + case 'VCARD' : + fwrite(STDERR, "vCard: " . (string)$child->VERSION . "\n"); + break; + default : + fwrite(STDERR, "This was an unknown object, but it did parse. It's likely that validation will give you unexpected results.\n"); + break; + } + + $options = 0; + if ($repair) $options |= Node::REPAIR; + + $warnings = $child->validate($options); + + if (!count($warnings)) { + fwrite(STDERR, "[GOOD NEWS] No warnings!\n"); + } else { + foreach($warnings as $warn) { + + fwrite(STDERR, $warn['message'] . "\n"); + + } + + } + + if ($repair) { + fwrite($output, $child->serialize()); + } + +} + |