LostKobrakai Posted October 3, 2015 Share Posted October 3, 2015 The module is working quite nicely, but I cannot click on the file in the backend anymore even though I'm superuser and editor, which I gave download from admin rights. Edit: Would it be possible to look at the ListerPro styling for the field? 1 Link to comment Share on other sites More sharing options...
Wanze Posted October 9, 2015 Author Share Posted October 9, 2015 The module is working quite nicely, but I cannot click on the file in the backend anymore even though I'm superuser and editor, which I gave download from admin rights. I can't reproduce this problem here locally, with the latest dev version. Could you tell me the Pw version and Browser? Thanks! Edit: Would it be possible to look at the ListerPro styling for the field? Of course. I also fixed the bug with the help of your solution on GitHub. I'll add some more options to the module and will push everything on GitHub this evening or tomorrow. Link to comment Share on other sites More sharing options...
LostKobrakai Posted October 9, 2015 Share Posted October 9, 2015 I've gone back to a normal file field by now, as the site needs to work fully on monday, but it was 2.6.17/19 and Chrome. Link to comment Share on other sites More sharing options...
Juergen Posted December 2, 2015 Share Posted December 2, 2015 Another problem: Cannot upload files with the latest version 1.0.1 of secure files. I have detected that upload of files is no longer possible with this field type in my case. I cannot point out the exact time when this problem starts because I havent upload secure files for a longer time. In the meantime I have updated PW more times. The upload has worked in the past but now I get the error message, that the folder doesnt exist or is not writeable. I store all the files in the folders var/securefiles and these folders exist: All folders has the permission 777 for testing purposes My settings of the input field: And this is what I got if I had tried to upload a file: Help would be appreciated Best regards Link to comment Share on other sites More sharing options...
Wanze Posted December 2, 2015 Author Share Posted December 2, 2015 Hi Juergen, v 1.0.1 works fine here on the latest dev. What version of ProcessWire are you using? From your screenshots it looks like the "var" folder is inside the root folder of ProcessWire. You should create your folder "securefiles" inside /var/, which lies on the root of your harddisk, outside of the web-root. Not sure if this is the problem, as you pointed out that everything worked before. But the message you're seeing is an exception of my module, thrown here: https://github.com/wanze/FieldtypeSecureFile/blob/master/FieldtypeSecureFile.module#L69 This indicates that the folder does not exist or is not writable. Cheers Link to comment Share on other sites More sharing options...
Juergen Posted December 3, 2015 Share Posted December 3, 2015 Hello Stefan, I am using the latest dev 2.7.2 and PHP 5+. The var-folder is in the root, but this was not a problem at all. Here are some screenshots of uploaded files in the past, which are still located in the folder: As you can see the files are still there. As I pointed out - the folders have permission 777 (only for testing) so they are writeable in any case and they are still there. Best regards Jürgen Link to comment Share on other sites More sharing options...
LostKobrakai Posted December 3, 2015 Share Posted December 3, 2015 Are you sure that you ftp program does show the full path? What's the output of $config->paths->root? I can hardly imagine a server to have the full filesystem in the webroot. 2 Link to comment Share on other sites More sharing options...
Wanze Posted December 3, 2015 Author Share Posted December 3, 2015 Hi Jürgen, As LostKObrakai says, I guess your FTP programm shows the directory of your web-root as root, so the path you entered in the config is not correct. The purpose of this module is that the files are stored outside of the web root. From your screenshot it looks like your "var" folder is beside ProcessWire's "site" folder, this would still be inside your web-root. 1 Link to comment Share on other sites More sharing options...
Juergen Posted December 3, 2015 Share Posted December 3, 2015 Thanks Wanze and LostKobrakai, I changed the path to /home/.sites/24........ (absolute path) and now it works. It was a path problem. Why it works in the past with the old path - ?? Problem solved! Best regards 1 Link to comment Share on other sites More sharing options...
Ralf Posted March 6, 2016 Share Posted March 6, 2016 Hello together, I´m a bit confused about doing the output of the securefile respectively securefiles... Wanze wrote this code: if ($input->get->download == 1) { $yourSecureFile->download(); } Now I'm a little overstrained and need your help. I build a template at the frontend for secure files and I generate the current output with this code $content = $page->body; $pdffiles = wire("page")->file; foreach ($pdffiles as $pf) { $content .= "<a href='' title='{$pf->name}'>$pf->name</a> ($pf->filesizeStr)<br />"; } but how can I now tell this link which of the secure files the user wants? This is the current output... Thank you for any hint Ralf Link to comment Share on other sites More sharing options...
Wanze Posted March 7, 2016 Author Share Posted March 7, 2016 Hi Ralf, I would do this by passing the internal position of the file in the array, e.g. foreach ($pdffiles as $i => $pf) { $content .= "<a href='{$page->url}?fid={$i}' title='{$pf->name}'>$pf->name</a> ($pf->filesizeStr)<br />"; } Then you can grab the file with this ID: if ($input->get->fid) { $file = $page->file->eq((int) $input->get->fid); if ($file) { $file->download(); } } Cheers 1 Link to comment Share on other sites More sharing options...
LostKobrakai Posted March 7, 2016 Share Posted March 7, 2016 @Ralf That's exactly the key of this module. There is no url associated with each file, hence the secure nature. You can only "request" the file to be sent to the browser by $file->download() in your code. How the user can request the file from the website is up to you, like Wanze showed above. 1 Link to comment Share on other sites More sharing options...
renobird Posted March 16, 2016 Share Posted March 16, 2016 Hey Wanze, Are the files for individual pages stored in a directory named the same as the page ID — like a core files field? #lazyweb Link to comment Share on other sites More sharing options...
LostKobrakai Posted March 16, 2016 Share Posted March 16, 2016 Yep. It's essentially moving the files folder to a non accessable folder. Everything inside the folder does stay the same. 3 Link to comment Share on other sites More sharing options...
Wanze Posted March 16, 2016 Author Share Posted March 16, 2016 @reno Yep, it also respects the $config->pagefileExtendedPaths setting, e.g. it creates a folder for each page ID or a nested folder structure, if the setting is enabled. Cheers 4 Link to comment Share on other sites More sharing options...
renobird Posted March 17, 2016 Share Posted March 17, 2016 Perfect. I have a few different scenarios right now that need secure files. I think this module will handle at least one of them seamlessly. Much appreciated Wanze! 1 Link to comment Share on other sites More sharing options...
Wanze Posted March 17, 2016 Author Share Posted March 17, 2016 I think this module will handle at least one of them seamlessly. You're welcome! Let me know if you need additional features that would fit into this module. 2 Link to comment Share on other sites More sharing options...
bernhard Posted April 30, 2016 Share Posted April 30, 2016 hi wanze, would it be possible to change the markup a little bit? i got a message that my sorting module ( https://processwire.com/talk/topic/13064-inputfieldfile-image-sorting-autosorting/ ) does not work with your securefile fieldtype. the problem is, that my module sorts the files based on the selector: tinysort(field.find('li.InputfieldFileItem'), {selector:'a.InputfieldFileName', attr:'title', order:direction}); and you are modifying this markup here: https://github.com/wanze/FieldtypeSecureFile/blob/master/FieldtypeSecureFile.module#L98 one solution would be to create a different selector for your fieldtype... i failed when trying to find a solution. would it be possible to modify your markup to an anchor: <a class="InputfieldFileName" title="thefilename.ext">...</a> thanks 1 Link to comment Share on other sites More sharing options...
LostKobrakai Posted June 2, 2016 Share Posted June 2, 2016 This might be useful to anyone trying to convert a (single) existing file field to a secure one, while maintaining integrity of other file fields on the same pages. Put a file with this content in pw's root directory and run it from the terminal: <?php include "index.php"; // allow for: $ php filename.php fieldName $fieldName = !empty($argv[1]) ? $argv[1] : 'file'; $field = $fields->get($fieldName); $usedInTemplates = $field->getTemplates(); $fp = fopen('files.txt', 'w'); // the use() statement allows for both pre and post pw 3.0 usage without change/compiler $eachPageUncache = function($selector, callable $callback) use ($pages) { $num = 0; $id = 0; while (true) { $p = $pages->get("{$selector}, id>$id"); $id = $p->id; if(!$id) break; $callback($p); $pages->uncacheAll($p); $num++; } return $num; }; try { // Alternatively use findMany and a foreach on PW 3.0.19+ $eachPageUncache("template=$usedInTemplates, include=all, check_access=0", function($page) use($fp, $fieldName, $config) { $files = $page->getUnformatted($fieldName); foreach ($files as $file) { $path = str_replace($config->paths->files, '', $file->pathname); fwrite($fp, $path . PHP_EOL); } }); } finally { // PHP 5.5+ fclose($fp); } Then you can use the created files.txt to copy files to their new location (add --remove-source-files to also remove the source files). rsync -v \ --files-from=PW_ROOT_PATH/files.txt \ PW_ROOT_PATH/site/assets/files NEW_LOCATION_PATH Switch the file field to be a secure file field and all files should still work. 5 Link to comment Share on other sites More sharing options...
k07n Posted March 2, 2017 Share Posted March 2, 2017 Is it possible to use relative paths in storageLocation? I have different environment on local/live servers and it would be nice to have same value. Something like this: //$storageLocation = rtrim($field->get('storageLocation'), '/') . '/'; $storageLocation = realpath($field->get('storageLocation')) . DIRECTORY_SEPARATOR; 1 Link to comment Share on other sites More sharing options...
Wanze Posted March 2, 2017 Author Share Posted March 2, 2017 @k07n Makes sense, I will update this and release a new version tomorrow. Cheers 2 Link to comment Share on other sites More sharing options...
k07n Posted March 22, 2017 Share Posted March 22, 2017 On 03.03.2017 at 0:39 AM, Wanze said: @k07n Makes sense, I will update this and release a new version tomorrow. Cheers @Wanze any success on this? 1 Link to comment Share on other sites More sharing options...
Wanze Posted March 24, 2017 Author Share Posted March 24, 2017 @k07n I tried to use realpath but it is failing to resolve my relative paths. How would you expect this to work, would you enter relative paths from the ProcessWire root or the document root? Could you give an example? Thanks. Cheers Link to comment Share on other sites More sharing options...
k07n Posted March 26, 2017 Share Posted March 26, 2017 @Wanze I'm using $storageLocation = realpath(wire('config')->paths->root . $field->get('storageLocation')) . DIRECTORY_SEPARATOR; and ./../secure_files/ in Storage Location prefs. And I get "D:\osp\domains\secure_files\" on dev env and "/var/www/sitename/secure_files/" on live. 1 Link to comment Share on other sites More sharing options...
Wanze Posted March 26, 2017 Author Share Posted March 26, 2017 @k07n Thanks for the examples, i just pushed a commit to the master branch implementing this (version 1.0.2). Cheers 2 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now