You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

291 lines
10 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
function wikiplugin_googledoc_info()
{
return [
'name' => tra('Google Doc'),
'documentation' => 'PluginGoogleDoc',
'description' => tra('Display a Google document'),
'prefs' => [ 'wikiplugin_googledoc' ],
'body' => tra('Leave this empty.'),
// 'validate' => 'all',
'iconname' => 'google',
'tags' => [ 'basic' ],
'introduced' => 3,
'params' => [
'type' => [
'safe' => true,
'required' => true,
'name' => tra('Type'),
'description' => tra('Type of Google document'),
'since' => '3.0',
'filter' => 'word',
'default' => '',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Document'), 'value' => 'document'],
['text' => tra('Slides'), 'value' => 'slides'],
['text' => tra('Spreadsheet'), 'value' => 'spreadsheet'],
['text' => tra('Forms'), 'value' => 'forms'],
['text' => tra('Drive'), 'value' => 'drive']
]
],
'key' => [
'safe' => true,
'required' => true,
'name' => tra('Key'),
'description' => tra('Google doc key - for example:') . ' <code>pXsHENf1bGGY92X1iEeJJI</code>',
'since' => '3.0',
'filter' => 'text',
'default' => ''
],
'name' => [
'safe' => true,
'required' => false,
'name' => tra('Name'),
'description' => tra('Name of iframe. Default is "Frame" + the key'),
'filter' => 'text',
'since' => '3.0',
],
'url' => [
'safe' => true,
'required' => false,
'name' => tra('Drive Link'),
'description' => tra('The URL of the file on Google Drive'),
'default' => '',
'since' => '24.0',
'filter' => 'url',
],
'size' => [
'safe' => true,
'required' => false,
'name' => tra('Size'),
'description' => tra('Size of frame. Use instead of width and height. The sizes will fit the Google
presentations sizes exactly.'),
'since' => '3.0',
'filter' => 'word',
'default' => '',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Small'), 'value' => 'small'],
['text' => tra('Medium'), 'value' => 'medium'],
['text' => tra('Large'), 'value' => 'large']
]
],
'width' => [
'safe' => true,
'required' => false,
'name' => tra('Width'),
'description' => tra('Width in pixels or %'),
'since' => '3.0',
'filter' => 'digits',
'default' => 800
],
'height' => [
'safe' => true,
'required' => false,
'name' => tra('Height'),
'description' => tra('Height in pixels or %'),
'since' => '3.0',
'filter' => 'digits',
'default' => 400
],
'align' => [
'safe' => true,
'required' => false,
'name' => tra('Alignment'),
'description' => tra('Position of frame on page'),
'since' => '3.0',
'default' => '',
'filter' => 'word',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Top'), 'value' => 'top'],
['text' => tra('Middle'), 'value' => 'middle'],
['text' => tra('Bottom'), 'value' => 'bottom'],
['text' => tra('Left'), 'value' => 'left'],
['text' => tra('Right'), 'value' => 'right']
]
],
'frameborder' => [
'safe' => true,
'required' => false,
'name' => tra('Frame Border'),
'description' => tra('Choose whether to show a border around the iframe'),
'since' => '3.0',
'default' => 0,
'filter' => 'digits',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 1],
['text' => tra('No'), 'value' => 0]
]
],
'marginheight' => [
'safe' => true,
'required' => false,
'name' => tra('Margin Height'),
'description' => tra('Margin height in pixels'),
'filter' => 'digits',
'since' => '3.0',
'default' => ''
],
'marginwidth' => [
'safe' => true,
'required' => false,
'name' => tra('Margin Width'),
'description' => tra('Margin width in pixels'),
'since' => '3.0',
'filter' => 'digits',
'default' => ''
],
'scrolling' => [
'safe' => true,
'required' => false,
'name' => tra('Scrolling'),
'description' => tra('Choose whether to add a scroll bar'),
'since' => '3.0',
'default' => '',
'filter' => 'word',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'yes'],
['text' => tra('No'), 'value' => 'no'],
['text' => tra('Auto'), 'value' => 'auto']
]
],
'editLink' => [
'safe' => true,
'required' => false,
'name' => tra('Edit Link'),
'description' => tra('Choose whether to show an edit link and set its location'),
'since' => '3.0',
'filter' => 'word',
'default' => '',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Top'), 'value' => 'top'],
['text' => tra('Bottom'), 'value' => 'bottom'],
['text' => tra('Both'), 'value' => 'both']
]
]
]
];
}
function wikiplugin_googledoc($data, $params)
{
extract($params, EXTR_SKIP);
if (empty($type)) {
return tra('Required parameter "type" missing');
}
if (empty($key)) {
return tra('Required parameter "key" missing');
}
if ($type == "spreadsheet") {
$srcUrl = "\"https://docs.google.com/spreadsheets/d/$key\"";
$editSrcUrl = "\"https://docs.google.com/spreadsheets/d/$key/edit#gid=0\"";
$editHtml = " <p><a href=$editSrcUrl target=\"$frameName\">Edit this Google Document</a></p>";
}
if ($type == "document") {
$srcUrl = "\"https://docs.google.com/document/d/$key\"";
$editSrcUrl = "\"https://docs.google.com/document/d/$key/edit\"";
$editHtml = " <p><a href=$editSrcUrl target=\"$frameName\">Edit this Google Document</a></p>";
}
if ($type == "slides") {
$srcUrl = "\"https://docs.google.com/presentation/d/$key\"";
$editSrcUrl = "\"https://docs.google.presentation/d/$key/edit\"";
$editHtml = " <p><a href=$editSrcUrl target=\"$frameName\">Edit this Google Document</a></p>";
}
if ($type == "forms") {
$srcUrl = "\"https://docs.google.com/forms/d/$key\"";
$editSrcUrl = "\"https://docs.google.com/forms/d/$key/edit\"";
$editHtml = " <p><a href=$editSrcUrl target=\"$frameName\">Edit this Google Document</a></p>";
}
if ($type == "drive") {
if(!isset($url)){
return tra('Required parameter "url" is missing');
}
$srcUrl = "https://drive.google.com/file/d/";
$checkUrl=stristr($url,$srcUrl);
if (strlen($checkUrl) < 1) {
return tra('You should provide a Google Drive link');
}
$cleanUrl = explode($srcUrl,$url)[1];
$fileId = explode("/",$cleanUrl)[0];
$srcUrl = $srcUrl.$fileId."/preview";
}
$ret = "";
if (isset($name)) {
$frameName = $name;
} else {
$frameName = "Frame" . $key;
}
if ($editLink == 'both' or $editLink == 'top') {
$ret .= $editHtml;
}
$ret .= '<iframe ';
$ret .= " name=\"$frameName\"";
if ($size == 'small') {
$width = 410;
$height = 342;
}
if ($size == 'medium') {
$width = 555;
$height = 451;
}
if ($size == 'large') {
$width = 700;
$height = 559;
}
if (isset($width)) {
$ret .= " width=\"$width\"";
} else {
$ret .= " width=\"800\"";
}
if (isset($height)) {
$ret .= " height=\"$height\"";
} else {
$ret .= " height=\"400\"";
}
if (isset($align)) {
$ret .= " align=\"$align\"";
}
if (isset($frameborder)) {
$ret .= " frameborder=\"$frameborder\"";
} else {
$ret .= " frameborder=0";
}
if (isset($marginheight)) {
$ret .= " marginheight=\"$marginheight\"";
}
if (isset($marginwidth)) {
$ret .= " marginwidth=\"$marginwidth\"";
}
if (isset($scrolling)) {
$ret .= " scrolling=\"$scrolling\"";
}
if (isset($key)) {
$ret .= " src=$srcUrl></iframe>";
}
if ($editLink == 'both' or $editLink == 'bottom') {
$ret .= $editHtml;
}
$ret .= "";
return $ret;
}