497 lines
24 KiB
PHP
497 lines
24 KiB
PHP
<?php
|
|
include "../include/boot.php";
|
|
include "../include/authenticate.php";
|
|
|
|
$ref = getval('ref', '', true);
|
|
$user_group = getval('usergroup', '', true);
|
|
|
|
# fetch the current search (for finding simlar matches)
|
|
$search = getval("search", "");
|
|
$order_by = getval("order_by", "relevance");
|
|
$offset = getval("offset", 0, true);
|
|
$restypes = getval("restypes", "");
|
|
|
|
if (strpos($search, "!") !== false) {
|
|
$restypes = "";
|
|
}
|
|
|
|
$archive = getval("archive", 0, true);
|
|
$default_sort_direction = (substr($order_by, 0, 5) == "field") ? "ASC" : "DESC";
|
|
$sort = getval("sort", $default_sort_direction);
|
|
$ajax = filter_var(getval("ajax", false), FILTER_VALIDATE_BOOLEAN);
|
|
$modal = (getval("modal", "") == "true");
|
|
$backurl = getval('backurl', '');
|
|
|
|
# Check if editing existing external share
|
|
$editaccess = getval("editaccess", "");
|
|
$deleteaccess = getval('deleteaccess', '');
|
|
$editing = ($editaccess != "" && $deleteaccess == "") ? true : false;
|
|
|
|
$editexternalurl = (getval("editexternalurl", "") != "");
|
|
$generateurl = getval("generateurl", "") != "";
|
|
$share_user = getval("share_user", 0);
|
|
|
|
// Share options
|
|
if ($editing) {
|
|
$shareinfo = get_external_shares(array("share_resource" => $ref, "access_key" => $editaccess, "share_user" => (int)$share_user));
|
|
if (isset($shareinfo[0])) {
|
|
$shareinfo = $shareinfo[0];
|
|
} else {
|
|
error_alert($lang["error_invalid_key"], true);
|
|
exit();
|
|
}
|
|
$expires = getval("expires", $shareinfo["expires"]);
|
|
$access = getval("access", $shareinfo["access"], true);
|
|
$group = getval("usergroup", $shareinfo["usergroup"], true);
|
|
$sharepwd = getval('sharepassword', ($shareinfo["password_hash"] != "" ? "true" : ""));
|
|
} else {
|
|
$expires = getval("expires", "");
|
|
$access = getval("access", -1, true);
|
|
$group = getval("usergroup", 0, true);
|
|
$sharepwd = getval('sharepassword', '');
|
|
}
|
|
|
|
$minaccess = get_resource_access($ref);
|
|
|
|
# Check if sharing permitted
|
|
if (!can_share_resource($ref, $minaccess)) {
|
|
$show_error = true;
|
|
$error = $lang["error-permissiondenied"];
|
|
}
|
|
|
|
$internal_share_only = checkperm("noex") || (isset($user_dl_limit) && intval($user_dl_limit) > 0);
|
|
|
|
# Process deletion of access keys
|
|
if ('' != $deleteaccess && enforcePostRequest($ajax)) {
|
|
delete_resource_access_key($ref, $deleteaccess);
|
|
}
|
|
|
|
# Process deletion of custom user access
|
|
$deleteusercustomaccess = getval('deleteusercustomaccess', '');
|
|
$user = getval('user', '');
|
|
|
|
if ($deleteusercustomaccess == 'yes' && checkperm('v') && enforcePostRequest($ajax)) {
|
|
delete_resource_custom_user_access($ref, $user);
|
|
resource_log($ref, 'a', '', $lang['log-removedcustomuseraccess'] . $user);
|
|
}
|
|
|
|
include "../include/header.php";
|
|
|
|
if (isset($show_error)) { ?>
|
|
<script type="text/javascript">
|
|
alert('<?php echo $error;?>');
|
|
history.go(-1);
|
|
</script>
|
|
<?php
|
|
exit();
|
|
}
|
|
|
|
$query_string = 'ref=' . urlencode($ref) . '&search=' . urlencode($search) . '&offset=' . urlencode($offset) . '&order_by=' . urlencode($order_by) . '&sort=' . urlencode($sort) . '&archive=' . urlencode($archive) . '&modal=' . $modal;
|
|
$urlparams = array(
|
|
'ref' => $ref,
|
|
'search' => $search,
|
|
'offset' => $offset,
|
|
'order_by' => $order_by,
|
|
'sort' => $sort,
|
|
'archive' => $archive
|
|
);
|
|
|
|
$page_header = $lang["share-resource"];
|
|
|
|
if ($editing && !$editexternalurl) {
|
|
$page_header .= " - {$lang["editingexternalshare"]} $editaccess";
|
|
}
|
|
?>
|
|
|
|
<div class="BasicsBox">
|
|
<div class="RecordHeader">
|
|
<div class="BackToResultsContainer">
|
|
<div class="backtoresults">
|
|
<?php if ($modal) { ?>
|
|
<a href="#" class="closeLink fa fa-times" onclick="ModalClose();" title="<?php echo escape($lang["close"]); ?>"></a>
|
|
<?php } ?>
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
if (strpos($backurl, "/pages/team/team_external_shares.php") !== false) {
|
|
$links_trail = array(
|
|
array(
|
|
'title' => $lang["teamcentre"],
|
|
'href' => $baseurl_short . "pages/team/team_home.php",
|
|
'menu' => true
|
|
),
|
|
array(
|
|
'title' => $lang["manage_external_shares"],
|
|
'href' => $baseurl . $backurl
|
|
),
|
|
array(
|
|
'title' => $page_header,
|
|
'help' => "user/resource-sharing"
|
|
)
|
|
);
|
|
|
|
renderBreadcrumbs($links_trail);
|
|
} else {
|
|
if (getval("context", false) == 'Modal') {
|
|
$previous_page_modal = true;
|
|
} else {
|
|
$previous_page_modal = false;
|
|
}
|
|
?>
|
|
|
|
<h1>
|
|
<?php
|
|
echo escape($page_header);
|
|
render_help_link("user/resource-sharing");
|
|
?>
|
|
</h1>
|
|
|
|
<p>
|
|
<?php if ($previous_page_modal) { ?>
|
|
<a href="<?php echo generateURL($baseurl_short . 'pages/view.php', $urlparams); ?>" onclick="return ModalLoad(this,true);">
|
|
<?php } else { ?>
|
|
<a href="<?php echo generateURL($baseurl_short . 'pages/view.php', $urlparams); ?>" onclick="return CentralSpaceLoad(this,true);">
|
|
<?php }
|
|
|
|
echo LINK_CARET_BACK . escape($lang["backtoresourceview"]);
|
|
?>
|
|
</a>
|
|
</p>
|
|
<?php
|
|
}
|
|
?>
|
|
</div>
|
|
|
|
<form method="post" id="resourceshareform" action="<?php echo $baseurl_short?>pages/resource_share.php?ref=<?php echo urlencode($ref)?>">
|
|
<input type="hidden" name="deleteaccess" id="deleteaccess" value="">
|
|
<input type="hidden" name="generateurl" id="generateurl" value="">
|
|
<input type="hidden" name="editaccess" id="editaccess" value="<?php echo escape($editaccess)?>">
|
|
<input type="hidden" name="editexpiration" id="editexpiration" value="">
|
|
<input type="hidden" name="editgroup" id="editgroup" value="">
|
|
<input type="hidden" name="editaccesslevel" id="editaccesslevel" value="">
|
|
<input type="hidden" name="editexternalurl" id="editexternalurl" value="">
|
|
<input type="hidden" name="user" id="user" value="">
|
|
<input type="hidden" name="deleteusercustomaccess" id="deleteusercustomaccess" value="">
|
|
|
|
<?php
|
|
if ($modal) {
|
|
?>
|
|
<input type="hidden" name="modal" value="true">
|
|
<?php
|
|
}
|
|
generateFormToken("resourceshareform");
|
|
?>
|
|
|
|
<div class="VerticalNav">
|
|
<ul>
|
|
<?php if ((!$editing || $editexternalurl) && $email_sharing) { ?>
|
|
<li>
|
|
<i aria-hidden="true" class="fa fa-fw fa-envelope"></i>
|
|
<a href="<?php echo $baseurl_short . 'pages/resource_email.php?' . $query_string ?>" onclick="return <?php echo $modal ? 'ModalLoad' : 'CentralSpaceLoad';?>(this, true);">
|
|
<?php echo escape($lang["emailresourcetitle"]); ?>
|
|
</a>
|
|
</li>
|
|
<?php
|
|
}
|
|
|
|
if (!$editing) { ?>
|
|
<p><?php echo escape($lang["generateurlinternal"]);?></p>
|
|
<p><input class="URLDisplay" type="text" value="<?php echo $baseurl?>/?r=<?php echo $ref?>"></p>
|
|
<?php
|
|
}
|
|
|
|
if ($deleteaccess == "" && !$internal_share_only) {
|
|
if (!($editexternalurl || $generateurl)) {
|
|
?>
|
|
<p>
|
|
<?php
|
|
if (!$editing || $editexternalurl) {
|
|
echo strip_tags_and_attributes($lang["selectgenerateurlexternal"]);
|
|
}
|
|
?>
|
|
</p>
|
|
|
|
<?php
|
|
$shareoptions = array(
|
|
"password" => ($sharepwd != "" ? true : false),
|
|
"editaccesslevel" => $access,
|
|
"editexpiration" => $expires,
|
|
"editgroup" => $group,
|
|
);
|
|
|
|
render_share_options($shareoptions);
|
|
?>
|
|
|
|
<div class="QuestionSubmit">
|
|
<label> </label>
|
|
<?php if ($editing && !$editexternalurl) { ?>
|
|
<input
|
|
name="editexternalurl"
|
|
type="button"
|
|
value="<?php echo escape($lang["save"]); ?>"
|
|
onclick="<?php
|
|
if ($share_password_required) {
|
|
echo 'if (!enforceSharePassword(\'' . escape($lang['share-password-not-set']) . '\')) { return false; }; ';
|
|
} ?>
|
|
document.getElementById('editexternalurl').value = '<?php echo escape($lang["save"]); ?>';
|
|
return <?php echo $modal ? "Modal" : "CentralSpace"; ?>Post(document.getElementById('resourceshareform'), true);"
|
|
>
|
|
<?php } else { ?>
|
|
<input
|
|
name="generateurl"
|
|
type="button"
|
|
value="<?php echo escape($lang["generateexternalurl"]); ?>"
|
|
onclick="<?php
|
|
if ($share_password_required) {
|
|
echo 'if (!enforceSharePassword(\'' . escape($lang['share-password-not-set']) . '\')) { return false; }; ';
|
|
} ?>
|
|
document.getElementById('generateurl').value = '<?php echo escape($lang["save"]); ?>';
|
|
return <?php echo $modal ? "Modal" : "CentralSpace"; ?>Post(document.getElementById('resourceshareform'), true);"
|
|
>
|
|
<?php } ?>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
if ($generateurl && $access > -1 && !$internal_share_only && enforcePostRequest(false)) {
|
|
// Access has been selected. Generate a new URL.
|
|
$generated_access_key = '';
|
|
enforceSharePassword($sharepwd);
|
|
|
|
if (empty($allowed_external_share_groups) || (!empty($allowed_external_share_groups) && in_array($user_group, $allowed_external_share_groups))) {
|
|
$generated_access_key = generate_resource_access_key($ref, $userref, $access, $expires, 'URL', $user_group, $sharepwd);
|
|
} elseif (!empty($allowed_external_share_groups) && !in_array($usergroup, $allowed_external_share_groups)) {
|
|
// Not allowed to select usergroup but this usergroup can not be used, default to the first entry in allowed_external_share_groups
|
|
$generated_access_key = generate_resource_access_key($ref, $userref, $access, $expires, 'URL', $allowed_external_share_groups[0], $sharepwd);
|
|
}
|
|
|
|
if ('' != $generated_access_key) {
|
|
?>
|
|
<p><?php echo escape($lang['generateurlexternal']); ?></p>
|
|
<p>
|
|
<input class="URLDisplay" type="text" value="<?php echo $baseurl?>/?r=<?php echo urlencode($ref) ?>&k=<?php echo $generated_access_key; ?>">
|
|
</p>
|
|
<?php
|
|
} else {
|
|
?>
|
|
<div class="PageInformal"><?php echo escape($lang['error_generating_access_key']); ?></div>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
# Process editing of external share
|
|
if ($editexternalurl && $access > -1 && enforcePostRequest(false)) {
|
|
enforceSharePassword($sharepwd);
|
|
edit_resource_external_access($editaccess, $access, $expires, $user_group, $sharepwd);
|
|
}
|
|
}
|
|
?>
|
|
</ul>
|
|
|
|
<?php
|
|
# Do not allow access to the existing shares if the user has restricted access to this resource.
|
|
if (!$internal_share_only && $minaccess == 0) {
|
|
?>
|
|
<h2><?php echo escape($lang["externalusersharing"]); ?></h2>
|
|
<?php
|
|
$keys = get_resource_external_access($ref);
|
|
if (count($keys) == 0) {
|
|
?>
|
|
<p><?php echo escape($lang["noexternalsharing"]); ?></p>
|
|
<?php
|
|
} else {
|
|
?>
|
|
<div class="Listview">
|
|
<table class="ListviewStyle">
|
|
<tr class="ListviewTitleStyle">
|
|
<th><?php echo escape($lang["accesskey"]); ?></th>
|
|
<th><?php echo escape($lang["type"]); ?></th>
|
|
<th><?php echo escape($lang["sharedby"]); ?></th>
|
|
<th><?php echo escape($lang["sharedwith"]); ?></th>
|
|
<th><?php echo escape($lang["lastupdated"]); ?></th>
|
|
<th><?php echo escape($lang["lastused"]); ?></th>
|
|
<th><?php echo escape($lang["expires"]); ?></th>
|
|
<th><?php echo escape($lang["access"]); ?></th>
|
|
<?php
|
|
global $social_media_links;
|
|
if (!empty($social_media_links)) {
|
|
?>
|
|
<th><?php echo escape($lang['social_media']); ?></th>
|
|
<?php
|
|
}
|
|
?>
|
|
<th>
|
|
<div class="ListTools"><?php echo escape($lang["tools"]); ?></div>
|
|
</th>
|
|
</tr>
|
|
|
|
<?php
|
|
foreach ($keys as $key) {
|
|
if (!$resource_share_filter_collections || in_array($userref, explode(",", $key["users"]))) {
|
|
$collection_share = is_numeric($key["collection"]);
|
|
|
|
if ($collection_share) {
|
|
$url = $baseurl . "?c=" . urlencode($key["collection"]);
|
|
} else {
|
|
$url = $baseurl . "?r=" . urlencode($ref);
|
|
}
|
|
|
|
$url .= "&k=" . urlencode($key["access_key"]);
|
|
$type = ($collection_share) ? $lang["sharecollection"] : $lang["share-resource"];
|
|
$keyexpires = ($key["expires"] == "") ? $lang["never"] : nicedate($key["expires"], false);
|
|
$keyaccess = ($key["access"] == -1) ? "" : $lang["access" . $key["access"]];
|
|
?>
|
|
<tr>
|
|
<td>
|
|
<div class="ListTitle">
|
|
<a target="_blank" href="<?php echo $url ?>">
|
|
<?php echo escape($key["access_key"]); ?>
|
|
</a>
|
|
</div>
|
|
</td>
|
|
<td><?php echo $type; ?></td>
|
|
<td><?php echo escape(resolve_users($key["users"])); ?></td>
|
|
<td><?php echo escape($key["emails"] ?? ""); ?></td>
|
|
<td><?php echo escape(nicedate($key["maxdate"], true)); ?></td>
|
|
<td><?php echo escape(nicedate($key["lastused"], true)); ?></td>
|
|
<td><?php echo escape($keyexpires); ?></td>
|
|
<td><?php echo escape($keyaccess); ?></td>
|
|
<?php if (!empty($social_media_links)) { ?>
|
|
<td><?php renderSocialMediaShareLinksForUrl($url); ?></td>
|
|
<?php } ?>
|
|
<td>
|
|
<div class="ListTools">
|
|
<?php
|
|
if ($collection_share) {
|
|
$editlink = generateURL(
|
|
$baseurl . "/pages/collection_share.php",
|
|
array(
|
|
"ref" => $key["collection"],
|
|
"editaccess" => $key["access_key"],
|
|
"share_user" => $key["users"]
|
|
)
|
|
);
|
|
|
|
$viewlink = generateURL($baseurl . "/", array("c" => $key["collection"]));
|
|
?>
|
|
<a onclick="return CentralSpaceLoad(this,true);" href="<?php echo $editlink; ?>">
|
|
<?php echo LINK_CARET . escape($lang["action-edit"]); ?>
|
|
</a>
|
|
<a onclick="return CentralSpaceLoad(this,true);" href="<?php echo $viewlink; ?>">
|
|
<?php echo LINK_CARET . escape($lang["view"]); ?>
|
|
</a>
|
|
<?php
|
|
} else {
|
|
$editlink = generateURL(
|
|
$baseurl . "/pages/resource_share.php",
|
|
array(
|
|
"ref" => $ref,
|
|
"editaccess" => $key["access_key"],
|
|
"share_user" => $key["users"]
|
|
)
|
|
);
|
|
?>
|
|
<a href="#" onclick="return resourceShareDeleteShare('<?php echo $key["access_key"]; ?>');">
|
|
<?php echo LINK_CARET . escape($lang["action-delete"]); ?>
|
|
</a>
|
|
<a onclick="return CentralSpaceLoad(this,true);" href="<?php echo $editlink; ?>">
|
|
<?php echo LINK_CARET . escape($lang["action-edit"]); ?>
|
|
</a>
|
|
<?php
|
|
}
|
|
?>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
</table>
|
|
</div>
|
|
<?php
|
|
}
|
|
?>
|
|
|
|
<script type="text/javascript">
|
|
function resourceShareDeleteShare(access_key) {
|
|
if (confirm('<?php echo escape($lang["confirmdeleteaccessresource"]) ?>')) {
|
|
document.getElementById('deleteaccess').value = access_key;
|
|
<?php echo $modal ? "Modal" : "CentralSpace"; ?>Post(document.getElementById('resourceshareform'),true);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function resourceShareDeleteUserCustomAccess(event, user) {
|
|
if (confirm('<?php echo escape($lang["confirmdeleteusercustomaccessresource"]) ?>')) {
|
|
|
|
// Detect closest parent form
|
|
const link = event.target;
|
|
const form = link.closest('form');
|
|
|
|
form.querySelector('#deleteusercustomaccess').value = 'yes';
|
|
form.querySelector('#user').value = user;
|
|
form.submit();
|
|
}
|
|
return false;
|
|
}
|
|
</script>
|
|
|
|
<?php
|
|
}
|
|
?>
|
|
|
|
<h2><?php echo escape($lang["custompermissions"]); ?></h2>
|
|
<?php
|
|
$custom_access_rows = get_resource_custom_access_users_usergroups($ref);
|
|
if (count($custom_access_rows) == 0) {
|
|
?>
|
|
<p><?php echo escape($lang["remove_custom_access_no_users_found"]); ?></p>
|
|
<?php
|
|
} elseif ((count($custom_access_rows) > 0) && checkperm('v')) {
|
|
?>
|
|
<div class="Listview">
|
|
<table class="ListviewStyle">
|
|
<tr class="ListviewTitleStyle">
|
|
<th><?php echo escape($lang["user"]); ?></th>
|
|
<th><?php echo escape($lang["property-user_group"]); ?></th>
|
|
<th><?php echo escape($lang["expires"]); ?></th>
|
|
<th><?php echo escape($lang["access"]); ?></th>
|
|
<th>
|
|
<div class="ListTools"><?php echo escape($lang["tools"]); ?></div>
|
|
</th>
|
|
</tr>
|
|
|
|
<?php
|
|
foreach ($custom_access_rows as $ca) {
|
|
$custexpires = ($ca["expires"] == "") ? $lang["never"] : nicedate($ca["expires"], false);
|
|
$custaccess = ($ca["access"] == -1) ? "" : $lang["access" . $ca["access"]];
|
|
?>
|
|
<tr>
|
|
<td><?php echo escape($ca["user"] ?? ""); ?></td>
|
|
<td><?php echo escape($ca["usergroup"] ?? ""); ?></td>
|
|
<td><?php echo escape($custexpires); ?></td>
|
|
<td><?php echo escape($custaccess); ?></td>
|
|
<td>
|
|
<div class="ListTools">
|
|
<a href="#" onclick="return resourceShareDeleteUserCustomAccess(event, <?php echo get_user_by_username($ca["user"]) ?>);">
|
|
<?php echo LINK_CARET . escape($lang["action-delete"]); ?>
|
|
</a>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
?>
|
|
</table>
|
|
</div>
|
|
<?php
|
|
}
|
|
?>
|
|
</div>
|
|
</form>
|
|
</div><!-- BasicsBox -->
|
|
|
|
<?php
|
|
include "../include/footer.php";
|