initial
This commit is contained in:
+113
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
class elFinderEditorOnlineConvert extends elFinderEditor
|
||||
{
|
||||
protected $allowed = array('init', 'api');
|
||||
|
||||
public function enabled()
|
||||
{
|
||||
return defined('ELFINDER_ONLINE_CONVERT_APIKEY') && ELFINDER_ONLINE_CONVERT_APIKEY && (!defined('ELFINDER_DISABLE_ONLINE_CONVERT') || !ELFINDER_DISABLE_ONLINE_CONVERT);
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
return array('api' => defined('ELFINDER_ONLINE_CONVERT_APIKEY') && ELFINDER_ONLINE_CONVERT_APIKEY && function_exists('curl_init'));
|
||||
}
|
||||
|
||||
public function api()
|
||||
{
|
||||
// return array('apires' => array('message' => 'Currently disabled for developping...'));
|
||||
$endpoint = 'https://api2.online-convert.com/jobs';
|
||||
$category = $this->argValue('category');
|
||||
$convert = $this->argValue('convert');
|
||||
$options = $this->argValue('options');
|
||||
$source = $this->argValue('source');
|
||||
$filename = $this->argValue('filename');
|
||||
$mime = $this->argValue('mime');
|
||||
$jobid = $this->argValue('jobid');
|
||||
$string_method = '';
|
||||
$options = array();
|
||||
// Currently these converts are make error with API call. I don't know why.
|
||||
$nonApi = array('android', 'blackberry', 'dpg', 'ipad', 'iphone', 'ipod', 'nintendo-3ds', 'nintendo-ds', 'ps3', 'psp', 'wii', 'xbox');
|
||||
if (in_array($convert, $nonApi)) {
|
||||
return array('apires' => array());
|
||||
}
|
||||
$ch = null;
|
||||
if ($convert && $source) {
|
||||
$request = array(
|
||||
'input' => array(array(
|
||||
'type' => 'remote',
|
||||
'source' => $source
|
||||
)),
|
||||
'conversion' => array(array(
|
||||
'target' => $convert
|
||||
))
|
||||
);
|
||||
|
||||
if ($filename !== '') {
|
||||
$request['input'][0]['filename'] = $filename;
|
||||
}
|
||||
|
||||
if ($mime !== '') {
|
||||
$request['input'][0]['content_type'] = $mime;
|
||||
}
|
||||
|
||||
if ($category) {
|
||||
$request['conversion'][0]['category'] = $category;
|
||||
}
|
||||
|
||||
if ($options && $options !== 'null') {
|
||||
$options = json_decode($options, true);
|
||||
}
|
||||
if (!is_array($options)) {
|
||||
$options = array();
|
||||
}
|
||||
if ($options) {
|
||||
$request['conversion'][0]['options'] = $options;
|
||||
}
|
||||
|
||||
$ch = curl_init($endpoint);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($request));
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
||||
'X-Oc-Api-Key: ' . ELFINDER_ONLINE_CONVERT_APIKEY,
|
||||
'Content-Type: application/json',
|
||||
'cache-control: no-cache'
|
||||
));
|
||||
} else if ($jobid) {
|
||||
$ch = curl_init($endpoint . '/' . $jobid);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
||||
'X-Oc-Api-Key: ' . ELFINDER_ONLINE_CONVERT_APIKEY,
|
||||
'cache-control: no-cache'
|
||||
));
|
||||
}
|
||||
|
||||
if ($ch) {
|
||||
$response = curl_exec($ch);
|
||||
$info = curl_getinfo($ch);
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
if (!empty($error)) {
|
||||
$res = array('error' => $error);
|
||||
} else {
|
||||
$data = json_decode($response, true);
|
||||
if (isset($data['status']) && isset($data['status']['code']) && $data['status']['code'] === 'completed') {
|
||||
/** @var elFinderSession $session */
|
||||
$session = $this->elfinder->getSession();
|
||||
$urlContentSaveIds = $session->get('urlContentSaveIds', array());
|
||||
$urlContentSaveIds['OnlineConvert-' . $data['id']] = true;
|
||||
$session->set('urlContentSaveIds', $urlContentSaveIds);
|
||||
}
|
||||
$res = array('apires' => $data);
|
||||
}
|
||||
|
||||
return $res;
|
||||
} else {
|
||||
return array('error' => array('errCmdParams', 'editor.OnlineConvert.api'));
|
||||
}
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
class elFinderEditorZipArchive extends elFinderEditor
|
||||
{
|
||||
public function enabled()
|
||||
{
|
||||
return (!defined('ELFINDER_DISABLE_ZIPEDITOR') || !ELFINDER_DISABLE_ZIPEDITOR) &&
|
||||
class_exists('Barryvdh\elFinderFlysystemDriver\Driver') &&
|
||||
class_exists('League\Flysystem\Filesystem') &&
|
||||
class_exists('League\Flysystem\ZipArchive\ZipArchiveAdapter');
|
||||
}
|
||||
}
|
||||
+225
@@ -0,0 +1,225 @@
|
||||
<?php
|
||||
|
||||
class elFinderEditorZohoOffice extends elFinderEditor
|
||||
{
|
||||
private static $curlTimeout = 20;
|
||||
|
||||
protected $allowed = array('init', 'save', 'chk');
|
||||
|
||||
protected $editor_settings = array(
|
||||
'writer' => array(
|
||||
'unit' => 'mm',
|
||||
'view' => 'pageview'
|
||||
),
|
||||
'sheet' => array(
|
||||
'country' => 'US'
|
||||
),
|
||||
'show' => array()
|
||||
);
|
||||
|
||||
private $urls = array(
|
||||
'writer' => 'https://api.office-integrator.com/writer/officeapi/v1/document',
|
||||
'sheet' => 'https://api.office-integrator.com/sheet/officeapi/v1/spreadsheet',
|
||||
'show' => 'https://api.office-integrator.com/show/officeapi/v1/presentation',
|
||||
);
|
||||
|
||||
private $srvs = array(
|
||||
'application/msword' => 'writer',
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'writer',
|
||||
'application/pdf' => 'writer',
|
||||
'application/vnd.oasis.opendocument.text' => 'writer',
|
||||
'application/rtf' => 'writer',
|
||||
'text/html' => 'writer',
|
||||
'application/vnd.ms-excel' => 'sheet',
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'sheet',
|
||||
'application/vnd.oasis.opendocument.spreadsheet' => 'sheet',
|
||||
'application/vnd.sun.xml.calc' => 'sheet',
|
||||
'text/csv' => 'sheet',
|
||||
'text/tab-separated-values' => 'sheet',
|
||||
'application/vnd.ms-powerpoint' => 'show',
|
||||
'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'show',
|
||||
'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => 'show',
|
||||
'application/vnd.oasis.opendocument.presentation' => 'show',
|
||||
'application/vnd.sun.xml.impress' => 'show',
|
||||
);
|
||||
|
||||
private $myName = '';
|
||||
|
||||
protected function extentionNormrize($extention, $srvsName) {
|
||||
switch($srvsName) {
|
||||
case 'writer':
|
||||
if (!in_array($extention, array('zdoc', 'docx', 'rtf', 'odt', 'html', 'txt'))) {
|
||||
$extention = 'docx';
|
||||
}
|
||||
break;
|
||||
case 'sheet':
|
||||
if (!in_array($extention, array('zsheet', 'xls', 'xlsx', 'ods', 'csv', 'tsv'))) {
|
||||
$extention = 'xlsx';
|
||||
}
|
||||
break;
|
||||
case 'show':
|
||||
if (!in_array($extention, array('zslides', 'pptx', 'pps', 'ppsx', 'odp', 'sxi'))) {
|
||||
$extention = 'pptx';
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
return $extention;
|
||||
}
|
||||
|
||||
public function __construct($elfinder, $args)
|
||||
{
|
||||
parent::__construct($elfinder, $args);
|
||||
$this->myName = preg_replace('/^elFinderEditor/i', '', get_class($this));
|
||||
}
|
||||
|
||||
public function enabled()
|
||||
{
|
||||
return defined('ELFINDER_ZOHO_OFFICE_APIKEY') && ELFINDER_ZOHO_OFFICE_APIKEY && function_exists('curl_init');
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
if (!defined('ELFINDER_ZOHO_OFFICE_APIKEY') || !function_exists('curl_init')) {
|
||||
return array('error', array(elFinder::ERROR_CONF, '`ELFINDER_ZOHO_OFFICE_APIKEY` or curl extension'));
|
||||
}
|
||||
if (!empty($this->args['target'])) {
|
||||
$fp = $cfile = null;
|
||||
$hash = $this->args['target'];
|
||||
/** @var elFinderVolumeDriver $srcVol */
|
||||
if (($srcVol = $this->elfinder->getVolume($hash)) && ($file = $srcVol->file($hash))) {
|
||||
$cdata = empty($this->args['cdata']) ? '' : $this->args['cdata'];
|
||||
$cookie = $this->elfinder->getFetchCookieFile();
|
||||
$save = false;
|
||||
$ch = curl_init();
|
||||
$conUrl = elFinder::getConnectorUrl();
|
||||
curl_setopt($ch, CURLOPT_URL, $conUrl . (strpos($conUrl, '?') !== false? '&' : '?') . 'cmd=editor&name=' . $this->myName . '&method=chk&args[target]=' . rawurlencode($hash) . $cdata);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
if ($cookie) {
|
||||
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
|
||||
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
|
||||
}
|
||||
$res = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
if ($res) {
|
||||
if ($data = json_decode($res, true)) {
|
||||
$save = !empty($data['cansave']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($size = $file['size']) {
|
||||
$src = $srcVol->open($hash);
|
||||
$fp = tmpfile();
|
||||
stream_copy_to_stream($src, $fp);
|
||||
$srcVol->close($src, $hash);
|
||||
$info = stream_get_meta_data($fp);
|
||||
if ($info && !empty($info['uri'])) {
|
||||
$srcFile = $info['uri'];
|
||||
if (class_exists('CURLFile')) {
|
||||
$cfile = new CURLFile($srcFile);
|
||||
$cfile->setPostFilename($file['name']);
|
||||
$cfile->setMimeType($file['mime']);
|
||||
} else {
|
||||
$cfile = '@' . $srcFile;
|
||||
}
|
||||
}
|
||||
}
|
||||
//$srv = $this->args['service'];
|
||||
$srvsName = $this->srvs[$file['mime']];
|
||||
$format = $this->extentionNormrize($srcVol->getExtentionByMime($file['mime']), $srvsName);
|
||||
if (!$format) {
|
||||
$format = substr($file['name'], strrpos($file['name'], '.') * -1);
|
||||
}
|
||||
$lang = $this->args['lang'];
|
||||
if ($lang === 'jp') {
|
||||
$lang = 'ja';
|
||||
}
|
||||
$data = array(
|
||||
'apikey' => ELFINDER_ZOHO_OFFICE_APIKEY,
|
||||
'callback_settings' => array(
|
||||
'save_format' => $format,
|
||||
'save_url_params' => array(
|
||||
'hash' => $hash
|
||||
)
|
||||
),
|
||||
'editor_settings' => $this->editor_settings[$srvsName],
|
||||
'document_info' => array(
|
||||
'document_name' => substr($file['name'], 0, strlen($file['name']) - strlen($format)- 1)
|
||||
)
|
||||
);
|
||||
$data['editor_settings']['language'] = $lang;
|
||||
if ($save) {
|
||||
$conUrl = elFinder::getConnectorUrl();
|
||||
$data['callback_settings']['save_url'] = $conUrl . (strpos($conUrl, '?') !== false? '&' : '?') . 'cmd=editor&name=' . $this->myName . '&method=save' . $cdata;
|
||||
}
|
||||
foreach($data as $_k => $_v) {
|
||||
if (is_array($_v)){
|
||||
$data[$_k] = json_encode($_v);
|
||||
}
|
||||
}
|
||||
if ($cfile) {
|
||||
$data['document'] = $cfile;
|
||||
}
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $this->urls[$srvsName]);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, self::$curlTimeout);
|
||||
curl_setopt($ch, CURLOPT_HEADER, 0);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
||||
$res = curl_exec($ch);
|
||||
$error = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
$fp && fclose($fp);
|
||||
|
||||
if ($res && $res = @json_decode($res, true)) {
|
||||
if (!empty($res['document_url'])) {
|
||||
$ret = array('zohourl' => $res['document_url']);
|
||||
if (!$save) {
|
||||
$ret['warning'] = 'exportToSave';
|
||||
}
|
||||
return $ret;
|
||||
} else {
|
||||
$error = $res;
|
||||
}
|
||||
}
|
||||
|
||||
if ($error) {
|
||||
return array('error' => is_string($error)? preg_split('/[\r\n]+/', $error) : 'Error code: ' . $error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return array('error' => array('errCmdParams', 'editor.' . $this->myName . '.init'));
|
||||
}
|
||||
|
||||
public function save()
|
||||
{
|
||||
if (!empty($_POST) && !empty($_POST['hash']) && !empty($_FILES) && !empty($_FILES['content'])) {
|
||||
$hash = $_POST['hash'];
|
||||
/** @var elFinderVolumeDriver $volume */
|
||||
if ($volume = $this->elfinder->getVolume($hash)) {
|
||||
if ($content = file_get_contents($_FILES['content']['tmp_name'])) {
|
||||
if ($volume->putContents($hash, $content)) {
|
||||
return array('raw' => true, 'error' => '', 'header' => 'HTTP/1.1 200 OK');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return array('raw' => true, 'error' => '', 'header' => 'HTTP/1.1 500 Internal Server Error');
|
||||
}
|
||||
|
||||
public function chk()
|
||||
{
|
||||
$hash = $this->args['target'];
|
||||
$res = false;
|
||||
/** @var elFinderVolumeDriver $volume */
|
||||
if ($volume = $this->elfinder->getVolume($hash)) {
|
||||
if ($file = $volume->file($hash)) {
|
||||
$res = (bool)$file['write'];
|
||||
}
|
||||
}
|
||||
return array('cansave' => $res);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Abstract class of editor plugins.
|
||||
*
|
||||
* @author Naoki Sawada
|
||||
*/
|
||||
class elFinderEditor
|
||||
{
|
||||
/**
|
||||
* Array of allowed method by request from client side.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $allowed = array();
|
||||
|
||||
/**
|
||||
* elFinder instance
|
||||
*
|
||||
* @var object elFinder instance
|
||||
*/
|
||||
protected $elfinder;
|
||||
|
||||
/**
|
||||
* Arguments
|
||||
*
|
||||
* @var array argValues
|
||||
*/
|
||||
protected $args;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param object $elfinder
|
||||
* @param array $args
|
||||
*/
|
||||
public function __construct($elfinder, $args)
|
||||
{
|
||||
$this->elfinder = $elfinder;
|
||||
$this->args = $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return boolean that this plugin is enabled.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function enabled()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return boolean that $name method is allowed.
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isAllowedMethod($name)
|
||||
{
|
||||
$checker = array_flip($this->allowed);
|
||||
|
||||
return isset($checker[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return $this->args value of the key
|
||||
*
|
||||
* @param string $key target key
|
||||
* @param string $empty empty value
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function argValue($key, $empty = '')
|
||||
{
|
||||
return isset($this->args[$key]) ? $this->args[$key] : $empty;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user