/** * This function is called when the Elgg system gets initialized * * @return void */ function newsletter_init() { // register page handler elgg_register_page_handler("newsletter", "newsletter_page_handler"); // Register entity_type for search elgg_register_entity_type("object", "newsletter"); // CSS & JS elgg_extend_view("css/elgg", "css/newsletter/site"); elgg_register_simplecache_view("js/newsletter/embed.js"); // extend views elgg_extend_view("groups/sidebar/my_status", "newsletter/sidebar/subscribe"); elgg_extend_view("register/extend", "newsletter/register"); // create group setting if (newsletter_is_group_enabled()) { add_group_tool_option("newsletter", elgg_echo("newsletter:group:tool_option"), true); } // widget elgg_register_widget_type("newsletter_subscribe", elgg_echo("newsletter:sidebar:subscribe:title"), elgg_echo("newsletter:widget:subscribe:description"), array("index", "groups")); // register plugin hooks elgg_register_plugin_hook_handler("cron", "hourly", "newsletter_cron_handler"); elgg_register_plugin_hook_handler("access:collections:write", "all", "newsletter_write_access_handler", 600); // needs to be after groups elgg_register_plugin_hook_handler("register", "menu:page", "newsletter_register_page_menu_handler"); elgg_register_plugin_hook_handler("register", "menu:newsletter_steps", "newsletter_register_newsletter_steps_menu_handler"); elgg_register_plugin_hook_handler("register", "menu:entity", "newsletter_register_entity_menu_handler"); elgg_register_plugin_hook_handler("register", "menu:owner_block", "newsletter_register_owner_block_menu_handler"); elgg_register_plugin_hook_handler("register", "menu:filter", "newsletter_register_filter_menu_handler"); elgg_register_plugin_hook_handler("register", "menu:longtext", "newsletter_register_longtext_menu_handler"); elgg_register_plugin_hook_handler("register", "menu:newsletter_buttons", "newsletter_register_buttons_menu_handler"); elgg_register_plugin_hook_handler("register", "menu:longtext", "newsletter_register_longtext_menu_handler"); elgg_register_plugin_hook_handler("usersettings:save", "user", "newsletter_usersettings_save_handler"); elgg_register_plugin_hook_handler("register", "user", "newsletter_register_user_handler"); elgg_register_plugin_hook_handler("entity:icon:url", "object", "newsletter_icon_hook"); elgg_register_plugin_hook_handler("widget_url", "widget_manager", "newsletter_widget_url_handler"); elgg_register_plugin_hook_handler("notification_type_subtype", "tag_tools", "newsletter_tag_tools_notifications"); // extend public pages elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'newsletter_public_pages'); // register event handlers elgg_register_event_handler("upgrade", "system", "newsletter_upgrade_event_handler"); elgg_register_event_handler("create", "member_of_site", "newsletter_join_site_event_handler"); // register actions elgg_register_action("newsletter/edit", dirname(__FILE__) . "/actions/edit.php"); elgg_register_action("newsletter/edit/schedule", dirname(__FILE__) . "/actions/edit/schedule.php"); elgg_register_action("newsletter/edit/content", dirname(__FILE__) . "/actions/edit/content.php"); elgg_register_action("newsletter/edit/template", dirname(__FILE__) . "/actions/edit/template.php"); elgg_register_action("newsletter/edit/template_to_custom", dirname(__FILE__) . "/actions/edit/template_to_custom.php"); elgg_register_action("newsletter/edit/recipients", dirname(__FILE__) . "/actions/edit/recipients.php"); elgg_register_action("newsletter/delete", dirname(__FILE__) . "/actions/delete.php"); elgg_register_action("newsletter/send", dirname(__FILE__) . "/actions/send.php"); elgg_register_action("newsletter/subscribe", dirname(__FILE__) . "/actions/subscribe.php", "public"); elgg_register_action("newsletter/unsubscribe", dirname(__FILE__) . "/actions/unsubscribe.php", "public"); elgg_register_action("newsletter/subscriptions", dirname(__FILE__) . "/actions/subscriptions.php"); elgg_register_action("newsletter/duplicate", dirname(__FILE__) . "/actions/duplicate.php"); elgg_register_action("newsletter/preview_mail", dirname(__FILE__) . "/actions/preview_mail.php"); elgg_register_action("newsletter/template/edit", dirname(__FILE__) . "/actions/template/edit.php"); elgg_register_action("newsletter/template/delete", dirname(__FILE__) . "/actions/template/delete.php"); }
/** * This function is called when the Elgg system gets initialized * * @return void */ function newsletter_init() { // register page handler elgg_register_page_handler('newsletter', '\\ColdTrick\\Newsletter\\PageHandler::newsletter'); // Register entity_type for search elgg_register_entity_type('object', 'newsletter'); // CSS & JS elgg_extend_view('css/elgg', 'css/newsletter.css'); elgg_register_simplecache_view('js/newsletter/embed.js'); // extend views elgg_extend_view('groups/sidebar/my_status', 'newsletter/sidebar/subscribe'); elgg_extend_view('register/extend', 'newsletter/register'); // create group setting if (newsletter_is_group_enabled()) { add_group_tool_option('newsletter', elgg_echo('newsletter:group:tool_option'), true); } // widget elgg_register_widget_type('newsletter_subscribe', elgg_echo('newsletter:sidebar:subscribe:title'), elgg_echo('newsletter:widget:subscribe:description'), ['index', 'groups']); // register plugin hooks elgg_register_plugin_hook_handler('cron', 'hourly', '\\ColdTrick\\Newsletter\\Cron::sendNewsletters'); elgg_register_plugin_hook_handler('access:collections:write', 'all', '\\ColdTrick\\Newsletter\\Access::writeAccessCollections', 600); // needs to be after groups elgg_register_plugin_hook_handler('register', 'menu:page', '\\ColdTrick\\Newsletter\\Menus::pageRegister'); elgg_register_plugin_hook_handler('register', 'menu:newsletter_steps', '\\ColdTrick\\Newsletter\\Menus::newsletterSteps'); elgg_register_plugin_hook_handler('register', 'menu:entity', '\\ColdTrick\\Newsletter\\Menus::entityRegister'); elgg_register_plugin_hook_handler('register', 'menu:owner_block', '\\ColdTrick\\Newsletter\\Menus::ownerBlockRegister'); elgg_register_plugin_hook_handler('register', 'menu:filter', '\\ColdTrick\\Newsletter\\Menus::filterRegister'); elgg_register_plugin_hook_handler('register', 'menu:newsletter_buttons', '\\ColdTrick\\Newsletter\\Menus::newsletterButtonsRegister'); elgg_register_plugin_hook_handler('register', 'menu:longtext', '\\ColdTrick\\Newsletter\\Menus::longtextRegister'); elgg_register_plugin_hook_handler('usersettings:save', 'user', '\\ColdTrick\\Newsletter\\User::convertEmailSubscriptionToUserSetting'); elgg_register_plugin_hook_handler('register', 'user', '\\ColdTrick\\Newsletter\\User::subscribeToSiteNewsletter'); elgg_register_plugin_hook_handler('widget_url', 'widget_manager', '\\ColdTrick\\Newsletter\\Widgets::widgetURL'); elgg_register_plugin_hook_handler('notification_type_subtype', 'tag_tools', '\\ColdTrick\\Newsletter\\TagTools::notificationTypeSubtype'); elgg_register_plugin_hook_handler('likes:is_likable', 'object:' . \Newsletter::SUBTYPE, '\\Elgg\\Values::getTrue'); // extend public pages elgg_register_plugin_hook_handler('public_pages', 'walled_garden', '\\ColdTrick\\Newsletter\\Site::publicPages'); // register event handlers elgg_register_event_handler('upgrade', 'system', '\\ColdTrick\\Newsletter\\Upgrade::urlPostfix'); elgg_register_event_handler('create', 'relationship', '\\ColdTrick\\Newsletter\\Site::join'); // register actions elgg_register_action('newsletter/edit', dirname(__FILE__) . '/actions/edit.php'); elgg_register_action('newsletter/edit/schedule', dirname(__FILE__) . '/actions/edit/schedule.php'); elgg_register_action('newsletter/edit/content', dirname(__FILE__) . '/actions/edit/content.php'); elgg_register_action('newsletter/edit/template', dirname(__FILE__) . '/actions/edit/template.php'); elgg_register_action('newsletter/edit/template_to_custom', dirname(__FILE__) . '/actions/edit/template_to_custom.php'); elgg_register_action('newsletter/edit/recipients', dirname(__FILE__) . '/actions/edit/recipients.php'); elgg_register_action('newsletter/delete', dirname(__FILE__) . '/actions/delete.php'); elgg_register_action('newsletter/send', dirname(__FILE__) . '/actions/send.php'); elgg_register_action('newsletter/subscribe', dirname(__FILE__) . '/actions/subscribe.php', 'public'); elgg_register_action('newsletter/unsubscribe', dirname(__FILE__) . '/actions/unsubscribe.php', 'public'); elgg_register_action('newsletter/subscriptions', dirname(__FILE__) . '/actions/subscriptions.php'); elgg_register_action('newsletter/duplicate', dirname(__FILE__) . '/actions/duplicate.php'); elgg_register_action('newsletter/preview_mail', dirname(__FILE__) . '/actions/preview_mail.php'); elgg_register_action('newsletter/template/edit', dirname(__FILE__) . '/actions/template/edit.php'); elgg_register_action('newsletter/template/delete', dirname(__FILE__) . '/actions/template/delete.php'); }
/** * Add a menu item in the owner block menu of a group * * @param string $hook name of the hook * @param string $type type of the hook * @param array $returnvalue Default menu items * @param array $params params for the hook * * @return array Menu items */ public static function ownerBlockRegister($hook, $type, $returnvalue, $params) { $entity = elgg_extract('entity', $params); if (!elgg_instanceof($entity, 'group')) { return; } if (!newsletter_is_group_enabled($entity)) { return; } $returnvalue[] = \ElggMenuItem::factory(['name' => 'newsletter', 'text' => elgg_echo('newsletter:menu:owner_block:group'), 'href' => 'newsletter/group/' . $entity->getGUID(), 'is_trusted' => true]); return $returnvalue; }
<?php /** * (un)subscribe to the newsletter of the container entity * This is shown in the sidebar * * @uses $vars['entity'] The container entity to (un)subscribe to/from */ $entity = elgg_extract("entity", $vars); $display_subbox = false; if (elgg_instanceof($entity, "group")) { if (newsletter_is_group_enabled($entity)) { $display_subbox = true; } } else { $display_subbox = true; } if ($display_subbox) { $title = elgg_echo("newsletter:sidebar:subscribe:title"); $content = elgg_view_form("newsletter/subscribe", array(), array("entity" => $entity)); echo elgg_view_module("aside", $title, $content); }
/** * Add a menu item in the owner block menu of a group * * @param string $hook name of the hook * @param string $type type of the hook * @param array $returnvalue Default menu items * @param array $params params for the hook * * @return array Menu items */ function newsletter_register_owner_block_menu_handler($hook, $type, $returnvalue, $params) { $result = $returnvalue; if (!empty($params) && is_array($params)) { $entity = elgg_extract("entity", $params); if (!empty($entity) && elgg_instanceof($entity, "group")) { if (newsletter_is_group_enabled($entity)) { $result[] = ElggMenuItem::factory(array("name" => "newsletter", "text" => elgg_echo("newsletter:menu:owner_block:group"), "href" => "newsletter/group/" . $entity->getGUID(), "is_trusted" => true)); } } } return $result; }
<?php /** * List all the newsletter in this group * * @uses elgg_get_page_owner_entity() the group to list the newsletter from */ $filter = false; $page_owner = elgg_get_page_owner_entity(); if (empty($page_owner) || !elgg_instanceof($page_owner, 'group')) { register_error(elgg_echo('pageownerunavailable', [elgg_get_page_owner_guid()])); forward(REFERER); } if (!newsletter_is_group_enabled($page_owner)) { register_error(elgg_echo('newsletter:group:error:not_enabled')); forward($page_owner->getURL()); } // build breadcrumb elgg_push_breadcrumb(elgg_echo('newsletter:breadcrumb:site'), 'newsletter/site'); elgg_push_breadcrumb($page_owner->name); // build page elements if ($page_owner->canEdit()) { elgg_register_title_button(); $filter = get_input('filter'); if (empty($filter)) { $filter = 'concept'; // input is used in filter tabs also set_input('filter', $filter); } } $title_text = elgg_echo('newsletter:group:title', [$page_owner->name]);
*/ elgg_gatekeeper(); elgg_require_js("newsletter/edit"); $page_owner = elgg_get_page_owner_entity(); $container_guid = 0; // check if we have access if (elgg_instanceof($page_owner, "user")) { // access to site newsletters is only for admins if ($page_owner->isAdmin()) { $container_guid = elgg_get_site_entity()->getGUID(); } else { forward(REFERER); } } elseif (elgg_instanceof($page_owner, "group")) { // only for group owners/admins if (newsletter_is_group_enabled($page_owner) && $page_owner->canEdit()) { $container_guid = $page_owner->getGUID(); } else { forward(REFERER); } } else { forward(REFERER); } // breadcrumb elgg_push_breadcrumb(elgg_echo("newsletter:breadcrumb:site"), "newsletter/site"); if (elgg_instanceof($page_owner, "group")) { elgg_push_breadcrumb($page_owner->name, "newsletter/group/" . $page_owner->getGUID()); } elgg_push_breadcrumb(elgg_echo("add")); // build page elements $title_text = elgg_echo("newsletter:add:title");
$options = array("types" => array("site", "group"), "relationship" => NewsletterSubscription::SUBSCRIPTION, "relationship_guid" => $entity->getGUID(), "limit" => false, "wheres" => array("(e.guid NOT IN (" . implode(",", $processed_subscriptions) . "))")); $subscriptions = elgg_get_entities_from_relationship($options); if (!empty($subscriptions)) { $title = elgg_echo("newsletter:subscriptions:other:title"); $content = elgg_view("output/longtext", array("value" => elgg_echo("newsletter:subscriptions:other:description"), "class" => "mtn mbs")); $content .= "<table class='elgg-table-alt'>"; $content .= "<tr>"; $content .= "<th> </th>"; $content .= "<th class='newsletter-settings-small'>" . elgg_echo("on") . "</th>"; $content .= "<th class='newsletter-settings-small'>" . elgg_echo("off") . "</th>"; $content .= "</tr>"; $subscriptions_order = array(); $subscriptions_content = array(); foreach ($subscriptions as $subscription) { // check if group and enabled or site if (elgg_instanceof($subscription, "site") || elgg_instanceof($subscription, "group") && newsletter_is_group_enabled($subscription)) { $subscriptions_order[$subscription->getGUID()] = $subscription->name; $on = ""; $off = "checked='checked'"; if (newsletter_check_user_subscription($entity, $subscription)) { $on = "checked='checked'"; $off = ""; } $subscriptions_content[$subscription->getGUID()] = "<tr>"; $subscriptions_content[$subscription->getGUID()] .= "<td>" . $subscription->name . "</td>"; $subscriptions_content[$subscription->getGUID()] .= "<td class='newsletter-settings-small'><input type='radio' name='subscriptions[" . $subscription->getGUID() . "]' value='1' " . $on . " /></td>"; $subscriptions_content[$subscription->getGUID()] .= "<td class='newsletter-settings-small'><input type='radio' name='subscriptions[" . $subscription->getGUID() . "]' value='0' " . $off . " /></td>"; $subscriptions_content[$subscription->getGUID()] .= "</tr>"; } } natcasesort($subscriptions_order);
$content .= elgg_format_element('table', ['class' => 'elgg-table-alt'], $rows); echo elgg_view_module('info', elgg_echo('newsletter:subscriptions:groups:title'), $content); } } // other group subscriptions $subscriptions = elgg_get_entities_from_relationship(['types' => ['site', 'group'], 'relationship' => NewsletterSubscription::SUBSCRIPTION, 'relationship_guid' => $entity->getGUID(), 'limit' => false, 'wheres' => ['(e.guid NOT IN (' . implode(',', $processed_subscriptions) . '))']]); if (!empty($subscriptions)) { $header_row = elgg_format_element('th', [], ' '); $header_row .= elgg_format_element('th', ['class' => 'newsletter-settings-small'], elgg_echo('on')); $header_row .= elgg_format_element('th', ['class' => 'newsletter-settings-small'], elgg_echo('off')); $rows = elgg_format_element('tr', [], $header_row); $subscriptions_order = []; $subscriptions_content = []; foreach ($subscriptions as $subscription) { // check if group and enabled or site if (elgg_instanceof($subscription, 'site') || elgg_instanceof($subscription, 'group') && newsletter_is_group_enabled($subscription)) { $subscriptions_order[$subscription->getGUID()] = $subscription->name; $has_subscription = newsletter_check_user_subscription($entity, $subscription); $subscription_row_data = elgg_format_element('td', [], $subscription->name); $subscription_row_data .= elgg_format_element('td', ['class' => 'newsletter-settings-small'], elgg_view('input/radio', ['name' => "subscriptions[{$subscription->getGUID()}]", 'value' => '1', 'checked' => $has_subscription])); $subscription_row_data .= elgg_format_element('td', ['class' => 'newsletter-settings-small'], elgg_view('input/radio', ['name' => "subscriptions[{$subscription->getGUID()}]", 'value' => '0', 'checked' => !$has_subscription])); $subscriptions_content[$subscription->getGUID()] = elgg_format_element('tr', [], $subscription_row_data); } } natcasesort($subscriptions_order); foreach ($subscriptions_order as $guid => $dummy) { $rows .= $subscriptions_content[$guid]; } $content = elgg_view('output/longtext', ['value' => elgg_echo('newsletter:subscriptions:other:description'), 'class' => 'mtn mbs']); $content .= elgg_format_element('table', ['class' => 'elgg-table-alt'], $rows); echo elgg_view_module('info', elgg_echo('newsletter:subscriptions:other:title'), $content);