Determine URL file type from path, strip query parameters first
[shpub.git] / src / shpub / Command / AbstractProps.php
index 822fc77bba72636aa7fa52fd18fceff8ed815c0b..90cc0fff70d7bfaaaea3da7e0767ade61656dc06 100644 (file)
@@ -40,6 +40,15 @@ class Command_AbstractProps
                 'default'     => [],
             )
         );
+        $cmd->addOption(
+            'direct_upload',
+            array(
+                'long_name'   => '--direct-upload',
+                'description' => 'Ignore media endpoint at file upload',
+                'action'      => 'StoreTrue',
+                'default'     => false,
+            )
+        );
         $cmd->addOption(
             'name',
             array(
@@ -85,7 +94,7 @@ class Command_AbstractProps
         $cmd->addOption(
             'syndication',
             array(
-                'short_name'  => '-s',
+                'short_name'  => '-u',
                 'long_name'   => '--syndication',
                 'description' => 'Syndication URL(s)',
                 'help_name'   => 'URL',
@@ -104,59 +113,95 @@ class Command_AbstractProps
                 'default'     => [],
             )
         );
+        static::addOptJson($cmd);
+    }
+
+    protected static function addOptHtml(\Console_CommandLine_Command $cmd)
+    {
+        $cmd->addOption(
+            'html',
+            array(
+                'long_name'   => '--html',
+                'description' => 'Text content is HTML',
+                'action'      => 'StoreTrue',
+                'default'     => false,
+            )
+        );
+    }
+
+    protected static function addOptJson(\Console_CommandLine_Command $cmd)
+    {
+        $cmd->addOption(
+            'json',
+            array(
+                'long_name'   => '--json',
+                'description' => 'Send request data as JSON',
+                'action'      => 'StoreTrue',
+                'default'     => false,
+            )
+        );
     }
 
     protected function handleGenericOptions(
         \Console_CommandLine_Result $cmdRes, Request $req
     ) {
+        $this->handleOptJson($cmdRes, $req);
+
         if ($cmdRes->options['published'] !== null) {
-            $req->req->addPostParameter(
+            $req->addProperty(
                 'published', $cmdRes->options['published']
             );
         }
         if ($cmdRes->options['updated'] !== null) {
-            $req->req->addPostParameter(
+            $req->addProperty(
                 'updated', $cmdRes->options['updated']
             );
         }
         if (count($cmdRes->options['categories'])) {
-            $req->addPostParameter(
+            $req->addProperty(
                 'category', $cmdRes->options['categories']
             );
         }
         if ($cmdRes->options['name'] !== null) {
-            $req->req->addPostParameter(
+            $req->addProperty(
                 'name', $cmdRes->options['name']
             );
         }
         if ($cmdRes->options['slug'] !== null) {
-            $req->req->addPostParameter(
+            $req->addProperty(
                 'slug', $cmdRes->options['slug']
             );
         }
         if (count($cmdRes->options['syndication'])) {
-            $req->addPostParameter(
+            $req->addProperty(
                 'syndication', $cmdRes->options['syndication']
             );
         }
 
+        $req->setDirectUpload($cmdRes->options['direct_upload']);
         $this->handleFiles($cmdRes, $req);
 
         if (count($cmdRes->options['x'])) {
             $postParams = [];
             foreach ($cmdRes->options['x'] as $xproperty) {
                 list($propkey, $propval) = explode('=', $xproperty, 2);
-                if (!isset($postParams[$propkey] )) {
+                if (!isset($postParams[$propkey])) {
                     $postParams[$propkey] = [];
                 }
                 $postParams[$propkey][] = $propval;
             }
             foreach ($postParams as $propkey => $propvals) {
-                $req->addPostParameter($propkey, $propvals);
+                $req->addProperty($propkey, $propvals);
             }
         }
     }
 
+    protected function handleOptJson(
+        \Console_CommandLine_Result $cmdRes, Request $req
+    ) {
+        $req->setSendAsJson($cmdRes->options['json']);
+    }
+
     protected function handleFiles(
         \Console_CommandLine_Result $cmdRes, Request $req
     ) {
@@ -170,8 +215,9 @@ class Command_AbstractProps
         foreach ($files as $filePath) {
             if (strpos($filePath, '://') !== false) {
                 //url
+                $urlPath  = parse_url($filePath, PHP_URL_PATH);
                 $mte      = new \MIME_Type_Extension();
-                $mimetype = $mte->getMIMEType($filePath);
+                $mimetype = $mte->getMIMEType($urlPath);
                 $media    = \MIME_Type::getMedia($mimetype);
                 if (!isset($urlList[$media])) {
                     Log::err('File type not allowed: ' . $mimetype);
@@ -196,24 +242,15 @@ class Command_AbstractProps
             if ($type == 'image') {
                 $type = 'photo';
             }
-            if (count($urls) == 1) {
-                $req->req->addPostParameter($type, reset($urls));
-            } else if (count($urls) > 1) {
-                $n = 0;
-                foreach ($urls as $url) {
-                    $req->req->addPostParameter(
-                        $type . '[' . $n++ . ']', $url
-                    );
-                }
+            if (count($urls) > 0) {
+                $req->addProperty($type, $urls);
             }
         }
         foreach ($fileList as $type => $filePaths) {
             if ($type == 'image') {
                 $type = 'photo';
             }
-            if (count($filePaths) == 1) {
-                $req->addUpload($type, reset($filePaths));
-            } else if (count($filePaths) > 0) {
+            if (count($filePaths) > 0) {
                 $req->addUpload($type, $filePaths);
             }
         }