flush(); $req = Sql_Query("select id,email from {$tables['user']}"); $c = 0; while ($row = Sql_Fetch_Array($req)) { set_time_limit(60); # if (checkMemoryAvail()) if (!is_email($row['email'])) { ++$c; $fixemail = fixEmail($row['email']); if (is_email($fixemail)) { Sql_Query(sprintf('update %s set email = "%s" where id = %d', $tables['user'], $fixemail, $row['id']), 0); $list .= PageLink2('user&id=' . $row['id'] . '&returnpage=reconcileusers&returnoption=fixinvalidemail', $GLOBALS['I18N']->get('User') . ' ' . $row['id']) . ' [' . $row['email'] . '] => fixed to ' . $fixemail . '<br/>'; ++$fixed; } else { ++$notfixed; $list .= PageLink2('user&id=' . $row['id'] . '&returnpage=reconcileusers&returnoption=fixinvalidemail', $GLOBALS['I18N']->get('User') . ' ' . $row['id']) . ' [' . $row['email'] . ']<br/>'; } } } print $fixed . ' ' . $GLOBALS['I18N']->get('subscribers fixed') . '<br/>' . $notfixed . ' ' . $GLOBALS['I18N']->get('subscribers could not be fixed') . '<br/>' . $list . "\n"; } elseif (isset($_GET['option']) && $_GET['option'] == 'deleteinvalidemail') { include 'actions/reconcileusers.php'; } elseif (isset($_GET['option']) && $_GET['option'] == 'markinvalidunconfirmed') { Info($GLOBALS['I18N']->get('Marking subscribers with an invalid email as unconfirmed')); flush(); $req = Sql_Query("select id,email from {$tables['user']}"); $c = 0; while ($row = Sql_Fetch_Array($req)) { set_time_limit(60); if (!is_email($row['email'])) { ++$c;
<h3>Подвал сообщения или нижний колонтитул</h3> <p>Нижний колонтитул письма необходим по нескольким очень важным причинам. При переадресации сообщения на другой адрес эл. почты, нижний колонтитул изменится на другой, что позволяет настроить содержимое, более подходящее для тех, кто ещё не подписан на Вашу информационную рассылку и предложить им подписаться.</p> <p>Вы можете настроить стандартный подвал в <?php ## for translators, you can translater the word "Configuration" below echo PageLink2('configure&id=messagefooter', 'Конфигурации'); ?> </p> <p>Допускается использование нескольких меток, которые помогут Вашим подписчикам определить, что за письмо они получили и что делать с ним дальше. <ul> <li><b>[UNSUBSCRIBEURL]</b> - ссылка для отказа от подписки</li> <li><b>[PREFERENCESURL]</b> - ссылка на страницу, где подписчики могут изменить свои учётные данные</li> <li><b>[FORWARDURL]</b> - ссылка на то, чтобы переслать письмо кому-либо ещё</li> <li><b>[EMAIL]</b> - адрес электронной почты</li> <li><b>[USERID]</b> - уникальный идентификатор подписчика</li> <li><b>[USERTRACK]</b> - код для отслеживания открытий кампании подписчиками</li> </ul> </p> <h3>Предлагаемый нижний колонтитул</h3> <div class="suggestion"> <pre> -- <h2>Это письмо отправлено на адрес [EMAIL] от <?php echo getConfig('message_from_name') . ' ' . getConfig('admin_address'); ?> </h2>
{ if (!$id) { return; } $data = Sql_Fetch_Array_Query("select * from groups where id = {$id}"); return $data["name"]; } require dirname(__FILE__) . '/structure.php'; $struct = $DBstruct["user"]; if (isset($_GET['list'])) { echo "<br />" . PageLink2("members", "Back to Members of this list", "id={$list}") . "\n"; } if (isset($start)) { echo "<br />" . PageLink2("users", "Back to the list of users", "start={$start}&unconfirmed=" . $_GET["unconfirmed"]) . "\n"; } if ($find) { echo "<br />" . PageLink2("users", "Back to the search results", "start={$start}&find=" . urlencode($find) . "&findby=" . urlencode($findby) . "&unconfirmed=" . $_GET["unconfirmed"] . "\n"); } if ($returnpage) { if ($returnoption) { $more = "&option=" . $returnoption; } echo "<br/>" . PageLink2("{$returnpage}{$more}", "Return to {$returnpage}"); $returnurl = "returnpage={$returnpage}&returnoption={$returnoption}"; } include dirname(__FILE__) . '/commonlib/pages/user.php'; return; ?>
abs(unix_timestamp(entered) - unix_timestamp(viewed)) as responsetime from %s where userid = %d and status = "sent"', $tables["usermessage"], $user["id"])); $num = Sql_Affected_Rows(); } else { $num = 0; } printf('%d ' . $GLOBALS['I18N']->get('messages sent to this user') . '<br/>', $num); if ($num) { $resptime = 0; $totalresp = 0; while ($msg = Sql_Fetch_Array($msgs)) { $ls->addElement($msg["messageid"], PageURL2("message", $GLOBALS['I18N']->get('view'), "id=" . $msg["messageid"])); if (defined('CLICKTRACK') && CLICKTRACK) { $clicksreq = Sql_Fetch_Row_Query(sprintf('select sum(clicked) as numclicks from %s where userid = %s and messageid = %s', $GLOBALS['tables']['linktrack_uml_click'], $user['id'], $msg['messageid'])); $clicks = sprintf('%d', $clicksreq[0]); if ($clicks) { $ls->addColumn($msg["messageid"], $GLOBALS['I18N']->get('clicks'), PageLink2('userclicks&userid=' . $user['id'] . '&msgid=' . $msg['messageid'], $clicks)); } else { $ls->addColumn($msg["messageid"], $GLOBALS['I18N']->get('clicks'), 0); } } $ls->addColumn($msg["messageid"], $GLOBALS['I18N']->get('sent'), formatDateTime($msg["entered"], 1)); if (!$msg['notviewed']) { $ls->addColumn($msg["messageid"], $GLOBALS['I18N']->get('viewed'), formatDateTime($msg["viewed"], 1)); $ls->addColumn($msg["messageid"], $GLOBALS['I18N']->get('responsetime'), $msg['responsetime']); $resptime += $msg['responsetime']; $totalresp += 1; } if (!empty($bounces[$msg["messageid"]])) { $ls->addColumn($msg["messageid"], $GLOBALS['I18N']->get('bounce'), $bounces[$msg["messageid"]]); } }
$listing = sprintf($GLOBALS['I18N']->get("Listing user %d to %d"), $start, $start + MAX_USER_PP); $limit = "limit {$start}," . MAX_USER_PP; } else { $listing = sprintf($GLOBALS['I18N']->get("Listing user %d to %d"), 1, MAX_USER_PP); $limit = "limit 0," . MAX_USER_PP; $start = 0; } if ($id) { $url_keep = '&id=' . $id; } else { $url_keep = ''; } print $total . " " . $GLOBALS['I18N']->get("Entries") . "</p>"; if ($total) { printf('<table border=1><tr><td colspan=4 align=center>%s</td></tr><tr><td>%s</td><td>%s</td><td> %s</td><td>%s</td></tr></table><p><hr>', $listing, PageLink2("mviews{$url_keep}", "<<", "start=0"), PageLink2("mviews{$url_keep}", "<", sprintf('start=%d', max(0, $start - MAX_USER_PP))), PageLink2("mviews{$url_keep}", ">", sprintf('start=%d', min($total, $start + MAX_USER_PP))), PageLink2("mviews{$url_keep}", ">>", sprintf('start=%d', $total - MAX_USER_PP))); } $req = Sql_Query(sprintf('select userid,email,um.entered as sent,min(um.viewed) as firstview, max(um.viewed) as lastview, count(um.viewed) as viewcount, abs(unix_timestamp(um.entered) - unix_timestamp(um.viewed)) as responsetime from %s um, %s user, %s msg where um.messageid = %d and um.messageid = msg.id and um.userid = user.id and um.viewed is not null %s group by userid %s', $GLOBALS['tables']['usermessage'], $GLOBALS['tables']['user'], $GLOBALS['tables']['message'], $id, $subselect, $limit)); $summary = array(); while ($row = Sql_Fetch_Array($req)) { $element = '<!--' . $row['userid'] . '-->' . $row['email']; $ls->addElement($element, PageUrl2('userhistory&id=' . $row['userid'])); $ls->addColumn($element, $GLOBALS['I18N']->get('sent'), formatDateTime($row['sent'])); if ($row['viewcount'] > 1) { $ls->addColumn($element, $GLOBALS['I18N']->get('firstview'), formatDateTime($row['firstview'], 1)); $ls->addColumn($element, $GLOBALS['I18N']->get('lastview'), formatDateTime($row['lastview'])); $ls->addColumn($element, $GLOBALS['I18N']->get('views'), $row['viewcount']);
<?php require_once dirname(__FILE__) . '/accesscheck.php'; print '<ul class="dashboard_button">'; print "<li class='statistics'>" . PageLink2("statsoverview", $GLOBALS['I18N']->get('Overview')) . "</li>"; print "<li class='statistics'>" . PageLink2("uclicks", $GLOBALS['I18N']->get('View Clicks by URL')) . "</li>"; print "<li class='statistics'>" . PageLink2("mclicks", $GLOBALS['I18N']->get('View Clicks by Message')) . "</li>"; print "<li class='statistics'>" . PageLink2("mviews", $GLOBALS['I18N']->get('View Opens by Message')) . "</li>"; print "<li class='statistics'>" . PageLink2("domainstats", $GLOBALS['I18N']->get('Domain Statistics')) . "</li>"; print '</ul>'; $num = Sql_Fetch_Row_Query(sprintf('select count(*) from %s', $GLOBALS['tables']['linktrack'])); if ($num[0] > 0) { print '<p class="information">' . $GLOBALS['I18N']->get('The clicktracking system has changed') . '</p>'; printf($GLOBALS['I18N']->get('You have %s entries in the old statistics table'), $num[0]); print "<div class='clear'></div><div class='button'>" . PageLink2("convertstats", $GLOBALS['I18N']->get('Convert Old data to new')) . "</div>"; print '<p class="information">' . $GLOBALS['I18N']->get('To avoid overloading the system, this will convert 10000 records at a time') . '</p>'; }
print '<script language="Javascript" type="text/javascript"> finish(); </script>'; # update the system pages while (list($type, $pages) = each($system_pages)) { foreach ($pages as $page) { Sql_Query(sprintf('replace into %s (page,type) values("%s","%s")', $tables["task"], $page, $type)); } } # mark the database to be our current version if ($success) { SaveConfig("version", VERSION, 0); # mark now to be the last time we checked for an update Sql_Query(sprintf('replace into %s (item,value,editable) values("updatelastcheck",now(),0)', $tables["config"])); Info("Success"); } else { Error("An error occurred while upgrading your database"); } } else { ?> <p>Your database requires upgrading, please make sure to create a backup of your database first.</p> <p>When you're ready click <?php echo PageLink2("upgrade", "Here", "doit=yes"); ?> . Depending on the size of your database, this may take quite a while. Please make sure not to interrupt the process, once you've started it.</p> <?php } } ?> </td></tr></table> </div>
} } # if ($success) { # mark the database to be our current version Sql_Query(sprintf('replace into %s (item,value,editable) values("version","%s",0)', $tables["config"], VERSION)); # mark now to be the last time we checked for an update Sql_Query(sprintf('replace into %s (item,value,editable) values("updatelastcheck",now(),0)', $tables["config"])); # add a testlist $info = $GLOBALS['I18N']->get("List for testing."); $result = Sql_query("insert into {$tables["list"]} (name,description,entered,active,owner) values(\"test\",\"{$info}\",now(),0,1)"); $body = ' Version: ' . VERSION . "\r\n" . ' Url: ' . getConfig("website") . $pageroot . "\r\n"; printf('<p>' . $GLOBALS['I18N']->get('Success') . ': <a href="mailto:phplist2@tincan.co.uk?subject=Successful installation of phplist&body=%s">' . $GLOBALS['I18N']->get('Tell us about it') . '</a>. </p>', $body); printf('<p> ' . $GLOBALS['I18N']->get("Please make sure to read the file README.security that can be found in the zip file.") . '</p>'); printf('<p> ' . $GLOBALS['I18N']->get("Please make sure to") . ' <a href="http://tincan.co.uk/lists/?p=subscribe"> ' . $GLOBALS['I18N']->get("subscribe to the announcements list") . "</a> " . $GLOBALS['I18N']->get("to make sure you are updated when new versions come out. Sometimes security bugs are found which make it important to upgrade. Traffic on the list is very low.") . ' </p>'); print "<p>" . $GLOBALS['I18N']->get("Continue with") . " " . PageLink2("setup", $GLOBALS['I18N']->get("PHPlist Setup")) . "</p>"; } else { print '<ul><li>' . $GLOBALS['I18N']->get("Maybe you want to") . " " . PageLink2("upgrade", $GLOBALS['I18N']->get("Upgrade")) . ' ' . $GLOBALS['I18N']->get("instead?") . ' <li>' . PageLink2("initialise", $GLOBALS['I18N']->get("Force Initialisation"), "force=yes") . ' ' . $GLOBALS['I18N']->get("(will erase all data!)") . ' ' . "</ul>\n"; } /* if ($_GET["firstinstall"] || $_SESSION["firstinstall"]) { $_SESSION["firstinstall"] = 1; print "<p>".$GLOBALS['I18N']->get("Checklist for Installation")."</p>"; require "setup.php"; } */
function PageLinkActionButton($name, $desc = '', $url = '', $extraclass = '', $title = '') { ## as PageLink2, but add the option to ajax it in a popover window $link = PageLink2($name, $desc, $url); if ($link) { $link = str_replace('<a ', '<a class="action-button ' . $extraclass . '" ', $link); $link .= ''; } return $link; }
"> <input type="hidden" name="no_note" value="1"> <input type="hidden" name="currency_code" value="GBP"> <input type="hidden" name="tax" value="0"> <input type="hidden" name="bn" value="PP-DonationsBF"> <input type="image" src="images/paypal.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> </form></p> <p>اگر شما یک <b>کاربر همیشگی phplist</b> هستید و فکر میکنید که از پس اغلب مشکلات بر میآيید ميتوانید با <a href="http://forums.phplist.com/" target="_blank">پاسخ گفتن به پرسشهای کاربران دیگر</a>. یا نوشتن برگه هایی در <a href="#docscontrib">سایت مستندات</a> کمک کنید.</p> <p>اگر شما یک <b>کاربر تازهکار phplist</b> هستید و برای نصب یا به کار گرفتن PHPlist روی سایت خود با مشکلی روبرو شدید، میتوانید پیش از اینکه فوراً یک پیام "اینکه کار نمیکنه!" برای ما بفرستید، با تلاش برای پیدا کردن راه حل مناسب در مکانهایی که در بالا گفته شده به ما کمک کنید. اغلب مشکل در تنظیمات محیطی است که میخواهید PHPlist را اجرا کنید. داشتن تنها یک توسعه دهنده برای PHPlist این مشکل را هم دارد که نمیتوان آن را در همه محیط ها و برای همه ویرایش های PHP آزمایش کرد. </p> <h1>کارهای دیگری که میتوانید برای یاری رساندن انجام دهید</h1> <ul> <li><p>اگر فکر میکنید که PHPlist برای شما مفید بوده است، چرا دربارهاش به دیگران نگویید؟ به احتمال زیاد شما برای پیدا کردنش خیلی تلاش کرده اید و بعد از مقایسهاش با سیستمهای دیگر تصمیم به استفاده از آن گرفتهاید، پس میتوانید با تجربهای که کسب کردهاید به دیگران نیز سود برسانید.</p> <p>برای اینکار، میتوانید به PHPlist <?php echo PageLink2("رای دهید", "Vote"); ?> یا در سایتهایی که نرم افزارها را معرفی میکنند برایش بنویسید. همچنین میتوانید دربارهاش به افرادی که میشناسید بگویید. </li> <li><p>میتوانید PHPlist را <b>به زبان خودتان برگردانید</b> و برگردان را ارايه دهید. برای یاری رساندن <a href="http://docs.phplist.com/PhplistTranslation">برگه های برگردان</a> در ویکی بررسی کنید. </p> </li> <li> <p>میتوانید همه قابلیتهای مختلف PHPlist را <b>آزمایش کنید</b> و بررسی کنید که آیا به خوبی کار میکنند یا خیر. لطفا یافتههای خود را در <a href="http://forums.phplist.com/" target="_blank">انجمنها</a>گزارش کنید.</p></li> <li> <p> شما میتوانید PHPlist را برای مشتریان خود به کار بگیرید (اگر کارتان مرتبط با وب است) و به آنها نشان دهید که این سیستم چه ابزار خوبی برای رسیدن به اهدافشان است. سپس اگر آنها تغییراتی خواستند میتوانید در ازای دریافت دستمزد قابلیتهای جدید را ایجاد کنید. برای آگاهی از هزینه افزودن قابلیتهای جدید <a href="mailto:phplist2@tincan.co.uk?subject=request for quote to change phplist">تماس بگیرید</a>. بیشتر قابلیتهای جدید PHPlist بر اساس درخواست مشتریان ایجاد شده اند. این هم به نفع مشتریان است چون با پرداخت مبلغ اندکی به اهدافشان میرسند، هم به نفع جامعه کاربران PHPlist است چرا که قابلیتهای جدید به برنامه افزوده میشود و هم به نفع توسعه دهندگان که به خاطر کار کردن بر روی PHPlist کمی دستمزد میگیرند :-)</p></li>
<p> <h1>Importeer emails in bestaande lijsten</h1> Er zijn vier manieren om bestaande informatie te importeren: <ul> <li><?php echo PageLink2("import2", "Importeer emails met verschillende waarden voor attributen"); ?> . De lijst van emails kan attributen hebben die nog niet zijn vastgelegd. Ze zullen automatisch worden aangemaakt als "textlijn" attributen. Je kunt best deze optie gebruiken als je een spreadsheet/CSV bestand wilt importeren dat de attributen voor de gebruikers in kolommen heeft en een gebruiker per lijn. <br/><br/> <li><?php echo PageLink2("import1", "Importeer emails met dezelfde waarde voor attributen"); ?> . De lijst van emails zal moeten overeenkomen met de structuur die je al hebt opgezet in <?php echo NAME; ?> . Je kan deze optie best gebruiken als je een eenvoudige lijst met emails wilt importeren. Je kan daarnaa de waarden voor de attributen voor elke email ingeven. Ze zullen hetzelfde zijn voor iedereen die je importeerd.<br/><br/> <li><?php echo PageLink2("import3", "Importeer emails van een IMAP account"); ?> . Dit zal naar emails in jou IMAP mappen zoeken en ze toevoegen. Enkel de Naam van de persoon kan als een attribuut worden gevonden.<br/><br/> <li><?php echo PageLink2("import4", "Importeer emails van een andere database"); ?> . </ul> </p>
$total = $req[0]; if (isset($_GET['s'])) { $s = sprintf('%d', $_GET['s']); $e = $s + $numperrun; } else { $s = 0; $e = $numperrun; } $limit = ' limit ' . $s . ', ' . $numperrun; if ($total > $numperrun && $e < $total) { $next = '<p>' . PageLink2('checkbouncerules&s=' . $e, sprintf($GLOBALS['I18N']->get('Process Next %d'), $numperrun)) . '</p>'; } else { $next = ''; } $unmatched = 0; $matched = 0; $req = Sql_Query(sprintf('select * from %s where comment != "not processed" %s', $GLOBALS['tables']['bounce'], $limit)); while ($row = Sql_Fetch_Array($req)) { $action = matchBounceRules($row['data'], $bouncerules); if ($action) { # print $row['comment']. " Match: $action<br/>"; $matched++; } else { $unmatched++; print $GLOBALS['I18N']->get('No match') . ': ' . $row['id'] . ' ' . PageLink2("bounce&id=" . $row['id'], $row['comment']) . '<br/>'; } flush(); } print '<br/>' . $unmatched . ' ' . $GLOBALS['I18N']->get('bounces did not match any current active rule'); print '<br/>' . $matched . ' ' . $GLOBALS['I18N']->get('bounce matched current active rules'); print $next;
$messageid = $GLOBALS['I18N']->get('System Message'); } else { $messageid = $GLOBALS['I18N']->get('Unknown'); } /* if (preg_match('/Action: delayed\s+Status: 4\.4\.7/im',$bounce["data"])) { $ls->addColumn($element,'delayed',$GLOBALS['img_tick']); } else { $ls->addColumn($element,'delayed',$GLOBALS['img_cross']); } */ $ls->addColumn($element, s('Campaign'), $messageid); if (preg_match("#([\\d]+) bouncecount increased#", $bounce['comment'], $regs)) { $userid = PageLink2('user&id=' . $regs[1], $regs[1]); #sprintf('<a href="./?page=user&id=%d">%d</a>',$regs[1],$regs[1]); } elseif (preg_match("#([\\d]+) marked unconfirmed#", $bounce['comment'], $regs)) { $userid = PageLink2('user&id=' . $regs[1], $regs[1]); #sprintf('<a href="./?page=user&id=%d">%d</a>',$regs[1],$regs[1]); } else { $userid = $GLOBALS['I18N']->get('Unknown'); } $ls->addColumn($element, $GLOBALS['I18N']->get('user'), $userid); $ls->addColumn($element, $GLOBALS['I18N']->get('date'), $bounce['date']); /* printf( "<tr><td>[ <a href=\"javascript:deleteRec('%s');\">%s</a> | %s ] </td><td>%s</td><td>%s</td><td>%s</td></tr>\n", PageURL2("bounces",$GLOBALS['I18N']->get('delete'),"s=$start&delete=".$bounce["id"]), $GLOBALS['I18N']->get('delete'), PageLinkButton("bounce",$GLOBALS['I18N']->get('Show'),"s=$start&id=".$bounce["id"]), $messageid, $userid, $bounce["date"]
<br /><?php echo PageLink2("messages", "Powrót do listy wiadomości"); ?> <br /><a href="#resend">Wyślij tą wiadomość do innej listy</a>
$req = Sql_Query(sprintf('select listid,userid,count(bounce) as numbounces from %s listuser, %s umb where listuser.userid = umb.user and listuser.listid = %d and date_add(time,interval 6 month) > now() group by umb.user order by listuser.listid', $GLOBALS['tables']['listuser'], $GLOBALS['tables']['user_message_bounce'], $listid)); $total = Sql_Affected_Rows(); $limit = ''; $numpp = 150; $s = empty($_GET['s']) ? 0 : sprintf('%d', $_GET['s']); if ($total > 500 && $_GET['type'] != 'dl') { # print Paging2('listbounces&id='.$listid,$total,$numpp,'Page'); $listing = sprintf($GLOBALS['I18N']->get("Listing %s to %s"), $s, $s + $numpp); $limit = "limit {$s}," . $numpp; print $total . " " . $GLOBALS['I18N']->get(" Total") . "</p>"; printf('<table border=1><tr><td colspan=4 align=center>%s</td></tr><tr><td>%s</td><td>%s</td><td> %s</td><td>%s</td></tr></table><p><hr>', $listing, PageLink2('listbounces&id=' . $listid, "<<", "s=0"), PageLink2('listbounces&id=' . $listid, "<", sprintf('s=%d', max(0, $s - $numpp))), PageLink2('listbounces&id=' . $listid, ">", sprintf('s=%d', min($total, $s + $numpp))), PageLink2('listbounces&id=' . $listid, ">>", sprintf('s=%d', $total - $numpp))); $req = Sql_Query(sprintf('select listid,userid,count(bounce) as numbounces from %s listuser, %s umb where listuser.userid = umb.user and listuser.listid = %d and date_add(time,interval 6 month) > now() group by umb.user order by listuser.listid %s', $GLOBALS['tables']['listuser'], $GLOBALS['tables']['user_message_bounce'], $listid, $limit)); } print '<p>' . PageLink2('listbounces', 'Select another list'); print ' ' . PageLink2('listbounces&type=dl&&id=' . $listid, 'Download emails'); print '</p>'; if ($_GET['type'] == 'dl') { ob_end_clean(); Header("Content-type: text/plain"); $filename = 'Bounces on ' . listName($listid); header("Content-disposition: attachment; filename=\"{$filename}\""); } $currentlist = 0; $ls = new WebblerListing(''); while ($row = Sql_Fetch_Array($req)) { if ($currentlist != $row['listid']) { if ($_GET['type'] != 'dl') { print $ls->display(); } $currentlist = $row['listid'];
if (!empty($_POST['template'])) { $data['template'] = $content; } } else { $data = array(); $data["title"] = ''; $data["template"] = ''; } ?> <p class="information"><?php echo $msg; ?> </p> <?php echo '<p class="button">' . PageLink2("templates", $GLOBALS['I18N']->get('List of Templates')) . '</p>'; ?> <?php echo formStart(' enctype="multipart/form-data" class="template2" '); ?> <input type="hidden" name="id" value="<?php echo $id; ?> " /> <div class="panel"> <table class="templateForm"> <tr> <td><?php echo $GLOBALS['I18N']->get('Title of this template');
function deleteItem($table, $attributeid, $delete) { global $tables, $replace; # delete the index in delete $valreq = Sql_Fetch_Row_query("select name from {$table} where id = {$delete}"); $val = $valreq[0]; # check dependencies $dependencies = array(); $result = Sql_query("select distinct userid from {$tables['user_attribute']} where\n attributeid = {$attributeid} and value = {$delete}"); while ($row = Sql_fetch_array($result)) { array_push($dependencies, $row["userid"]); } if (sizeof($dependencies) == 0) { $result = Sql_query("delete from {$table} where id = {$delete}"); } else { if ($replace) { $result = Sql_Query("update {$tables['user_attribute']} set value = {$replace} where value = {$delete}"); $result = Sql_query("delete from {$table} where id = {$delete}"); } else { ?> Cannot delete <b><?php echo $val; ?> </b><br /> The Following record(s) are dependent on this value<br /> Update the record(s) to not use this attribute value and try again<p> <?php for ($i = 0; $i < sizeof($dependencies); $i++) { print PageLink2("user", "User " . $dependencies[$i], "id={$dependencies[$i]}") . "<br />\n"; if ($i > 10) { print "* Too many to list, total dependencies:\n " . sizeof($dependencies) . "<br /><br />"; giveAlternative($table, $delete, $attributeid); return 0; } } print "</p><br />"; giveAlternative($table, $delete, $attributeid); } } return 1; }
<p> <h1>Importer des adresses email dans des listes pré-existantes</h1> Il y a quatre méthodes pour importer des données pré-existantes: <ul> <li><?php echo PageLink2("import2", "Importer des adresses email avec des attributs différents de votre système"); ?> . La liste d’emails peut contenir des attributs qui ne sont pas encore définis. Ils seront créés automatiquement comme des attributs "textline", c’est-à-dire un champ texte. Utilisez cette option si vous importez d’un fichier CSV ou d’un tableur, en veillant à mettre les attributs dans les colonnes, un utilisateur par ligne, et l’email des utilisateurs dans la première colonne (ce qui correspond au premier attribut). <br/><br/> <li><?php echo PageLink2("import1", "Importer des adresses email avec les mêmes valeurs et attributs que votre système"); ?> . La liste d’emails devra correspondre à la structure que vous avez déjà créé dans <?php echo NAME; ?> . Utilisez cette option si vous importez une simple liste d’emails. Vous pouvez ensuite spécifier les valeurs des attributs dans chaque dossier. Les valeurs par défaut seront les mêmes pour tous les emails que vous importerez.<br/><br/> <li><?php echo PageLink2("import3", "Importer des adresses emails d’un compte IMAP"); ?> . Cette option va chercher des emails dans vos dossier IMAP et les ajouter à votre liste. Seul le Nom de la personne pourra être récupéré comme attribut.<br/><br/> <li><?php echo PageLink2("import4", "Importer des adresses email d’une autre base de données"); ?> . </ul> </p>
$delete_base = sprintf('%s&id=%d&tab=%s', $_GET["page"], $_GET["id"], $_GET["tab"]); $tc = 0; # table counter if (!isset($messagedata['criteria_overall_operator'])) { $messagedata['criteria_overall_operator'] = ''; } $mainoperator = $messagedata['criteria_overall_operator'] == "all" ? ' and ' : ' or '; $subqueries = array(); for ($i = 1; $i <= $num; $i++) { $crit_data = parseDelimitedData($messagedata[sprintf('criterion%d', $i)]); if ($crit_data["attribute"]) { array_push($used_attributes, $crit_data["attribute"]); $ls->addElement('<!--' . $crit_data["attribute"] . '-->' . $crit_data["attribute_name"]); $ls->addColumn('<!--' . $crit_data["attribute"] . '-->' . $crit_data["attribute_name"], $GLOBALS['I18N']->get('operator'), $GLOBALS['I18N']->get($crit_data["operator"])); $ls->addColumn('<!--' . $crit_data["attribute"] . '-->' . $crit_data["attribute_name"], $GLOBALS['I18N']->get('values'), $crit_data["values"]); $ls->addColumn('<!--' . $crit_data["attribute"] . '-->' . $crit_data["attribute_name"], $GLOBALS['I18N']->get('remove'), PageLink2($delete_base . "&deleterule=" . $i, $GLOBALS['I18N']->get("remove"))); if (isset($_POST["criteria"][$i])) { $attribute = $_POST["criteria"][$i]; } else { $attribute = ''; } ## fix 6063 $crit_data["values"] = str_replace(" ", "", $crit_data["values"]); # hmm, rather get is some other way, this is a bit unnecessary $type = Sql_Fetch_Row_Query("select type from {$tables["attribute"]} where id = " . $crit_data["attribute"]); $operator = $where_clause = $select_clause = ""; switch ($type[0]) { case "checkboxgroup": $or_clause = ''; if ($tc) { $where_clause .= " {$mainoperator} ";
$result = Sql_query($query, 0); $userid = Sql_insert_id(); if ($userid) { $result = Sql_query("replace into {$tables['listuser']} (userid,listid,entered) values({$userid},{$listid},now())"); reset($data); while (list($key, $val) = each($data)) { if ($key && $val) { Sql_query("replace into {$tables['user_attribute']} (attributeid,userid,value) values(" . $key . ",{$userid}," . $val . ')'); } } } } return 1; } print formStart(' class="testOutput" ') . '<input type="text" name="output" size=45></form>'; print '<p class="button">' . PageLink2('stresstest', 'Erase Test information', 'eraseall=yes') . ' (may take a while)'; ob_end_flush(); flush(); $testlists = array(); $res = Sql_Query("select id from {$tables['list']} where name like \"%test%\""); while ($row = Sql_Fetch_Row($res)) { array_push($testlists, $row[0]); } if (!ini_get('safe_mode')) { if (!count($testlists)) { print '<script language="Javascript" type="text/javascript"> document.forms[0].output.value="Error: cannot find any test lists to use";</script>' . "\n"; } elseif (!isset($eraseall)) { print '<script language="Javascript" type="text/javascript"> document.forms[0].output.value="Filling ";</script>' . "\n"; for ($i = 0; $i <= 100; ++$i) { set_time_limit(60); flush();
$alldone = 0; $html .= $GLOBALS['img_cross']; } $html .= '</td></tr>'; $html .= '<tr><td>' . s('Create a subscribe page') . '</td> <td>' . PageLink2('spage', s('Go there')) . '</td><td>'; $req = Sql_Query("select * from {$tables['subscribepage']}"); if (Sql_Affected_Rows()) { $html .= $GLOBALS['img_tick']; } else { $alldone = 0; $html .= $GLOBALS['img_cross']; } $html .= '</td></tr>'; $html .= '<tr><td>' . s('Add some subscribers') . '</td> <td>' . PageLink2('import', s('Go there')) . '</td><td>'; $req = Sql_Fetch_Row_Query("select count(*) from {$tables['user']}"); if ($req[0] > 2) { $html .= $GLOBALS['img_tick']; } else { $alldone = 0; $html .= $GLOBALS['img_cross']; } $html .= '</td></tr>'; $html .= '</table>'; if ($alldone) { $html .= Info($GLOBALS['I18N']->get('Congratulations, phpList is set up, you are ready to start mailing'), 1) . '<br/>' . PageLinkActionButton('send', s('Start a message campaign')); unset($_SESSION['firstinstall']); } $panel = new UIPanel($GLOBALS['I18N']->get('configuration steps'), $html); print $panel->display();
if (isset($GLOBALS['developer_email'])) { include $include; } else { @(include $include); } } # print "End of inclusion<br/>"; } elseif (!empty($_GET['pi']) && isset($GLOBALS['plugins']) && is_array($GLOBALS['plugins']) && isset($GLOBALS['plugins'][$_GET['pi']]) && is_object($GLOBALS['plugins'][$_GET['pi']])) { $plugin = $GLOBALS["plugins"][$_GET["pi"]]; $menu = $plugin->adminmenu(); if (is_file($plugin->coderoot . $include)) { include $plugin->coderoot . $include; } elseif ($include == 'main.php' || $_GET['page'] == 'home') { print '<h3>' . $plugin->name . '</h3><ul>'; foreach ($menu as $page => $desc) { print '<li>' . PageLink2($page, $desc) . '</li>'; } print '</ul>'; } elseif ($page != 'login') { print '<br/>' . "{$page} -> " . s('Sorry this page was not found in the plugin') . '<br/>'; #.' '.$plugin->coderoot.$include.'<br/>'; cl_output("{$page} -> " . s('Sorry this page was not found in the plugin')); #. ' '.$plugin->coderoot . "$include"); } } else { if ($GLOBALS["commandline"]) { clineError(s('Sorry, that module does not exist')); exit; } if (is_file('ui/' . $GLOBALS['ui'] . '/pages/' . $include)) { include 'ui/' . $GLOBALS['ui'] . '/pages/' . $include;
<?php # view template require_once dirname(__FILE__) . '/accesscheck.php'; if (!empty($_GET['pi']) && defined('IN_WEBBLER')) { $more = '&pi=' . $_GET['pi']; } else { $more = ''; } $id = ''; if (isset($_GET['id'])) { $id = sprintf('%d', $_GET['id']); } if (empty($_GET['embed'])) { print '<iframe src="?page=viewtemplate&embed=yes&omitall=yes&id=' . $id . $more . '" scrolling="auto" width=100% height=450 margin=0 frameborder=0> </iframe>'; print '<p class="button">' . PageLink2('template&id=' . $id, $GLOBALS['I18N']->get('Back to edit template')) . '</p>'; } else { ob_end_clean(); //BUGFIX 15292 - by tipichris - mantis.phplist.com/view.php?id=15292 // print previewTemplate($id,$_SESSION["logindetails"]["id"],nl2br($GLOBALS['I18N']->get('Sample Newsletter text'))); print previewTemplate($id, $_SESSION['logindetails']['id'], '<h4 style="color:#369;">' . $GLOBALS['I18N']->get('Sample Newsletter Content') . '</h4>' . '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum a quam nec neque interdum venenatis. Duis sed lacus vel elit vehicula facilisis. Phasellus nec quam a justo dapibus iaculis fermentum vitae velit. Donec quis lorem sapien.</p><hr size=1 style="color:#69C" /><br /><p><b style="color:#369"> Donec iaculis ultrices volutpat? </b></p><p><img src="images/sampleimage.jpg" style="float:right;margin-left:10px;border:1px solid #999" />Etiam sodales tortor a sapien sagittis id blandit tortor lacinia. <a href="#" style="color:#369;text-decoration:underline">Integer in elit magna</a>. Phasellus vestibulum nulla ante. Etiam augue magna, venenatis ut ornare eget, tempor pulvinar urna. Maecenas molestie elementum leo vel vehicula. In sed porttitor ligula. Quisque vulputate tortor at tellus gravida in molestie ipsum cursus. Fusce posuere mauris at mauris feugiat quis volutpat velit vestibulum.</p>'); //END BUGFIX }
} // end foreach $num_lists = sizeof($lists); # be grammatically correct :-) $displists = $num_lists == 1 ? $GLOBALS['I18N']->get('list') : $GLOBALS['I18N']->get('lists'); $dispemail = $count_email_add == 1 ? $GLOBALS['I18N']->get('new email was') . " " : $GLOBALS['I18N']->get('new emails were') . " "; $dispemail2 = $additional_emails == 1 ? $GLOBALS['I18N']->get('email was') . " " : $GLOBALS['I18N']->get('emails were') . " "; if (!$some && !$additional_emails) { print "<br/>" . $GLOBALS['I18N']->get("All the emails already exist in the database and are members of the") . " {$displists}."; } else { print "{$count_email_add} {$dispemail} " . $GLOBALS['I18N']->get("succesfully imported to the database and added to") . " {$num_lists} {$displists}.<br/>{$additional_emails} {$dispemail2} " . $GLOBALS['I18N']->get("subscribed to the") . " {$displists}"; if ($count_exist) { print "<br/>{$count_exist} " . $GLOBALS['I18N']->get("emails already existed in the database"); } if ($invalid_email_count) { print "<br/>{$invalid_email_count} " . $GLOBALS['I18N']->get("Invalid Emails found."); if (!$omit_invalid) { print " " . $GLOBALS['I18N']->get("These records were added, but the email has been made up. You can find them by doing a search on") . " \"Invalid Email\""; } else { print " " . $GLOBALS['I18N']->get("These records were deleted. Check your source and reimport the data. Duplicates will be identified."); } } } } else { print $GLOBALS['I18N']->get("No emails found"); } print '<p class="button">' . PageLink2("import", $GLOBALS['I18N']->get('Import some more emails')); } ?>
<?php echo $GLOBALS['I18N']->get('Find an admin'); ?> : <input type=text name="find" value="<?php echo htmlspecialchars($find); ?> " size="40"><input type="submit" value="<?php echo $GLOBALS['I18N']->get('Go'); ?> "> </form></td> </tr> </table> <?php $ls = new WebblerListing($GLOBALS['I18N']->get('Administrators')); $ls->usePanel($paging); while ($admin = Sql_fetch_array($result)) { $delete_url = sprintf("<a href=\"javascript:deleteRec('%s');\">" . $GLOBALS['I18N']->get('del') . '</a>', PageURL2('admins', 'Delete', "start={$start}&delete=" . $admin['id'])); $ls->addElement($admin['loginname'], PageUrl2('admin', $GLOBALS['I18N']->get('Show'), "start={$start}&id=" . $admin['id'] . $remember_find)); if (!$external && $admin['id'] != $_SESSION['logindetails']['id']) { $ls->addColumn($admin['loginname'], $GLOBALS['I18N']->get('Del'), $delete_url); } } print $ls->display(); print '<br/><hr/>'; print PageLinkButton('admin', $GLOBALS['I18N']->get('Add a new administrator'), "start={$start}" . $remember_find); print '<p class="button">' . PageLink2('importadmin', $GLOBALS['I18N']->get('Import list of admins')) . '</p>';
<?php require_once dirname(__FILE__) . '/accesscheck.php'; $spb = '<div>'; $spe = '</div>'; print $spb . PageLink2('bouncerules', $GLOBALS['I18N']->get('List Bounce Rules')) . $spe; print $spb . PageLink2('bounces', $GLOBALS['I18N']->get('View Bounces')) . $spe; print $spb . PageLink2('listbounces', $GLOBALS['I18N']->get('View Bounces per list')) . $spe; print $spb . PageLink2('checkbouncerules', $GLOBALS['I18N']->get('Check Current Bounce Rules')) . $spe; print $spb . PageLink2('processbounces', $GLOBALS['I18N']->get('Process Bounces')) . $spe; $numrules = Sql_Fetch_Row_Query(sprintf('select count(*) from %s', $GLOBALS['tables']['bounceregex'])); if (!$numrules[0]) { print '<p class="information">' . $GLOBALS['I18N']->get('You currently have no rules defined. You can click "Generate Bounce Rules" in order to auto-generate rules from your existing bounces. This will results in a lot of rules which you will need to review and activate. It will however, not catch every single bounce, so it will be necessary to add new rules over time when new bounces come in.') . '</p>'; } else { print '<p class="information">' . $GLOBALS['I18N']->get('You have already defined bounce rules in your system. Be careful with generating new ones, because these may interfere with the ones that exist.') . '</p>'; } print '<p class="button">' . PageLink2('generatebouncerules', $GLOBALS['I18N']->get('Generate Bounce Rules')) . '</p>';
$req = Sql_Query(sprintf('select user.email,user.id as userid,firstclick,date_format(latestclick, "%%e %%b %%Y %%H:%%i") as latestclick,sum(clicked) as numclicks,messageid,linkid,url from %s as linktrack, %s as user where linktrack.userid = user.id and linktrack.userid = %d and linktrack.clicked group by linktrack.url', $GLOBALS['tables']['linktrack'], $GLOBALS['tables']['user'], $userid)); } #ob_end_flush(); #flush(); $summary = array(); while ($row = Sql_Fetch_Array($req)) { # print $row['email'] . "<br/>"; if (!$userid) { $element = $row['email']; $ls->addElement($element, PageUrl2('userhistory&id=' . $row['userid'])); } else { $element = $row['url']; $ls->addElement($element, PageUrl2('uclicks&id=' . $row['linkid'])); $ls->addColumn($element, $GLOBALS['I18N']->get('message'), PageLink2('mclicks&id=' . $row['messageid'], $row['messageid'])); } # $element = sprintf('<a href="%s" target="_blank" class="url" title="%s">%s</a>',$row['url'],$row['url'],substr(str_replace('http://','',$row['url']),0,50)); # $total = Sql_Verbose_Query(sprintf('select count(*) as total from %s where messageid = %d and url = "%s"', # $GLOBALS['tables']['linktrack'],$id,$row['url'])); # $totalsent = Sql_Fetch_Array_Query(sprintf('select count(*) as total from %s where url = "%s"', # $GLOBALS['tables']['linktrack'],$urldata['url'])); $ls->addColumn($element, $GLOBALS['I18N']->get('firstclick'), formatDateTime($row['firstclick'], 1)); $ls->addColumn($element, $GLOBALS['I18N']->get('latestclick'), $row['latestclick']); $ls->addColumn($element, $GLOBALS['I18N']->get('clicks'), $row['numclicks']); # $ls->addColumn($element,$GLOBALS['I18N']->get('sent'),$total['total']); # $perc = sprintf('%0.2f',($row['numclicks'] / $totalsent['total'] * 100)); # $ls->addColumn($element,$GLOBALS['I18N']->get('clickrate'),$perc.'%'); $summary['totalclicks'] += $row['numclicks']; } $ls->addElement('total');
primeramente encontrar la solución a sus problemas en los lugares mencionados más arriba, antes de colgar un mensaje tipo «esto no funciona». Los problemas a menudo están relacionados con el entorno en el que está funcionando su instalación de PHPlist. El tener un único programador en PHPlist tiene la desventaja de que no se puede probar el sistema en todas las plataformas ni con todas las versiones de PHP.</p> <h1>Otras cosas que puede hacer para ayudar</h1> <ul> <li><p>Si PHPlist le resulta útil, podría ayudar a difundirlo. Probablemente realizó un cierto esfuerzo para encontrarlo y tomar la decisión de utilizarlo después de haberlo comparado con otros programas similares. Podría ayudar a otras personas a beneficiarse de su experiencia.</p> <p>Para ello <?php echo PageLink2("vote", "Vote"); ?> por PHPlist, o escriba reseñas en los sitios que enumeran este tipo de programas. También puede informar sobre el programa directamente a otras personas. </li> <li><p>Puede <b>Traducir</b> PHPlist a su idioma y compartir la traducción. Esperamos mejorar la internacionalización, pero de momento solo tiene que traducir el fichero <i>english.inc</i>.</p> </li> <li> <p>Puede <b>Probar</b> todas las funciones de PHPlist y comprobar si le sirven para sus necesidades. Por favor informe sobre los resultados de sus pruebas en los <a href="http://www.phplist.com/forums/" target="_blank">Foros</a>.</p></li> <li>
<? # view template require_once "accesscheck.php"; if (!$_GET["embed"]) { print '<iframe src="?page=viewtemplate&embed=yes&omitall=yes&id='.$_GET["id"].'" scrolling="auto" width=100% height=450 margin=0 frameborder=0> </iframe>'; print '<p>'.PageLink2("template&id=".$_GET["id"],"Back to edit template").'</p>'; } else { ob_end_clean(); print previewTemplate($id,$_SESSION["logindetails"]["id"],nl2br(' I understand, said Socrates, and quite accept your account. But tell me, Zeno, do you not further think that there is an idea of likeness in itself, and another idea of unlikeness, which is the opposite of likeness, and that in these two, you and I and all other things to which we apply the term many, participate--things which participate in likeness become in that degree and manner like; and so far as they participate in unlikeness become in that degree unlike, or both like and unlike in the degree in which they participate in both? And may not all things partake of both opposites, and be both like and unlike, by reason of this participation?--Where is the wonder? Now if a person could prove the absolute like to become unlike, or the absolute unlike to become like, that, in my opinion, would indeed be a wonder; but there is nothing extraordinary, Zeno, in showing that the things which only partake of likeness and unlikeness experience both. Nor, again, if a person were to show that all is one by partaking of one, and at the same time many by partaking of many, would that be very astonishing. But if he were to show me that the absolute one was many, or the absolute many one, I should be truly amazed. And so of all the rest: I should be surprised to hear that the natures or ideas themselves had these opposite
Sql_Query($query); $fp = fopen("data/$val","r"); $header = ""; while (!feof ($fp)) { $buffer = fgets($fp, 4096); if (!ereg("#",$buffer)) { if (!$header) $header = $buffer; else if (trim($buffer) != "") Sql_Query(sprintf('insert into %slistattr_%s (name) values("%s")',$table_prefix,$lc_name,trim($buffer))); } } fclose ($fp); } print "Done<br/><br/>"; print '<p>'.PageLink2("attributes","Continue").'</p>'; } else { ?> <?php echo formStart(); ?> <? reset($attributes); while (list($key,$attribute) = each ($attributes)) { list($name,$desc) = explode(":",$key); printf('<input type=checkbox name="selected[]" value="%s">%s<br>', $attribute,$desc); }