[TEP-COMMIT] [CVS catalog] introduce the new main account.php page that will handle account related

hpdl-OfajU3CKLf1/[email protected] 29 Mar 2005 23:25:39 -0000
Newsgroups gmane.comp.web.oscommerce.cvs
Message-ID <[email protected]>
<html>
<head>
<style><!--
  body {background-color:#ffffff;}
  .file {border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;}
  .pathname {font-family:monospace; float:right;}
  .fileheader {margin-bottom:.5em;}
  .diff {margin:0;}
  .tasklist {padding:4px;border:1px dashed #000000;margin-top:1em;}
  .tasklist ul {margin-top:0;margin-bottom:0;}
  tr.alt {background-color:#eeeeee}
  #added {background-color:#ddffdd;}
  #addedchars {background-color:#99ff99;font-weight:bolder;}
  tr.alt #added {background-color:#ccf7cc;}
  #removed {background-color:#ffdddd;}
  #removedchars {background-color:#ff9999;font-weight:bolder;}
  tr.alt #removed {background-color:#f7cccc;}
  #info {color:#888888;}
  #context {background-color:#eeeeee;}
  td {padding-left:.3em;padding-right:.3em;}
  tr.head {border-bottom-width:1px;border-bottom-style:solid;}
  tr.head td {padding:0;padding-top:.2em;}
  .task {background-color:#ffff00;}
  .comment {padding:4px;border:1px dashed #000000;background-color:#ffffdd}
  .error {color:red;}
  hr {border-width:0px;height:2px;background:black;}
--></style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head"><td colspan="4">Commit in <b><tt>catalog/catalog</tt></b><span id="info"> on MAIN</span></td></tr>
<tr><td><tt><a href="#file1">account.php</a></tt></td><td align="right" id="added">+18</td><td align="right" id="removed">-223</td><td nowrap="nowrap" align="center"><a href="http://cvs.oscommerce.com/viewcvs.cgi/catalog/catalog/account.php?rev=1.63&amp;content-type=text/vnd.viewcvs-markup">1.63</a> <a href="http://cvs.oscommerce.com/viewcvs.cgi/catalog/catalog/account.php.diff?r1=1.63&amp;r2=1.64">-&gt;</a> <a href="http://cvs.oscommerce.com/viewcvs.cgi/catalog/catalog/account.php?rev=1.64&amp;content-type=text/vnd.viewcvs-markup">1.64</a></td></tr>
</table>
<pre class="comment">
introduce the new main account.php page that will handle account related
pages through the GET scope

for example, account.php?address_book will show the address book page
</pre>
<hr /><a name="file1" /><div class="file">
<span class="pathname"><a href="http://cvs.oscommerce.com/viewcvs.cgi/catalog">catalog</a>/<a href="http://cvs.oscommerce.com/viewcvs.cgi/catalog/catalog">catalog</a><br /></span>
<div class="fileheader"><big><b>account.php</b></big> <small id="info"><a href="http://cvs.oscommerce.com/viewcvs.cgi/catalog/catalog/account.php?rev=1.63&amp;content-type=text/vnd.viewcvs-markup">1.63</a> <a href="http://cvs.oscommerce.com/viewcvs.cgi/catalog/catalog/account.php.diff?r1=1.63&amp;r2=1.64">-&gt;</a> <a href="http://cvs.oscommerce.com/viewcvs.cgi/catalog/catalog/account.php?rev=1.64&amp;content-type=text/vnd.viewcvs-markup">1.64</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.63 -r1.64
--- account.php	2005/02/23 15:24:24	1.63
+++ account.php	2005/03/29 23:25:37	1.64
@@ -20,231 +20,26 @@
</small></pre><pre class="diff" id="context"> 
   require(DIR_WS_LANGUAGES . $osC_Session-&gt;value('language') . '/' . FILENAME_ACCOUNT);
 
</pre><pre class="diff" id="removed">-  $breadcrumb-&gt;add(NAVBAR_TITLE, tep_href_link(FILENAME_ACCOUNT, '', 'SSL'));
-?&gt;
-&lt;!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
-&lt;html &lt;?php echo HTML_PARAMS; ?&gt;&gt;
-&lt;head&gt;
-&lt;meta http-equiv="Content-Type" content="text/html; charset=&lt;?php echo CHARSET; ?&gt;"&gt;
-&lt;title&gt;&lt;?php echo TITLE; ?&gt;&lt;/title&gt;
-&lt;base href="&lt;?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?&gt;"&gt;
-&lt;link rel="stylesheet" type="text/css" href="stylesheet.css"&gt;
-&lt;script language="javascript"&gt;&lt;!--
-function rowOverEffect(object) {
-  if (object.className == 'moduleRow') object.className = 'moduleRowOver';
-}
-
-function rowOutEffect(object) {
-  if (object.className == 'moduleRowOver') object.className = 'moduleRow';
-}
-//--&gt;&lt;/script&gt;
-&lt;/head&gt;
-&lt;body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0"&gt;
-&lt;!-- header //--&gt;
-&lt;?php require(DIR_WS_INCLUDES . 'header.php'); ?&gt;
-&lt;!-- header_eof //--&gt;
-
-&lt;!-- body //--&gt;
-&lt;table border="0" width="100%" cellspacing="3" cellpadding="3"&gt;
-  &lt;tr&gt;
-    &lt;td width="&lt;?php echo BOX_WIDTH; ?&gt;" valign="top"&gt;&lt;table border="0" width="&lt;?php echo BOX_WIDTH; ?&gt;" cellspacing="0" cellpadding="2"&gt;
-&lt;!-- left_navigation //--&gt;
-&lt;?php require(DIR_WS_INCLUDES . 'column_left.php'); ?&gt;
-&lt;!-- left_navigation_eof //--&gt;
-    &lt;/table&gt;&lt;/td&gt;
-&lt;!-- body_text //--&gt;
-    &lt;td width="100%" valign="top"&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="0"&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="0"&gt;
-          &lt;tr&gt;
-            &lt;td class="pageHeading"&gt;&lt;?php echo HEADING_TITLE; ?&gt;&lt;/td&gt;
-            &lt;td class="pageHeading" align="right"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'table_background_account.gif', HEADING_TITLE, HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-&lt;?php
-  if ($messageStack-&gt;size('account') &gt; 0) {
-?&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;?php echo $messageStack-&gt;output('account'); ?&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-&lt;?php
</pre><pre class="diff" id="added">+  if ($osC_Services-&gt;isStarted('breadcrumb')) {
+    $breadcrumb-&gt;add(NAVBAR_TITLE_MY_ACCOUNT, tep_href_link(FILENAME_ACCOUNT, '', 'SSL'));
</pre><pre class="diff" id="context">   }
 
</pre><pre class="diff" id="removed">-  if (tep_count_customer_orders() &gt; 0) {
-?&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" cellspacing="0" cellpadding="2"&gt;
-          &lt;tr&gt;
-            &lt;td class="main"&gt;&lt;b&gt;&lt;?php echo OVERVIEW_TITLE; ?&gt;&lt;/b&gt;&lt;/td&gt;
-            &lt;td class="main"&gt;&lt;?php echo '&lt;a href="' . tep_href_link(FILENAME_ACCOUNT_HISTORY, '', 'SSL') . '"&gt;&lt;u&gt;' . OVERVIEW_SHOW_ALL_ORDERS . '&lt;/u&gt;&lt;/a&gt;'; ?&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"&gt;
-          &lt;tr class="infoBoxContents"&gt;
-            &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-              &lt;tr&gt;
-                &lt;td class="main" align="center" valign="top" width="130"&gt;&lt;?php echo '&lt;b&gt;' . OVERVIEW_PREVIOUS_ORDERS . '&lt;/b&gt;&lt;br&gt;' . tep_image(DIR_WS_IMAGES . 'arrow_south_east.gif'); ?&gt;&lt;/td&gt;
-                &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-&lt;?php
-    $Qorders = $osC_Database-&gt;query('select o.orders_id, o.date_purchased, o.delivery_name, o.delivery_country, o.billing_name, o.billing_country, ot.text as order_total, s.orders_status_name from :table_orders o, :table_orders_total ot, :table_orders_status s where o.customers_id = :customers_id and o.orders_id = ot.orders_id and ot.class = :class and o.orders_status = s.orders_status_id and s.language_id = :language_id order by orders_id desc limit 3');
-    $Qorders-&gt;bindTable(':table_orders', TABLE_ORDERS);
-    $Qorders-&gt;bindTable(':table_orders_total', TABLE_ORDERS_TOTAL);
-    $Qorders-&gt;bindTable(':table_orders_status', TABLE_ORDERS_STATUS);
-    $Qorders-&gt;bindInt(':customers_id', $osC_Customer-&gt;id);
-    $Qorders-&gt;bindValue(':class', 'ot_total');
-    $Qorders-&gt;bindInt(':language_id', $osC_Session-&gt;value('languages_id'));
-    $Qorders-&gt;execute();
-
-    while ($Qorders-&gt;next()) {
-      if (tep_not_null($Qorders-&gt;value('delivery_name'))) {
-        $order_name = $Qorders-&gt;value('delivery_name');
-        $order_country = $Qorders-&gt;value('delivery_country');
-      } else {
-        $order_name = $Qorders-&gt;value('billing_name');
-        $order_country = $Qorders-&gt;value('billing_country');
-      }
-?&gt;
-                  &lt;tr class="moduleRow" onMouseOver="rowOverEffect(this)" onMouseOut="rowOutEffect(this)" onClick="document.location.href='&lt;?php echo tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $Qorders-&gt;valueInt('orders_id'), 'SSL'); ?&gt;'"&gt;
-                    &lt;td class="main" width="80"&gt;&lt;?php echo tep_date_short($Qorders-&gt;value('date_purchased')); ?&gt;&lt;/td&gt;
-                    &lt;td class="main"&gt;&lt;?php echo '#' . $Qorders-&gt;valueInt('orders_id'); ?&gt;&lt;/td&gt;
-                    &lt;td class="main"&gt;&lt;?php echo tep_output_string_protected($order_name) . ', ' . $order_country; ?&gt;&lt;/td&gt;
-                    &lt;td class="main"&gt;&lt;?php echo $Qorders-&gt;value('orders_status_name'); ?&gt;&lt;/td&gt;
-                    &lt;td class="main" align="right"&gt;&lt;?php echo $Qorders-&gt;value('order_total'); ?&gt;&lt;/td&gt;
-                    &lt;td class="main" align="right"&gt;&lt;?php echo '&lt;a href="' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $Qorders-&gt;valueInt('orders_id'), 'SSL') . '"&gt;' . tep_image_button('small_view.gif', SMALL_IMAGE_BUTTON_VIEW) . '&lt;/a&gt;'; ?&gt;&lt;/td&gt;
-                  &lt;/tr&gt;
-&lt;?php
</pre><pre class="diff" id="added">+  $page_contents = 'account.php';
+
+  if (empty($_GET) === false) {
+    $_account_module = tep_sanitize_string(basename(key(array_slice($_GET, 0, 1))));
+
+    if (file_exists('includes/modules/account/' . $_account_module . '.php')) {
+      include('includes/modules/account/' . $_account_module . '.php');
+
+      $_account_module_name = 'osC_Account_' . ucfirst($_account_module);
+      $osC_Account_Module = new $_account_module_name();
+
+      $page_contents = $osC_Account_Module-&gt;getPageContentsFile();
</pre><pre class="diff" id="context">     }
</pre><pre class="diff" id="removed">-?&gt;
-                &lt;/table&gt;&lt;/td&gt;
-                &lt;td&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-              &lt;/tr&gt;
-            &lt;/table&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-&lt;?php
</pre><pre class="diff" id="context">   }
</pre><pre class="diff" id="added">+
+  require('templates/default.php');
+
+  require('includes/application_bottom.php');
</pre><pre class="diff" id="context"> ?&gt;
</pre><pre class="diff" id="removed">-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-          &lt;tr&gt;
-            &lt;td class="main"&gt;&lt;b&gt;&lt;?php echo MY_ACCOUNT_TITLE; ?&gt;&lt;/b&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"&gt;
-          &lt;tr class="infoBoxContents"&gt;
-            &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-              &lt;tr&gt;
-                &lt;td width="10"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-                &lt;td width="60"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'account_personal.gif'); ?&gt;&lt;/td&gt;
-                &lt;td width="10"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-                &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-                  &lt;tr&gt;
-                    &lt;td class="main"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'arrow_green.gif') . ' &lt;a href="' . tep_href_link(FILENAME_ACCOUNT_EDIT, '', 'SSL') . '"&gt;' . MY_ACCOUNT_INFORMATION . '&lt;/a&gt;'; ?&gt;&lt;/td&gt;
-                  &lt;/tr&gt;
-                  &lt;tr&gt;
-                    &lt;td class="main"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'arrow_green.gif') . ' &lt;a href="' . tep_href_link(FILENAME_ADDRESS_BOOK, '', 'SSL') . '"&gt;' . MY_ACCOUNT_ADDRESS_BOOK . '&lt;/a&gt;'; ?&gt;&lt;/td&gt;
-                  &lt;/tr&gt;
-                  &lt;tr&gt;
-                    &lt;td class="main"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'arrow_green.gif') . ' &lt;a href="' . tep_href_link(FILENAME_ACCOUNT_PASSWORD, '', 'SSL') . '"&gt;' . MY_ACCOUNT_PASSWORD . '&lt;/a&gt;'; ?&gt;&lt;/td&gt;
-                  &lt;/tr&gt;
-                &lt;/table&gt;&lt;/td&gt;
-                &lt;td width="10" align="right"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-              &lt;/tr&gt;
-            &lt;/table&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-          &lt;tr&gt;
-            &lt;td class="main"&gt;&lt;b&gt;&lt;?php echo MY_ORDERS_TITLE; ?&gt;&lt;/b&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"&gt;
-          &lt;tr class="infoBoxContents"&gt;
-            &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-              &lt;tr&gt;
-                &lt;td width="10"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-                &lt;td width="60"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'account_orders.gif'); ?&gt;&lt;/td&gt;
-                &lt;td width="10"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-                &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-                  &lt;tr&gt;
-                    &lt;td class="main"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'arrow_green.gif') . ' &lt;a href="' . tep_href_link(FILENAME_ACCOUNT_HISTORY, '', 'SSL') . '"&gt;' . MY_ORDERS_VIEW . '&lt;/a&gt;'; ?&gt;&lt;/td&gt;
-                  &lt;/tr&gt;
-                &lt;/table&gt;&lt;/td&gt;
-                &lt;td width="10" align="right"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-              &lt;/tr&gt;
-            &lt;/table&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-          &lt;tr&gt;
-            &lt;td class="main"&gt;&lt;b&gt;&lt;?php echo EMAIL_NOTIFICATIONS_TITLE; ?&gt;&lt;/b&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-      &lt;tr&gt;
-        &lt;td&gt;&lt;table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox"&gt;
-          &lt;tr class="infoBoxContents"&gt;
-            &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-              &lt;tr&gt;
-                &lt;td width="10"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-                &lt;td width="60"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'account_notifications.gif'); ?&gt;&lt;/td&gt;
-                &lt;td width="10"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-                &lt;td&gt;&lt;table border="0" width="100%" cellspacing="0" cellpadding="2"&gt;
-                  &lt;tr&gt;
-                    &lt;td class="main"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'arrow_green.gif') . ' &lt;a href="' . tep_href_link(FILENAME_ACCOUNT_NEWSLETTERS, '', 'SSL') . '"&gt;' . EMAIL_NOTIFICATIONS_NEWSLETTERS . '&lt;/a&gt;'; ?&gt;&lt;/td&gt;
-                  &lt;/tr&gt;
-                  &lt;tr&gt;
-                    &lt;td class="main"&gt;&lt;?php echo tep_image(DIR_WS_IMAGES . 'arrow_green.gif') . ' &lt;a href="' . tep_href_link(FILENAME_ACCOUNT_NOTIFICATIONS, '', 'SSL') . '"&gt;' . EMAIL_NOTIFICATIONS_PRODUCTS . '&lt;/a&gt;'; ?&gt;&lt;/td&gt;
-                  &lt;/tr&gt;
-                &lt;/table&gt;&lt;/td&gt;
-                &lt;td width="10" align="right"&gt;&lt;?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?&gt;&lt;/td&gt;
-              &lt;/tr&gt;
-            &lt;/table&gt;&lt;/td&gt;
-          &lt;/tr&gt;
-        &lt;/table&gt;&lt;/td&gt;
-      &lt;/tr&gt;
-    &lt;/table&gt;&lt;/td&gt;
-&lt;!-- body_text_eof //--&gt;
-    &lt;td width="&lt;?php echo BOX_WIDTH; ?&gt;" valign="top"&gt;&lt;table border="0" width="&lt;?php echo BOX_WIDTH; ?&gt;" cellspacing="0" cellpadding="2"&gt;
-&lt;!-- right_navigation //--&gt;
-&lt;?php require(DIR_WS_INCLUDES . 'column_right.php'); ?&gt;
-&lt;!-- right_navigation_eof //--&gt;
-    &lt;/table&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-&lt;!-- body_eof //--&gt;
-
-&lt;!-- footer //--&gt;
-&lt;?php require(DIR_WS_INCLUDES . 'footer.php'); ?&gt;
-&lt;!-- footer_eof //--&gt;
-&lt;br&gt;
-&lt;/body&gt;
-&lt;/html&gt;
-&lt;?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?&gt;
</pre></div>
<center><small><a href="http://www.badgers-in-foil.co.uk/projects/cvsspam/" title="commit -&gt; email">CVSspam</a> 0.2.9</small></center>
</body></html>


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click