Jump to content

Jens Martsch - dotnetic

  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by Jens Martsch - dotnetic

  1. You might even use http://processwire-master.localhost, which is better, because I had sometimes problems when using a subfolder instead of a subdomain. Sorry, @dragan said that also in his previous post. Did not read it completely.
  2. Please add a [SOLVED] in the topic title, so people know, that an answer isn't needed anymore.
  3. Robin's idea also relates to my request "Show form inputfields according to GET parameter".
  4. Cool. I was totally unaware of this great feature. Will start using it today 🙂
  5. Here is a more detailed answer with the steps you have to take: Download the ProcessWire Zip (or use one of the other install methods) Unzip the file in your web root and rename it to the name how your project should be named Open Laragon control panel Click "reload" button for Apache This automatically creates a virtual host with the name of your folder like "processwire.dev" (I don't remember what is the default domain of Laragon, because I changed it to .localhost) You can then navigate in your browser to this URL You will see the ProcessWire installer and just have to follow the steps
  6. Laragon is the best local Webserver for Windows. Good choice.
  7. @teppo and @franciccio-ITALIANO This is exactly what I also replied here:
  8. Please follow the install instructions on https://processwire.com/docs/start/install/new/
  9. @999design To deal with pagefileSecure and existing files please take a look here: https://github.com/processwire/processwire-issues/issues/1006 pagefileSecure will only prevent access for users that don't have view permission for the template, where the file is included. You will need a view template or hook that checks if a file should be shown or not (based on dates). One problem that you have with pagefileSecure ist, that if you know the path and are logged in into ProcessWire the file is viewable/downloadable regardless of the date you set.
  10. Your development environment should have the same prerequisites as on your server. You should have a local web server like Laragon (on Windows) or Xammp installed, and also mirror/replicate the ProcessWire installation with the database from your live server. Then you can make modifications to these local files and upload them to the live server as they are. No conversion needed anymore. I would recommend you to use a translator like deepl.com if you are not very good with english, so your questions can be understood better.
  11. Under permissions is a setting where you can archive that users can only edit their own created pages. Like I answered here: To prevent page editing and listing pages in a normal lister or ListerPro I use hooks (this can be made in a custom module or in _init.php): $this->addHookAfter('ProcessPageListActions::getActions', $this, 'restrictListerEditAccess'); $this->addHookAfter('ProcessPageEdit::buildForm', $this, 'removeTabs'); $this->addHookAfter('ProcessPageEdit::buildForm', $this, 'restrictEditAccess'); public function restrictEditAccess(HookEvent $event) { // don't do this for superusers if ($this->user->isSuperuser()) { return; } if ($this->config->ajax) { return; } // bd($event->return); $process = $event->object; $page = $process->getPage(); $form = $event->return; if ($condition !== true) { $this->error("Thou shall not pass"); //$this->removeSaveButton($form); return; } } /** * removes edit links from lister it the user has not the correct edit access * @param HookEvent $event * @throws WireException */ public function restrictListerEditAccess(HookEvent $event) { if ($this->user->isSuperuser()) { return; } $page = $event->arguments[0]; $editAccess = $this->hasEditAccess($page); // this is my own function for checking if the user has edit access, in the core there is $page->editable() if ($editAccess === false || $this->user->hasRole('someRole')) { $actions = $event->return; unset($actions['edit']); $event->return = $actions; } } /** * removes tabs in Edit form for specific roles * @param HookEvent $event */ public function removeTabs(HookEvent $event) { if ($this->user->isSuperuser()) return; $p = $event->object->getPage(); $form = $event->return; // bd($form); $fieldset = $form->find("id=ProcessPageEditChildren")->first(); if (is_object($fieldset)) { $form->remove($fieldset); $event->object->removeTab('ProcessPageEditChildren'); } $fieldset = $form->find("id=ProcessPageEditSettings")->first(); if (is_object($fieldset)) { $form->remove($fieldset); $event->object->removeTab('ProcessPageEditSettings'); } $fieldset = $form->find("id=ProcessPageEditDelete")->first(); if (is_object($fieldset)) { $form->remove($fieldset); $event->object->removeTab('ProcessPageEditDelete'); } // hide delete tab $fieldset = $form->find("id=ProcessPageEditDelete")->first(); if (is_object($fieldset)) { $form->remove($fieldset); $event->object->removeTab('ProcessPageEditDelete'); } }
  12. I hope I can report back soon, but I am still very busy. Multilanguage is also active in my system. Beside that I also use different hooks to restrict edit and view access, so this might be another culprit.
  13. Well, yeah, I am using path because of different reasons. Because my images are not available via URL (or only if logged in) as I use pagefileSecure in my config. So the process mPDF has no access to the images, and therefore I use the path.
  14. You need to use the disk path instead of the URL foreach ($this->page->getUnformatted($fieldName) as $img) { echo "<img src='{$img->filename}'>"; }
  15. 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
  16. 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.
  17. @bernhard Yeah, I think I will add this. But I had to get it working first. Thanks for the suggestion.
  18. 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>"; } });
  19. 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.
  20. 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.
  21. @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.
  22. 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.
  23. *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.
  24. 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
  25. 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):
  • Create New...