public static function opts(\Console_CommandLine $optParser)
{
$cmd = $optParser->addCommand('note');
+ $cmd->addOption(
+ 'files',
+ array(
+ 'short_name' => '-f',
+ 'long_name' => '--files',
+ 'description' => 'Files to upload',
+ 'help_name' => 'PATH',
+ 'action' => 'StoreArray',
+ 'default' => [],
+ )
+ );
$cmd->addArgument(
'text',
[
public function run($command)
{
- $data = [
- 'h' => 'entry',
- 'content' => $command->args['text'],
- ];
+ $req = new Request($this->cfg->host, $this->cfg);
+ $req->req->addPostParameter('h', 'entry');
+ $req->req->addPostParameter('content', $command->args['text']);
- $body = http_build_query($data);
+ $files = $command->options['files'];
+ $fileList = [
+ 'audio' => [],
+ 'photo' => [],
+ 'video' => [],
+ ];
+ foreach ($files as $filePath) {
+ if (!file_exists($filePath)) {
+ Log::err('File does not exist: ' . $filePath);
+ exit(20);
+ }
+ $type = 'photo';
+ $fileList[$type][] = $filePath;
+ }
+ foreach ($fileList as $type => $filePaths) {
+ if (count($filePaths) == 1) {
+ $req->addUpload($type, reset($filePaths));
+ } else if (count($filePaths) > 0) {
+ $req->addUpload($type, $filePaths);
+ }
+ }
- $req = new Request($this->cfg->host, $this->cfg);
- $res = $req->send($body);
+ $res = $req->send();
$postUrl = $res->getHeader('Location');
echo "Post created at server\n";
echo $postUrl . "\n";
public $req;
public $cfg;
+ protected $uploadsInfo = [];
+
public function __construct($host, $cfg)
{
$this->cfg = $cfg;
- $this->req = new \HTTP_Request2($host->endpoints->micropub, 'POST');
+ $this->req = new MyHttpRequest2($host->endpoints->micropub, 'POST');
$this->req->setHeader('User-Agent: shpub');
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
//correct ssl validation on php 5.5 is a pain, so disable
$this->req->setHeader('authorization', 'Bearer ' . $host->token);
}
- public function send($body)
+ public function send($body = null)
{
- $this->req->setBody($body);
+ if ($body !== null) {
+ $this->req->setBody($body);
+ }
if ($this->cfg->debug) {
$this->printCurl();
}
return $res;
}
+ /**
+ * @param string $fieldName name of file-upload field
+ * @param string|resource|array $filename full name of local file,
+ * pointer to open file or an array of files
+ */
+ public function addUpload($fieldName, $filename)
+ {
+ $this->uploadsInfo[$fieldName] = $filename;
+ return $this->req->addUpload($fieldName, $filename);
+ }
+
protected function printCurl()
{
$command = 'curl';
$caseKey = implode('-', array_map('ucfirst', explode('-', $key)));
$command .= ' -H ' . escapeshellarg($caseKey . ': ' . $val);
}
- $command .= ' --data ' . escapeshellarg($this->req->getBody());
+
+ $postParams = $this->req->getPostParams();
+
+ if (count($this->uploadsInfo) == 0) {
+ foreach ($postParams as $k => $v) {
+ $command .= ' -d ' . escapeshellarg($k . '=' . $v);
+ }
+ } else {
+ foreach ($postParams as $k => $v) {
+ $command .= ' -F ' . escapeshellarg($k . '=' . $v);
+ }
+ foreach ($this->uploadsInfo as $fieldName => $filename) {
+ if (!is_array($filename)) {
+ $command .= ' -F ' . escapeshellarg(
+ $fieldName . '=@' . $filename
+ );
+ } else {
+ foreach ($filename as $k => $realFilename) {
+ $command .= ' -F ' . escapeshellarg(
+ $fieldName . '[' . $k . ']=@' . $realFilename
+ );
+ }
+ }
+ }
+ }
+
$command .= ' ' . escapeshellarg((string) $this->req->getUrl());
echo $command . "\n";