Jump to content

Recommended Posts

2 hours ago, Mustafa-Online said:

I did everything i can, but still nothing works 😞 

Please check PM. Thanks.

  • Like 1

Share this post


Link to post
Share on other sites
Posted (edited)

Hi all,

A recent change in ProcessWire has partly broken part of Media Manager's upload feature (see the screenshot in this post with the PDO error, thanks to for @Mustafa-Online reporting). My strong feeling is that it has to do with the recent changes to the Database Class(es). I am looking into this and will report back as soon as I can.

Thanks.

Edited by kongondo
  • Like 1

Share this post


Link to post
Share on other sites

By the way, a quick workaround, if you insist on living on the edge is to do the following:

  1. Edit a Media Manager field (e.g. media_manager_image)
  2. Change its Use Tags setting and save
  3. Revert the change to what it was before and save again

Uploads should now work.

Note though that using the 'Cleanup' feature might still throw the PDO error linked to in the post above.

  • Like 1

Share this post


Link to post
Share on other sites
On 3/26/2020 at 4:29 PM, kongondo said:

Hi @Orkun,

Yes it is just a temporary folder.

It should. It works fine here. Could you please tell me about your setup? (ProcessWire and PHP versions, etc).

I am not sure whether it is a file permission issue. Are you on a Windows machine?

Alternatively, maybe you are trying to upload very large images and the system does not finish and you are trying to re-upload?

Please let me know.

Hi @kongondo

This Problem still happens regularly. It is always the "Empty File Upload Result" Error.
In the Processwire Logs it is a SQL Duplicate Entry Error (See Screenshot).The only way to make this work again temporarly was to delete the contents of /site/assets/MediaManager/jqfu/.files_no_show/

error.png.7cbc09082753a1b7deb5b9f92b979615.png


Processwire Version: 2.7.3 Dev
PHP Version: 7.0.33-0ubuntu0.16.04.15
Media Manager Version: Media Manager (Process) v0.0.9 β

  • post_max_size: Local Value(512M), Master Value(8M)
  • memory_limit: Local Value(512M), Master Value(128M)
  • file_uploads: On
  • upload_max_filesize: Local Value(512M), Master Value(2M)

It is also not a Windows Machine.

That's what the customer had said to me today.

Quote

It seems that the problem persists. Still almost everyone has the issue while uploading the files. Even me if I try to upload files I always get the error message and the only way it works for me is if I do the upload in the Incognito mode. I use Chrome but it seems like a general problem as people use different browsers and all have the same issue.

Quote

 

So people still get the "Empty File Upload" error and 90% of the time the file is really not uploaded.
I told them that they have to wait a bit before re-uploading big files and everything. But it still doesn't work. I also have issues if I'm not in the private/incognito mode.

And they have been trying to upload small files, mostly PDFs.

 

 

Can you help me on this one?

 

KR
Orkun

Share this post


Link to post
Share on other sites

Hi @Orkun,

1 hour ago, Orkun said:

Can you help me on this one?

I'd love to. However...

1 hour ago, Orkun said:

Processwire Version: 2.7.3 Dev

Support for ProcessWire 2.7 ended on 10 May 2019 😄. We only support ProcessWire 3.x. But given that...

1 hour ago, Orkun said:

Media Manager Version: Media Manager (Process) v0.0.9 β

You are still on this very old version....I might be able to help. However, I suggest that you consider upgrading to 012 + ProcessWire 3.x. 

1 hour ago, Orkun said:

the only way it works for me is if I do the upload in the Incognito mode.

I don't see how this is related to uploading and the sql errors + the temporary files not getting deleted. 

1 hour ago, Orkun said:
  • post_max_size: Local Value(512M), Master Value(8M)
  • memory_limit: Local Value(512M), Master Value(128M)
  • file_uploads: On
  • upload_max_filesize: Local Value(512M), Master Value(2M)

post_max_size needs to be bigger than upload_max_filesize. See this post by Horst.

I have never been able to reproduce this nor has anyone else ever reported the issue. I think the best way forward is if you could set up a remote test environment where the problem is reproducible then I could come in and have a look. If that's not possible then consider granting me access to the production environment where the problem is occurring.

Share this post


Link to post
Share on other sites
29 minutes ago, kongondo said:

Hi @Orkun,

I'd love to. However...

Support for ProcessWire 2.7 ended on 10 May 2019 😄. We only support ProcessWire 3.x. But given that...

You are still on this very old version....I might be able to help. However, I suggest that you consider upgrading to 012 + ProcessWire 3.x. 

I don't see how this is related to uploading and the sql errors + the temporary files not getting deleted. 

post_max_size needs to be bigger than upload_max_filesize. See this post by Horst.

I have never been able to reproduce this nor has anyone else ever reported the issue. I think the best way forward is if you could set up a remote test environment where the problem is reproducible then I could come in and have a look. If that's not possible then consider granting me access to the production environment where the problem is occurring.

Hi @kongondo

Thanks for your input. I have now adjusted the post_max_size to 1G and the
memory_limit to 2G since according to the php docs memory_limit needs also to be bigger than post_max_size.
Will see if this helps.

It is very strange that this SQL Error appears, I mean I have the following setting in MM for duplicate Media (see screenshot).
Normally It should just replace the existing media if there is a duplicate.

setting.thumb.png.1f63ef4f8e0c32cdcba492ba09d62d47.png

Could perhaps my change (that I had done a long time ago) for setting the page title for all languages be a problem? (line 1558)

duplicate_media.thumb.png.204d4125d9633f84d4df50f6500e0174.png

-------------------------------------------------------------------------------------------------------

You are right, that a upgrade to version 3 (PW) and to the newest MM Version would be a good idea.
But the problem is, that the system is a very big and complex (Multi-Lang, Multi-Site: approximately 15-20+ Websites, A lot of modules etc...) Processwire Installation.
And also there are a lot of users/editors that are editing daily.

Because of this the upgrade isn't easily feasible.
I had already started on a dev environment to upgrade to Version 3 and to trackdown all the problems that could appear and document them...

Are there any points I need to watch on when upgrading the Media Manager?
What problems could occur when upgrading (like for example media getting deleted or something?)

KR
Orkun

Share this post


Link to post
Share on other sites
Posted (edited)
52 minutes ago, Orkun said:

Are there any points I need to watch on when upgrading the Media Manager?
What problems could occur when upgrading (like for example media getting deleted or something?)

There shouldn't be any problems and definitely nothing will get deleted.

52 minutes ago, Orkun said:

It is very strange that this SQL Error appears, I mean I have the following setting in MM for duplicate Media (see screenshot).
Normally It should just replace the existing media if there is a duplicate.

Yes. Sometimes this problem occurs if there was a delay in creating the media but hard to tell unless I can see it for myself.

52 minutes ago, Orkun said:

Could perhaps my change (that I had done a long time ago) for setting the page title for all languages be a problem? (line 1558)

Not sure. I'd have to test myself in a Multilingual setup. Have you tried removing the code to see if it helps? Maybe you can achieve what the code is doing in a Hook in ready.php?

I think this is what is happening:

  1. You upload a file
  2. Upload goes through OK and is placed in /site/assets/MediaManager/jqfu/.files_no_show/
  3. The media creation process starts but fails. MySQL throws the error about duplicate entry. This interrupts the media creation process.
  4. The media creation process does not finish hence it doesn't return a success message to the uploader
  5. The uploader throws the error "Empty File Upload Result" Error.
  6. Since the media creation process was interrupted, the script doesn't reach the code that deletes the temporary files
  7. You end up with lots of temporary files.
  8. Maybe you also end up with empty pages (i.e., without media or title)? Could you check this please?
52 minutes ago, Orkun said:

I had already started on a dev environment to upgrade to Version 3 and to trackdown all the problems that could appear and document them...

Good idea.

Edited by kongondo
clarification

Share this post


Link to post
Share on other sites

Hi

Just installed the Media Manager. It seems that I cannot make any changes to the settings. When I save, it won't save my changes. Any ideas?

Share this post


Link to post
Share on other sites
Posted (edited)
16 minutes ago, hellerdruck said:

Any ideas?

Did you install Media Manager in a subfolder? If yes, sorry, it's a bug that occurs if you've installed Media Manager in a subfolder. It got fixed a while back but I haven't committed yet. For now, please do this:

Change this line in ProcessMediaManager.module around line #154:

"template=media-manager-settings, parent={$path},include=hidden"

to this:

"template=media-manager-settings,include=hidden"

If that's not it, then please supply more details about your setup. 

Thanks.

Edited by kongondo

Share this post


Link to post
Share on other sites
6 minutes ago, kongondo said:

Did you install Media Manager in a subfolder? If yes, sorry, it's a bug that occurs if you've installed Media Manager in a subfolder. It got fixed a while back but I haven't committed yet. For now, please do this:

Change this line in ProcessMediaManager.module around line #154:


"template=media-manager-settings, parent={$path},include=hidden"

to this:


"template=media-manager-settings,include=hidden"

If that's not it, then please supply more details about your setup. 

Thanks.

that helped, thanks!

Share this post


Link to post
Share on other sites
1 minute ago, hellerdruck said:

that helped, thanks!

Great! Was it a 'media-manager-installed-in-a-subfolder-issue'? I'd like to find out if the issue occurs in other setups as well. Thanks.

Share this post


Link to post
Share on other sites
Just now, kongondo said:

Great! Was it a 'media-manager-installed-in-a-subfolder-issue'? I'd like to find out if the issue occurs in other setups as well. Thanks.

No, I uploaded the zip file by using the modules installation uploader. just upload, install, didn't work. hope that helps.

  • Like 1

Share this post


Link to post
Share on other sites

by the way, is there a way to show a more "dataTables" kinda look? I find the thumbnails quite big for the file load we'll have..

Share this post


Link to post
Share on other sites
23 minutes ago, hellerdruck said:

by the way, is there a way to show a more "dataTables" kinda look? I find the thumbnails quite big for the file load we'll have.

You mean a tabular view like this?

https://mediamanager.kongondo.com/documentation/the-media-manager-admin/filtering-media-and-changing-display/

If that's not it, maybe I could add a setting to show smaller thumbs or even not at all. I'll that on my todo/to_think_about.

Share this post


Link to post
Share on other sites
15 minutes ago, kongondo said:

You mean a tabular view like this?

https://mediamanager.kongondo.com/documentation/the-media-manager-admin/filtering-media-and-changing-display/

If that's not it, maybe I could add a setting to show smaller thumbs or even not at all. I'll that on my todo/to_think_about.

No, I meant rather some list-like thing. I wouldn't need a thumbnail preview for an excel file. A line of info, next line of info.. what you have there only kinda suits images.. I guess I'll find it in the CSS files then.

Share this post


Link to post
Share on other sites

Hi @kongondo

We buyed the latest Version of Media Manager and I tried to upgrade our old Version (0.9) by moving the old module contents inside a ".old" folder
and upload the new module files and folder.

ftp.thumb.png.28bdf20d8dd6931aeb579d1697dab5ce.png

But now I am getting this error all the time, I can't access the backend anymore.
What I am doing wrong?

error.thumb.png.bfc50a637013014677318ebe26516c5b.png

PW Version is 3.0.165

Share this post


Link to post
Share on other sites

@kongondo

Even when I try to delete the contents under /site/assets/cache/Filecompiler/ it doesn't help anything. The error still persists.

JqueryFileUpload is on Version 0.0.8


KR
Orkun

Share this post


Link to post
Share on other sites
15 minutes ago, Orkun said:

Even when I try to delete the contents under /site/assets/cache/Filecompiler/ it doesn't help anything. The error still persists.

Hi @Orkun,

I sent you a PM. Thanks.

Share this post


Link to post
Share on other sites

Hi kongondo,

that was the problem that comes up every now and then:

message: "SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'name-of-the-image-1695' for key 'name_parent_id'""

message: "SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'name-of-the-image-1695' for key 'name_parent_id'""

we already talked about the following problem via mail (Subject: Some bugs with upload images).
here are some more details you asked for:

What versions of MySQL, ProcessWire and Media Manager are you using?

Windows IIS
MySQL: 8.0.15, MyISAM, utf8_general_ci, PHP extension MySQLi
PHP version 7.2.7
Media Manager (Process) v0.1.2 β

Did anything change on the server recently?

No

What is the average size of the images you are trying to upload?

2 -3 MB

Does the error happen with non-image media as well?

Yes

Is the error happening for different images or always the same image?

different

Is this a multilingual site?

Yes

at the moment we help ourselves with renaming the picture and always something like that 01 ... 02 ... 03 in front of the picture name, but even that does not work reliably.

 

thank you and greetings from munich

 

Share this post


Link to post
Share on other sites
1 hour ago, entschleunigung said:

What versions of MySQL, ProcessWire and Media Manager are you using?

Windows IIS
MySQL: 8.0.15, MyISAM, utf8_general_ci, PHP extension MySQLi
PHP version 7.2.7
Media Manager (Process) v0.1.2 β

I see two potential suspects here; Windows IIS and MySQL 8. I haven't tested MM in Windows IIS. However, I think we have reached a point where it is best that I have access to a test server. This could either be a test site where you can reproduce the problem or the production site itself. I have never been able to reproduce the issue, albeit I have not tried in a Windows IIS environment. I don't have access to such an environment either, sorry. No other users have reported similar UNRESOLVED issues, so I have nothing else to go on regarding your particular case. 

1 hour ago, entschleunigung said:

at the moment we help ourselves with renaming the picture and always something like that 01 ... 02 ... 03 in front of the picture name,

That's not great! Please consider giving me temporary access to a site where I can debug the issue.

 

Thanks.

  • Like 1

Share this post


Link to post
Share on other sites

Hi kongondo,

unfortunately it is not possible for me to give you access to the site, otherwise I would have done it long ago. The client takes the topic GDPR very seriously and access for third parties is difficult. 

However, I've gotten the client to the point where we're changing the hosting, because there are other problems in this setup as well. I will definitely get back to you and report on the further progress. Thanks also for the support via mail.

Cheers

 

Share this post


Link to post
Share on other sites
14 hours ago, entschleunigung said:

The client takes the topic GDPR very seriously and access for third parties is difficult. 

I understand

14 hours ago, entschleunigung said:

I will definitely get back to you and report on the further progress.

Please do. 

14 hours ago, entschleunigung said:

Thanks also for the support via mail.

You're welcome :-).

Share this post


Link to post
Share on other sites

Hello,

Good to be back developing in ProcessWire, but I must admit I am a little rusty.

Just installed version 012 on a fresh install of PW version 3.0.165  and getting the following errors when trying to edit the uploaded image page under Admin -> Media -> Manager.

Whats also odd is when trying to upload at Media Manager -> Upload, the file appears to upload, but does not show up in the Images/All tab nor does the preview show up. On some occasions the file name is present, but others it is not. I ran the check field data with no issues reported and also uninstalled and reinstalled. 

What am I missing.

Running php 7.4.3 and Mysql 8

915426423_ScreenShot2020-10-27at10_13_57PM.thumb.png.4e0133eab04d7cd0b3f29520b3f6682f.png

Share this post


Link to post
Share on other sites

Hi @RyanJ,

Please see this post and the one after for the resolution. I am still working on a proper solution. Sorry for the inconvenience.

Edited by kongondo
  • Like 1

Share this post


Link to post
Share on other sites

Hi kongondo,

Thanks for the quick replay. Your solution seems to work. I do have a follow up regarding tags. I am unable to successfully return images with the getTag() or findTag() methods that are available. Am I misunderstanding something? 

Media Manager Field. Returns empty string

$test = $theme_options->media_manager->getTag("MainNavLogo");

Default Image Field Returns ProcessWire\Pageimage

$test = $theme_options->images->getTag("MainNavLogo");

Thanks for your time.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By joshua
      As we often use Matomo (former known as Piwik) instead of Google Analytics we wanted to embed Matomo not only in the template code but also via the ProcessWire backend.
      That's why I developed a tiny module for the implementation.
      Right now it's not heavily tested, so I would call it an "alpha" status.
      The module provides the possibility to connect to an existing Matomo installation with the classical site tracking and also via the Matomo Tag Manager.
      If you have also PrivacyWire installed, you can tell MatomoWire to only load the script, if the user has accepted cookies via PrivacyWire.
      To offer an Opt-Out solution you can choose between the simple Opt-Out iFrame, delivered by your Matomo installation, or a button to choose cookies via PrivacyWire.
      You'll find the current (alpha) state in this git repo: https://github.com/blaueQuelle/matomowire
      As soon as it's better tested, I'll add it to the module repo.
      I'm looking forward to hear your feedback!
    • By FireWire
      Hello community!

      I want to share a new module I've been working on that I think could be a big boost for multi-language ProcessWire sites.

      Some background, I was looking for a way for our company website to be efficiently translated as working with human translators was pretty laborious and a lack of updating content created a divergence between languages. I, and several other devs here, have talked about translation integrations and have recognized the power that DeepL has. DeepL is an AI deep learning powered service that delivers translation quality beyond any automated service available. After access to the API was opened up to the US, I built Fluency, a DeepL translation integration for ProcessWire.
      Fluency brings automated translation to every multi-language field in the admin, and also provides a translation tool allowing the user to translate their text to any language without it being inside a template's field. With Fluency you can:
      Translate any plain textarea or text input Translate any CKEditor content (yes, with markup) Translate page names for fully localized URLs on every page Translate your in-template translation function wrapped strings Translate modules DeepL offers translations to the following languages: English (US), English (UK), German, French, Spanish, Portuguese (EU), Portuguese (Brazil, Italian, Dutch, Polish, Russian, Japanese, Chinese (Simplified)
      Installation and usage is completely plug and play. Whether you're building a new multi-language site, need to update a site to multi-language, or simply want to stop manually translating a site and make any language a one-click deal, it could not be easier to do it. Fluency works by having you match the languages configured in ProcessWIre to DeepL's. You can have your site translating to any or all of the languages DeepL translates to in minutes (quite literally).
      Let's break out the screenshots...
      When the default language tab is shown, a message is displayed to let users know that translation is available. Clicking on each tab shows a link that says "Translate from English". Clicking it shows an animated overlay with the word "Translating..." cycling through each language and a light gradient shift. Have a CKEditor field? All good. Fluency will translated it and use DeepL's ability to translate text within HTML tags. CKEditor fields can be translated as easily and accurately as text/textarea fields.

      Repeaters and AJAX created fields also have translation enabled thanks to a JavaScript MutationObserver that searches for multi-language fields and adds translation as they're inserted into the DOM. If there's a multi-language field on the page, it will have translation added.

      Same goes for image description fields. Multi-language SEO friendly images are good to go.

      Creating a new page from one of your templates? Translate your title, and also translate your page name for native language URLs. (Not available for Russian, Chinese, or Japanese languages due to URL limitations). These can be changed in the "Settings" tab for any page as well so whether you're translating new pages or existing pages, you control the URLs everywhere.

      Language configuration pages are no different. Translate the names of your languages and search for both Site Translation Files (including all of your modules)

      Translate all of the static text in your templates as well. Notice that the placeholders are retained. DeepL is pretty good at recognizing and keeping non-translatable strings like that. If it is changed, it's easy to fix manually.

      Fluency adds a "Translate" item to the CMS header. When clicked this opens up a modal with a full translation tool that lets the user translate any language to any language. No need to leave the admin if you need to translate content from a secondary language back to the default ProcessWire language. There is also a button to get the current API usage statistics. DeepL account owners can set billing limitations via character count to control costs. This may help larger sites or sites being retrofitted keep an eye on their usage. This tool is available for all users with the page-edit permission.

      It couldn't be easier to add Fluency to your new or existing website. Simply add your API key and you're shown what languages are currently available for translation from/to as provided by DeepL. This list and all configuration options are taken live from the API so when DeepL releases new languages you can add them to your site without any work. No module updates, just an easy configuration. Just match the language you configured in ProcessWire to the DeepL language you want it to be associated with and you're done. Fluency also allows you to create a list of words/phrases that will not be translated which can prevent items such as brands and company names from being translated when they shouldn't

       
      Limitations:
      No "translate page" - Translating multiple fields can be done by clicking multiple translation links on multiple fields at once but engineering a "one click page translate" is not feasible from a user experience standpoint. The time it takes to translate one field can be a second or two, but cumulatively that may take much longer (CKEditor fields are slower than plain text fields). There may be a workaround in the future but it isn't currently on the roadmap. No "translate site" - Same thing goes for translating an entire website at once. It would be great, but it would be a very intense process and take a very (very) long time. There may be a workaround in the future but it isn't on the roadmap. No current support for Inline CKEditor fields - Handling for CKEditor on-demand hasn't been implemented yet, this is planned for a future release though and can be done. I just forgot about it because I've never really used that feature personally.. Alpha release - This module is in alpha. Releases should be stable and usable, but there may be edge case issues. Test the module thoroughly and please report any bugs via a Gitlab issue on the repository or respond here. Please note that the browser plugin for Grammarly conflicts with Fluency (as it does with many web applications). To address this issue it is recommended that you disable Grammarly when using Fluency, or open the admin to edit pages in a private window where Grammarly may not be loaded. This is an issue that may not have a resolution as creating a workaround may not be possible. If you have insight as to how this may be solved please visit the Gitlab page and file a bugfix ticket.
      Requirements:
      ProcessWire  3.0+ UIKit Admin Theme That's Fluency in a nutshell. A core effort in this module is to create it so that there is nothing DeepL related hard-coded in that would require updating it when DeepL offers new languages. I would like this to be a future-friendly module that doesn't require developer work to keep it up-to-date.
      It's Free
      This is my first real module and I want to give it back to the community as thanks. This is the best CMS I've worked with (thank you Ryan & contributors) and a great community (thank you dear reader). The only cost to use this is a subscription fee for the DeepL Pro API. Find out more and sign up here.
      Download & Feedback
      Download the latest version here
      https://gitlab.com/SkyLundy/fluency-processwire/-/archive/master/fluency-processwire-master.zip
      Gitlab repository:
      https://gitlab.com/SkyLundy/fluency-processwire
      File issues and feature requests here (your feedback and testing is greatly appreciated):
      https://gitlab.com/SkyLundy/fluency-processwire/-/issues
       
      Thank you! ¡Gracias! Ich danke Ihnen! Merci! Obrigado! Grazie! Dank u wel! Dziękuję! Спасибо! ありがとうございます! 谢谢你!

    • By horst
      ---------------------------------------------------------------------------------------------------------------------------------
        when working with PW version 2.6+, please use Pim2, not Pim!
        read more here  on how to change from the older to the newer version in existing sites
      ---------------------------------------------------------------------------------------------------------------------------------
      PageImage Manipulator, API for version 1 & 2

      The Page Image Manipulator is a module that let you in a first place do ImageManipulations with your PageImages. - And in a second place there is the possibility to let it work on any imagefile that exists in your servers filesystem, regardless if it is a 'known PW-image'.

      The Page Image Manipulator is a Toolbox for Users and Moduledevelopers. It is written to be as close to the Core ImageSizer as possible. Besides the GD-filterfunctions it contains resize, crop, canvas, rotate, flip, sharpen, unsharpMask and 3 watermark methods.



      How does it work?

      You can enter the ImageManipulator by calling the method pim2Load(). After that you can chain together how many actions in what ever order you like. If your manipulation is finished, you call pimSave() to write the memory Image into a diskfile. pimSave() returns the PageImage-Object of the new written file so we are able to further use any known PW-image property or method. This way it integrates best into the ProcessWire flow.

      The three examples above put out the same visual result: a grayscale image with a width of 240px. Only the filenames will slightly differ.

      You have to define a name-prefix that you pass with the pimLoad() method. If the file with that prefix already exists, all operations are skipped and only the desired PageImage-Object gets returned by pimSave(). If you want to force recreation of the file, you can pass as second param a boolean true: pim2Load('myPrefix', true).

      You may also want to get rid of all variations at once? Than you can call $pageimage->pim2Load('myPrefix')->removePimVariations()!

      A complete list of all methods and actions are at the end of this post.
       
      You may also visit the post with tips & examples for users and module developers.


      How to Install
      Download the module Place the module files in /site/modules/PageImageManipulator/ In your admin, click Modules > Check for new modules Click "install" for PageImageManipulator Done! There are no configuration settings needed, just install and use it. Download    (version 0.2.0)
      get it from the Modules Directory History of origins

      http://processwire.com/talk/topic/3278-core-imagemanipulation/


      ----------------------------------------------------------------------------------------------------------


      Page Image Manipulator - Methods

      * pimLoad  or  pim2Load, depends on the version you use!

      pimLoad($prefix, $param2=optional, $param3=optional)
      param 1: $prefix - (string) = mandatory! param 2: mixed, $forceRecreation or $options param 3: mixed, $forceRecreation or $options return: pim - (class handle) $options - (array) default is empty, see the next method for a list of valid options! $forceRecreation - (bool) default is false It check if the desired image variation exists, if not or if forceRecreation is set to true, it prepares all settings to get ready for image manipulation
      -------------------------------------------------------------------

      * setOptions

      setOptions(array $options)
      param: $options - (array) default is empty return: pim - (class handle) Takes an array with any number valid options / properties and set them by replacing the class-defaults and / or the global config defaults optionally set in the site/config.php under imageSizerOptions or imageManipulatorOptions.

      valid options are:
      quality = 1 - 100 (integer) upscaling = true | false (boolean) cropping = true | false (boolean) autoRotation =true | false (boolean) sharpening = 'none' | 'soft' | 'medium' | 'strong' (string) bgcolor = (array) css rgb or css rgba, first three values are integer 0-255 and optional 4 value is float 0-1, - default is array(255,255,255,0) thumbnailColorizeCustom = (array) rgb with values for colorize, integer -255 - 255 (this can be used to set a custom color when working together with Thumbnails-Module)
        outputFormat = 'gif' | 'jpg' | 'png' (Attention: outputFormat cannot be specified as global option in $config->imageManipulatorOptions!) set {singleOption} ($value)
      For every valid option there is also a single method that you can call, like setQuality(90), setUpscaling(false), etc.
      -------------------------------------------------------------------

      * pimSave

      pimSave()
      return: PageImage-Object If a new image is hold in memory, it saves the current content into a diskfile, according to the settings of filename, imagetype, targetFilename and outputFormat. Returns a PageImage-Object!
      -------------------------------------------------------------------

      * release

      release()
      return: void (nothing) if you, for what ever reason, first load image into memory but than do not save it, you should call release() to do the dishes! 😉 If you use pimSave() to leave the ImageManipulator, release() is called automatically.
      -------------------------------------------------------------------

      * getOptions

      getOptions()
      return: associative array with all final option values example:
      ["autoRotation"] bool(true) ["upscaling"] bool(false) ["cropping"] bool(true) ["quality"] int(90) ["sharpening"] string(6) "medium" ["targetFilename"] string(96) "/htdocs/site/assets/files/1124/pim_prefix_filename.jpg" ["outputFormat"] string(3) "jpg" get {singleOption} ()
      For every valid option there is also a single method that you can call, like getQuality(), getUpscaling(), etc. See method setOptions for a list of valid options!
      -------------------------------------------------------------------

      * getImageInfo

      getImageInfo()
      return: associative array with useful informations of source imagefile example:
      ["type"] string(3) "jpg" ["imageType"] int(2) ["mimetype"] string(10) "image/jpeg" ["width"] int(500) ["height"] int(331) ["landscape"] bool(true) ["ratio"] float(1.5105740181269) ["bits"] int(8) ["channels"] int(3) ["colspace"] string(9) "DeviceRGB" -------------------------------------------------------------------

      * getPimVariations

      getPimVariations()
      return: array of Pageimages Collect all pimVariations of this Pageimage as a Pageimages array of Pageimage objects. All variations created by the core ImageSizer are not included in the collection.
      -------------------------------------------------------------------

      * removePimVariations

      removePimVariations()
      return: pim - (class handle) Removes all image variations that was created using the PIM, all variations that are created by the core ImageSizer are left untouched!
      -------------------------------------------------------------------
      * width

      width($dst_width, $sharpen_mode=null)
      param: $dst_width - (integer) param: $auto_sharpen - (boolean) default is true was deleted with version 0.0.8, - sorry for breaking compatibility param: $sharpen_mode - (string) possible: 'none' | 'soft' | 'medium' | 'strong', default is 'soft' return: pim - (class handle) Is a call to resize where you prioritize the width, like with pageimage. Additionally, after resizing, an automatic sharpening can be done with one of the three modes.
      -------------------------------------------------------------------

      * height

      height($dst_height, $sharpen_mode=null)
      param: $dst_height - (integer) param: $auto_sharpen - (boolean) default is true was deleted with version 0.0.8, - sorry for breaking compatibility param: $sharpen_mode - (string) possible: 'none' | 'soft' | 'medium' | 'strong', default is 'soft' return: pim - (class handle) Is a call to resize where you prioritize the height, like with pageimage. Additionally, after resizing, an automatic sharpening can be done with one of the three modes.
      -------------------------------------------------------------------

      * resize

      resize($dst_width=0, $dst_height=0, $sharpen_mode=null)
      param: $dst_width - (integer) default is 0 param: $dst_height - (integer) default is 0 param: $auto_sharpen - (boolean) default is true was deleted with version 0.0.8, - sorry for breaking compatibility param: $sharpen_mode - (string) possible: 'none' | 'soft' | 'medium' | 'strong', default is 'soft' return: pim - (class handle) Is a call to resize where you have to set width and / or height, like with pageimage size(). Additionally, after resizing, an automatic sharpening can be done with one of the three modes.
      -------------------------------------------------------------------

      * stepResize

      stepResize($dst_width=0, $dst_height=0)
      param: $dst_width - (integer) default is 0 param: $dst_height - (integer) default is 0 return: pim - (class handle) this performs a resizing but with multiple little steps, each step followed by a soft sharpening. That way you can get better result of sharpened images.
      -------------------------------------------------------------------

      * sharpen

      sharpen($mode='soft')
      param: $mode - (string) possible values 'none' | 'soft'| 'medium'| 'strong' return: pim - (class handle) Applys sharpening to the current memory image. You can call it with one of the three predefined pattern, or you can pass an array with your own pattern.
      -------------------------------------------------------------------

      * unsharpMask

      unsharpMask($amount, $radius, $threshold)
      param: $amount - (integer) 0 - 500, default is 100 param: $radius - (float) 0.1 - 50, default is 0.5 param: $threshold - (integer) 0 - 255, default is 3 return: pim - (class handle) Applys sharpening to the current memory image like the equal named filter in photoshop.
      Credit for the used unsharp mask algorithm goes to Torstein Hønsi who has created the function back in 2003.
      -------------------------------------------------------------------

      * smooth

      smooth($level=127)
      param: $level - (integer) 1 - 255, default is 127 return: pim - (class handle) Smooth is the opposite of sharpen. You can define how strong it should be applied, 1 is low and 255 is strong.
      -------------------------------------------------------------------

      * blur

      blur()
      return: pim - (class handle) Blur is like smooth, but cannot called with a value. It seems to be similar like a result of smooth with a value greater than 200.
      -------------------------------------------------------------------

      * crop

      crop($pos_x, $pos_y, $width, $height)
      param: $pos_x - (integer) start position left param: $pos_y - (integer) start position top param: $width - (integer) horizontal length of desired image part param: $height - (integer) vertical length of desired image part return: pim - (class handle) This method cut out a part of the memory image.
      -------------------------------------------------------------------

      * canvas

      canvas($width, $height, $bgcolor, $position, $padding)
      param: $width = mixed, associative array with options or integer, - mandatory! param: $height = integer, - mandatory if $width is integer! param: $bgcolor = array with rgb or rgba, - default is array(255, 255, 255, 0) param: $position = one out of north, northwest, center, etc, - default is center param: $padding = integer as percent of canvas length, - default is 0 return: pim - (class handle) This method creates a canvas according to the given width and height and position the memory image onto it.
      You can pass an associative options array as the first and only param. With it you have to set width and height and optionally any other valid param. Or you have to set at least width and height as integers.
      Hint: If you want use transparency with rgba and your sourceImage isn't of type PNG, you have to define 'png' as outputFormat with your initially options array or, for example, like this: $image->pimLoad('prefix')->setOutputFormat('png')->canvas(300, 300, array(210,233,238,0.5), 'c', 5)->pimSave()
      -------------------------------------------------------------------

      * flip

      flip($vertical=false)
      param: $vertical - (boolean) default is false return: pim - (class handle) This flips the image horizontal by default. (mirroring)
      If the boolean param is set to true, it flips the image vertical instead.
      -------------------------------------------------------------------

      * rotate

      rotate($degree, $backgroundColor=127)
      param: $degree - (integer) valid is -360 0 360 param: $backgroundColor - (integer) valid is 0 - 255, default is 127 return: pim - (class handle) This rotates the image. Positive values for degree rotates clockwise, negative values counter clockwise. If you use other values than 90, 180, 270, the additional space gets filled with the defined background color.
      -------------------------------------------------------------------

      * brightness

      brightness($level)
      param: $level - (integer) -255 0 255 return: pim - (class handle) You can adjust brightness by defining a value between -255 and +255. Zero lets it unchanged, negative values results in darker images and positive values in lighter images.
      -------------------------------------------------------------------

      * contrast

      contrast($level)
      param: $level - (integer) -255 0 255 return: pim - (class handle) You can adjust contrast by defining a value between -255 and +255. Zero lets it unchanged, negative values results in lesser contrast and positive values in higher contrast.
      -------------------------------------------------------------------

      * grayscale

      grayscale()
      return: pim - (class handle) Turns an image into grayscale. Remove all colors.
      -------------------------------------------------------------------

      * sepia

      sepia()
      return: pim - (class handle) Turns the memory image into a colorized grayscale image with a predefined rgb-color that is known as "sepia".
      -------------------------------------------------------------------

      * colorize

      colorize($anyColor)
      param: $anyColor - (array) like css rgb or css rgba - but with values for rgb -255 - +255,  - value for alpha is float 0 - 1, 0 = transparent  1 = opaque return: pim - (class handle) Here you can adjust each of the RGB colors and optionally the alpha channel. Zero lets the channel unchanged whereas negative values results in lesser / darker parts of that channel and higher values in stronger saturisation of that channel.
      -------------------------------------------------------------------

      * negate

      negate()
      return: pim - (class handle) Turns an image into a "negative".
      -------------------------------------------------------------------

      * pixelate

      pixelate($blockSize=3)
      param: $blockSize - (integer) 1 - ??, default is 3 return: pim - (class handle) This apply the well known PixelLook to the memory image. It is stronger with higher values for blockSize.
      -------------------------------------------------------------------

      * emboss

      emboss()
      return: pim - (class handle) This apply the emboss effect to the memory image.
      -------------------------------------------------------------------

      * edgedetect

      edgedetect()
      return: pim - (class handle) This apply the edge-detect effect to the memory image.
      -------------------------------------------------------------------

      * getMemoryImage

      getMemoryImage()
      return: memoryimage - (GD-Resource) If you want apply something that isn't available with that class, you simply can check out the current memory image and apply your image - voodoo - stuff
      -------------------------------------------------------------------

      * setMemoryImage

      setMemoryImage($memoryImage)
      param: $memoryImage - (GD-Resource) return: pim - (class handle) If you are ready with your own image stuff, you can check in the memory image for further use with the class.
      -------------------------------------------------------------------

      * watermarkLogo

      watermarkLogo($pngAlphaImage, $position='center', $padding=2)
      param: $pngAlphaImage - mixed [systemfilepath or PageImageObject] to/from a PNG with transparency param: $position - (string) is one out of: N, E, S, W, C, NE, SE, SW, NW,
      - or: north, east, south, west, center, northeast, southeast, southwest, northwest
      default is 'center' param: $padding - (integer) 0 - 25, default is 5, padding to the borders in percent of the images length! return: pim - (class handle) You can pass a transparent image with its filename or as a PageImage to the method. If the watermark is bigger than the destination-image, it gets shrinked to fit into the targetimage. If it is a small watermark image you can define the position of it:
      NW - N - NE | | | W - C - E | | | SW - S - SE  
      The easiest and best way I have discovered to apply a big transparency watermark to an image is as follows:
      create a square transparent png image of e.g. 2000 x 2000 px, place your mark into the center with enough (percent) of space to the borders. You can see an example here! The $pngAlphaImage get centered and shrinked to fit into the memory image. No hassle with what width and / or height should I use?, how many space for the borders?, etc.
      -------------------------------------------------------------------

      * watermarkLogoTiled

      watermarkLogoTiled($pngAlphaImage)
      param: $pngAlphaImage - mixed [systemfilepath or PageImageObject] to/from a PNG with transparency return: pim - (class handle) Here you have to pass a tile png with transparency (e.g. something between 150-300 px?) to your bigger images. It got repeated all over the memory image starting at the top left corner.
      -------------------------------------------------------------------

      * watermarkText

      watermarkText($text, $size=10, $position='center', $padding=2, $opacity=50, $trueTypeFont=null)
      param: $text - (string) the text that you want to display on the image param: $size - (integer) 1 - 100, unit = points, good value seems to be around 10 to 15 param: $position - (string) is one out of: N, E, S, W, C, NE, SE, SW, NW,
      - or: north, east, south, west, center, northeast, southeast, southwest, northwest
      default is 'center' param: $padding - (integer) 0 - 25, default is 2, padding to the borders in percent of the images length! param: $opacity- (integer) 1 - 100, default is 50 param: $trueTypeFont - (string) systemfilepath to a TrueTypeFont, default is freesansbold.ttf (is GPL & comes with the module) return: pim - (class handle) Here you can display (dynamic) text with transparency over the memory image. You have to define your text, and optionally size, position, padding, opacity for it. And if you don't like the default font, freesansbold, you have to point to a TrueTypeFont-File of your choice.
      Please have a look to example output: http://processwire.com/talk/topic/4264-release-page-image-manipulator/page-2#entry41989
      -------------------------------------------------------------------





      PageImage Manipulator - Example Output


    • By d'Hinnisdaël
      Format Datetime fields as Carbon instances.
      You can find the latest release and the complete readme on Github.
      Installation
      composer require daun/datetime-carbon-format Usage
      All Datetime fields will now be formatted as Carbon instances instead of strings. Some examples:
      // $page->date is a Datetime field // Output format: j/n/Y echo $page->date; // 20/10/2020 echo $page->date->add('7 days'); // 27/10/2020 echo $page->date->format('l, F j'); // Monday, October 20 echo $page->date->year; // 2020 echo $page->date->diffForHumans(); // 28 minutes ago Frontend only
      The ProcessWire admin seems to expect datetime fields to be strings. This module will only return Carbon instances on frontend page views.
      Date output format
      When casting a Carbon instance to a string (usually when outputting the field in a template), the field's date output format will be respected.
      Links
      GitHub • Readme • Carbon docs
       
       
      PS. I remember reading about a Carbon module in a recent newsletter, but couldn't find it anywhere. Was that you, @bernhard?
×
×
  • Create New...