aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Zotlabs/Module/Lockview.php60
-rw-r--r--include/attach.php35
-rw-r--r--view/js/mod_cloud.js11
-rw-r--r--view/tpl/cloud_actionspanel.tpl2
-rw-r--r--view/tpl/cloud_directory.tpl41
5 files changed, 92 insertions, 57 deletions
diff --git a/Zotlabs/Module/Lockview.php b/Zotlabs/Module/Lockview.php
index 8c8519c57..11c781df0 100644
--- a/Zotlabs/Module/Lockview.php
+++ b/Zotlabs/Module/Lockview.php
@@ -19,22 +19,22 @@ class Lockview extends \Zotlabs\Web\Controller {
}
}
}
-
+
$type = ((argc() > 1) ? argv(1) : 0);
if (is_numeric($type)) {
$item_id = intval($type);
$type='item';
- }
+ }
else {
$item_id = ((argc() > 2) ? intval(argv(2)) : 0);
}
-
+
if(! $item_id)
killme();
-
+
if (! in_array($type, array('item', 'photo', 'attach', 'event', 'menu_item', 'chatroom')))
killme();
-
+
// we have different naming in in menu_item table and chatroom table
switch($type) {
case 'menu_item':
@@ -47,17 +47,17 @@ class Lockview extends \Zotlabs\Web\Controller {
$id = 'id';
break;
}
-
+
$r = q("SELECT * FROM %s WHERE $id = %d LIMIT 1",
dbesc($type),
intval($item_id)
);
-
+
if(! $r)
killme();
-
+
$item = $r[0];
-
+
//we have different naming in in menu_item table and chatroom table
switch($type) {
case 'menu_item':
@@ -70,37 +70,37 @@ class Lockview extends \Zotlabs\Web\Controller {
$uid = $item['uid'];
break;
}
-
+
if($uid != local_channel()) {
echo '<div class="dropdown-item">' . t('Remote privacy information not available.') . '</div>';
killme();
}
-
- if(intval($item['item_private']) && (! strlen($item['allow_cid'])) && (! strlen($item['allow_gid']))
+
+ if(intval($item['item_private']) && (! strlen($item['allow_cid'])) && (! strlen($item['allow_gid']))
&& (! strlen($item['deny_cid'])) && (! strlen($item['deny_gid']))) {
-
+
// if the post is private, but public_policy is blank ("visible to the internet"), and there aren't any
// specific recipients, we're the recipient of a post with "bcc" or targeted recipients; so we'll just show it
// as unknown specific recipients. The sender will have the visibility list and will fall through to the
// next section.
-
+
echo '<div class="dropdown-item">' . translate_scope((! $item['public_policy']) ? 'specific' : $item['public_policy']) . '</div>';
killme();
}
-
+
$allowed_users = expand_acl($item['allow_cid']);
$allowed_groups = expand_acl($item['allow_gid']);
$deny_users = expand_acl($item['deny_cid']);
$deny_groups = expand_acl($item['deny_gid']);
-
+
$o = '<div class="dropdown-item">' . t('Visible to:') . '</div>';
$l = array();
-
+
stringify_array_elms($allowed_groups,true);
stringify_array_elms($allowed_users,true);
stringify_array_elms($deny_groups,true);
stringify_array_elms($deny_users,true);
-
+
$profile_groups = [];
if($allowed_groups) {
@@ -113,24 +113,24 @@ class Lockview extends \Zotlabs\Web\Controller {
if(count($profile_groups)) {
$r = q("SELECT profile_name FROM profile WHERE profile_guid IN ( " . implode(', ', $profile_groups) . " )");
if($r)
- foreach($r as $rr)
+ foreach($r as $rr)
$l[] = '<div class="dropdown-item"><b>' . t('Profile','acl') . ' ' . $rr['profile_name'] . '</b></div>';
}
if(count($allowed_groups)) {
$r = q("SELECT gname FROM pgrp WHERE hash IN ( " . implode(', ', $allowed_groups) . " )");
if($r)
- foreach($r as $rr)
+ foreach($r as $rr)
$l[] = '<div class="dropdown-item"><b>' . $rr['gname'] . '</b></div>';
}
if(count($allowed_users)) {
$r = q("SELECT xchan_name FROM xchan WHERE xchan_hash IN ( " . implode(', ',$allowed_users) . " )");
if($r)
- foreach($r as $rr)
+ foreach($r as $rr)
$l[] = '<div class="dropdown-item">' . $rr['xchan_name'] . '</div>';
if($atokens) {
foreach($atokens as $at) {
- if(in_array("'" . $at['xchan_hash'] . "'",$allowed_users)) {
+ if(in_array("'" . $at['xchan_hash'] . "'",$allowed_users)) {
$l[] = '<div class="dropdown-item">' . $at['xchan_name'] . '</div>';
}
}
@@ -149,7 +149,7 @@ class Lockview extends \Zotlabs\Web\Controller {
if(count($profile_groups)) {
$r = q("SELECT profile_name FROM profile WHERE profile_guid IN ( " . implode(', ', $profile_groups) . " )");
if($r)
- foreach($r as $rr)
+ foreach($r as $rr)
$l[] = '<div class="dropdown-item"><b><strike>' . t('Profile','acl') . ' ' . $rr['profile_name'] . '</strike></b></div>';
}
@@ -158,18 +158,18 @@ class Lockview extends \Zotlabs\Web\Controller {
if(count($deny_groups)) {
$r = q("SELECT gname FROM pgrp WHERE hash IN ( " . implode(', ', $deny_groups) . " )");
if($r)
- foreach($r as $rr)
+ foreach($r as $rr)
$l[] = '<div class="dropdown-item"><b><strike>' . $rr['gname'] . '</strike></b></div>';
}
if(count($deny_users)) {
$r = q("SELECT xchan_name FROM xchan WHERE xchan_hash IN ( " . implode(', ', $deny_users) . " )");
if($r)
- foreach($r as $rr)
+ foreach($r as $rr)
$l[] = '<div class="dropdown-item"><strike>' . $rr['xchan_name'] . '</strike></div>';
if($atokens) {
foreach($atokens as $at) {
- if(in_array("'" . $at['xchan_hash'] . "'",$deny_users)) {
+ if(in_array("'" . $at['xchan_hash'] . "'",$deny_users)) {
$l[] = '<div class="dropdown-item"><strike>' . $at['xchan_name'] . '</strike></div>';
}
}
@@ -177,11 +177,11 @@ class Lockview extends \Zotlabs\Web\Controller {
}
-
+
echo $o . implode($l);
killme();
-
-
+
+
}
-
+
}
diff --git a/include/attach.php b/include/attach.php
index 7ef5c4d0e..8ebe2d243 100644
--- a/include/attach.php
+++ b/include/attach.php
@@ -647,17 +647,15 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
$pathname = filepath_macro($newalbum);
}
elseif(array_key_exists('folder',$arr)) {
- $x = q("select display_path from attach where hash = '%s' and uid = %d limit 1",
- dbesc($arr['folder']),
- intval($channel['channel_id'])
- );
- if($x)
- $pathname = $x[0]['display_path'];
+ $pathname = find_path_by_hash($channel['channel_id'], $arr['folder']);
}
else {
$pathname = filepath_macro($album);
}
}
+ elseif(array_key_exists('folder',$arr)) {
+ $pathname = find_path_by_hash($channel['channel_id'], $arr['folder']);
+ }
if(! $pathname) {
$pathname = filepath_macro($upload_path);
}
@@ -807,6 +805,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
$os_relpath = ltrim($os_relpath,'/');
$os_path = $os_relpath;
+
$display_path = ltrim($pathname . '/' . $filename,'/');
if($src) {
@@ -890,7 +889,6 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
);
}
else {
-
$r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, folder, filesize, revision, os_storage, is_photo, content, created, edited, os_path, display_path, allow_cid, allow_gid,deny_cid, deny_gid )
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ",
intval($channel['channel_account_id']),
@@ -1747,6 +1745,29 @@ function find_filename_by_hash($channel_id, $attachHash) {
}
/**
+ * @brief Returns the display_path of an attachment in a given channel.
+ *
+ * @param int $channel_id
+ * The id of the channel
+ * @param string $attachHash
+ * The hash of the attachment
+ * @return string
+ * The filename of the attachment
+ */
+function find_path_by_hash($channel_id, $attachHash) {
+ $r = q("SELECT display_path FROM attach WHERE uid = %d AND hash = '%s' LIMIT 1",
+ intval($channel_id),
+ dbesc($attachHash)
+ );
+ $display_path = '';
+ if ($r) {
+ $display_path = $r[0]['display_path'];
+ }
+
+ return $display_path;
+}
+
+/**
* @brief Pipes $in to $out in 16KB chunks.
*
* @param resource $in File pointer of input
diff --git a/view/js/mod_cloud.js b/view/js/mod_cloud.js
index 7f2bdfab7..cbd9c2a08 100644
--- a/view/js/mod_cloud.js
+++ b/view/js/mod_cloud.js
@@ -14,6 +14,14 @@ $(document).ready(function () {
// Per File Tools
+ $('.cloud-tool-info-btn').on('click', function (e) {
+ e.preventDefault();
+ let id = $(this).data('id');
+ close_and_deactivate_all_panels();
+ $('#cloud-tool-info-' + id).toggle();
+ $('#cloud-index-' + id).addClass('cloud-index-active');
+ });
+
$('.cloud-tool-perms-btn').on('click', function (e) {
e.preventDefault();
let id = $(this).data('id');
@@ -323,7 +331,6 @@ $(document).ready(function () {
$('#cloud-tool-submit-' + id).show();
$('#cloud-index-' + id).addClass('cloud-index-active');
- $('#cloud-tool-submit-' + id).show();
}
});
@@ -406,7 +413,7 @@ function prepareHtml(f) {
$('#cloud-index #new-upload-progress-bar-' + num.toString()).after(
'<tr id="new-upload-' + i + '" class="new-upload">' +
'<td></td>' +
- '<td><i class="fa ' + getIconFromType(f.type) + '" title="' + f.type + '"></i></td>' +
+ '<td><i class="fa fa-fw ' + getIconFromType(f.type) + '" title="' + f.type + '"></i></td>' +
'<td>' + f.name + '</td>' +
'<td id="upload-progress-' + i + '"></td><td></td><td></td>' +
'<td class="d-none d-md-table-cell">' + formatSizeUnits(f.size) + '</td><td class="d-none d-md-table-cell"></td>' +
diff --git a/view/tpl/cloud_actionspanel.tpl b/view/tpl/cloud_actionspanel.tpl
index e9f7bbc38..039d19fac 100644
--- a/view/tpl/cloud_actionspanel.tpl
+++ b/view/tpl/cloud_actionspanel.tpl
@@ -48,7 +48,7 @@
</div>
<hr class="m-0">
</div>
-{{if $breadcrumbs_html}}
+{{if $aclselect}}
{{$aclselect}}
{{/if}}
{{if $breadcrumbs_html}}
diff --git a/view/tpl/cloud_directory.tpl b/view/tpl/cloud_directory.tpl
index 618de418f..8fe31767c 100644
--- a/view/tpl/cloud_directory.tpl
+++ b/view/tpl/cloud_directory.tpl
@@ -152,7 +152,12 @@
<td><i class="fa {{$item.icon_from_type}}" title="{{$item.type}}"></i></td>
<td><a href="{{$item.rel_path}}" class="p-2" draggable="false">{{$item.name}}</a></td>
<td>{{$item.terms}}</td>
- <td class="cloud-index-tool p-2">{{if $item.lockstate == 'lock'}}<i class="fa fa-fw fa-{{$item.lockstate}}"></i>{{/if}}</td>
+ <td class="cloud-index-tool p-2">
+ {{if $item.lockstate == 'lock'}}
+ <i class="fa fa-lock lockview" data-toggle="dropdown" onclick="lockview('attach',{{$item.attach_id}});"></i>
+ <ul id="panel-{{$item.attach_id}}" class="lockview-panel dropdown-menu dropdown-menu-right"></ul>
+ {{/if}}
+ </td>
<td class="cloud-index-tool">
{{if ($item.is_owner || $item.is_creator) && $item.attach_id}}
<div class="dropdown">
@@ -160,6 +165,7 @@
<i class="fa fa-fw fa-ellipsis-v"></i>
</button>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-button-{{$item.attach_id}}">
+ <a id="cloud-tool-info-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-info-btn" href="#" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-info"></i> Info</a>
{{if $item.is_owner}}
<a id="cloud-tool-perms-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-perms-btn" href="#" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-{{$item.lockstate}}"></i> Adjust permissions</a>
{{/if}}
@@ -205,6 +211,23 @@
<div id="cloud-tool-rename-{{$item.attach_id}}" class="cloud-tool">
{{include file="field_input.tpl" field=$item.newfilename}}
</div>
+ <div id="cloud-tool-info-{{$item.attach_id}}" class="cloud-tool">
+ {{if ! $item.collection}}
+ <div class="form-group">
+ <label for="attach-code-input-{{$item.attach_id}}">Attachment code</label>
+ <input type="text" class="form-control" id="attach-code-input-{{$item.attach_id}}" name="attach-code-input-{{$item.attach_id}}" value="[attachment]{{$item.resource}},{{$item.revision}}[/attachment]" onclick="this.select();" />
+ </div>
+ {{/if}}
+ <div class="form-group">
+ <label for="link-code-input-{{$item.attach_id}}">Link code</label>
+ <input type="text" class="form-control" id="link-code-input-{{$item.attach_id}}" name="link-code-input-{{$item.attach_id}}" value="[zrl={{$item.full_path}}]{{$item.full_path}}[/zrl]" onclick="this.select();" />
+ </div>
+ <div class="form-group">
+ <button id="cloud-tool-close-btn-{{$item.attach_id}}" class="btn btn-outline-secondary btn-sm cloud-tool-cancel-btn" type="button" data-id="{{$item.attach_id}}">
+ Close
+ </button>
+ </div>
+ </div>
<div id="cloud-tool-move-{{$item.attach_id}}" class="cloud-tool">
{{include file="field_select.tpl" field=$item.newfolder}}
{{include file="field_checkbox.tpl" field=$item.copy}}
@@ -233,22 +256,6 @@
</div>
</div>
</div>
- <!--div id="cloud-tool-share-{{$item.attach_id}}" class="">
- <div id="attach-edit-tools-share-{{$item.attach_id}}" class="btn-group form-group">
- <button id="link-btn-{{$item.attach_id}}" class="btn btn-outline-secondary btn-sm" type="button" onclick="openClose('link-code-{{$item.attach_id}}');" title="{{$link_btn_title}}">
- <i class="fa fa-link jot-icons"></i>
- </button>
- </div>
- </div>
- {{if !$item.collection}}
- <a href="/rpost?attachment=[attachment]{{$item.resource}},{{$item.revision}}[/attachment]" id="attach-btn" class="btn btn-outline-secondary btn-sm" title="{{$attach_btn_title}}">
- <i class="fa fa-share-square-o jot-icons"></i>
- </a>
- {{/if}}
- <div id="link-code-{{$item.attach_id}}" class="form-group link-code">
- <label for="linkpasteinput-{{$item.attach_id}}">{{$cpldesc}}</label>
- <input type="text" class="form-control" id="linkpasteinput-{{$item.attach_id}}" name="linkpasteinput-{{$item.attach_id}}" value="{{$item.full_path}}" onclick="this.select();"/>
- </div-->
</form>
</td>
</tr>