--- /dev/null
+<?php
+namespace shpub;
+
+/**
+ * Abstract command class that handles generic properties
+ */
+class Command_AbstractProps
+{
+ public static function optsGeneric(\Console_CommandLine_Command $cmd)
+ {
+ $cmd->addOption(
+ 'categories',
+ array(
+ 'short_name' => '-c',
+ 'long_name' => '--category',
+ 'description' => 'Category names',
+ 'help_name' => 'CAT',
+ 'action' => 'StoreArray',
+ 'default' => [],
+ )
+ );
+ $cmd->addOption(
+ 'files',
+ array(
+ 'short_name' => '-f',
+ 'long_name' => '--files',
+ 'description' => 'Files or URLs to upload',
+ 'help_name' => 'PATH',
+ 'action' => 'StoreArray',
+ 'default' => [],
+ )
+ );
+ $cmd->addOption(
+ 'published',
+ array(
+ 'long_name' => '--published',
+ 'description' => 'Publish date',
+ 'help_name' => 'DATE',
+ 'action' => 'StoreString',
+ 'default' => null,
+ )
+ );
+ $cmd->addOption(
+ 'syndication',
+ array(
+ 'short_name' => '-s',
+ 'long_name' => '--syndication',
+ 'description' => 'Syndication URL(s)',
+ 'help_name' => 'URL',
+ 'action' => 'StoreArray',
+ 'default' => [],
+ )
+ );
+ $cmd->addOption(
+ 'x',
+ array(
+ 'short_name' => '-x',
+ 'long_name' => '--xprop',
+ 'description' => 'Additional property',
+ 'help_name' => 'key=value',
+ 'action' => 'StoreArray',
+ 'default' => [],
+ )
+ );
+ }
+
+ protected function handleGenericOptions(
+ \Console_CommandLine_Result $cmdRes, Request $req
+ ) {
+ if ($cmdRes->options['published'] !== null) {
+ $req->req->addPostParameter(
+ 'published', $cmdRes->options['published']
+ );
+ }
+ if (count($cmdRes->options['categories'])) {
+ $req->addPostParameter(
+ 'category', $cmdRes->options['categories']
+ );
+ }
+ if (count($cmdRes->options['syndication'])) {
+ $req->addPostParameter(
+ 'syndication', $cmdRes->options['syndication']
+ );
+ }
+
+ $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] )) {
+ $postParams[$propkey] = [];
+ }
+ $postParams[$propkey][] = $propval;
+ }
+ foreach ($postParams as $propkey => $propvals) {
+ $req->addPostParameter($propkey, $propvals);
+ }
+ }
+ }
+
+ protected function handleFiles(
+ \Console_CommandLine_Result $cmdRes, Request $req
+ ) {
+ $files = $cmdRes->options['files'];
+ $fileList = $urlList = [
+ 'audio' => [],
+ 'image' => [],
+ 'video' => [],
+ ];
+
+ foreach ($files as $filePath) {
+ if (strpos($filePath, '://') !== false) {
+ //url
+ $mte = new \MIME_Type_Extension();
+ $mimetype = $mte->getMIMEType($filePath);
+ $media = \MIME_Type::getMedia($mimetype);
+ if (!isset($urlList[$media])) {
+ Log::err('File type not allowed: ' . $mimetype);
+ exit(20);
+ }
+ $urlList[$media][] = $filePath;
+ } else if (file_exists($filePath)) {
+ //file
+ $mimetype = \MIME_Type::autoDetect($filePath);
+ $media = \MIME_Type::getMedia($mimetype);
+ if (!isset($urlList[$media])) {
+ Log::err('File type not allowed: ' . $mimetype);
+ exit(20);
+ }
+ $fileList[$media][] = $filePath;
+ } else {
+ Log::err('File does not exist: ' . $filePath);
+ exit(20);
+ }
+ }
+ foreach ($urlList as $type => $urls) {
+ 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
+ );
+ }
+ }
+ }
+ foreach ($fileList as $type => $filePaths) {
+ if ($type == 'image') {
+ $type = 'photo';
+ }
+ if (count($filePaths) == 1) {
+ $req->addUpload($type, reset($filePaths));
+ } else if (count($filePaths) > 0) {
+ $req->addUpload($type, $filePaths);
+ }
+ }
+ }
+}
+?>
<?php
namespace shpub;
-class Command_Like
+class Command_Like extends Command_AbstractProps
{
/**
* @var Config
public static function opts(\Console_CommandLine $optParser)
{
$cmd = $optParser->addCommand('like');
+ static::optsGeneric($cmd);
$cmd->addArgument(
'url',
[
);
}
- public function run($command)
+ public function run(\Console_CommandLine_Result $cmdRes)
{
- $url = Validator::url($command->args['url'], 'url');
+ $url = Validator::url($cmdRes->args['url'], 'url');
if ($url === false) {
exit(10);
}
- $body = http_build_query(
- [
- 'h' => 'entry',
- 'like-of' => $url,
- ]
- );
-
$req = new Request($this->cfg->host, $this->cfg);
- $res = $req->send($body);
+ $req->req->addPostParameter('h', 'entry');
+ $req->req->addPostParameter('like-of', $url);
+
+ $this->handleGenericOptions($cmdRes, $req);
+ $res = $req->send();
+
$postUrl = $res->getHeader('Location');
if ($postUrl === null) {
Log::err('Error: Server sent no "Location" header and said:');
<?php
namespace shpub;
-class Command_Note
+class Command_Note extends Command_AbstractProps
{
/**
* @var Config
public static function opts(\Console_CommandLine $optParser)
{
$cmd = $optParser->addCommand('note');
- $cmd->addOption(
- 'categories',
- array(
- 'short_name' => '-c',
- 'long_name' => '--category',
- 'description' => 'Categories',
- 'help_name' => 'CAT',
- 'action' => 'StoreArray',
- 'default' => [],
- )
- );
- $cmd->addOption(
- 'files',
- array(
- 'short_name' => '-f',
- 'long_name' => '--files',
- 'description' => 'Files to upload',
- 'help_name' => 'PATH',
- 'action' => 'StoreArray',
- 'default' => [],
- )
- );
- $cmd->addOption(
- 'published',
- array(
- 'long_name' => '--published',
- 'description' => 'Publish date',
- 'help_name' => 'DATE',
- 'action' => 'StoreString',
- 'default' => null,
- )
- );
- $cmd->addOption(
- 'syndication',
- array(
- 'short_name' => '-s',
- 'long_name' => '--syndication',
- 'description' => 'Syndication URL(s)',
- 'help_name' => 'URL',
- 'action' => 'StoreArray',
- 'default' => [],
- )
- );
- $cmd->addOption(
- 'x',
- array(
- 'short_name' => '-x',
- 'long_name' => '--xprop',
- 'description' => 'Additional property',
- 'help_name' => 'key=value',
- 'action' => 'StoreArray',
- 'default' => [],
- )
- );
+ static::optsGeneric($cmd);
$cmd->addArgument(
'text',
[
);
}
- public function run($command)
+ public function run(\Console_CommandLine_Result $cmdRes)
{
$req = new Request($this->cfg->host, $this->cfg);
$req->req->addPostParameter('h', 'entry');
- $req->req->addPostParameter('content', $command->args['text']);
- if ($command->options['published'] !== null) {
- $req->req->addPostParameter(
- 'published', $command->options['published']
- );
- }
- if (count($command->options['categories'])) {
- $req->addPostParameter(
- 'category', $command->options['categories']
- );
- }
- if (count($command->options['syndication'])) {
- $req->addPostParameter(
- 'syndication', $command->options['syndication']
- );
- }
-
- $files = $command->options['files'];
- $fileList = $urlList = [
- 'audio' => [],
- 'image' => [],
- 'video' => [],
- ];
-
- foreach ($files as $filePath) {
- if (strpos($filePath, '://') !== false) {
- //url
- $mte = new \MIME_Type_Extension();
- $mimetype = $mte->getMIMEType($filePath);
- $media = \MIME_Type::getMedia($mimetype);
- if (!isset($urlList[$media])) {
- Log::err('File type not allowed: ' . $mimetype);
- exit(20);
- }
- $urlList[$media][] = $filePath;
- } else if (file_exists($filePath)) {
- //file
- $mimetype = \MIME_Type::autoDetect($filePath);
- $media = \MIME_Type::getMedia($mimetype);
- if (!isset($urlList[$media])) {
- Log::err('File type not allowed: ' . $mimetype);
- exit(20);
- }
- $fileList[$media][] = $filePath;
- } else {
- Log::err('File does not exist: ' . $filePath);
- exit(20);
- }
- }
- foreach ($urlList as $type => $urls) {
- 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
- );
- }
- }
- }
- foreach ($fileList as $type => $filePaths) {
- if ($type == 'image') {
- $type = 'photo';
- }
- if (count($filePaths) == 1) {
- $req->addUpload($type, reset($filePaths));
- } else if (count($filePaths) > 0) {
- $req->addUpload($type, $filePaths);
- }
- }
-
- if (count($command->options['x'])) {
- $postParams = [];
- foreach ($command->options['x'] as $xproperty) {
- list($propkey, $propval) = explode('=', $xproperty, 2);
- if (!isset($postParams[$propkey] )) {
- $postParams[$propkey] = [];
- }
- $postParams[$propkey][] = $propval;
- }
- foreach ($postParams as $propkey => $propvals) {
- $req->addPostParameter($propkey, $propvals);
- }
- }
+ $req->req->addPostParameter('content', $cmdRes->args['text']);
+ $this->handleGenericOptions($cmdRes, $req);
$res = $req->send();
$postUrl = $res->getHeader('Location');
<?php
namespace shpub;
-class Command_Reply
+class Command_Reply extends Command_AbstractProps
{
/**
* @var Config
public static function opts(\Console_CommandLine $optParser)
{
$cmd = $optParser->addCommand('reply');
+ static::optsGeneric($cmd);
$cmd->addArgument(
'url',
[
]
);
}
- public function run($url, $text)
+
+ public function run(\Console_CommandLine_Result $cmdRes)
{
- $url = Validator::url($url, 'url');
+ $url = Validator::url($cmdRes->args['url'], 'url');
if ($url === false) {
exit(10);
}
- $body = http_build_query(
- [
- 'h' => 'entry',
- 'content' => $text,
- 'in-reply-to' => $url,
- ]
- );
-
$req = new Request($this->cfg->host, $this->cfg);
- $res = $req->send($body);
+ $req->req->addPostParameter('h', 'entry');
+ $req->req->addPostParameter('content', implode(' ', $cmdRes->args['text']));
+ $req->req->addPostParameter('in-reply-to', $url);
+
+ $this->handleGenericOptions($cmdRes, $req);
+ $res = $req->send();
+
$postUrl = $res->getHeader('Location');
echo "Reply created at server\n";
echo $postUrl . "\n";