diff options
| author | bitweaver.org <bitweaver@users.sourceforge.net> | 2005-12-09 06:59:54 +0000 |
|---|---|---|
| committer | bitweaver.org <bitweaver@users.sourceforge.net> | 2005-12-09 06:59:54 +0000 |
| commit | e686c2762faae2d487381aede0ddcc9662ebbd52 (patch) | |
| tree | 8b30cde0c76c96e8f74c462244930979f1559548 | |
| download | newsletters-e686c2762faae2d487381aede0ddcc9662ebbd52.tar.gz newsletters-e686c2762faae2d487381aede0ddcc9662ebbd52.tar.bz2 newsletters-e686c2762faae2d487381aede0ddcc9662ebbd52.zip | |
IMPORT from TikiPro HEAD _p_tp_newsletters
| -rw-r--r-- | admin/admin_newsletter_subscriptions.php | 154 | ||||
| -rw-r--r-- | admin/index.php | 191 | ||||
| -rw-r--r-- | admin/schema_inc.php | 61 | ||||
| -rw-r--r-- | icons/pkg_newsletters.png | bin | 0 -> 2867 bytes | |||
| -rw-r--r-- | index.php | 189 | ||||
| -rw-r--r-- | nl_lib.php | 280 | ||||
| -rw-r--r-- | send.php | 190 | ||||
| -rw-r--r-- | templates/admin_newsletter_subscriptions.tpl | 84 | ||||
| -rw-r--r-- | templates/admin_newsletters.tpl | 96 | ||||
| -rw-r--r-- | templates/confirm_newsletter_subscription.tpl | 9 | ||||
| -rw-r--r-- | templates/index.php | 6 | ||||
| -rw-r--r-- | templates/menu_newsletters.tpl | 5 | ||||
| -rw-r--r-- | templates/menu_newsletters_admin.tpl | 4 | ||||
| -rw-r--r-- | templates/newsletter_byebye.tpl | 6 | ||||
| -rw-r--r-- | templates/newsletter_welcome.tpl | 10 | ||||
| -rw-r--r-- | templates/newsletters.tpl | 98 | ||||
| -rw-r--r-- | templates/send_newsletters.tpl | 108 | ||||
| -rw-r--r-- | tiki_setup_inc.php | 9 |
18 files changed, 1500 insertions, 0 deletions
diff --git a/admin/admin_newsletter_subscriptions.php b/admin/admin_newsletter_subscriptions.php new file mode 100644 index 0000000..45ab8d3 --- /dev/null +++ b/admin/admin_newsletter_subscriptions.php @@ -0,0 +1,154 @@ +<?php + +// $Header: /cvsroot/bitweaver/_bit_newsletters/admin/admin_newsletter_subscriptions.php,v 1.1 2005/12/09 06:59:54 bitweaver Exp $ + +// Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al. +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. + +// Initialization +require_once( '../../tiki_setup_inc.php' ); + +include_once( NEWSLETTERS_PKG_PATH.'nl_lib.php' ); + +if ($feature_newsletters != 'y') { + $smarty->assign('msg', tra("This feature is disabled").": feature_newsletters"); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +if (!isset($_REQUEST["nl_id"])) { + $smarty->assign('msg', tra("No newsletter indicated")); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +$smarty->assign('nl_id', $_REQUEST["nl_id"]); + +$smarty->assign('individual', 'n'); + +if ($userlib->object_has_one_permission($_REQUEST["nl_id"], 'newsletter')) { + $smarty->assign('individual', 'y'); + + if ($tiki_p_admin != 'y') { + $perms = $userlib->get_permissions(0, -1, 'perm_name_desc', '', 'newsletters'); + + foreach ($perms["data"] as $perm) { + $perm_name = $perm["perm_name"]; + + if ($userlib->object_has_permission($user, $_REQUEST["nl_id"], 'newsletter', $perm_name)) { + $$perm_name = 'y'; + + $smarty->assign("$perm_name", 'y'); + } else { + $$perm_name = 'n'; + + $smarty->assign("$perm_name", 'n'); + } + } + } +} + +if ($tiki_p_admin_newsletters != 'y') { + $smarty->assign('msg', tra("You dont have permission to use this feature")); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +if ($_REQUEST["nl_id"]) { + $info = $nllib->get_newsletter($_REQUEST["nl_id"]); +} else { + $info = array(); + + $info["name"] = ''; + $info["description"] = ''; + $info["allow_any_sub"] = 'n'; + $info["frequency"] = 7 * 24 * 60 * 60; +} + +$smarty->assign('nl_info', $info); + +if (isset($_REQUEST["remove"])) { + check_ticket('admin-nl-subsriptions'); + $nllib->remove_newsletter_subscription($_REQUEST["remove"], $_REQUEST["email"]); +} + +if (isset($_REQUEST["add_all"])) { + check_ticket('admin-nl-subsriptions'); + $nllib->add_all_users($_REQUEST["nl_id"]); +} + +if (isset($_REQUEST["save"])) { + check_ticket('admin-nl-subsriptions'); + $sid = $nllib->newsletter_subscribe($_REQUEST["nl_id"], $_REQUEST["email"]); +} + +if ( empty( $_REQUEST["sort_mode"] ) ) { + $sort_mode = 'subscribed_desc'; +} else { + $sort_mode = $_REQUEST["sort_mode"]; +} + +if (!isset($_REQUEST["offset"])) { + $offset = 0; +} else { + $offset = $_REQUEST["offset"]; +} + +$smarty->assign_by_ref('offset', $offset); + +if (isset($_REQUEST["find"])) { + $find = $_REQUEST["find"]; +} else { + $find = ''; +} + +$smarty->assign('find', $find); + +$smarty->assign_by_ref('sort_mode', $sort_mode); +$channels = $nllib->list_newsletter_subscriptions($_REQUEST["nl_id"], $offset, $maxRecords, $sort_mode, $find); + +$cant_pages = ceil($channels["cant"] / $maxRecords); +$smarty->assign_by_ref('cant_pages', $cant_pages); +$smarty->assign('actual_page', 1 + ($offset / $maxRecords)); + +if ($channels["cant"] > ($offset + $maxRecords)) { + $smarty->assign('next_offset', $offset + $maxRecords); +} else { + $smarty->assign('next_offset', -1); +} + +// If offset is > 0 then prev_offset +if ($offset > 0) { + $smarty->assign('prev_offset', $offset - $maxRecords); +} else { + $smarty->assign('prev_offset', -1); +} + +$smarty->assign_by_ref('channels', $channels["data"]); + +// Fill array with possible number of questions per page +$freqs = array(); + +for ($i = 0; $i < 90; $i++) { + $aux["i"] = $i; + + $aux["t"] = $i * 24 * 60 * 60; + $freqs[] = $aux; +} + +$smarty->assign('freqs', $freqs); + +/* +$cat_type='newsletter'; +$cat_objid = $_REQUEST["nl_id"]; +include_once( CATEGORIES_PKG_PATH.'categorize_list_inc.php' ); +*/ +ask_ticket('admin-nl-subsriptions'); +// Display the template +$gTikiSystem->display( 'tikipackage:newsletters/admin_newsletter_subscriptions.tpl'); + +?> diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..775d227 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,191 @@ +<?php + +// $Header: /cvsroot/bitweaver/_bit_newsletters/admin/Attic/index.php,v 1.1 2005/12/09 06:59:54 bitweaver Exp $ + +// Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al. +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. + +// Initialization +require_once( '../../tiki_setup_inc.php' ); + +include_once( NEWSLETTERS_PKG_PATH.'nl_lib.php' ); + +if ($feature_newsletters != 'y') { + $smarty->assign('msg', tra("This feature is disabled").": feature_newsletters"); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +if (!isset($_REQUEST["nl_id"])) { + $_REQUEST["nl_id"] = 0; +} + +$smarty->assign('nl_id', $_REQUEST["nl_id"]); + +$smarty->assign('individual', 'n'); + +if ($userlib->object_has_one_permission($_REQUEST["nl_id"], 'newsletter')) { + $smarty->assign('individual', 'y'); + + if ($tiki_p_admin != 'y') { + $perms = $userlib->get_permissions(0, -1, 'perm_name_desc', '', 'newsletters'); + + foreach ($perms["data"] as $perm) { + $perm_name = $perm["perm_name"]; + + if ($userlib->object_has_permission($user, $_REQUEST["nl_id"], 'newsletter', $perm_name)) { + $$perm_name = 'y'; + + $smarty->assign("$perm_name", 'y'); + } else { + $$perm_name = 'n'; + + $smarty->assign("$perm_name", 'n'); + } + } + } +} + +if ($tiki_p_admin_newsletters != 'y') { + $smarty->assign('msg', tra("You do not have permission to use this feature")); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +if ($_REQUEST["nl_id"]) { + $info = $nllib->get_newsletter($_REQUEST["nl_id"]); +} else { + $info = array(); + + $info["name"] = ''; + $info["description"] = ''; + $info["allow_user_sub"] = 'y'; + $info["allow_any_sub"] = 'n'; + $info["unsub_msg"] = 'y'; + $info["validate_addr"] = 'y'; +} + +$smarty->assign('info', $info); + +if (isset($_REQUEST["remove"])) { + check_ticket('admin-nl'); + $nllib->remove_newsletter($_REQUEST["remove"]); +} + +if (isset($_REQUEST["save"])) { + check_ticket('admin-nl'); + if (isset($_REQUEST["allow_user_sub"]) && $_REQUEST["allow_user_sub"] == 'on') { + $_REQUEST["allow_user_sub"] = 'y'; + } else { + $_REQUEST["allow_user_sub"] = 'n'; + } + + if (isset($_REQUEST["allow_any_sub"]) && $_REQUEST["allow_any_sub"] == 'on') { + $_REQUEST["allow_any_sub"] = 'y'; + } else { + $_REQUEST["allow_any_sub"] = 'n'; + } + + if (isset($_REQUEST["unsub_msg"]) && $_REQUEST["unsub_msg"] == 'on') { + $_REQUEST["unsub_msg"] = 'y'; + } else { + $_REQUEST["unsub_msg"] = 'n'; + } + + if (isset($_REQUEST["validate_addr"]) && $_REQUEST["validate_addr"] == 'on') { + $_REQUEST["validate_addr"] = 'y'; + } else { + $_REQUEST["validate_addr"] = 'n'; + } + + $sid = $nllib->replace_newsletter($_REQUEST["nl_id"], $_REQUEST["name"], $_REQUEST["description"], $_REQUEST["allow_user_sub"], $_REQUEST["allow_any_sub"], $_REQUEST["unsub_msg"], $_REQUEST["validate_addr"]); + /* + $cat_type='newsletter'; + $cat_objid = $sid; + $cat_desc = substr($_REQUEST["description"],0,200); + $cat_name = $_REQUEST["name"]; + $cat_href= NEWSLETTERS_PKG_URL."newsletters.php?nl_id=".$cat_objid; + include_once( CATEGORIES_PKG_PATH.'categorize_inc.php' ); + */ + $info["name"] = ''; + $info["description"] = ''; + $info["allow_user_sub"] = 'y'; + $info["allow_any_sub"] = 'n'; + $info["unsub_msg"] = 'y'; + $info["validate_addr"] = 'y'; + //$info["frequency"] = 7 * 24 * 60 * 60; + $smarty->assign('nl_id', 0); + $smarty->assign('info', $info); +} + +if ( empty( $_REQUEST["sort_mode"] ) ) { + $sort_mode = 'created_desc'; +} else { + $sort_mode = $_REQUEST["sort_mode"]; +} + +if (!isset($_REQUEST["offset"])) { + $offset = 0; +} else { + $offset = $_REQUEST["offset"]; +} + +$smarty->assign_by_ref('offset', $offset); + +if (isset($_REQUEST["find"])) { + $find = $_REQUEST["find"]; +} else { + $find = ''; +} + +$smarty->assign('find', $find); + +$smarty->assign_by_ref('sort_mode', $sort_mode); +$channels = $nllib->list_newsletters($offset, $maxRecords, $sort_mode, $find); + +$cant_pages = ceil($channels["cant"] / $maxRecords); +$smarty->assign_by_ref('cant_pages', $cant_pages); +$smarty->assign('actual_page', 1 + ($offset / $maxRecords)); + +if ($channels["cant"] > ($offset + $maxRecords)) { + $smarty->assign('next_offset', $offset + $maxRecords); +} else { + $smarty->assign('next_offset', -1); +} + +// If offset is > 0 then prev_offset +if ($offset > 0) { + $smarty->assign('prev_offset', $offset - $maxRecords); +} else { + $smarty->assign('prev_offset', -1); +} + +$smarty->assign_by_ref('channels', $channels["data"]); + +// Fill array with possible number of questions per page +/* +$freqs = array(); + +for ($i = 0; $i < 90; $i++) { + $aux["i"] = $i; + + $aux["t"] = $i * 24 * 60 * 60; + $freqs[] = $aux; +} + +$smarty->assign('freqs', $freqs); +*/ +/* +$cat_type='newsletter'; +$cat_objid = $_REQUEST["nl_id"]; +include_once( CATEGORIES_PKG_PATH.'categorize_list_inc.php' ); +*/ +ask_ticket('admin-nl'); + +// Display the template +$gTikiSystem->display( 'tikipackage:newsletters/admin_newsletters.tpl'); + +?> diff --git a/admin/schema_inc.php b/admin/schema_inc.php new file mode 100644 index 0000000..2e96914 --- /dev/null +++ b/admin/schema_inc.php @@ -0,0 +1,61 @@ +<?php + +$tables = array( + +'tiki_newsletter_subscriptions' => " + nl_id I4 PRIMARY, + email C(160) PRIMARY, + code C(32), + valid C(1), + subscribed I8 +", + +'tiki_newsletters' => " + nl_id I4 AUTO PRIMARY, + name C(200), + description X, + created I8, + last_sent I8, + editions I8, + users I8, + allow_user_sub C(1) default 'y', + allow_any_sub C(1), + unsub_msg C(1) default 'y', + validate_addr C(1) default 'y', + frequency I8 +", + +'tiki_sent_newsletters' => " + edition_id I4 AUTO PRIMARY, + nl_id I4 NOTNULL, + users I8, + sent I8, + subject C(200), + data B +" + +); + +global $gTikiInstaller; + +foreach( array_keys( $tables ) AS $tableName ) { + $gTikiInstaller->registerSchemaTable( NEWSLETTERS_PKG_DIR, $tableName, $tables[$tableName] ); +} + + +$gTikiInstaller->registerSchemaDefault( NEWSLETTERS_PKG_DIR, array( + + "INSERT INTO `".TIKI_DB_PREFIX."tiki_menu_options` (`menu_id` , `type` , `name` , `url` , `position` , `section` , `perm` , `groupname`) VALUES (42,'s','Newsletters','tiki-newsletters.php',900,'feature_newsletters','','')", + "INSERT INTO `".TIKI_DB_PREFIX."tiki_menu_options` (`menu_id` , `type` , `name` , `url` , `position` , `section` , `perm` , `groupname`) VALUES (42,'o','Send newsletters','tiki-send_newsletters.php',905,'feature_newsletters','tiki_p_admin_newsletters','')", + "INSERT INTO `".TIKI_DB_PREFIX."tiki_menu_options` (`menu_id` , `type` , `name` , `url` , `position` , `section` , `perm` , `groupname`) VALUES (42,'o','Admin newsletters','tiki-admin_newsletters.php',910,'feature_newsletters','tiki_p_admin_newsletters','')", + + "INSERT INTO `".TIKI_DB_PREFIX."users_permissions` (`perm_name`, `perm_desc`, `level`, `package`) VALUES ('tiki_p_admin_newsletters', 'Can admin newsletters', 'editors', 'newsletters')", + "INSERT INTO `".TIKI_DB_PREFIX."users_permissions` (`perm_name`, `perm_desc`, `level`, `package`) VALUES ('tiki_p_subscribe_newsletters', 'Can subscribe to newsletters', 'basic', 'newsletters')", + "INSERT INTO `".TIKI_DB_PREFIX."users_permissions` (`perm_name`, `perm_desc`, `level`, `package`) VALUES ('tiki_p_subscribe_email', 'Can subscribe any email to newsletters', 'editors', 'newsletters')", + + + "INSERT INTO `".TIKI_DB_PREFIX."tiki_preferences`(`package`,`name`,`value`) VALUES ('', 'feature_newsletters','n')" + +) ); + +?> diff --git a/icons/pkg_newsletters.png b/icons/pkg_newsletters.png Binary files differnew file mode 100644 index 0000000..5b8c836 --- /dev/null +++ b/icons/pkg_newsletters.png diff --git a/index.php b/index.php new file mode 100644 index 0000000..c795852 --- /dev/null +++ b/index.php @@ -0,0 +1,189 @@ +<?php + +// $Header: /cvsroot/bitweaver/_bit_newsletters/index.php,v 1.1 2005/12/09 06:59:54 bitweaver Exp $ + +// Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al. +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. + +// Initialization +require_once( '../tiki_setup_inc.php' ); + +include_once( NEWSLETTERS_PKG_PATH.'nl_lib.php' ); +include_once( WEBMAIL_PKG_PATH.'htmlMimeMail.php' ); + +if ($feature_newsletters != 'y') { + $smarty->assign('msg', tra("This feature is disabled").": feature_newsletters"); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +if (isset($_REQUEST["confirm_subscription"])) { + check_ticket('newsletters'); + $conf = $nllib->confirm_subscription($_REQUEST["confirm_subscription"]); + + if ($conf) { + $smarty->assign('confirm', 'y'); + + $smarty->assign('nl_info', $conf); + } +} + +$smarty->assign('unsub', 'n'); + +if (isset($_REQUEST["unsubscribe"])) { + check_ticket('newsletters'); + $conf = $nllib->unsubscribe($_REQUEST["unsubscribe"]); + + if ($conf) { + $smarty->assign('unsub', 'y'); + + $smarty->assign('nl_info', $conf); + } +} + +if (!$user && $tiki_p_subscribe_newsletters != 'y' && !isset($_REQUEST["confirm_subscription"])) { + $smarty->assign('msg', tra("You must be logged in to subscribe to newsletters")); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +if (!isset($_REQUEST["nl_id"])) { + $_REQUEST["nl_id"] = 0; +} + +$smarty->assign('nl_id', $_REQUEST["nl_id"]); + +$smarty->assign('subscribe', 'n'); +$smarty->assign('subscribed', 'n'); + +$foo = parse_url($_SERVER["REQUEST_URI"]); +$smarty->assign('url_subscribe', httpPrefix(). $foo["path"]); + +if (isset($_REQUEST["nl_id"])) { + $smarty->assign('individual', 'n'); + + if ($userlib->object_has_one_permission($_REQUEST["nl_id"], 'newsletter')) { + $smarty->assign('individual', 'y'); + + if ($tiki_p_admin != 'y') { + $perms = $userlib->get_permissions(0, -1, 'perm_name_desc', '', 'newsletters'); + + foreach ($perms["data"] as $perm) { + $perm_name = $perm["perm_name"]; + + if ($userlib->object_has_permission($user, $_REQUEST["nl_id"], 'newsletter', $perm_name)) { + $$perm_name = 'y'; + + $smarty->assign("$perm_name", 'y'); + } else { + $$perm_name = 'n'; + + $smarty->assign("$perm_name", 'n'); + } + } + } + } +} + +if ($user) { + $user_email = $tikilib->get_user_email($user); +} else { + $user_email = ''; +} + +$smarty->assign('email', $user_email); + +$smarty->assign('confirm', 'n'); + +if ($tiki_p_subscribe_newsletters == 'y') { + if (isset($_REQUEST["subscribe"])) { + check_ticket('newsletters'); + $smarty->assign('subscribed', 'y'); + + if ($tiki_p_subscribe_email != 'y') { + $_REQUEST["email"] = $userlib->get_user_email($user); + } + + // Now subscribe the email address to the newsletter + $nllib->newsletter_subscribe($_REQUEST["nl_id"], $_REQUEST["email"]); + } +} + +if (isset($_REQUEST["info"])) { + $nl_info = $nllib->get_newsletter($_REQUEST["nl_id"]); + + $smarty->assign('nl_info', $nl_info); + $smarty->assign('subscribe', 'y'); +} +/* List newsletters */ +if ( empty( $_REQUEST["sort_mode"] ) ) { + $sort_mode = 'created_desc'; +} else { + $sort_mode = $_REQUEST["sort_mode"]; +} + +if (!isset($_REQUEST["offset"])) { + $offset = 0; +} else { + $offset = $_REQUEST["offset"]; +} + +$smarty->assign_by_ref('offset', $offset); + +if (isset($_REQUEST["find"])) { + $find = $_REQUEST["find"]; +} else { + $find = ''; +} + +$smarty->assign('find', $find); + +$smarty->assign_by_ref('sort_mode', $sort_mode); +$channels = $nllib->list_newsletters($offset, $maxRecords, $sort_mode, $find); + +for ($i = 0; $i < count($channels["data"]); $i++) { + if ($userlib->object_has_one_permission($channels["data"][$i]["nl_id"], 'newsletters')) { + $channels["data"][$i]["individual"] = 'y'; + + if ($userlib->object_has_permission($user, $channels["data"][$i]["nl_id"], 'newsletter', 'tiki_p_subscribe_newsletters')) { + $channels["data"][$i]["individual_tiki_p_subscribe_newsletters"] = 'y'; + } else { + $channels["data"][$i]["individual_tiki_p_subscribe_newsletters"] = 'n'; + } + + if ($tiki_p_admin == 'y' + || $userlib->object_has_permission($user, $channels["data"][$i]["nl_id"], 'newsletter', 'tiki_p_admin_newsletters')) { + $channels["data"][$i]["individual_tiki_p_subscribe_newsletters"] = 'y'; + } + } else { + $channels["data"][$i]["individual"] = 'n'; + } +} + +$cant_pages = ceil($channels["cant"] / $maxRecords); +$smarty->assign_by_ref('cant_pages', $cant_pages); +$smarty->assign('actual_page', 1 + ($offset / $maxRecords)); + +if ($channels["cant"] > ($offset + $maxRecords)) { + $smarty->assign('next_offset', $offset + $maxRecords); +} else { + $smarty->assign('next_offset', -1); +} + +// If offset is > 0 then prev_offset +if ($offset > 0) { + $smarty->assign('prev_offset', $offset - $maxRecords); +} else { + $smarty->assign('prev_offset', -1); +} + +$smarty->assign_by_ref('channels', $channels["data"]); +ask_ticket('newsletters'); + +// Display the template +$gTikiSystem->display( 'tikipackage:newsletters/newsletters.tpl'); + +?> diff --git a/nl_lib.php b/nl_lib.php new file mode 100644 index 0000000..e27b635 --- /dev/null +++ b/nl_lib.php @@ -0,0 +1,280 @@ +<?php + +class NlLib extends TikiLib { + function NlLib() { + parent::TikiLib(); + } + + function replace_newsletter($nl_id, $name, $description, $allow_user_sub, $allow_any_sub, $unsub_msg, $validate_addr) { + if ($nl_id) { + $query = "update `".TIKI_DB_PREFIX."tiki_newsletters` set `name`=?, `description`=?, `allow_user_sub`=?, `allow_any_sub`=?, `unsub_msg`=?, `validate_addr`=? where `nl_id`=?"; + $result = $this->query($query, array($name,$description,$allow_user_sub,$allow_any_sub,$unsub_msg,$validate_addr,(int)$nl_id)); + } else { + $now = date("U"); + $query = "insert into `".TIKI_DB_PREFIX."tiki_newsletters`(`name`,`description`,`allow_user_sub`,`allow_any_sub`,`unsub_msg`,`validate_addr`,`last_sent`,`editions`,`users`,`created`) "; + $query.= " values(?,?,?,?,?,?,?,?,?,?)"; + $result = $this->query($query, array($name,$description,$allow_user_sub,$allow_any_sub,$unsub_msg,$validate_addr,(int)$now,0,0,(int)$now)); + $queryid = "select max(`nl_id`) from `".TIKI_DB_PREFIX."tiki_newsletters` where `created`=?"; + $nl_id = $this->getOne($queryid, array((int)$now)); + } + return $nl_id; + } + + function replace_edition($nl_id, $subject, $data, $users) { + $now = date("U"); + $query = "insert into `".TIKI_DB_PREFIX."tiki_sent_newsletters`(`nl_id`,`subject`,`data`,`sent`,`users`) values(?,?,?,?,?)"; + $result = $this->query($query,array((int)$nl_id,$subject,$data,(int)$now,$users)); + } + + function get_subscribers($nl_id) { + $query = "select email from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `valid`=? and `nl_id`=?"; + $result = $this->query($query, array('y',(int)$nl_id)); + $ret = array(); + while ($res = $result->fetchRow()) { + $ret[] = $res["email"]; + } + return $ret; + } + + function remove_newsletter_subscription($nl_id, $email) { + $valid = $this->getOne("select `valid` from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `nl_id`=? and `email`=?", array((int)$nl_id,$email)); + $query = "delete from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `nl_id`=? and `email`=?"; + $result = $this->query($query, array((int)$nl_id,$email)); + $this->update_users($nl_id); + } + + function newsletter_subscribe($nl_id, $email) { + global $smarty; + global $user; + global $sender_email; + $info = $this->get_newsletter($nl_id); + $smarty->assign('info', $info); + $code = md5($this->genPass()); + $now = date("U"); + if ($info["validate_addr"] == 'y') { + // Generate a code and store it and send an email with the + // URL to confirm the subscription put valid as 'n' + $foo = parse_url($_SERVER["REQUEST_URI"]); + $foopath = preg_replace('/tiki-admin_newsletter_subscriptions.php/', 'tiki-newsletters.php', $foo["path"]); + $url_subscribe = httpPrefix(). $foopath; + $query = "delete from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `nl_id`=? and `email`=?"; + $result = $this->query($query,array((int)$nl_id,$email)); + $query = "insert into `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions`(`nl_id`,`email`,`code`,`valid`,`subscribed`) values(?,?,?,?,?)"; + $result = $this->query($query,array((int)$nl_id,$email,$code,'n',(int)$now)); + // Now send an email to the address with the confirmation instructions + $smarty->assign('mail_date', date("U")); + $smarty->assign('mail_user', $user); + $smarty->assign('code', $code); + $smarty->assign('url_subscribe', $url_subscribe); + $smarty->assign('server_name', $_SERVER["SERVER_NAME"]); + $mail_data = $smarty->fetch('tikipackage:newsletters/confirm_newsletter_subscription.tpl'); + @mail($email, tra('Newsletter subscription information at '). $_SERVER["SERVER_NAME"], $mail_data, + "From: $sender_email\r\nContent-type: text/plain;charset=utf-8\r\n"); + } else { + $query = "delete from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `nl_id`=? and `email`=?"; + $result = $this->query($query,array((int)$nl_id,$email)); + $query = "insert into `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions`(`nl_id`,`email`,`code`,`valid`,`subscribed`) values(?,?,?,?,?)"; + $result = $this->query($query,array((int)$nl_id,$email,$code,'y',(int)$now)); + } + $this->update_users($nl_id); + } + + function confirm_subscription($code) { + global $smarty; + global $user; + global $sender_email; + $foo = parse_url($_SERVER["REQUEST_URI"]); + $url_subscribe = httpPrefix(). $foo["path"]; + $query = "select * from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `code`=?"; + $result = $this->query($query,array($code)); + + if (!$result->numRows()) return false; + + $res = $result->fetchRow(); + $info = $this->get_newsletter($res["nl_id"]); + $smarty->assign('info', $info); + $query = "update `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` set `valid`=? where `code`=?"; + $result = $this->query($query,array('y',$code)); + // Now send a welcome email + $smarty->assign('mail_date', date("U")); + $smarty->assign('mail_user', $user); + $smarty->assign('code', $res["code"]); + $smarty->assign('url_subscribe', $url_subscribe); + $mail_data = $smarty->fetch('tikipackage:newsletters/newsletter_welcome.tpl'); + @mail($res["email"], tra('Welcome to '). $info["name"] . tra(' at '). $_SERVER["SERVER_NAME"], $mail_data, + "From: $sender_email\r\nContent-type: text/plain;charset=utf-8\r\n"); + return $this->get_newsletter($res["nl_id"]); + } + + function unsubscribe($code) { + global $smarty; + global $user; + global $sender_email; + $foo = parse_url($_SERVER["REQUEST_URI"]); + $url_subscribe = httpPrefix(). $foo["path"]; + $query = "select * from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `code`=?"; + $result = $this->query($query,array($code)); + + if (!$result->numRows()) return false; + + $res = $result->fetchRow(); + $info = $this->get_newsletter($res["nl_id"]); + $smarty->assign('info', $info); + $smarty->assign('code', $res["code"]); + $query = "delete from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `code`=?"; + $result = $this->query($query,array($code)); + // Now send a bye bye email + $smarty->assign('mail_date', date("U")); + $smarty->assign('mail_user', $user); + $smarty->assign('url_subscribe', $url_subscribe); + $mail_data = $smarty->fetch('tikipackage:newsletters/newsletter_byebye.tpl'); + @mail($res["email"], tra('Bye bye from '). $info["name"] . tra(' at '). $_SERVER["SERVER_NAME"], $mail_data, + "From: $sender_email\r\nContent-type: text/plain;charset=utf-8\r\n"); + $this->update_users($res["nl_id"]); + return $this->get_newsletter($res["nl_id"]); + } + + function add_all_users($nl_id) { + $query = "select `email` from `".TIKI_DB_PREFIX."users_users`"; + $result = $this->query($query,array()); + while ($res = $result->fetchRow()) { + $email = $res["email"]; + if (!empty($email)) { + $this->newsletter_subscribe($nl_id, $email); + } + } + } + + function get_newsletter($nl_id) { + $query = "select * from `".TIKI_DB_PREFIX."tiki_newsletters` where `nl_id`=?"; + $result = $this->query($query,array((int)$nl_id)); + if (!$result->numRows()) return false; + $res = $result->fetchRow(); + return $res; + } + + function get_edition($edition_id) { + $query = "select * from `".TIKI_DB_PREFIX."tiki_sent_newsletters` where `edition_id`=?"; + $result = $this->query($query,array((int)$edition_id)); + if (!$result->numRows()) return false; + $res = $result->fetchRow(); + return $res; + } + + function update_users($nl_id) { + $users = $this->getOne("select count(*) from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `nl_id`=?",array((int)$nl_id)); + $query = "update `".TIKI_DB_PREFIX."tiki_newsletters` set `users`=? where `nl_id`=?"; + $result = $this->query($query,array($users,(int)$nl_id)); + } + + function list_newsletters($offset, $maxRecords, $sort_mode, $find) { + $bindvars = array(); + if ($find) { + $findesc = '%' . $find . '%'; + $mid = " where (`name` like ? or `description` like ?)"; + $bindvars[] = $findesc; + $bindvars[] = $findesc; + } else { + $mid = " "; + } + + $query = "select * from `".TIKI_DB_PREFIX."tiki_newsletters` $mid order by ".$this->convert_sortmode("$sort_mode"); + $query_cant = "select count(*) from `".TIKI_DB_PREFIX."tiki_newsletters` $mid"; + $result = $this->query($query,$bindvars,$maxRecords,$offset); + $cant = $this->getOne($query_cant,$bindvars); + $ret = array(); + + while ($res = $result->fetchRow()) { + $res["confirmed"] = $this->getOne("select count(*) from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `valid`=? and `nl_id`=?",array('y',(int)$res["nl_id"])); + $ret[] = $res; + } + $retval = array(); + $retval["data"] = $ret; + $retval["cant"] = $cant; + return $retval; + } + + function list_editions($offset, $maxRecords, $sort_mode, $find) { + $bindvars = array(); + if ($find) { + $findesc = '%' . $find . '%'; + $mid = " and (`subject` like ? or `data` like ?)"; + $bindvars[] = $findesc; + $bindvars[] = $findesc; + } else { + $mid = " "; + } + + $query = "select tsn.`edition_id`,tn.`nl_id`,`subject`,`data`,tsn.`users`,`sent`,`name` from `".TIKI_DB_PREFIX."tiki_newsletters` tn, `".TIKI_DB_PREFIX."tiki_sent_newsletters` tsn "; + $query.= " where tn.`nl_id`=tsn.`nl_id` $mid order by ".$this->convert_sortmode("$sort_mode"); + $query_cant = "select count(*) from `".TIKI_DB_PREFIX."tiki_newsletters` tn, `".TIKI_DB_PREFIX."tiki_sent_newsletters` tsn where tn.`nl_id`=tsn.`nl_id` $mid"; + $result = $this->query($query,$bindvars,$maxRecords,$offset); + $cant = $this->getOne($query_cant,$bindvars); + $ret = array(); + + while ($res = $result->fetchRow()) { + $ret[] = $res; + } + + $retval = array(); + $retval["data"] = $ret; + $retval["cant"] = $cant; + return $retval; + } + + function list_newsletter_subscriptions($nl_id, $offset, $maxRecords, $sort_mode, $find) { + $bindvars = array((int)$nl_id); + if ($find) { + $findesc = '%' . $find . '%'; + $mid = " where `nl_id`=? and (`name` like ? or `description` like ?)"; + $bindvars[] = $findesc; + $bindvars[] = $findesc; + } else { + $mid = " where `nl_id`=? "; + } + + $query = "select * from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` $mid order by ".$this->convert_sortmode("$sort_mode"); + $query_cant = "select count(*) from tiki_newsletter_subscriptions $mid"; + $result = $this->query($query,$bindvars,$maxRecords,$offset); + $cant = $this->getOne($query_cant,$bindvars); + $ret = array(); + + while ($res = $result->fetchRow()) { + $ret[] = $res; + } + $retval = array(); + $retval["data"] = $ret; + $retval["cant"] = $cant; + return $retval; + } + + function get_unsub_msg($nl_id, $email) { + $foo = parse_url($_SERVER["REQUEST_URI"]); + + $foo = str_replace('send_newsletters', 'newsletters', $foo); + $url_subscribe = httpPrefix(). $foo["path"]; + $code = $this->getOne("select `code` from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `nl_id`=? and `email`=?",array((int)$nl_id,$email)); + $url_unsub = $url_subscribe . '?unsubscribe=' . $code; + $msg = '<br/><br/>' . tra( 'You can unsubscribe from this newsletter following this link'). ": <a href='$url_unsub'>$url_unsub</a>"; + return $msg; + } + + function remove_newsletter($nl_id) { + $query = "delete from `".TIKI_DB_PREFIX."tiki_newsletters` where `nl_id`=?"; + $result = $this->query($query,array((int)$nl_id)); + $query = "delete from `".TIKI_DB_PREFIX."tiki_newsletter_subscriptions` where `nl_id`=?"; + $result = $this->query($query,array((int)$nl_id)); + $this->remove_object('newsletter', $nl_id); + return true; + } + + function remove_edition($edition_id) { + $query = "delete from `".TIKI_DB_PREFIX."tiki_sent_newsletters` where `edition_id`=$edition_id"; + $result = $this->query($query,array((int)$edition_id)); + } + +} + +$nllib = new NlLib(); + +?> diff --git a/send.php b/send.php new file mode 100644 index 0000000..7c2f0f8 --- /dev/null +++ b/send.php @@ -0,0 +1,190 @@ +<?php + +// $Header: /cvsroot/bitweaver/_bit_newsletters/Attic/send.php,v 1.1 2005/12/09 06:59:54 bitweaver Exp $ + +// Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al. +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. + +// Initialization +require_once( '../tiki_setup_inc.php' ); + +include_once( NEWSLETTERS_PKG_PATH.'nl_lib.php' ); +include_once( WEBMAIL_PKG_PATH.'htmlMimeMail.php' ); + +if ($feature_newsletters != 'y') { + $smarty->assign('msg', tra("This feature is disabled").": feature_newsletters"); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +if ($tiki_p_admin_newsletters != 'y') { + $smarty->assign('msg', tra("You dont have permission to use this feature")); + + $gTikiSystem->display( 'error.tpl' ); + die; +} + +if (!isset($_REQUEST["nl_id"])) + $_REQUEST["nl_id"] = 0; + +$smarty->assign('nl_id', $_REQUEST["nl_id"]); + +$newsletters = $nllib->list_newsletters(0, -1, 'created_desc', ''); +$smarty->assign('newsletters', $newsletters["data"]); + +$nl_info = $nllib->get_newsletter($_REQUEST["nl_id"]); +// $nl_info["name"] = ''; +// $nl_info["description"] = ''; +// $nl_info["allow_user_sub"] = 'y'; +// $nl_info["allow_any_sub"] = 'n'; +// $nl_info["unsub_msg"] = 'y'; +// $nl_info["validate_addr"] = 'y'; + +if (!isset($_REQUEST["edition_id"])) + $_REQUEST["edition_id"] = 0; + +if ($_REQUEST["edition_id"]) { + $info = $nllib->get_edition($_REQUEST["edition_id"]); +} else { + $info = array(); + + $info["data"] = ''; + $info["subject"] = ''; +} + +$smarty->assign('info', $info); + +if (isset($_REQUEST["remove"])) { + check_ticket('send-newsletter'); + $nllib->remove_edition($_REQUEST["remove"]); +} + +if (isset($_REQUEST["template_id"]) && $_REQUEST["template_id"] > 0) { + $template_data = $tikilib->get_template($_REQUEST["template_id"]); + + $_REQUEST["data"] = $template_data["content"]; + $_REQUEST["preview"] = 1; +} + +$smarty->assign('preview', 'n'); + +if (isset($_REQUEST["preview"])) { + $smarty->assign('preview', 'y'); + + //$parsed = $tikilib->parse_data($_REQUEST["content"]); + $parsed = $_REQUEST["data"]; + $smarty->assign('parsed', $parsed); + $info["data"] = $_REQUEST["data"]; + $info["subject"] = $_REQUEST["subject"]; + $smarty->assign('info', $info); +} + +$smarty->assign('presend', 'n'); + +if (isset($_REQUEST["save"])) { + check_ticket('send-newsletter'); + // Now send the newsletter to all the email addresses and save it in sent_newsletters + $smarty->assign('presend', 'y'); + + $subscribers = $nllib->get_subscribers($_REQUEST["nl_id"]); + $smarty->assign('nl_id', $_REQUEST["nl_id"]); + $smarty->assign('data', $_REQUEST["data"]); + $smarty->assign('subject', $_REQUEST["subject"]); + $cant = count($subscribers); + $smarty->assign('subscribers', $cant); +} + +$smarty->assign('emited', 'n'); + +if (isset($_REQUEST["send"])) { + check_ticket('send-newsletter'); + $subscribers = $nllib->get_subscribers($_REQUEST["nl_id"]); + + $mail = new htmlMimeMail(); + $mail->setFrom('noreply@noreply.com'); + $mail->setSubject($_REQUEST["subject"]); + $sent = 0; + + foreach ($subscribers as $email) { + $to_array = array(); + + $to_array[] = $email; + if ($nl_info["unsub_msg"] = 'y') { + $unsubmsg = $nllib->get_unsub_msg($_REQUEST["nl_id"], $email); + } else { + $unsubmsg = ' '; + } + $mail->setHeadCharset("utf-8"); + $mail->setTextCharset("utf-8"); + $mail->setHtmlCharset("utf-8"); + $mail->setFrom($sender_email); + $mail->setHTML($_REQUEST["data"] . $unsubmsg, strip_tags($_REQUEST["data"])); + + if ($mail->send($to_array, 'mail')) + $sent++; + } + + $smarty->assign('sent', $sent); + $smarty->assign('emited', 'y'); + $nllib->replace_edition($_REQUEST["nl_id"], $_REQUEST["subject"], $_REQUEST["data"], $sent); +} + +if ( empty( $_REQUEST["sort_mode"] ) ) { + $sort_mode = 'sent_desc'; +} else { + $sort_mode = $_REQUEST["sort_mode"]; +} + +if (!isset($_REQUEST["offset"])) { + $offset = 0; +} else { + $offset = $_REQUEST["offset"]; +} + +$smarty->assign_by_ref('offset', $offset); + +if (isset($_REQUEST["find"])) { + $find = $_REQUEST["find"]; +} else { + $find = ''; +} + +$smarty->assign('find', $find); + +$smarty->assign_by_ref('sort_mode', $sort_mode); +$channels = $nllib->list_editions($offset, $maxRecords, $sort_mode, $find); + +$cant_pages = ceil($channels["cant"] / $maxRecords); +$smarty->assign_by_ref('cant_pages', $cant_pages); +$smarty->assign('actual_page', 1 + ($offset / $maxRecords)); + +if ($channels["cant"] > ($offset + $maxRecords)) { + $smarty->assign('next_offset', $offset + $maxRecords); +} else { + $smarty->assign('next_offset', -1); +} + +// If offset is > 0 then prev_offset +if ($offset > 0) { + $smarty->assign('prev_offset', $offset - $maxRecords); +} else { + $smarty->assign('prev_offset', -1); +} + +$smarty->assign_by_ref('channels', $channels["data"]); + +if ($tiki_p_use_content_templates == 'y') { + $templates = $tikilib->list_templates('newsletters', 0, -1, 'name_asc', ''); +} + +$smarty->assign_by_ref('templates', $templates["data"]); + +ask_ticket ('send-newsletter'); + +// Display the template +$gTikiSystem->display( 'tikipackage:newsletters/send_newsletters.tpl'); + +?> + diff --git a/templates/admin_newsletter_subscriptions.tpl b/templates/admin_newsletter_subscriptions.tpl new file mode 100644 index 0000000..9cc8330 --- /dev/null +++ b/templates/admin_newsletter_subscriptions.tpl @@ -0,0 +1,84 @@ +<a class="pagetitle" href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}">{tr}Admin newsletter subscriptions{/tr}</a> +<br /><br /> + +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}index.php">{tr}list newsletters{/tr}</a> +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php">{tr}admin newsletters{/tr}</a> +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?nl_id={$nl_id}">{tr}send newsletters{/tr}</a> +<br /><br /> + +<table class="panel"> +<caption>Newsletters</caption> +<tr> + <td>{tr}Name{/tr}:</td> + <td>{$nl_info.name}</td> +</tr> +<tr> + <td>{tr}Description{/tr}:</td> + <td>{$nl_info.description}</td> +</tr> +</table> + +<h2>{tr}Add a subscription newsletters{/tr}</h2> +<form action="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php" method="post"> +<input type="hidden" name="nl_id" value="{$nl_id|escape}" /> +<table class="panel"> +<tr><td>{tr}Email{/tr}:</td><td><input type="text" name="email" /></td></tr> +<tr class="panelsubmitrow"><td colspan="2"><input type="submit" name="save" value="{tr}Save{/tr}" /></td></tr> +</table> +</form> + +<h2>{tr}Add all your site users to this newsletter (broadcast){/tr}</h2> +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}&offset={$offset}&sort_mode={$sort_mode}&find={$find}&add_all=1">{tr}Add users{/tr}</a> + +<h2>{tr}Subscriptions{/tr}</h2> +<table class="find"> +<tr><td>{tr}Find{/tr}</td> + <td> + <form method="get" action="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php"> + <input type="text" name="find" value="{$find|escape}" /> + <input type="submit" value="{tr}find{/tr}" name="search" /> + <input type="hidden" name="sort_mode" value="{$sort_mode|escape}" /> + </form> + </td> +</tr> +</table> + +<table> +<tr> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}&offset={$offset}&sort_mode={if $sort_mode eq 'email_desc'}email_asc{else}email_desc{/if}">{tr}email{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}&offset={$offset}&sort_mode={if $sort_mode eq 'valid_desc'}valid_asc{else}valid_desc{/if}">{tr}valid{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}&offset={$offset}&sort_mode={if $sort_mode eq 'subscribed_desc'}subscribed_asc{else}subscribed_desc{/if}">{tr}subscribed{/tr}</a></th> +<th>{tr}action{/tr}</th> +</tr> +{cycle values="even,odd" print=false} +{section name=user loop=$channels} +<tr class="{cycle}"> +<td>{$channels[user].email}</td> +<td>{$channels[user].valid}</td> +<td>{$channels[user].subscribed|tiki_short_datetime}</td> +<td> + <a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}&offset={$offset}&sort_mode={$sort_mode}&remove={$channels[user].nl_id}&email={$channels[user].email}">{tr}remove{/tr}</a> +</td> +</tr> +{/section} +</table> + +<div class="pagination"> +{if $prev_offset >= 0} +[<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}&find={$find}&offset={$prev_offset}&sort_mode={$sort_mode}">{tr}prev{/tr}</a>] +{/if} + +{tr}Page{/tr}: {$actual_page}/{$cant_pages} + +{if $next_offset >= 0} + [<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}&find={$find}&offset={$next_offset}&sort_mode={$sort_mode}">{tr}next{/tr}</a>] +{/if} +{if $direct_pagination eq 'y'} +<br /> +{section loop=$cant_pages name=foo} +{assign var=selector_offset value=$smarty.section.foo.index|times:$maxRecords} +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$nl_id}&find={$find}&offset={$selector_offset}&sort_mode={$sort_mode}"> +{$smarty.section.foo.index_next}</a> +{/section} +{/if} +</div> diff --git a/templates/admin_newsletters.tpl b/templates/admin_newsletters.tpl new file mode 100644 index 0000000..1d68c44 --- /dev/null +++ b/templates/admin_newsletters.tpl @@ -0,0 +1,96 @@ +<a class="pagetitle" href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php">{tr}Admin newsletters{/tr}</a> + +{if $gTikiSystemPrefs.feature_help eq 'y'} +<a href="http://tikipro.org/wiki/index.php?page=Newsletters" target="help" title="{tr}Tikiwiki.org help{/tr}: {tr}Newsletters{/tr}"><img class="icon" src="{$gTikiLoc.IMG_PKG_URL}icons/help.gif" alt="help" /></a> +{/if} + +{if $gTikiSystemPrefs.feature_view_tpl eq 'y'} +<a href="{$gTikiLoc.THEMES_PKG_URL}edit_templates.php?template=templates/admin_newsletters.tpl" target="help" title="{tr}View tpl{/tr}: {tr}admin newsletters tpl{/tr}"><img class="icon" src="{$gTikiLoc.IMG_PKG_URL}icons/info.gif" alt="edit tpl" /></a> +{/if} +<br /><br /> + +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}index.php">{tr}list newsletters{/tr}</a> +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php">{tr}send newsletters{/tr}</a> +<br /><br /> + +<h2>{tr}Create/edit newsletters{/tr}</h2> +{if $individual eq 'y'} +<a href="{$gTikiLoc.KERNEL_PKG_URL}object_permissions.php?objectName=newsletter%20{$info.name}&object_type=newsletter&permType=newsletters&object_id={$info.nl_id}">{tr}There are individual permissions set for this newsletter{/tr}</a><br /><br /> +{/if} + +<form action="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php" method="post"> +<input type="hidden" name="nl_id" value="{$info.nl_id|escape}" /> +<table class="panel"> +<tr><td>{tr}Name{/tr}:</td><td><input type="text" name="name" value="{$info.name|escape}" /></td></tr> +<tr><td>{tr}Description{/tr}:</td><td><textarea name="description" rows="4" cols="40">{$info.description|escape}</textarea></td></tr> +<tr><td>{tr}Users can subscribe/unsubscribe to this list{/tr}</td><td> +<input type="checkbox" name="allow_user_sub" {if $info.allow_user_sub eq 'y'}checked="checked"{/if} /></td></tr> +<tr><td>{tr}Users can subscribe any email address{/tr}</td><td> +<input type="checkbox" name="allow_any_sub" {if $info.allow_any_sub eq 'y'}checked="checked"{/if} /></td></tr> +<tr><td>{tr}Add unsubscribe instructions to each newsletter{/tr}</td><td> +<input type="checkbox" name="unsub_msg" {if $info.unsub_msg eq 'y'}checked="checked"{/if} /></td></tr> +<tr><td>{tr}Validate email addresses{/tr}</td><td> +<input type="checkbox" name="validate_addr" {if $info.validate_addr eq 'y'}checked="checked"{/if} /></td></tr> +<tr class="panelsubmitrow"><td colspan="2"><input type="submit" name="save" value="{tr}Save{/tr}" /></td></tr> +</table> +</form> + +<h2>{tr}Newsletters{/tr}</h2> +<table class="find"> +<tr><td>{tr}Find{/tr}</td> + <td> + <form method="get" action="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php"> + <input type="text" name="find" value="{$find|escape}" /> + <input type="submit" value="{tr}find{/tr}" name="search" /> + <input type="hidden" name="sort_mode" value="{$sort_mode|escape}" /> + </form> + </td> +</tr> +</table> + +<table class="panel"> +<tr> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={if $sort_mode eq 'nl_id_desc'}nl_id_asc{else}nl_id_desc{/if}">{tr}ID{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={if $sort_mode eq 'name_desc'}name_asc{else}name_desc{/if}">{tr}name{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={if $sort_mode eq 'description_desc'}description_asc{else}description_desc{/if}">{tr}description{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={if $sort_mode eq 'users_desc'}users_asc{else}users_desc{/if}">{tr}users{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={if $sort_mode eq 'editions_desc'}editions_asc{else}editions_desc{/if}">{tr}editions{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={if $sort_mode eq 'last_sent_desc'}last_sent_asc{else}last_sent_desc{/if}">{tr}last sent{/tr}</a></th> +<th>{tr}action{/tr}</th> +</tr> +{cycle values="even,odd" print=false} +{section name=user loop=$channels} +<tr class="{cycle}"> +<td>{$channels[user].nl_id}</td> +<td>{$channels[user].name}</td> +<td>{$channels[user].description}</td> +<td>{$channels[user].users} ({$channels[user].confirmed})</td> +<td>{$channels[user].editions}</td> +<td>{$channels[user].last_sent|tiki_short_datetime}</td> +<td> + <a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={$sort_mode}&remove={$channels[user].nl_id}">{tr}remove{/tr}</a> + <a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={$sort_mode}&nl_id={$channels[user].nl_id}">{tr}edit{/tr}</a> + <a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/admin_newsletter_subscriptions.php?nl_id={$channels[user].nl_id}">{tr}subscriptions{/tr}</a> + {if $channels[user].individual eq 'y'}({/if}<a href="{$gTikiLoc.KERNEL_PKG_URL}object_permissions.php?objectName=newsletter%20{$channels[user].name}&object_type=newsletter&permType=newsletters&object_id={$channels[user].nl_id}">{tr}perms{/tr}</a>{if $channels[user].individual eq 'y'}){/if} +</td> +</tr> +{/section} +</table> + +<div class="pagination"> +{if $prev_offset >= 0} +[<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?find={$find}&offset={$prev_offset}&sort_mode={$sort_mode}">{tr}prev{/tr}</a>] +{/if} +{tr}Page{/tr}: {$actual_page}/{$cant_pages} +{if $next_offset >= 0} + [<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?find={$find}&offset={$next_offset}&sort_mode={$sort_mode}">{tr}next{/tr}</a>] +{/if} +{if $direct_pagination eq 'y'} +<br /> +{section loop=$cant_pages name=foo} +{assign var=selector_offset value=$smarty.section.foo.index|times:$maxRecords} +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?find={$find}&offset={$selector_offset}&sort_mode={$sort_mode}"> +{$smarty.section.foo.index_next}</a> +{/section} +{/if} +</div> diff --git a/templates/confirm_newsletter_subscription.tpl b/templates/confirm_newsletter_subscription.tpl new file mode 100644 index 0000000..9c3b462 --- /dev/null +++ b/templates/confirm_newsletter_subscription.tpl @@ -0,0 +1,9 @@ +{tr}Somebody or you tried to subscribe this email address at our site:{/tr} {$server_name} +{tr}To the newsletter:{/tr} {$info.name} + +{tr}Description:{/tr} +{$info.description} + +{tr}In order to confirm your subscription you must access the following URL:{/tr} + +{$url_subscribe}?confirm_subscription={$code}
\ No newline at end of file diff --git a/templates/index.php b/templates/index.php new file mode 100644 index 0000000..3e305fe --- /dev/null +++ b/templates/index.php @@ -0,0 +1,6 @@ +<?php + + // This is not a package. + header ("location: ../index.php"); + +?>
\ No newline at end of file diff --git a/templates/menu_newsletters.tpl b/templates/menu_newsletters.tpl new file mode 100644 index 0000000..fcfb736 --- /dev/null +++ b/templates/menu_newsletters.tpl @@ -0,0 +1,5 @@ +<a class="menuoption" href="{$gTikiLoc.NEWSLETTERS_PKG_URL}index.php">{tr}List newsletters{/tr}</a> +{if $tiki_p_admin_newsletters eq 'y'} + <a class="menuoption" href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php">{tr}Send newsletters{/tr}</a> + <a class="menuoption" href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php">{tr}Admin newsletters{/tr}</a> +{/if} diff --git a/templates/menu_newsletters_admin.tpl b/templates/menu_newsletters_admin.tpl new file mode 100644 index 0000000..c6172d9 --- /dev/null +++ b/templates/menu_newsletters_admin.tpl @@ -0,0 +1,4 @@ +{if $tiki_p_admin_newsletters eq 'y'} + <a class="menuoption" href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php">{tr}Newsletters Settings{/tr}</a> + <a class="menuoption" href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php">{tr}Send Newsletters{/tr}</a> +{/if} diff --git a/templates/newsletter_byebye.tpl b/templates/newsletter_byebye.tpl new file mode 100644 index 0000000..244ac9d --- /dev/null +++ b/templates/newsletter_byebye.tpl @@ -0,0 +1,6 @@ +{tr}Bye bye!{/tr} +{tr}This email address has been removed to the list of subscriptors of:{/tr} +{tr}Newsletter:{/tr} {$info.name} + +{tr}Description:{/tr} +{$info.description}
\ No newline at end of file diff --git a/templates/newsletter_welcome.tpl b/templates/newsletter_welcome.tpl new file mode 100644 index 0000000..bb87988 --- /dev/null +++ b/templates/newsletter_welcome.tpl @@ -0,0 +1,10 @@ +{tr}Welcome to our newsletter!{/tr} +{tr}This email address has been added to the list of subscriptors of:{/tr} +{tr}Newsletter:{/tr} {$info.name} + +{tr}Description:{/tr} +{$info.description} + +{tr}You can always cancel your subscription using:{/tr} + +{$url_subscribe}?unsubscribe={$code}
\ No newline at end of file diff --git a/templates/newsletters.tpl b/templates/newsletters.tpl new file mode 100644 index 0000000..2e4faef --- /dev/null +++ b/templates/newsletters.tpl @@ -0,0 +1,98 @@ +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}index.php" class="pagetitle">{tr}Newsletters{/tr}</a><br /><br /> +{if $subscribed eq 'y'} +{tr}Thanks for your subscription. You will receive an email soon to confirm your subscription. No newsletters will be sent to you until the subscription is confirmed.{/tr}<br /><br /> +{/if} +{if $unsub eq 'y'} +{tr}Your email address was removed from the list of subscriptors.{/tr}<br /><br /> +{/if} + +{if $confirm eq 'y'} +<table class="panel"> +<caption>{tr}Subscription confirmed!{/tr}</caption> +</tr> +<tr> + <td>{tr}Name{/tr}:</td> + <td>{$nl_info.name}</td> +</tr> +<tr> + <td>{tr}Description{/tr}:</td> + <td>{$nl_info.description}</td> +</tr> +</table> +{/if} + +{if $subscribe eq 'y'} +<form method="post" action="{$gTikiLoc.NEWSLETTERS_PKG_URL}index.php"> +<input type="hidden" name="nl_id" value="{$nl_id|escape}" /> +<table class="panel"> +<caption>{tr}Subscribe to newsletter{/tr}</caption> +<tr> + <td>{tr}Name{/tr}:</td> + <td>{$nl_info.name}</td> +</tr> +<tr> + <td>{tr}Description{/tr}:</td> + <td>{$nl_info.description}</td> +</tr> +{if ($nl_info.allow_user_sub eq 'y') or ($tiki_p_admin_newsletters eq 'y')} +{if $tiki_p_subscribe_email eq 'y'} +<tr> + <td>{tr}Email:{/tr}</td> + <td><input type="text" name="email" value="{$email|escape}" /></td> +</tr> +{else} + <input type="hidden" name="email" value="{$email|escape}" /> +{/if} +<tr class="panelsubmitrow"> + <td colspan="2"><input type="submit" name="subscribe" value="{tr}Subscribe{/tr}" /></td> +</tr> +{/if} +</table> +</form> +{/if} + +<h2>{tr}Newsletters{/tr}</h2> +<table class="find"> +<tr><td>{tr}Find{/tr}</td> + <td> + <form method="get" action="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php"> + <input type="text" name="find" value="{$find|escape}" /> + <input type="submit" value="{tr}find{/tr}" name="search" /> + <input type="hidden" name="sort_mode" value="{$sort_mode|escape}" /> + </form> + </td> +</tr> +</table> + +<table> +<tr> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={if $sort_mode eq 'name_desc'}name_asc{else}name_desc{/if}">{tr}name{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?offset={$offset}&sort_mode={if $sort_mode eq 'description_desc'}description_asc{else}description_desc{/if}">{tr}description{/tr}</a></th> +</tr> +{cycle values="even,odd" print=false} +{section name=user loop=$channels} +{if $channels.individual ne 'y' or $channels.individual_tiki_p_subscribe_newsletters eq 'y'} +<tr class="{cycle}"> +<td><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}index.php?nl_id={$channels[user].nl_id}&info=1">{$channels[user].name}</a></td> +<td>{$channels[user].description}</td> +</tr> +{/if} +{/section} +</table> + +<div class="pagination"> +{if $prev_offset >= 0} +[<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?find={$find}&offset={$prev_offset}&sort_mode={$sort_mode}">{tr}prev{/tr}</a>] +{/if} +{tr}Page{/tr}: {$actual_page}/{$cant_pages} +{if $next_offset >= 0} + [<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?find={$find}&offset={$next_offset}&sort_mode={$sort_mode}">{tr}next{/tr}</a>] +{/if} +{if $direct_pagination eq 'y'} +<br /> +{section loop=$cant_pages name=foo} +{assign var=selector_offset value=$smarty.section.foo.index|times:$maxRecords} +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}admin/index.php?find={$find}&offset={$selector_offset}&sort_mode={$sort_mode}">{$smarty.section.foo.index_next}</a> +{/section} +{/if} +</div> diff --git a/templates/send_newsletters.tpl b/templates/send_newsletters.tpl new file mode 100644 index 0000000..89483ee --- /dev/null +++ b/templates/send_newsletters.tpl @@ -0,0 +1,108 @@ +<a class="pagetitle" href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php">{tr}Send newsletters{/tr}</a> +<br /><br /> + +{if $emited eq 'y'} + {tr}The newsletter was sent to {$sent} email addresses{/tr}<br /><br /> +{/if} +{if $presend eq 'y'} +<div class="wikibody">{$subject}</div> +<div class="wikibody">{$data}</div> + +{tr}This newsletter will be sent to {$subscribers} email addresses.{/tr} + +<form method="post" action="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php"> +<input type="hidden" name="nl_id" value="{$nl_id|escape}" /> +<input type="hidden" name="subject" value="{$subject|escape}" /> +<input type="hidden" name="data" value="{$data|escape}" /> +<input type="submit" name="send" value="{tr}send{/tr}" /> +<input type="submit" name="preview" value="{tr}cancel{/tr}" /> +</form> +{else} +{if $preview eq 'y'} +<br /> +<div class="wikibody">{$info.subject}</div> +<div class="wikibody">{$parsed}</div> +{/if} + +<h2>{tr}Prepare a newsletter to be sent{/tr}</h2> +<form action="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php" method="post" id='editpageform'> +<table class="panel"> +<tr><td>{tr}Subject{/tr}:</td><td><input type="text" maxlength="250" size="40" name="subject" value="{$info.subject|escape}" /></td></tr> +<tr><td>{tr}Newsletter{/tr}:</td><td> +<select name="nl_id"> +{section loop=$newsletters name=ix} +<option value="{$newsletters[ix].nl_id|escape}" {if $newsletters[ix].nl_id eq $nl_id}selected="selected"{/if}>{$newsletters[ix].name}</option> +{/section} +</select> +</td></tr> +{if $tiki_p_use_content_templates eq 'y'} +<tr><td>{tr}Apply template{/tr}</td><td> +<select name="template_id" onchange="javascript:document.getElementById('editpageform').submit();"> +<option value="0">{tr}none{/tr}</option> +{section name=ix loop=$templates} +<option value="{$templates[ix].template_id|escape}">{$templates[ix].name}</option> +{/section} +</select> +</td></tr> +{/if} +<tr><td>{tr}Data{/tr}:</td><td><textarea name="data" rows="25" cols="60">{$info.data|escape}</textarea></td></tr> +<tr class="panelsubmitrow"><td colspan="2"> +<input type="submit" name="preview" value="{tr}Preview{/tr}" /> <input type="submit" name="save" value="{tr}Send Newsletters{/tr}" /> +</td></tr> +</table> +</form> +{/if} + +<h2>{tr}Sent editions{/tr}</h2> +<table class="find"> +<tr><td>{tr}Find{/tr}</td> + <td> + <form method="get" action="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php"> + <input type="text" name="find" value="{$find|escape}" /> + <input type="submit" value="{tr}find{/tr}" name="search" /> + <input type="hidden" name="sort_mode" value="{$sort_mode|escape}" /> + </form> + </td> +</tr> +</table> + +<table> +<tr> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?offset={$offset}&sort_mode={if $sort_mode eq 'name_desc'}name_asc{else}name_desc{/if}">{tr}name{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?offset={$offset}&sort_mode={if $sort_mode eq 'subject_desc'}subject_asc{else}subject_desc{/if}">{tr}subject{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?offset={$offset}&sort_mode={if $sort_mode eq 'users_desc'}users_asc{else}users_desc{/if}">{tr}users{/tr}</a></th> +<th><a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?offset={$offset}&sort_mode={if $sort_mode eq 'sent_desc'}sent_asc{else}sent_desc{/if}">{tr}sent{/tr}</a></th> +<th>{tr}action{/tr}</th> +</tr> +{cycle values="even,odd" print=false} +{section name=user loop=$channels} +<tr class="{cycle}"> +<td>{$channels[user].name}</td> +<td>{$channels[user].subject}</td> +<td>{$channels[user].users}</td> +<td>{$channels[user].sent|tiki_short_datetime}</td> +<td> + <a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?offset={$offset}&sort_mode={$sort_mode}&remove={$channels[user].edition_id}">{tr}remove{/tr}</a> + <a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?offset={$offset}&sort_mode={$sort_mode}&edition_id={$channels[user].edition_id}">{tr}use{/tr}</a> +</td> +</tr> +{/section} +</table> + +<div class="pagination"> +{if $prev_offset >= 0} +[<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?find={$find}&offset={$prev_offset}&sort_mode={$sort_mode}">{tr}prev{/tr}</a>] +{/if} +{tr}Page{/tr}: {$actual_page}/{$cant_pages} +{if $next_offset >= 0} + [<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?find={$find}&offset={$next_offset}&sort_mode={$sort_mode}">{tr}next{/tr}</a>] +{/if} +{if $direct_pagination eq 'y'} +<br /> +{section loop=$cant_pages name=foo} +{assign var=selector_offset value=$smarty.section.foo.index|times:$maxRecords} +<a href="{$gTikiLoc.NEWSLETTERS_PKG_URL}send.php?find={$find}&offset={$selector_offset}&sort_mode={$sort_mode}"> +{$smarty.section.foo.index_next}</a> +{/section} +{/if} +</div> diff --git a/tiki_setup_inc.php b/tiki_setup_inc.php new file mode 100644 index 0000000..1b3932f --- /dev/null +++ b/tiki_setup_inc.php @@ -0,0 +1,9 @@ +<?php +global $gTikiSystem; + +$gTikiSystem->registerPackage( 'Newsletters', dirname( __FILE__ ).'/' ); + +if( $gTikiSystem->isPackageActive( 'NEWSLETTERS_PKG_NAME' ) ) { + $gTikiSystem->registerAppMenu( NEWSLETTERS_PKG_DIR, NEWSLETTERS_PKG_NAME, NEWSLETTERS_PKG_URL.'index.php', 'tikipackage:newsletters/menu_newsletters.tpl', true ); +} +?> |
