Group activity

  • Jerome Bakker replied on the discussion topic How to Find rss feed of my website Safalaya.com ?
    First make sure in the site settings RSS isn't disabled. Then (as a logged in user) when you go to a page that supports RSS (like /blog/all, /activity) in the footer there is a link to the RSS feed. view reply
  • How to Find rss feed of my website Safalaya.com ? URL : https://safalaya.com
  • Yes we share some variables between frontend and backend. You could fix it in your theme by also extending the admin.css and changing the font color or background color just for the admin side. view reply
  • I've made a dark theme and using a font near white. The theme seems also to be used for admin backend and so the nearly white font is there shown on white background. So it's really unreadable. It would be a good idea, all colors of...
  • Maybe this commit in Elgg 7 might fix your issue also: https://github.com/Elgg/Elgg/commit/fa560a9b9fb0fb95045358da7b5068bdec8edd1e view reply
  • Jerome Bakker replied on the discussion topic Theme Sandbox Plugin
    The Theme Sandbox is there to show all the different element the developers can use in Elgg. Also for designers so they can design a nice template/theme for a customer. A link to the Theme Sandbox can be found in the Administration section, then... view reply
  • Slonmamont-elgg added a new discussion topic Theme Sandbox Plugin
    How does THeme Sandbox plugin work? I dont see any settings or pages associated with it...
  • Slonmamont-elgg replied on the discussion topic Laminas - Simfony Amason SES email
    Thanks, Nikolai, looks like a new plugin to intercept the email process...  I also found a realtively easy fix ... Remove this line: 'Content-Transfer-Encoding' =>... view reply
  • Nikolai Shcherbin replied on the discussion topic Laminas - Simfony Amason SES email
    To bypass Laminas email transport in Elgg and integrate direct Amazon SES via custom Symfony DI container override, follow this exact implementation flow. This replaces Elgg's default Laminas mailer with your custom transport factory,... view reply
  • Slonmamont-elgg added a new discussion topic Laminas - Simfony Amason SES email
    I upgraded to 6.3.4 (from 6.2) hoping to get rid off Laminas adding double headers to the emails that Amazon rejects. Installed Amazon SES bridge and followed the instrucitons how to use it but Elgg keeps using Laminas. Is there a way to get...
    • To bypass Laminas email transport in Elgg and integrate direct Amazon SES via custom Symfony DI container override, follow this exact implementation flow. This replaces Elgg's default Laminas mailer with your custom transport factory, enabling amazonses config while avoiding Symfony Mailer Bridge conflicts.

      Core Files Setup

      elgg-services.php (in your plugin's root or core override path):

      • Add DI binding: 'email.transport' => \DI\create(\MyPlugin\Core\Notifications\Email\Transport\EmailTransport::class)->constructor(\DI\get('config'), \DI\get('events')).
      • Purpose: Overrides Elgg's Laminas transport factory with your custom EmailTransport class, injecting Elgg's Config and EventsService. This hooks into Elgg's mailer pipeline without touching core Laminas code.

      Bootstrap.php (plugin's main boot file):

      • Add: _elgg_services()->set('mailer', elgg()->{'email.transport'}->build());.
      • Purpose: Manually builds and registers the mailer service post-DI, ensuring Elgg's elgg_send_email() uses your transport instead of Laminas default. Runs early in boot sequence.

      Transport Factory Class

      EmailTransport.php (namespace MyPlugin\Core\Notifications\Email\Transport):

      • Create class implementing Laminas TransportInterface factory pattern.
      • Constructor takes Elgg Config and EventsService.
      • build() method: Reads $config->{'email.transport'} (set to 'amazonses' in admin), constructs transport per switch (Sendmail/SMTP/SparkPost/Mailgun/SendGrid/AmazonSes), triggers events->triggerResults('transport', 'system:email') for plugins to modify.
      • Purpose: Centralized factory decouples config from transport impl, supports multiple providers, extensible via events. For SES: instantiates AmazonSesEmailTransport.

      Amazon SES Transport Impl

      AmazonSesEmailTransport.php (namespace MyPlugin\Notifications\Email, implements Laminas\Mail\Transport\TransportInterface):

      • Constructor: Stores SES region, access_key_id, secret_access_key from config.
      • send(Laminas\Mail\Message $message): Parses Laminas message parts (text/HTML/attachments), builds SimpleEmailServiceEnvelope, sends via SimpleEmailService::sendEmail(). Logs SES errors via elgg_log(), rethrows as Laminas RuntimeException.
      • Purpose: Direct SES API transport compatible with Elgg's Laminas Message API, bypasses SMTP bridges (no double headers). Handles multipart MIME parsing natively.

      SES Low-Level Classes

      SimpleEmailService.php (namespace MyPlugin\Notifications\Email\AmazonSes):

      • AWS SigV4 signer + GuzzleHttp\Client for SES REST API calls.
      • Methods: sendEmail($envelope) (main), listIdentities(), verifyEmailIdentity(), etc. Builds canonical requests, signs with HMAC-SHA256, handles XML responses.
      • Purpose: Pure PHP SES client (no SDK deps), manages auth/requests. Requires guzzlehttp/guzzle composer dep.

      SimpleEmailServiceEnvelope.php (same namespace):

      • Builds SES SendEmail/SendRawEmail params from Laminas message data.
      • Supports To/Cc/Bcc/ReplyTo/attachments/HTML/text, validates required fields, builds raw base64 MIME for attachments.
      • Purpose: Converts Laminas Message to SES envelope format, handles MIME boundaries/encoding.

      SimpleEmailServiceError.php (same namespace):

      • Error handler with SES-specific codes/messages (e.g., MessageRejected, Throttling).
      • Purpose: Structured exception mapping for debugging.

      Final Result & Config

      • Outcome: Elgg mailer fully bypasses Laminas transport (no double headers), uses direct SES API via your factory. Amazon SES Bridge plugin becomes redundant—uninstall it. Symfony Mailer not involved (custom DI override).
      • Admin Config (via Elgg email settings or plugin):
      $CONFIG->{'email.transport'} = 'amazonses';
      $CONFIG->{'email.amazonses_region'} = 'us-east-1';
      $CONFIG->{'email.amazonses_access_key_id'} = 'YOUR_KEY';
      $CONFIG->{'email.amazonses_secret_access_key'} = 'YOUR_SECRET';
      

      Deploy in plugin (autoload PSR-4 namespaces), clear caches, test elgg_send_email(). Handles attachments/multipart, events-extensible.

       

    • Thanks, Nikolai, looks like a new plugin to intercept the email process... 

      I also found a realtively easy fix ...

      Remove this line:

      'Content-Transfer-Encoding' => '8bit',

      from /var/www/html/vendor/elgg/elgg/engine/classes/Elgg/EmailService.php
      tested and works fine exept that it coould be refreshed on the next Elgg update...

  • ChrisFr replied on the discussion topic Elgg 6.3.3 - Pages plugin
    Absolutely perfect ! Thanks again. view reply
  • Nikolai Shcherbin replied on the discussion topic Elgg 6.3.3 - Pages plugin
    Forgot about saving... Add a new event in your custom plugin: elgg-plugin.php 'events' => [         'fields' => [             'object:page' =>... view reply
  • ChrisFr replied on the discussion topic Elgg 6.3.3 - Pages plugin
    Thank you Nikolai. It works well ! But the writing dropdown list remains visible and displays "private". Is there a way to hide it? (I clear the cache before each test I run.) view reply
  • Nikolai Shcherbin replied on the discussion topic Elgg 6.3.3 - Pages plugin
    I assume you mean 'Write access' field in the form. make the pages in the pages plugin always "private" You need to create an event in your custom plugin: elgg-plugin.php 'events' => [    ... view reply
  • ChrisFr added a new discussion topic Elgg 6.3.3 - Pages plugin
    Hello, How can I make the pages in the pages plugin always "private" and remove the access dropdown list ? What do I need to change in the code ? Chris
    • Thank you Nikolai.

      It works well !

      But the writing dropdown list remains visible and displays "private".

      Is there a way to hide it?

      (I clear the cache before each test I run.)

    • Forgot about saving...

      Add a new event in your custom plugin:

      elgg-plugin.php

      'events' => [
              'fields' => [
                  'object:page' => [
                      \MyPlugin\Pages\FieldsHandler::class => ['priority' => 501],
                  ],
              ],
      ],

      Create a new file \mod\my_plugin\classes\MyPlugin\Pages\FieldsHandler.php

      <?php
      
      namespace MyPlugin\Pages;
      
      class FieldsHandler {
          
          public function __invoke(\Elgg\Event $event): ?array {
              $result = $event->getValue();
              
              foreach ($result as $k => $field) {
                  if (elgg_extract('name', $field) === 'write_access_id') {
                      unset($result[$k]);
                  }
              }
              
              $result = array_values($result);
              
              return $result;
          }
      }

      Note: your custom plugin must be placed under 'Pages' plugin on the /admin/plugins page.

       

       

    • Absolutely perfect !

      Thanks again.

  • JanS replied on the discussion topic some missing functions
    Thank you, Jerome. I will follow your advice and see what I can find. I fixed the poll plugin functionality with a small edit to Bootstrap and putting the chart.js files inside the plugin, but if there is a better way, I will try... view reply
  • Jerome Bakker replied on the discussion topic some missing functions
    At first glance it looks like a javascript loading issue. You already mentioned the chart.js from Poll not loading. Check the browser console (F12) to see if there are any more javascript issues. Try to isolate the issue to a single plugin (by... view reply
  • JanS replied on the discussion topic some missing functions
    Thanks. I will do that. I figured out what happens in poll: it does not load chart.js view reply
  • Nikolai Shcherbin replied on the discussion topic some missing functions
    Ask the developers of these plugins or open the issues on GitHub: - Poll - GitHub ​- Event manager - GitHub ​- oEmbed - GitHub ​- Mmenu - GitHub view reply
  • JanS added a new discussion topic some missing functions
    Using elgg 6.3.3. Some features do not work (on a couple of forums I administer): poll results are not displayed the end date of an event is not editable unless i clear the cache first oembed does not transform links to youtube...
    • Thanks. I will do that.

      I figured out what happens in poll: it does not load chart.js

    • At first glance it looks like a javascript loading issue. You already mentioned the chart.js from Poll not loading.

      Check the browser console (F12) to see if there are any more javascript issues.

      Try to isolate the issue to a single plugin (by disabling plugins one by one) and hopefully you can find the origin of the issue.

      We have several website where all these plugins are active at the same time and don't have an issue. If you find it, please contact us.

    • Thank you, Jerome.

      I will follow your advice and see what I can find.

      I fixed the poll plugin functionality with a small edit to Bootstrap and putting the chart.js files inside the plugin, but if there is a better way, I will try that. 

      I posted the event manager issue to github.