TargetFactory.class.php (1180B)
1 <?php 2 3 4 namespace cms\generator\target; 5 6 7 use util\ClassUtils; 8 use util\exception\PublisherException; 9 10 class TargetFactory 11 { 12 13 /** 14 * Creates a target for publishing files. 15 * 16 * @param string $url URL 17 * @return Target 18 * @throws PublisherException if no target could be created 19 */ 20 public static function getTargetForUrl( $url ) { 21 22 $scheme = parse_url( $url,PHP_URL_SCHEME ); 23 24 /** @var Target $target */ 25 $target = null; 26 27 switch( $scheme ) { 28 29 case '': 30 case 'file': 31 case 'local': 32 $target = new LocalTarget($url); 33 break; 34 35 case 'dav': 36 $target = new DavTarget($url); 37 break; 38 39 case 'ftp': 40 $target = new FtpTarget($url); 41 break; 42 43 case 'ftps': 44 $target = new FtpsTarget($url); 45 break; 46 47 case 'scp': 48 $target = new ScpTarget($url); 49 break; 50 51 case 'sftp': 52 $target = new SFtpTarget($url); 53 break; 54 55 case 's3': 56 $target = new S3Target($url); 57 break; 58 59 default: 60 throw new PublisherException('The scheme "'.$scheme.'" is not supported.' ); 61 } 62 63 if ( ! $target::isAvailable() ) 64 throw new PublisherException(ClassUtils::getSimpleClassName($target).' is not available.' ); 65 66 return $target; 67 } 68 }