[TEP-COMMIT] [CVS admin] update to the template structure / standards updates

hpdl-OfajU3CKLf1/[email protected] 17 Aug 2004 23:54:20 -0000
Newsgroups gmane.comp.web.oscommerce.cvs
Message-ID <[email protected]>
Commit in admin/admin on MAIN

newsletters.php +55 -367 1.18 -> 1.19

templates/default/images/icons/16x16/log.png [binary] added 1.1

templates/pages/newsletters.php +108 added 1.1

/newsletters_edit.php +69 added 1.1

/newsletters_log.php +64 added 1.1

/newsletters_preview.php +25 added 1.1

/newsletters_send.php +53 added 1.1

+374 -367

6 added + 1 modified, total 7 files

update to the template structure / standards updates

the newsletter manager now logs which email addresses a newsletter has
been sent to

lock/unlock feature has been removed to avoid confusion - now, when a
newsletter has been sent, it can no longer be edited (the only actions
available for a sent newsletter is to display the logging table and to
delete the newsletter)

----------

admin /admin

newsletters.php 1.18 -> 1.19

diff -u -r1.18 -r1.19
--- newsletters.php 2004/07/22 23:33:00 1.18
+++ newsletters.php 2004/08/17 23:54:16 1.19
@@ -5,7 +5,7 @@

osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com

- Copyright (c) 2003 osCommerce

+ Copyright (c) 2004 osCommerce

Released under the GNU General Public License
*/

@@ -14,394 +14,82 @@

$selected_box = 'tools';

- $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : '');

+ $action = (isset($_GET['action']) ? $_GET['action'] : '');

- if (tep_not_null($action)) {
- switch ($action) {
- case 'lock':
- case 'unlock':
- $newsletter_id = tep_db_prepare_input($HTTP_GET_VARS['nID']);
- $status = (($action == 'lock') ? '1' : '0');
-
- tep_db_query("update " . TABLE_NEWSLETTERS . " set locked = '" . $status . "' where newsletters_id = '" . (int)$newsletter_id . "'");
-
- tep_redirect(tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $HTTP_GET_VARS['nID']));
- break;
- case 'insert':
- case 'update':
- if (isset($HTTP_POST_VARS['newsletter_id'])) $newsletter_id = tep_db_prepare_input($HTTP_POST_VARS['newsletter_id']);
- $newsletter_module = tep_db_prepare_input($HTTP_POST_VARS['module']);
- $title = tep_db_prepare_input($HTTP_POST_VARS['title']);
- $content = tep_db_prepare_input($HTTP_POST_VARS['content']);

+ if (!isset($_GET['page']) || (isset($_GET['page']) && !is_numeric($_GET['page']))) {
+ $_GET['page'] = 1;
+ }

+ if (!empty($action)) {
+ switch ($action) {
+ case 'save':

$newsletter_error = false;

- if (empty($title)) {
- $messageStack->add(ERROR_NEWSLETTER_TITLE, 'error');

+
+ if (!isset($_POST['module']) || (isset($_POST['module']) && empty($_POST['module']))) {

$newsletter_error = true;

- }

- if (empty($module)) {

$messageStack->add(ERROR_NEWSLETTER_MODULE, 'error');

+ }
+
+ if (!isset($_POST['title']) || (isset($_POST['title']) && empty($_POST['title']))) {

$newsletter_error = true;

+
+ $messageStack->add(ERROR_NEWSLETTER_TITLE, 'error');

}

- if ($newsletter_error == false) {
- $sql_data_array = array('title' => $title,
- 'content' => $content,
- 'module' => $newsletter_module);
-
- if ($action == 'insert') {
- $sql_data_array['date_added'] = 'now()';
- $sql_data_array['status'] = '0';
- $sql_data_array['locked'] = '0';
-
- tep_db_perform(TABLE_NEWSLETTERS, $sql_data_array);
- $newsletter_id = tep_db_insert_id();
- } elseif ($action == 'update') {
- tep_db_perform(TABLE_NEWSLETTERS, $sql_data_array, 'update', "newsletters_id = '" . (int)$newsletter_id . "'");

+ if ($newsletter_error === false) {
+ if (isset($_GET['nmID']) && is_numeric($_GET['nmID'])) {
+ $Qemail = $osC_Database->query('update :table_newsletters set title = :title, content = :content, module = :module where newsletters_id = :newsletters_id');
+ $Qemail->bindInt(':newsletters_id', $_GET['nmID']);
+ } else {
+ $Qemail = $osC_Database->query('insert into :table_newsletters (title, content, module, date_added, status) values (:title, :content, :module, now(), 0)');

}

+ $Qemail->bindTable(':table_newsletters', TABLE_NEWSLETTERS);
+ $Qemail->bindValue(':title', $_POST['title']);
+ $Qemail->bindValue(':content', $_POST['content']);
+ $Qemail->bindValue(':module', $_POST['module']);
+ $Qemail->execute();
+
+ if (isset($_GET['nmID']) && is_numeric($_GET['nmID'])) {
+ $nmID = $_GET['nmID'];
+ } else {
+ $nmID = $osC_Database->nextID();
+ }

- tep_redirect(tep_href_link(FILENAME_NEWSLETTERS, (isset($HTTP_GET_VARS['page']) ? 'page=' . $HTTP_GET_VARS['page'] . '&' : '') . 'nID=' . $newsletter_id));

+ tep_redirect(tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $nmID));

} else {

- $action = 'new';

+ $action = 'nmEdit';

}
break;
case 'deleteconfirm':

- $newsletter_id = tep_db_prepare_input($HTTP_GET_VARS['nID']);
-
- tep_db_query("delete from " . TABLE_NEWSLETTERS . " where newsletters_id = '" . (int)$newsletter_id . "'");
-
- tep_redirect(tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page']));
- break;
- case 'delete':
- case 'new': if (!isset($HTTP_GET_VARS['nID'])) break;
- case 'send':
- case 'confirm_send':
- $newsletter_id = tep_db_prepare_input($HTTP_GET_VARS['nID']);
-
- $check_query = tep_db_query("select locked from " . TABLE_NEWSLETTERS . " where newsletters_id = '" . (int)$newsletter_id . "'");
- $check = tep_db_fetch_array($check_query);
-
- if ($check['locked'] < 1) {
- switch ($action) {
- case 'delete': $error = ERROR_REMOVE_UNLOCKED_NEWSLETTER; break;
- case 'new': $error = ERROR_EDIT_UNLOCKED_NEWSLETTER; break;
- case 'send': $error = ERROR_SEND_UNLOCKED_NEWSLETTER; break;
- case 'confirm_send': $error = ERROR_SEND_UNLOCKED_NEWSLETTER; break;
- }
-
- $messageStack->add_session($error, 'error');
-
- tep_redirect(tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $HTTP_GET_VARS['nID']));

+ if (isset($_GET['nmID']) && is_numeric($_GET['nmID'])) {
+ $Qdelete = $osC_Database->query('delete from :table_newsletters where newsletters_id = :newsletters_id');
+ $Qdelete->bindTable(':table_newsletters', TABLE_NEWSLETTERS);
+ $Qdelete->bindInt(':newsletters_id', $_GET['nmID']);
+ $Qdelete->execute();
+
+ $Qdelete = $osC_Database->query('delete from :table_newsletters_log where newsletters_id = :newsletters_id');
+ $Qdelete->bindTable(':table_newsletters_log', TABLE_NEWSLETTERS_LOG);
+ $Qdelete->bindInt(':newsletters_id', $_GET['nmID']);
+ $Qdelete->execute();

}

+
+ tep_redirect(tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page']));

break;
}
}

-?>
-<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html <?php echo HTML_PARAMS; ?>>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
-<title><?php echo TITLE; ?></title>
-<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
-<script language="javascript" src="includes/general.js"></script>
-</head>
-<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
-<div id="spiffycalendar" class="text"></div>
-<!-- header //-->
-<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
-<!-- header_eof //-->
-
-<!-- body //-->
-<table border="0" width="100%" cellspacing="2" cellpadding="2">
- <tr>
- <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
-<!-- left_navigation //-->
-<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
-<!-- left_navigation_eof //-->
- </table></td>
-<!-- body_text //-->
- <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
- <tr>
- <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
- <tr>
- <td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
- <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>
- </tr>
- </table></td>
- </tr>
-<?php
- if ($action == 'new') {
- $form_action = 'insert';
-
- $parameters = array('title' => '',
- 'content' => '',
- 'module' => '');
-
- $nInfo = new objectInfo($parameters);
-
- if (isset($HTTP_GET_VARS['nID'])) {
- $form_action = 'update';
-
- $nID = tep_db_prepare_input($HTTP_GET_VARS['nID']);
-
- $newsletter_query = tep_db_query("select title, content, module from " . TABLE_NEWSLETTERS . " where newsletters_id = '" . (int)$nID . "'");
- $newsletter = tep_db_fetch_array($newsletter_query);
-
- $nInfo->objectInfo($newsletter);
- } elseif ($HTTP_POST_VARS) {
- $nInfo->objectInfo($HTTP_POST_VARS);
- }

- $file_extension = substr($PHP_SELF, strrpos($PHP_SELF, '.'));
- $directory_array = array();
- if ($dir = dir(DIR_WS_MODULES . 'newsletters/')) {
- while ($file = $dir->read()) {
- if (!is_dir(DIR_WS_MODULES . 'newsletters/' . $file)) {
- if (substr($file, strrpos($file, '.')) == $file_extension) {
- $directory_array[] = $file;
- }
- }
- }
- sort($directory_array);
- $dir->close();
- }
-
- for ($i=0, $n=sizeof($directory_array); $i<$n; $i++) {
- $modules_array[] = array('id' => substr($directory_array[$i], 0, strrpos($directory_array[$i], '.')), 'text' => substr($directory_array[$i], 0, strrpos($directory_array[$i], '.')));
- }
-?>
- <tr>
- <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
- </tr>
- <tr><?php echo tep_draw_form('newsletter', FILENAME_NEWSLETTERS, (isset($HTTP_GET_VARS['page']) ? 'page=' . $HTTP_GET_VARS['page'] . '&' : '') . 'action=' . $form_action); if ($form_action == 'update') echo tep_draw_hidden_field('newsletter_id', $nID); ?>
- <td><table border="0" cellspacing="0" cellpadding="2">
- <tr>
- <td class="main"><?php echo TEXT_NEWSLETTER_MODULE; ?></td>
- <td class="main"><?php echo tep_draw_pull_down_menu('module', $modules_array, $nInfo->module); ?></td>
- </tr>
- <tr>
- <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
- </tr>
- <tr>
- <td class="main"><?php echo TEXT_NEWSLETTER_TITLE; ?></td>
- <td class="main"><?php echo tep_draw_input_field('title', $nInfo->title, '', true); ?></td>
- </tr>
- <tr>
- <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
- </tr>
- <tr>
- <td class="main" valign="top"><?php echo TEXT_NEWSLETTER_CONTENT; ?></td>
- <td class="main"><?php echo tep_draw_textarea_field('content', 'soft', '100%', '20', $nInfo->content); ?></td>
- </tr>
- </table></td>
- </tr>
- <tr>
- <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
- </tr>
- <tr>
- <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
- <tr>
- <td class="main" align="right"><?php echo (($form_action == 'insert') ? tep_image_submit('button_save.gif', IMAGE_SAVE) : tep_image_submit('button_update.gif', IMAGE_UPDATE)). '&nbsp;&nbsp;<a href="' . tep_href_link(FILENAME_NEWSLETTERS, (isset($HTTP_GET_VARS['page']) ? 'page=' . $HTTP_GET_VARS['page'] . '&' : '') . (isset($HTTP_GET_VARS['nID']) ? 'nID=' . $HTTP_GET_VARS['nID'] : '')) . '">' . tep_image_button('button_cancel.gif', IMAGE_CANCEL) . '</a>'; ?></td>
- </tr>
- </table></td>
- </form></tr>
-<?php
- } elseif ($action == 'preview') {
- $nID = tep_db_prepare_input($HTTP_GET_VARS['nID']);
-
- $newsletter_query = tep_db_query("select title, content, module from " . TABLE_NEWSLETTERS . " where newsletters_id = '" . (int)$nID . "'");
- $newsletter = tep_db_fetch_array($newsletter_query);
-
- $nInfo = new objectInfo($newsletter);
-?>
- <tr>
- <td align="right"><?php echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $HTTP_GET_VARS['nID']) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td>
- </tr>
- <tr>
- <td><tt><?php echo nl2br($nInfo->content); ?></tt></td>
- </tr>
- <tr>
- <td align="right"><?php echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $HTTP_GET_VARS['nID']) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td>
- </tr>
-<?php
- } elseif ($action == 'send') {
- $nID = tep_db_prepare_input($HTTP_GET_VARS['nID']);
-
- $newsletter_query = tep_db_query("select title, content, module from " . TABLE_NEWSLETTERS . " where newsletters_id = '" . (int)$nID . "'");
- $newsletter = tep_db_fetch_array($newsletter_query);
-
- $nInfo = new objectInfo($newsletter);
-
- include(DIR_WS_LANGUAGES . $language . '/modules/newsletters/' . $nInfo->module . substr($PHP_SELF, strrpos($PHP_SELF, '.')));
- include(DIR_WS_MODULES . 'newsletters/' . $nInfo->module . substr($PHP_SELF, strrpos($PHP_SELF, '.')));
- $module_name = $nInfo->module;
- $module = new $module_name($nInfo->title, $nInfo->content);
-?>
- <tr>
- <td><?php if ($module->show_choose_audience) { echo $module->choose_audience(); } else { echo $module->confirm(); } ?></td>
- </tr>
-<?php
- } elseif ($action == 'confirm') {
- $nID = tep_db_prepare_input($HTTP_GET_VARS['nID']);
-
- $newsletter_query = tep_db_query("select title, content, module from " . TABLE_NEWSLETTERS . " where newsletters_id = '" . (int)$nID . "'");
- $newsletter = tep_db_fetch_array($newsletter_query);
-
- $nInfo = new objectInfo($newsletter);
-
- include(DIR_WS_LANGUAGES . $language . '/modules/newsletters/' . $nInfo->module . substr($PHP_SELF, strrpos($PHP_SELF, '.')));
- include(DIR_WS_MODULES . 'newsletters/' . $nInfo->module . substr($PHP_SELF, strrpos($PHP_SELF, '.')));
- $module_name = $nInfo->module;
- $module = new $module_name($nInfo->title, $nInfo->content);
-?>
- <tr>
- <td><?php echo $module->confirm(); ?></td>
- </tr>
-<?php
- } elseif ($action == 'confirm_send') {
- $nID = tep_db_prepare_input($HTTP_GET_VARS['nID']);
-
- $newsletter_query = tep_db_query("select newsletters_id, title, content, module from " . TABLE_NEWSLETTERS . " where newsletters_id = '" . (int)$nID . "'");
- $newsletter = tep_db_fetch_array($newsletter_query);
-
- $nInfo = new objectInfo($newsletter);
-
- include(DIR_WS_LANGUAGES . $language . '/modules/newsletters/' . $nInfo->module . substr($PHP_SELF, strrpos($PHP_SELF, '.')));
- include(DIR_WS_MODULES . 'newsletters/' . $nInfo->module . substr($PHP_SELF, strrpos($PHP_SELF, '.')));
- $module_name = $nInfo->module;
- $module = new $module_name($nInfo->title, $nInfo->content);
-?>
- <tr>
- <td><table border="0" cellspacing="0" cellpadding="2">
- <tr>
- <td class="main" valign="middle"><?php echo tep_image(DIR_WS_IMAGES . 'ani_send_email.gif', IMAGE_ANI_SEND_EMAIL); ?></td>
- <td class="main" valign="middle"><b><?php echo TEXT_PLEASE_WAIT; ?></b></td>
- </tr>
- </table></td>
- </tr>
-<?php
- tep_set_time_limit(0);
- flush();
- $module->send($nInfo->newsletters_id);
-?>
- <tr>
- <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
- </tr>
- <tr>
- <td class="main"><font color="#ff0000"><b><?php echo TEXT_FINISHED_SENDING_EMAILS; ?></b></font></td>
- </tr>
- <tr>
- <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
- </tr>
- <tr>
- <td><?php echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $HTTP_GET_VARS['nID']) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td>
- </tr>
-<?php
- } else {
-?>
- <tr>
- <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
- <tr>
- <td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
- <tr class="dataTableHeadingRow">
- <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_NEWSLETTERS; ?></td>
- <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_SIZE; ?></td>
- <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_MODULE; ?></td>
- <td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_SENT; ?></td>
- <td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_STATUS; ?></td>
- <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_ACTION; ?>&nbsp;</td>
- </tr>
-<?php
- $newsletters_query_raw = "select newsletters_id, title, length(content) as content_length, module, date_added, date_sent, status, locked from " . TABLE_NEWSLETTERS . " order by date_added desc";
- $newsletters_split = new splitPageResults($HTTP_GET_VARS['page'], MAX_DISPLAY_SEARCH_RESULTS, $newsletters_query_raw, $newsletters_query_numrows);
- $newsletters_query = tep_db_query($newsletters_query_raw);
- while ($newsletters = tep_db_fetch_array($newsletters_query)) {
- if ((!isset($HTTP_GET_VARS['nID']) || (isset($HTTP_GET_VARS['nID']) && ($HTTP_GET_VARS['nID'] == $newsletters['newsletters_id']))) && !isset($nInfo) && (substr($action, 0, 3) != 'new')) {
- $nInfo = new objectInfo($newsletters);
- }
-
- if (isset($nInfo) && is_object($nInfo) && ($newsletters['newsletters_id'] == $nInfo->newsletters_id) ) {
- echo ' <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&action=preview') . '\'">' . "\n";
- } else {
- echo ' <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $newsletters['newsletters_id']) . '\'">' . "\n";
- }
-?>
- <td class="dataTableContent"><?php echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $newsletters['newsletters_id'] . '&action=preview') . '">' . tep_image(DIR_WS_ICONS . 'preview.gif', ICON_PREVIEW) . '</a>&nbsp;' . $newsletters['title']; ?></td>
- <td class="dataTableContent" align="right"><?php echo number_format($newsletters['content_length']) . ' bytes'; ?></td>
- <td class="dataTableContent" align="right"><?php echo $newsletters['module']; ?></td>
- <td class="dataTableContent" align="center"><?php if ($newsletters['status'] == '1') { echo tep_image(DIR_WS_ICONS . 'tick.gif', ICON_TICK); } else { echo tep_image(DIR_WS_ICONS . 'cross.gif', ICON_CROSS); } ?></td>
- <td class="dataTableContent" align="center"><?php if ($newsletters['locked'] > 0) { echo tep_image(DIR_WS_ICONS . 'locked.gif', ICON_LOCKED); } else { echo tep_image(DIR_WS_ICONS . 'unlocked.gif', ICON_UNLOCKED); } ?></td>
- <td class="dataTableContent" align="right"><?php if (isset($nInfo) && is_object($nInfo) && ($newsletters['newsletters_id'] == $nInfo->newsletters_id) ) { echo tep_image(DIR_WS_IMAGES . 'icon_arrow_right.gif', ''); } else { echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $newsletters['newsletters_id']) . '">' . tep_image(DIR_WS_IMAGES . 'icon_info.gif', IMAGE_ICON_INFO) . '</a>'; } ?>&nbsp;</td>
- </tr>
-<?php
- }
-?>
- <tr>
- <td colspan="6"><table border="0" width="100%" cellspacing="0" cellpadding="2">
- <tr>
- <td class="smallText" valign="top"><?php echo $newsletters_split->display_count($newsletters_query_numrows, MAX_DISPLAY_SEARCH_RESULTS, $HTTP_GET_VARS['page'], TEXT_DISPLAY_NUMBER_OF_NEWSLETTERS); ?></td>
- <td class="smallText" align="right"><?php echo $newsletters_split->display_links($newsletters_query_numrows, MAX_DISPLAY_SEARCH_RESULTS, MAX_DISPLAY_PAGE_LINKS, $HTTP_GET_VARS['page']); ?></td>
- </tr>
- <tr>
- <td align="right" colspan="2"><?php echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'action=new') . '">' . tep_image_button('button_new_newsletter.gif', IMAGE_NEW_NEWSLETTER) . '</a>'; ?></td>
- </tr>
- </table></td>
- </tr>
- </table></td>
-<?php
- $heading = array();
- $contents = array();
-

switch ($action) {

- case 'delete':
- $heading[] = array('text' => '<b>' . $nInfo->title . '</b>');
-
- $contents = array('form' => tep_draw_form('newsletters', FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&action=deleteconfirm'));
- $contents[] = array('text' => TEXT_INFO_DELETE_INTRO);
- $contents[] = array('text' => '<br><b>' . $nInfo->title . '</b>');
- $contents[] = array('align' => 'center', 'text' => '<br>' . tep_image_submit('button_delete.gif', IMAGE_DELETE) . ' <a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $HTTP_GET_VARS['nID']) . '">' . tep_image_button('button_cancel.gif', IMAGE_CANCEL) . '</a>');
- break;
- default:
- if (is_object($nInfo)) {
- $heading[] = array('text' => '<b>' . $nInfo->title . '</b>');
-
- if ($nInfo->locked > 0) {
- $contents[] = array('align' => 'center', 'text' => '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&action=new') . '">' . tep_image_button('button_edit.gif', IMAGE_EDIT) . '</a> <a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&action=delete') . '">' . tep_image_button('button_delete.gif', IMAGE_DELETE) . '</a> <a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&action=preview') . '">' . tep_image_button('button_preview.gif', IMAGE_PREVIEW) . '</a> <a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&action=send')
. '">' . tep_image_button('button_send.gif', IMAGE_SEND) . '</a> <a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&act[...]
- } else {
- $contents[] = array('align' => 'center', 'text' => '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&action=preview') . '">' . tep_image_button('button_preview.gif', IMAGE_PREVIEW) . '</a> <a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $HTTP_GET_VARS['page'] . '&nID=' . $nInfo->newsletters_id . '&action=lock') . '">' . tep_image_button('button_lock.gif', IMAGE_LOCK) . '</a>');
- }
- $contents[] = array('text' => '<br>' . TEXT_NEWSLETTER_DATE_ADDED . ' ' . tep_date_short($nInfo->date_added));
- if ($nInfo->status == '1') $contents[] = array('text' => TEXT_NEWSLETTER_DATE_SENT . ' ' . tep_date_short($nInfo->date_sent));
- }
- break;

+ case 'nmPreview': $page_contents = 'newsletters_preview.php'; break;
+ case 'nmEdit': $page_contents = 'newsletters_edit.php'; break;
+ case 'nmSend':
+ case 'nmConfirm':
+ case 'nmSendConfirm': $page_contents = 'newsletters_send.php'; break;
+ case 'nmLog': $page_contents = 'newsletters_log.php'; break;
+ default: $page_contents = 'newsletters.php';

}

-
- if ( (tep_not_null($heading)) && (tep_not_null($contents)) ) {
- echo ' <td width="25%" valign="top">' . "\n";

- $box = new box;
- echo $box->infoBox($heading, $contents);

+ require('templates/default.php');

- echo ' </td>' . "\n";
- }
-?>
- </tr>
- </table></td>
- </tr>
-<?php
- }

+ require('includes/application_bottom.php');

?>

- </table></td>
-<!-- body_text_eof //-->
- </tr>
-</table>
-<!-- body_eof //-->
-
-<!-- footer //-->
-<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
-<!-- footer_eof //-->
-<br>
-</body>
-</html>
-<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

[Note: Some over-long lines of diff output only partialy shown]

----------

admin /admin /templates /pages

newsletters.php added at 1.1

diff -N newsletters.php
--- /dev/null Wed Aug 18 01:54:13 2004
+++ /tmp/cvsAAALzaq61 Wed Aug 18 01:54:17 2004
@@ -0,0 +1,108 @@

+<?php
+/*
+ $Id$
+
+ osCommerce, Open Source E-Commerce Solutions
+ http://www.oscommerce.com
+
+ Copyright (c) 2004 osCommerce
+
+ Released under the GNU General Public License
+*/
+?>
+
+<h1><?php echo HEADING_TITLE; ?></h1>
+
+<div id="infoBox_nmDefault" <?php if (!empty($action)) { echo 'style="display: none;"'; } ?>>
+ <table border="0" width="100%" cellspacing="0" cellpadding="2" class="dataTable">
+ <thead>
+ <tr>
+ <th><?php echo TABLE_HEADING_NEWSLETTERS; ?></th>
+ <th><?php echo TABLE_HEADING_SIZE; ?></th>
+ <th><?php echo TABLE_HEADING_MODULE; ?></th>
+ <th><?php echo TABLE_HEADING_SENT; ?></th>
+ <th><?php echo TABLE_HEADING_ACTION; ?></th>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+ $Qnewsletters = $osC_Database->query('select newsletters_id, title, length(content) as content_length, module, date_added, date_sent, status, locked from :table_newsletters order by date_added desc');
+ $Qnewsletters->bindTable(':table_newsletters', TABLE_NEWSLETTERS);
+ $Qnewsletters->setBatchLimit($_GET['page'], MAX_DISPLAY_SEARCH_RESULTS);
+ $Qnewsletters->execute();
+
+ while ($Qnewsletters->next()) {
+ $newsletter_module_class = 'osC_Newsletter_' . $Qnewsletters->value('module');
+
+ if (class_exists($newsletter_module_class) === false) {
+ include('includes/languages/' . $osC_Session->value('language') . '/modules/newsletters/' . $Qnewsletters->value('module') . '.php');
+ include('includes/modules/newsletters/' . $Qnewsletters->value('module') . '.php');
+
+ $$newsletter_module_class = new $newsletter_module_class();
+ }
+
+ if (!isset($nmInfo) && (!isset($_GET['nmID']) || (isset($_GET['nmID']) && ($_GET['nmID'] == $Qnewsletters->valueInt('newsletters_id'))))) {
+ $nmInfo = new objectInfo(array_merge($Qnewsletters->toArray(), array('module_title' => $$newsletter_module_class->getTitle())));
+ }
+
+ if (isset($nmInfo) && ($Qnewsletters->valueInt('newsletters_id') == $nmInfo->newsletters_id) ) {
+ echo ' <tr class="selected">' . "\n";
+ } else {
+ echo ' <tr onMouseOver="rowOverEffect(this);" onMouseOut="rowOutEffect(this);" onClick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $Qnewsletters->valueInt('newsletters_id')) . '\';">' . "\n";
+ }
+?>
+ <td><?php echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $Qnewsletters->valueInt('newsletters_id') . '&action=nmPreview') . '">' . tep_image('templates/' . $template . '/images/icons/16x16/file.png', ICON_PREVIEW, '16', '16') . '&nbsp;' . $Qnewsletters->value('title') . '</a>'; ?></td>
+ <td align="right"><?php echo number_format($Qnewsletters->valueInt('content_length')); ?></td>
+ <td align="right"><?php echo $$newsletter_module_class->getTitle(); ?></td>
+ <td align="center"><?php echo tep_image('templates/' . $template . '/images/icons/' . (($Qnewsletters->valueInt('status') === 1) ? 'checkbox_ticked.gif' : 'checkbox_crossed.gif')); ?></td>
+ <td align="right">
+<?php
+ if ($Qnewsletters->valueInt('status') === 1) {
+ echo tep_image('images/pixel_trans.gif', '', '16', '16') . '&nbsp;' .
+ '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $Qnewsletters->valueInt('newsletters_id') . '&action=nmLog') . '">' . tep_image('templates/' . $template . '/images/icons/16x16/log.png', IMAGE_DELETE, '16', '16') . '</a>&nbsp;';
+ } else {
+ echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $Qnewsletters->valueInt('newsletters_id') . '&action=nmEdit') . '">' . tep_image('templates/' . $template . '/images/icons/16x16/edit.png', IMAGE_EDIT, '16', '16') . '</a>&nbsp;' .
+ '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $Qnewsletters->valueInt('newsletters_id') . '&action=nmSend') . '">' . tep_image('templates/' . $template . '/images/icons/16x16/email_send.png', IMAGE_SEND, '16', '16') . '</a>&nbsp;';
+ }
+
+ if (isset($nmInfo) && ($Qnewsletters->valueInt('newsletters_id') == $nmInfo->newsletters_id)) {
+ echo '<a href="#" onClick="toggleInfoBox(\'nmDelete\');">' . tep_image('templates/' . $template . '/images/icons/16x16/trash.png', IMAGE_DELETE, '16', '16') . '</a>';
+ } else {
+ echo '<a href="' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $Qnewsletters->valueInt('newsletters_id') . '&action=nmDelete') . '">' . tep_image('templates/' . $template . '/images/icons/16x16/trash.png', IMAGE_DELETE, '16', '16') . '</a>';
+ }
+?>
+ </td>
+ </tr>
+<?php
+ }
+?>
+ </tbody>
+ </table>
+
+ <table border="0" width="100%" cellspacing="0" cellpadding="2">
+ <tr>
+ <td class="smallText"><?php echo $Qnewsletters->displayBatchLinksTotal(TEXT_DISPLAY_NUMBER_OF_NEWSLETTERS); ?></td>
+ <td class="smallText" align="right"><?php echo $Qnewsletters->displayBatchLinksPullDown(); ?></td>
+ </tr>
+ </table>
+
+ <p align="right"><?php echo '<input type="button" value="' . BUTTON_INSERT . '" onClick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'action=nmEdit') . '\';" class="infoBoxButton">'; ?></p>
+</div>
+
+<?php
+ if (isset($nmInfo)) {
+?>
+
+<div id="infoBox_nmDelete" <?php if ($action != 'nmDelete') { echo 'style="display: none;"'; } ?>>
+ <div class="infoBoxHeading"><?php echo tep_image('templates/' . $template . '/images/icons/16x16/trash.png', IMAGE_DELETE, '16', '16') . ' ' . $nmInfo->title; ?></div>
+ <div class="infoBoxContent">
+ <p><?php echo TEXT_INFO_DELETE_INTRO; ?></p>
+ <p><?php echo '<b>' . $nmInfo->title . '</b>'; ?></p>
+
+ <p align="center"><?php echo '<input type="button" value="' . BUTTON_DELETE . '" onClick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $nmInfo->newsletters_id . '&action=deleteconfirm') . '\';" class="operationButton">&nbsp;<input type="button" value="' . BUTTON_CANCEL . '" onClick="toggleInfoBox(\'nmDefault\');" class="operationButton">'; ?></p>
+ </div>
+</div>
+
+<?php
+ }
+?>

----------

admin /admin /templates /pages

newsletters_edit.php added at 1.1

diff -N newsletters_edit.php
--- /dev/null Wed Aug 18 01:54:13 2004
+++ /tmp/cvsAAALAaG61 Wed Aug 18 01:54:17 2004
@@ -0,0 +1,69 @@

+<?php
+/*
+ $Id$
+
+ osCommerce, Open Source E-Commerce Solutions
+ http://www.oscommerce.com
+
+ Copyright (c) 2004 osCommerce
+
+ Released under the GNU General Public License
+*/
+
+ if (isset($_GET['nmID']) && is_numeric($_GET['nmID'])) {
+ $Qnewsletter = $osC_Database->query('select title, content, module from :table_newsletters where newsletters_id = :newsletters_id');
+ $Qnewsletter->bindTable(':table_newsletters', TABLE_NEWSLETTERS);
+ $Qnewsletter->bindInt(':newsletters_id', $_GET['nmID']);
+ $Qnewsletter->execute();
+
+ $nmInfo = new objectInfo($Qnewsletter->toArray());
+ }
+
+ require('includes/classes/directory_listing.php');
+
+ $osC_DirectoryListing = new osC_DirectoryListing('includes/modules/newsletters');
+ $osC_DirectoryListing->setIncludeDirectories(false);
+ $files = $osC_DirectoryListing->getFiles();
+
+ $modules_array = array();
+ for ($i=0, $n=sizeof($files); $i<$n; $i++) {
+ $module = substr($files[$i]['name'], 0, strrpos($files[$i]['name'], '.'));
+
+ include('includes/languages/' . $osC_Session->value('language') . '/modules/newsletters/' . $files[$i]['name']);
+ include('includes/modules/newsletters/' . $files[$i]['name']);
+
+ $newsletter_module_class = 'osC_Newsletter_' . $module;
+ $osC_NewsletterModule = new $newsletter_module_class();
+
+ $modules_array[] = array('id' => $module, 'text' => $osC_NewsletterModule->getTitle());
+ }
+?>
+
+<h1><?php echo HEADING_TITLE; ?></h1>
+
+<?php echo tep_draw_form('newsletter', FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&' . (isset($_GET['nmID']) ? 'nmID=' . $_GET['nmID'] . '&' : '') . 'action=save'); ?>
+
+<table border="0" cellspacing="0" cellpadding="2">
+ <tr>
+ <td class="main"><?php echo TEXT_NEWSLETTER_MODULE; ?></td>
+ <td class="main"><?php echo osc_draw_pull_down_menu('module', $modules_array, (isset($nmInfo) ? $nmInfo->module : '')); ?></td>
+ </tr>
+ <tr>
+ <td class="main" colspan="2">&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="main"><?php echo TEXT_NEWSLETTER_TITLE; ?></td>
+ <td class="main"><?php echo osc_draw_input_field('title', (isset($nmInfo) ? $nmInfo->title : ''), '', true); ?></td>
+ </tr>
+ <tr>
+ <td class="main" colspan="2">&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="main" valign="top"><?php echo TEXT_NEWSLETTER_CONTENT; ?></td>
+ <td class="main"><?php echo osc_draw_textarea_field('content', (isset($nmInfo) ? $nmInfo->content : ''), '100%', '20'); ?></td>
+ </tr>
+</table>
+
+<p align="right"><?php echo '<input type="submit" value="' . BUTTON_SAVE . '" class="operationButton">&nbsp;<input type="button" value="' . BUTTON_CANCEL . '" onClick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&' . (isset($_GET['nmID']) ? 'nmID=' . $_GET['nmID'] : '')) . '\';" class="operationButton">'; ?></p>
+
+</form>

----------

admin /admin /templates /pages

newsletters_log.php added at 1.1

diff -N newsletters_log.php
--- /dev/null Wed Aug 18 01:54:13 2004
+++ /tmp/cvsAAA2BaW61 Wed Aug 18 01:54:17 2004
@@ -0,0 +1,64 @@

+<?php
+/*
+ $Id$
+
+ osCommerce, Open Source E-Commerce Solutions
+ http://www.oscommerce.com
+
+ Copyright (c) 2004 osCommerce
+
+ Released under the GNU General Public License
+*/
+
+ if (!isset($_GET['lpage']) || (isset($_GET['lpage']) && !is_numeric($_GET['lpage']))) {
+ $_GET['lpage'] = 1;
+ }
+?>
+
+<h1><?php echo HEADING_TITLE; ?></h1>
+
+<table border="0" width="100%" cellspacing="0" cellpadding="2" class="dataTable">
+ <thead>
+ <tr>
+ <th><?php echo TABLE_HEADING_EMAIL_ADDRESS; ?></th>
+ <th><?php echo TABLE_HEADING_SENT; ?></th>
+ <th><?php echo TABLE_HEADING_DATE_SENT; ?></th>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+ $Qlog = $osC_Database->query('select email_address, date_sent from :table_newsletters_log where newsletters_id = :newsletters_id order by date_sent desc');
+ $Qlog->bindTable(':table_newsletters_log', TABLE_NEWSLETTERS_LOG);
+ $Qlog->bindInt(':newsletters_id', $_GET['nmID']);
+ $Qlog->setBatchLimit($_GET['lpage'], MAX_DISPLAY_SEARCH_RESULTS);
+ $Qlog->execute();
+
+ while ($Qlog->next()) {
+ if (!isset($nmlInfo) && (!isset($_GET['nmlAddress']) || (isset($_GET['nmlAddress']) && ($_GET['nmlAddress'] == $Qlog->value('email_address'))))) {
+ $nmlInfo = new objectInfo($Qlog->toArray());
+ }
+
+ if (isset($nmlInfo) && ($Qlog->value('email_address') == $nmlInfo->email_address) ) {
+ echo ' <tr class="selected">' . "\n";
+ } else {
+ echo ' <tr onMouseOver="rowOverEffect(this);" onMouseOut="rowOutEffect(this);" onClick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $_GET['nmID'] . '&action=nmLog&lpage=' . $_GET['lpage'] . '&nmlAddress=' . $Qlog->value('email_address')) . '\';">' . "\n";
+ }
+?>
+ <td><?php echo $Qlog->value('email_address'); ?></td>
+ <td align="center"><?php echo tep_image('templates/' . $template . '/images/icons/' . (tep_not_null($Qlog->value('date_sent')) ? 'checkbox_ticked.gif' : 'checkbox_crossed.gif')); ?></td>
+ <td align="right"><?php echo $Qlog->value('date_sent'); ?></td>
+ </tr>
+<?php
+ }
+?>
+ </tbody>
+</table>
+
+<table border="0" width="100%" cellspacing="0" cellpadding="2">
+ <tr>
+ <td class="smallText"><?php echo $Qlog->displayBatchLinksTotal(TEXT_DISPLAY_NUMBER_OF_NEWSLETTERS); ?></td>
+ <td class="smallText" align="right"><?php echo $Qlog->displayBatchLinksPullDown(); ?></td>
+ </tr>
+</table>
+
+<p align="right"><?php echo '<input type="button" value="' . BUTTON_BACK . '" onClick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $_GET['nmID']) . '\';" class="infoBoxButton">'; ?></p>

----------

admin /admin /templates /pages

newsletters_preview.php added at 1.1

diff -N newsletters_preview.php
--- /dev/null Wed Aug 18 01:54:13 2004
+++ /tmp/cvsAAAJDaa71 Wed Aug 18 01:54:17 2004
@@ -0,0 +1,25 @@

+<?php
+/*
+ $Id$
+
+ osCommerce, Open Source E-Commerce Solutions
+ http://www.oscommerce.com
+
+ Copyright (c) 2004 osCommerce
+
+ Released under the GNU General Public License
+*/
+
+ $Qemail = $osC_Database->query('select title, content from :table_newsletters where newsletters_id = :newsletters_id');
+ $Qemail->bindTable(':table_newsletters', TABLE_NEWSLETTERS);
+ $Qemail->bindInt(':newsletters_id', $_GET['nmID']);
+ $Qemail->execute();
+?>
+
+<h1><?php echo HEADING_TITLE; ?></h1>
+
+<p><?php echo '<b>' . $Qemail->value('title') . '</b>'; ?></p>
+
+<p><?php echo nl2br($Qemail->valueProtected('content')); ?></p>
+
+<p align="right"><?php echo '<input type="button" value="' . BUTTON_BACK . '" onClick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $_GET['nmID']) . '\';" class="operationButton">'; ?></p>

----------

admin /admin /templates /pages

newsletters_send.php added at 1.1

diff -N newsletters_send.php
--- /dev/null Wed Aug 18 01:54:13 2004
+++ /tmp/cvsAAAOFaq71 Wed Aug 18 01:54:17 2004
@@ -0,0 +1,53 @@

+<?php
+/*
+ $Id$
+
+ osCommerce, Open Source E-Commerce Solutions
+ http://www.oscommerce.com
+
+ Copyright (c) 2004 osCommerce
+
+ Released under the GNU General Public License
+*/
+
+ $Qnewsletter = $osC_Database->query('select newsletters_id, title, content, module from :table_newsletters where newsletters_id = :newsletters_id');
+ $Qnewsletter->bindTable(':table_newsletters', TABLE_NEWSLETTERS);
+ $Qnewsletter->bindInt(':newsletters_id', $_GET['nmID']);
+ $Qnewsletter->execute();
+
+ include('includes/languages/' . $osC_Session->value('language') . '/modules/newsletters/' . $Qnewsletter->value('module') . '.php');
+ include('includes/modules/newsletters/' . $Qnewsletter->value('module') . '.php');
+
+ $module_name = 'osC_Newsletter_' . $Qnewsletter->value('module');
+ $module = new $module_name($Qnewsletter->value('title'), $Qnewsletter->value('content'), $Qnewsletter->valueInt('newsletters_id'));
+?>
+
+<h1><?php echo HEADING_TITLE; ?></h1>
+
+<?php
+ if ($action == 'nmSend') {
+ if ($module->hasAudienceSelection()) {
+ echo $module->showAudienceSelectionForm();
+ } else {
+ echo $module->showConfirmation();
+ }
+ } elseif ($action == 'nmConfirm') {
+ echo $module->showConfirmation();
+ } elseif ($action == 'nmSendConfirm') {
+?>
+
+<p><?php echo tep_image('images/ani_send_email.gif', IMAGE_ANI_SEND_EMAIL); ?></p>
+<p><?php echo '<b>' . TEXT_PLEASE_WAIT . '</b>'; ?></p>
+
+<?php
+ flush();
+ $module->sendEmail();
+?>
+
+<p><font color="#ff0000"><b><?php echo TEXT_FINISHED_SENDING_NEWSLETTERS; ?></b></font></p>
+
+<p align="right"><?php echo '<input type="button" value="' . BUTTON_OK . '" onClick="document.location.href=\'' . tep_href_link(FILENAME_NEWSLETTERS, 'page=' . $_GET['page'] . '&nmID=' . $_GET['nmID']) . '\';" class="operationButton">'; ?></p>
+
+<?php
+ }
+?>

CVSspam 0.2.9

-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285