Jump to content

Jens Martsch - dotnetic

  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by Jens Martsch - dotnetic

  1. Instead use <link href="<?php echo $config->urls->templates; ?>styles/assets/css/font-awesome.min.css" rel="stylesheet" /> and place them in the same folder on your local PC. Or you modfiy the url path to the templates folder in your site/config.php
  2. Yes, there is a way. Just go to permissions -> add new permission. Then under "Install predefined system permissions" choose "page-edit-created" and maybe even "page-edit-trash-created" if you would like that users can trash their own created pages. After saving, add those permissions to the role/s you want to restrict. I did not checked if this is working in the Frontend editor or Fredi, it is working in the ProcessWire admin.
  3. @bernhard Yeah, I think I will add this. But I had to get it working first. Thanks for the suggestion.
  4. Here is my working solution, which looks not exactly as in my example screenshot, because for that I had to use a str_replace. So I added the information below the file. The process is the following: User uploads file. The URL of the file and my custom information string are saved via $page->meta. Then before rendering the PageFile item the URL in the $page->meta is looked up and the custom information appended to the markup. I do this only on pages with a specific template. Here is the code: $this->addHookBefore("InputfieldFile::fileAdded", function ($event) { $pagefile = $event->arguments[0]; //$pagefile->description = "Hochgeladen von {$this->user->name} am " . date("Y-m-d H:i:s"); // not used, because description can be altered by users if ($event->object->data["hasPage"]) { $page = $event->object->data["hasPage"]; if ($page->template->name == "abteilung" || $page->template->name == "fachbereich") { $page->meta($pagefile->url, "Hochgeladen von {$this->user->name} am " . date("m.d.Y H:i:s")); } } }); $this->addHookAfter('InputfieldFile::renderItem', function ($event) { $url = $event->arguments[0]["url"]; $page = $event->object->data["hasPage"]; if ($page->template->name == "abteilung" || $page->template->name == "fachbereich") { $event->return .= "<p>{$page->meta($url)}</p>"; } });
  5. Thanks for your detailed answer, but I can not change the current behavior how or where files are added, because they are already there as pagefiles in thousands of pages. For the next project I think the recently added custom fields for pagefiles are the perfect solution, or the way you described with pages. Using page->meta would be not a good solution in my opinion, because it stores information about the file (uploaded by user) apart from the file itself. I think the best way would be to store the information who uploaded the file into the pagefiles metadata. Now I have to figure out, how to do that.
  6. The best way to show the information in my case would be like in the following screenshot. Maybe this information could be saved in the file metadata, but how would I do that? Then I would hook into renderItem of InputfieldFile and change the displayed information. What do you guys think, is this even worth to be implemented into the core and one could choose if this information is shown or not? An option like "Show metadata on files and images". I also want to get the last file a specific user uploaded. So if multiple users uploaded files to one (same) page, I want to get the last file that user X has uploaded.
  7. @bernhard Regarding a log module: I wrote a hook that logs all deletion of pages into a log file. This is very easy to accomplish. Depending on what you want to log, this can be a big task or a small one. Are you aware of MarkupActivityLog, which logs changes to a page? But maybe that's not what you want, as you talked about admin (superuser) related activities.
  8. My goal is to show which user uploaded a file and when in the PW admin when editing a page. Custom fields for files/images in ProcessWire 3.0.142 seem to be a solution for this, but I have to test them a little bit more in my environment, but they seem to work fine in a fresh install.
  9. *Facepalm* I did not upload an image in the second example *ROFL* . It has been 3 long weeks without resting, please forgive me. After uploading an image, the fields appear. I will test it out further tomorrow.
  10. Hey @horst Your solution is very similar how scripts like https://github.com/aik099/PhpStormProtocol work. As mentioned before this is a workaround and a hacky way, and my solution provides a native alternative which works. I am not searching for another hacky solution, I just wanted to provide a native way of handling URI schemes in Tracy Debuger
  11. First of all: Great additions and exactly what I just need for a project. But somehow the new custom fields for images and files do not seem to work correctly. I integrated them into an existing PW project and the fields appear for the superuser, and also for other roles... But: the other roles don't see the text that the superuser entered. Then I tried saving a value to a custom field with another user, and the value isn't saved. So I thought, because I have a complicated setup with many hooks and restrictions that hook into ProcessPage::buildForm I try out the new feature on a completely fresh PW installation. But in the new installation the custom fields don't even appear. Am I doing something wrong? Is this a bug? Here is a little screencast of my existing project (with audio) And here is a fresh PW install, where it do the setup process of the custom field, and then it does not show up (without audio):
  12. Try setting it to off "$config->sessionFingerprint = 0;" and see if you experience any differences
  13. What did you write into your site/config.php?
  14. Yes. If you look into the file https://github.com/aik099/PhpStormProtocol/blob/master/PhpStorm Protocol (Win)/run_editor.js there are two variables you have to change and if you are using Jetbrain Toolbox to install and update your IDE, then even the paths in https://github.com/aik099/PhpStormProtocol/blob/master/PhpStorm Protocol (Win)/run_editor.js#L22 are completely different.
  15. It is up to you Adrian, but my solution is a native one and the other one is a hacky solution which also requires modifiying the .js file.
  16. Yeah thought often about it, but PHPStorm offers me features that VScode does not have (yet) or are not that comfortable and that are important for me. And I don't switch my editor/IDE just because of this small issue.
  17. Hello folks, I want to save the information which user uploaded a file and also a date in the PW admin. I thought I could use the description field for this information, but how do I set it via a hook and how do I prevent users from editing the description? I tried the following hook which does not set the content of the description field (seems to be not a property of the InputfieldFile, but an individual field). /** * if this is a fachbereich or abteilung add a hook to prevent file deletion * @param HookEvent $event */ public function hookPageFile(HookEvent $event) { // if ($this->user->isSuperuser() || $this->user->hasRole('restricted-admin')) { // return; // } $page = $event->object->getPage(); // Only use on pages with the raum template if (($page->template == 'fachbereich' || $page->template == 'abteilung') && !$page->isTrash()) { $this->addHookAfter('InputfieldFile::processInputFile', function(HookEvent $event) { // Get the object the event occurred on, if needed $InputfieldFile = $event->object; $InputfieldFile->description="no description"; bd($InputfieldFile, "processInputFile"); }); $this->addHookBefore('InputfieldFile::processInputDeleteFile', $this, 'preventFileDelete'); } } The hook should also be only executed on pages with a specific template, so that's why I use $this->addHookBefore('ProcessPageEdit::buildForm', $this, 'hookPageFile'); Is this even possible, or should I take a completely different route? Maybe save the inputfield_id, filename and created_user in a separate database table? But this would complicate things, because on the output side I have to query the custom database instead of using just the description field. Maybe I can use the just added custom fields for files/imags in ProcessWire 3.0.142 for this? But how do I set the values in the admin for them and prevent changing them by the user? Think I have to test this out. EDIT: Found a solution with the help of the nice guys in this forum. You can find it here: https://processwire.com/talk/topic/22411-how-to-add-user-and-date-to-an-uploaded-file-help-urgently-needed/?do=findComment&comment=192363
  18. @bernhard The first solutions you provided does the same as Nette's script.
  19. I also tried Nette's solution and it does work on Windows 10 (but with different paths, as I am Using Jetbrains Toolbox to install PHPStorm), there is an alert before opening the file. After clicking ok, its working fine, but I have to focus PHPStorm manually, as the title of the window is always different, depending on which file you have opened.
  20. @adrian The solution you linked to could work (not tested), I found a similar script that I tried, that didn't work. But the script utilizes the Windows Scripting host and requires you to put the path in the .js file, which is a detour. My solution provides a native way. Not saying, that this is the correct way, but one more way. You could add the syntax with a comment "For Windows and PHPStorm use the following syntax" to Tracy's settings. I think, this could help some people.
  21. Tracy Debugger offers an Editor protocol handler link so you can jump directly to a file from a Tracy Debugger dump message. Unfortunately this does not work on Windows, as the URI protocol handler isn't implemented in the Windows version (see link). However, all IDEA products (IntelliJ, PHPStorm, etc.) provide a REST API from which you can open files. The syntax is http://localhost:63342/api/file//absolute/path/to/file.kt for absolute pathnames (please note the double backslash behind "file") and http://localhost:63342/api/file/relative/to/module/root/path/to/file.kt for relative filenames. To use this, you have to set up Tracy with the following parameter: http://localhost:63342/api/file/%file:%line:0 If you click on a link now in Tracy, PHPStorm will focus and ask for permission to open the file. ATTENTION: PHPStorm has to be opened and also your project has to be opened (so PHPStorm knows the root for relative path). This is a little bit cumbersome, but better than nothing. Ping @adrian to bring this to your attention.
  22. How can I set the access toggles for a field I create via API? $f = new Field(); // create new field object $f->type = $this->modules->get("FieldtypeFloat"); // get a field type $f->name = 'price'; $f->precision = 2; $f->label = 'Price of the product'; Maybe @ryan can help?
  23. Hey folks, @kongondo asked me some questions about how I integrated vue.js into ModulesManager2. I was already planning to release a tutorial video of the integration process soon, but I don't have much time now as I am busy with customer work. So here is a quick roundup, which will be improved over time and become a full-blown tutorial. I hope to cover the basics and don't forget anything. How did you implement the integration? I created a new vue project via vue create . inside my site/modules/mymodule folder Do your assets still live under the Vue JS public folder? I don't exactly know what you mean with assets. Are you speaking of images? I don't use images atm. Where do your view files live, i.e. under your modules directory or in templates? As I mentioned in point one, they are in the modules directory. Here is a screenshot of my directory: As soon as I release the beta of ModulesManager2 you can go through the source code in github. Where is your index.xxx file and how are you serving it? vue-cli comes with a built in server and the index.html is automatically generated on-the-fly. The command for running the server with HMR (hot media reload) resides in the package.json and is run via npm run serve This is the standalone server. Anything else I should know (maybe .htaccess issues, etc)? Create a vue.config.js in your custom module's root directory and add following parameters to it, to disable filename hashing: const webpack = require("webpack"); module.exports = { runtimeCompiler: false, filenameHashing: false, pages: { main: { // entry for the page entry: 'src/main.js', // the source template template: 'public/index.html', // output as dist/index.html filename: 'index.html', // when using title option, // template title tag needs to be <title><%= htmlWebpackPlugin.options.title %></title> title: 'Index Page', } }, configureWebpack: { plugins: [ new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery', 'window.jQuery': 'jquery', }) ] } }; Edit: After creating the config run npm run build Then you can reference these files in your module like I did here: $markup = '<div id="app"></div>'; $scriptPath = $this->config->urls->siteModules . $this->className; $markup .= "<script src='$scriptPath/dist/js/chunk-vendors.js'></script>"; $markup .= "<script src='$scriptPath/dist/js/main.js'></script>"; I added the configureWebpack part to have access to the $ and jQuery objects inside of my vue files. The install/uninstall overlay panel in MM2, is that something custom or a ProcessWire panel? Standard ProcessWire panels If it is a ProcessWire panel, did you have any difficulties implementing it into your Vue app? ProcessWire's panel init happens before vue is initiated or rendered, so pw-panel links inside of vue are not catched. To make pw-panel links inside of vue work, you have to defer (don't know if this is the correct term) the process to a body click event: $(document).on("click", "#app .pw-panel", function (e, el) { e.preventDefault(); let toggler = $(this); pwPanels.addPanel(toggler); toggler.click(); }); I hope this helps. If you have questions, please ask.
  • Create New...