/lib/wiki-plugins/wikiplugin_attach.php
PHP | 360 lines | 314 code | 37 blank | 9 comment | 60 complexity | 37c805f59487f1a25ae116e8349a235c MD5 | raw file
- <?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_attach_info()
- {
- return [
- 'name' => tra('Attachment'),
- 'documentation' => 'PluginAttach',
- 'description' => tra('Display an attachment or a list of them'),
- 'prefs' => [ 'feature_wiki_attachments', 'wikiplugin_attach' ],
- 'body' => tra("Comment"),
- 'iconname' => 'attach',
- 'introduced' => 1,
- 'params' => [
- 'name' => [
- 'required' => false,
- 'name' => tra('Name'),
- 'description' => tra('File name of the attached file to link to. Either name, file, id or num can be
- used to identify a single attachment'),
- 'since' => '1',
- 'filter' => 'text',
- 'default' => '',
- ],
- 'file' => [
- 'required' => false,
- 'name' => tra('File'),
- 'description' => tra('Same as name'),
- 'since' => '1',
- 'filter' => 'text',
- 'default' => '',
- ],
- 'page' => [
- 'required' => false,
- 'name' => tra('Page'),
- 'description' => tra('Name of the wiki page the file is attached to. If left empty when the plugin is
- used on a wiki page, this defaults to that wiki page.'),
- 'since' => '1',
- 'filter' => 'pagename',
- 'default' => '',
- 'profile_reference' => 'wiki_page',
- ],
- 'showdesc' => [
- 'required' => false,
- 'name' => tra('Show Description'),
- 'description' => tra('Shows the description as the link text instead of the file name (not used by default)'),
- 'since' => '1',
- 'filter' => 'digits',
- 'default' => 0,
- 'options' => [
- ['text' => '', 'value' => ''],
- ['text' => tra('Yes'), 'value' => 1],
- ['text' => tra('No'), 'value' => 0],
- ],
- ],
- 'bullets' => [
- 'required' => false,
- 'name' => tra('Bullets'),
- 'description' => tra('Makes the list of attachments a bulleted list (not set by default)'),
- 'since' => '1',
- 'filter' => 'digits',
- 'default' => 0,
- 'options' => [
- ['text' => '', 'value' => ''],
- ['text' => tra('Yes'), 'value' => 1],
- ['text' => tra('No'), 'value' => 0],
- ],
- ],
- 'image' => [
- 'required' => false,
- 'name' => tra('Image'),
- 'description' => tr('Indicates that this file is an image, and should be displayed inline using the
- %0 tag (not set by default)', '<code>img</code>'),
- 'since' => '1',
- 'filter' => 'digits',
- 'default' => 0,
- 'options' => [
- ['text' => '', 'value' => ''],
- ['text' => tra('Yes'), 'value' => 1],
- ['text' => tra('No'), 'value' => 0],
- ],
- ],
- 'inline' => [
- 'required' => false,
- 'name' => tra('Custom Label'),
- 'description' => tr('Makes the text between the %0 tags the link text instead of the file name
- or description. Only the first attachment will be listed.', '<code>{ATTACH}</code>'),
- 'since' => '1',
- 'filter' => 'digits',
- 'default' => 0,
- 'options' => [
- ['text' => '', 'value' => ''],
- ['text' => tra('Yes'), 'value' => 1],
- ['text' => tra('No'), 'value' => 0],
- ],
- ],
- 'all' => [
- 'required' => false,
- 'name' => tra('All'),
- 'description' => tr('Lists links to all attachments for the entire tiki site together with pages they
- are attached to when set to %0 (Yes)', '<code>1</code>'),
- 'since' => '1',
- 'filter' => 'digits',
- 'default' => 0,
- 'options' => [
- ['text' => '', 'value' => ''],
- ['text' => tra('Yes'), 'value' => 1],
- ['text' => tra('No'), 'value' => 0],
- ],
- ],
- 'num' => [
- 'required' => false,
- 'name' => tra('Order Number'),
- 'description' => tra('Identifies the attachment to link to by the order of the attachment in the list
- of attachments to a page instead of by file name or ID. Either name, file, id or num can be used to
- identify a single attachment.'),
- 'since' => '1',
- 'default' => '',
- ],
- 'id' => [
- 'required' => false,
- 'name' => tra('ID'),
- 'description' => tra('Identifies the attachment to link to by id number instead of by file name or order
- number. Either name, file, id or num can be used to identify a single attachment.'),
- 'since' => '1',
- 'accepted' => tra('Attachment name, file, id or num'),
- 'filter' => 'text',
- ],
- 'dls' => [
- 'required' => false,
- 'name' => tra('Downloads'),
- 'description' => tr('The alt text that pops up on mouseover will include the number of downloads of the
- attachment at the end when set to %0 (Yes)', '<code>1</code>'),
- 'since' => '1',
- 'filter' => 'digits',
- 'default' => 0,
- 'options' => [
- ['text' => '', 'value' => ''],
- ['text' => tra('Yes'), 'value' => 1],
- ['text' => tra('No'), 'value' => 0],
- ],
- ],
- 'icon' => [
- 'required' => false,
- 'name' => tra('File Type Icon'),
- 'description' => tr('A file type icon is displayed in front of the attachment link when this is set to
- %0 (Yes)', '<code>1</code>'),
- 'since' => '1',
- 'filter' => 'digits',
- 'default' => 0,
- 'options' => [
- ['text' => '', 'value' => ''],
- ['text' => tra('Yes'), 'value' => 1],
- ['text' => tra('No'), 'value' => 0],
- ],
- ],
- ],
- ];
- }
- function wikiplugin_attach($data, $params)
- {
- global $atts;
- global $mimeextensions;
- global $user, $section, $section_class;
- $wikilib = TikiLib::lib('wiki');
- $tikilib = TikiLib::lib('tiki');
- extract($params, EXTR_SKIP);
- $loop = [];
- if (! isset($atts)) {
- $atts = [];
- }
- if (! is_array($atts) || ! array_key_exists("data", $atts) || count($atts["data"]) < 1) {
- // We're being called from a preview or something; try to build the atts ourselves.
- // See if we're being called from a tracker page.
- if ($section == 'trackers') {
- $trklib = TikiLib::lib('trk');
- $atts_item_name = $_REQUEST["itemId"];
- $tracker_info = $trklib->get_tracker($atts_item_name);
- $tracker_info = array_merge($tracker_info, $trklib->get_tracker_options($atts_item_name));
- $attextra = 'n';
- if (strstr($tracker_info["orderAttachments"], '|')) {
- $attextra = 'y';
- }
- $attfields = explode(',', strtok($tracker_info["orderAttachments"], '|'));
- $atts = $trklib->list_item_attachments($atts_item_name, 0, -1, 'comment_asc', '');
- }
- // See if we're being called from a wiki page.
- if (strstr($section_class, 'wiki_page')) {
- $atts_item_name = $_REQUEST["page"];
- $atts = $wikilib->list_wiki_attachments($atts_item_name, 0, -1, 'created_desc', '');
- }
- }
- // Save for restoration before this script ends
- $old_atts = $atts;
- $url = '';
- if (isset($all) && (int)$all > 0) {
- $atts = $wikilib->list_all_attachments(0, -1, 'page_asc', '');
- } elseif (! empty($page)) {
- if (! $tikilib->page_exists($page)) {
- return "''" . tr('Page "%0" does not exist', $page) . "''";
- }
- if ($tikilib->user_has_perm_on_object($user, $page, 'wiki page', 'tiki_p_wiki_view_attachments') || $tikilib->user_has_perm_on_object($user, $_REQUEST['page'], 'wiki page', 'tiki_p_wiki_admin_attachments')) {
- $atts = $wikilib->list_wiki_attachments($page, 0, -1, 'created_desc', '');
- $url = "&page=$page";
- }
- }
- if (! array_key_exists("cant", $atts)) {
- if (array_key_exists("data", $atts)) {
- $atts['cant'] = count($atts["data"]);
- } else {
- $atts['cant'] = 0;
- $atts["data"] = "";
- }
- }
- if (! isset($num)) {
- $num = 0;
- }
- if (! isset($id)) {
- $id = 0;
- } else {
- $num = 0;
- }
- if (isset($file)) {
- $name = $file;
- }
- if (isset($name)) {
- $id = 0;
- $num = 0;
- } else {
- $name = '';
- }
- if (! $atts['cant']) {
- return "''" . tra('No such attachment on this page') . "''";
- } elseif ($num > 0 and $num < ($atts['cant'] + 1)) {
- $loop[] = $num;
- } else {
- $loop = range(1, $atts['cant']);
- }
- $out = [];
- if ($data) {
- $out[] = $data;
- }
- foreach ($loop as $n) {
- $n--;
- if ((! $name and ! $id) or $id == $atts['data'][$n]['attId'] or $name == $atts['data'][$n]['filename']) {
- $link = "";
- if (isset($bullets) && $bullets) {
- $link .= "<li>";
- }
- if (isset($image) and $image) {
- $link .= '<img src="tiki-download_wiki_attachment.php?attId=' . $atts['data'][$n]['attId'] . $url . '" class="wiki"';
- $link .= ' alt="';
- if (empty($showdesc) || empty($atts['data'][$n]['comment'])) {
- $link .= $atts['data'][$n]['filename'];
- } else {
- $link .= $atts['data'][$n]['comment'];
- }
- if (isset($dls)) {
- $link .= " " . $atts['data'][$n]['hits'];
- }
- $link .= '"/>';
- } else {
- $link .= '<a href="tiki-download_wiki_attachment.php?attId=' . $atts['data'][$n]['attId'] . $url . '&download=y" class="wiki"';
- $link .= ' title="';
- if (empty($showdesc) || empty($atts['data'][$n]['comment'])) {
- $link .= $atts['data'][$n]['filename'];
- } else {
- $link .= $atts['data'][$n]['comment'];
- }
- if (isset($dls)) {
- $link .= " " . $atts['data'][$n]['hits'];
- }
- $link .= '">';
- if (isset($icon)) {
- $smarty = TikiLib::lib('smarty');
- $smarty->loadPlugin('smarty_modifier_iconify');
- $iconhtml = smarty_modifier_iconify($atts['data'][$n]['filename']);
- $link .= $iconhtml . ' ';
- }
- if (! empty($showdesc) && ! empty($atts['data'][$n]['comment'])) {
- $link .= strip_tags($atts['data'][$n]['comment']);
- } elseif (! empty($inline) && ! empty($data)) {
- $link .= $data;
- } else {
- $link .= strip_tags($atts['data'][$n]['filename']);
- }
- $link .= '</a>';
- $pageall = strip_tags($atts['data'][$n]['page']);
- if (isset($all)) {
- $link .= " attached to " . '<a title="' . $pageall . '" href="' . $pageall . '" class="wiki">' . $pageall . '</a>';
- }
- }
- if (isset($bullets) && $bullets) {
- $link .= "</li>";
- }
- $out[] = $link;
- }
- }
- if (isset($bullets) && $bullets) {
- $separator = "\n";
- } else {
- $separator = "<br />\n";
- }
- if (! empty($inline) && ! empty($data)) {
- if (array_key_exists(1, $out)) {
- $data = $out[1];
- } else {
- $data = "";
- }
- } else {
- $data = implode($separator, $out);
- }
- if (isset($bullets) && $bullets) {
- $data = "<ul>" . $data . "</ul>";
- }
- if (strlen($data) == 0) {
- $data = "<strong>" . tra('No such attachment on this page') . "</strong>";
- }
- $atts = $old_atts;
- return '~np~' . $data . '~/np~';
- }