ZenCart_Documentation  1.5.0
http://www.collinsharper.com
C:/xampp/htdocs/zen-cart/admin/linkpoint_review.php
Go to the documentation of this file.
00001 <?php
00010   require('includes/application_top.php');
00011 
00012   require(DIR_WS_CLASSES . 'currencies.php');
00013   $currencies = new currencies();
00014 
00015   $action = (isset($_GET['action']) ? $_GET['action'] : '');
00016   if (isset($_GET['cID'])) $_GET['cID'] = (int)$_GET['cID'];
00017 
00018   if (substr($_GET['search'],0,3) == '%23' or substr($_GET['search'],0,1) == '#') {
00019     if (substr($_GET['search'],0,3) == '%23') {
00020     $search = '#' . substr($_GET['search'],2);
00021     } else {
00022     $search = '#' . substr($_GET['search'],1);
00023     }
00024   }
00025 
00026   $error = false;
00027   $processed = false;
00028 
00029   if (zen_not_null($action)) {
00030     switch ($action) {
00031       case 'status_OFF':
00032         if ($_GET['current'] == CUSTOMERS_APPROVAL_AUTHORIZATION) {
00033           $sql = "update " . TABLE_CUSTOMERS . " set customers_authorization=0 where customers_id='" . $_GET['cID'] . "'";
00034         } else {
00035           $sql = "update " . TABLE_CUSTOMERS . " set customers_authorization='" . CUSTOMERS_APPROVAL_AUTHORIZATION . "' where customers_id='" . $_GET['cID'] . "'";
00036         }
00037         $db->Execute($sql);
00038         $action = '';
00039         zen_redirect(zen_href_link(FILENAME_CUSTOMERS, 'cID=' . $_GET['cID'] . '&page=' . $_GET['page'], 'NONSSL'));
00040         break;
00041       default:
00042         $customers  = "select c.customers_id, c.customers_gender, c.customers_firstname,
00043                                           c.customers_lastname, c.customers_dob, c.customers_email_address,
00044                                           c.customers_telephone, c.customers_fax,
00045                                           c.customers_newsletter, c.customers_default_address_id,
00046                                           c.customers_email_format, c.customers_group_pricing,
00047                                           c.customers_authorization, c.customers_referral,
00048                                           lp.*
00049                                   from " . TABLE_CUSTOMERS . " c left join " .
00050                                   TABLE_LINKPOINT_API . " lp on c.customers_id = lp.customer_id
00051                                   where lp.customer_id = c.customers_id
00052                                   and c.customers_id = '" . (int)$_GET['cID'] . "'" .
00053                                   " order by lp.customer_id, lp.id ";
00054 
00055         $cInfo = new objectInfo($customers->fields);
00056     }
00057   }
00058 ?>
00059 <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
00060 <html <?php echo HTML_PARAMS; ?>>
00061 <head>
00062 <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
00063 <title><?php echo TITLE; ?></title>
00064 <link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
00065 <link rel="stylesheet" type="text/css" href="includes/cssjsmenuhover.css" media="all" id="hoverJS">
00066 <script language="javascript" src="includes/menu.js"></script>
00067 <script language="javascript" src="includes/general.js"></script>
00068 <script type="text/javascript">
00069   <!--
00070   function init()
00071   {
00072     cssjsmenu('navbar');
00073     if (document.getElementById)
00074     {
00075       var kill = document.getElementById('hoverJS');
00076       kill.disabled = true;
00077     }
00078   }
00079   // -->
00080 </script>
00081 </head>
00082 <body onLoad="init()">
00083 <!-- header //-->
00084 <?php require(DIR_WS_INCLUDES . 'header.php'); ?>
00085 <!-- header_eof //-->
00086 
00087 <!-- body //-->
00088 <table border="0" width="100%" cellspacing="2" cellpadding="2">
00089   <tr>
00090 <!-- body_text //-->
00091     <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
00092 <?php
00093   if (false) {
00094   } else {
00095 ?>
00096       <tr>
00097         <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
00098           <tr><?php echo zen_draw_form('search', FILENAME_LINKPOINT_REVIEW, '', 'get', '', true); ?>
00099             <td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
00100             <td class="pageHeading"><?php echo ($_GET['search'] == '' ? '<a href="' . zen_href_link(FILENAME_LINKPOINT_REVIEW, '', 'NONSSL') . '">' . zen_image_button('button_update.gif', IMAGE_UPDATE) . '</a>&nbsp;&nbsp;' : ''); ?>
00101             <td class="pageHeading" align="right"><?php echo zen_draw_separator('pixel_trans.gif', 1, HEADING_IMAGE_HEIGHT); ?></td>
00102             <td class="smallText" align="right">
00103 <?php
00104 // show reset search
00105     if (isset($_GET['search']) && zen_not_null($_GET['search'])) {
00106       echo '<a href="' . zen_href_link(FILENAME_LINKPOINT_REVIEW, '', 'NONSSL') . '">' . zen_image_button('button_reset.gif', IMAGE_RESET) . '</a>&nbsp;&nbsp;';
00107     }
00108     echo HEADING_TITLE_SEARCH_DETAIL . ' ' . zen_draw_input_field('search') . '<br />Customers Name or use #customers_id, example: #27275';
00109     if (isset($_GET['search']) && zen_not_null($_GET['search'])) {
00110       $keywords = zen_db_input(zen_db_prepare_input($_GET['search']));
00111       zen_draw_hidden_field('disp_order', $disp_order);
00112       echo '<br/ >' . TEXT_INFO_SEARCH_DETAIL_FILTER . $keywords . '<br />';
00113     }
00114 ?>
00115             </td>
00116           </form></tr>
00117         </table></td>
00118       </tr>
00119       <tr>
00120         <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
00121           <tr>
00122 <?php
00123 // Sort Listing
00124           switch ($_GET['list_order']) {
00125               case "id-asc":
00126               $disp_order = "lp.id";
00127               break;
00128               case "customers_id":
00129               $disp_order = "c.customers_id, lp.id";
00130               break;
00131               case "customers_id-desc":
00132               $disp_order = "c.customers_id DESC, lp.id";
00133               break;
00134               case "firstname":
00135               $disp_order = "c.customers_firstname";
00136               break;
00137               case "firstname-desc":
00138               $disp_order = "c.customers_firstname DESC";
00139               break;
00140               case "group-asc":
00141               $disp_order = "c.customers_group_pricing";
00142               break;
00143               case "group-desc":
00144               $disp_order = "c.customers_group_pricing DESC";
00145               break;
00146               case "lastname":
00147               $disp_order = "c.customers_lastname, c.customers_firstname";
00148               break;
00149               case "lastname-desc":
00150               $disp_order = "c.customers_lastname DESC, c.customers_firstname";
00151               break;
00152               case "company":
00153               $disp_order = "a.entry_company";
00154               break;
00155               case "company-desc":
00156               $disp_order = "a.entry_company DESC";
00157               break;
00158               case "login-asc":
00159               $disp_order = "ci.customers_info_date_of_last_logon";
00160               break;
00161               case "login-desc":
00162               $disp_order = "ci.customers_info_date_of_last_logon DESC";
00163               break;
00164               case "approval-asc":
00165               $disp_order = "c.customers_authorization";
00166               break;
00167               case "approval-desc":
00168               $disp_order = "c.customers_authorization DESC";
00169               break;
00170               default:
00171               $disp_order = "lp.id DESC";
00172               $_GET['list_order'] = "id-desc";
00173           }
00174 ?>
00175              <td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
00176               <tr class="dataTableHeadingRow">
00177                 <td class="dataTableHeadingContent" align="left">
00178                   <?php echo (($_GET['list_order']=='id-asc' or $_GET['list_order']=='id-desc') ? '<span class="SortOrderHeader">' . LPID . '</span>' : LPID); ?><br>
00179                   <a href="<?php echo zen_href_link(basename($PHP_SELF) . '?list_order=id-asc', '', 'NONSSL'); ?>"><?php echo ($_GET['list_order']=='id-asc' ? '<span class="SortOrderHeader">Asc</span>' : '<span class="SortOrderHeaderLink">Asc</b>'); ?></a>&nbsp;
00180                   <a href="<?php echo zen_href_link(basename($PHP_SELF) . '?list_order=id-desc', '', 'NONSSL'); ?>"><?php echo ($_GET['list_order']=='id-desc' ? '<span class="SortOrderHeader">Desc</span>' : '<span class="SortOrderHeaderLink">Desc</b>'); ?></a>
00181                 </td>
00182                 <td class="dataTableHeadingContent" align="left">
00183                   <?php echo (($_GET['list_order']=='customers_id' or $_GET['list_order']=='customers_id-desc') ? '<span class="SortOrderHeader">' . TABLE_HEADING_ID . '</span>' : TABLE_HEADING_ID); ?><br>
00184                   <a href="<?php echo zen_href_link(basename($PHP_SELF) . '?list_order=customers_id', '', 'NONSSL'); ?>"><?php echo ($_GET['list_order']=='customers_id' ? '<span class="SortOrderHeader">Asc</span>' : '<span class="SortOrderHeaderLink">Asc</b>'); ?></a>&nbsp;
00185                   <a href="<?php echo zen_href_link(basename($PHP_SELF) . '?list_order=customers_id-desc', '', 'NONSSL'); ?>"><?php echo ($_GET['list_order']=='customers_id-desc' ? '<span class="SortOrderHeader">Desc</span>' : '<span class="SortOrderHeaderLink">Desc</b>'); ?></a>
00186                 </td>
00187                 <td class="dataTableHeadingContent" align="left">
00188                   <?php echo (($_GET['list_order']=='lastname' or $_GET['list_order']=='lastname-desc') ? '<span class="SortOrderHeader">' . TABLE_HEADING_LASTNAME . '</span>' : TABLE_HEADING_LASTNAME); ?><br>
00189                   <a href="<?php echo zen_href_link(basename($PHP_SELF) . '?list_order=lastname', '', 'NONSSL'); ?>"><?php echo ($_GET['list_order']=='lastname' ? '<span class="SortOrderHeader">Asc</span>' : '<span class="SortOrderHeaderLink">Asc</b>'); ?></a>&nbsp;
00190                   <a href="<?php echo zen_href_link(basename($PHP_SELF) . '?list_order=lastname-desc', '', 'NONSSL'); ?>"><?php echo ($_GET['list_order']=='lastname-desc' ? '<span class="SortOrderHeader">Desc</span>' : '<span class="SortOrderHeaderLink">Desc</b>'); ?></a>
00191                 </td>
00192                 <td class="dataTableHeadingContent" align="left">
00193                   <?php echo (($_GET['list_order']=='firstname' or $_GET['list_order']=='firstname-desc') ? '<span class="SortOrderHeader">' . TABLE_HEADING_FIRSTNAME . '</span>' : TABLE_HEADING_FIRSTNAME); ?><br>
00194                   <a href="<?php echo zen_href_link(basename($PHP_SELF) . '?list_order=firstname', '', 'NONSSL'); ?>"><?php echo ($_GET['list_order']=='firstname' ? '<span class="SortOrderHeader">Asc</span>' : '<span class="SortOrderHeaderLink">Asc</b>'); ?></a>&nbsp;
00195                   <a href="<?php echo zen_href_link(basename($PHP_SELF) . '?list_order=firstname-desc', '', 'NONSSL'); ?>"><?php echo ($_GET['list_order']=='firstname-desc' ? '<span class="SortOrderHeader">Desc</span>' : '<span class="SortOrderHeaderLink">Desc</span>'); ?></a>
00196                 </td>
00197                 <td class="dataTableHeadingContent" align="left">
00198                 </td>
00199                 <td class="dataTableHeadingContent" align="left">
00200                 </td>
00201 
00202                 <td class="dataTableHeadingContent" align="left">
00203                 </td>
00204 
00205                 <td class="dataTableHeadingContent" align="left">
00206                 </td>
00207 
00208                 <td class="dataTableHeadingContent" align="center">
00209                   <?php echo TABLE_HEADING_ACCOUNT_CREATED; ?>
00210                 </td>
00211 
00212                 <td class="dataTableHeadingContent" align="right">
00213                 </td>
00214               </tr>
00215 <?php
00216     $search = '';
00217     if (isset($_GET['search']) && zen_not_null($_GET['search'])) {
00218       $keywords = zen_db_input(zen_db_prepare_input($_GET['search']));
00219       if (substr($keywords,0,1) == '#') {
00220         $search = "where lp.customer_id = c.customers_id and (c.customers_id='" . substr($keywords,1) . "')";
00221       } else {
00222         $search = "where lp.customer_id = c.customers_id and (c.customers_lastname like '%" . $keywords . "%' or c.customers_firstname like '%" . $keywords . "%' or c.customers_email_address like '%" . $keywords . "%' or c.customers_telephone rlike '" . $keywords . "' or c.customers_id='" . $keywords . "')";
00223       }
00224     } else {
00225       $search = "where lp.customer_id = c.customers_id";
00226     }
00227     $new_fields=', c.customers_telephone, a.entry_company, a.entry_street_address, a.entry_city, a.entry_postcode, c.customers_authorization, c.customers_referral';
00228 //    $customers_query_raw = "select c.customers_id, c.customers_lastname, c.customers_firstname, c.customers_email_address, c.customers_group_pricing, a.entry_country_id, a.entry_company, ci.customers_info_date_of_last_logon, ci.customers_info_date_account_created " . $new_fields . " from " . TABLE_CUSTOMERS . " c left join " . TABLE_CUSTOMERS_INFO . " ci on c.customers_id= ci.customers_info_id left join " . TABLE_ADDRESS_BOOK . " a on c.customers_id = a.customers_id and c.customers_default_address_id = a.address_book_id " . $search . " order by $disp_order";
00229 
00230         $customers_query_raw  = "select lp.*, c.*
00231                                   from " .
00232                                   TABLE_CUSTOMERS . " c, " .
00233                                   TABLE_LINKPOINT_API . " lp " .
00234                                   $search . "
00235                                   order by $disp_order ";
00236 
00237 //  $testing = $db->Execute($customers_query_raw);
00238 
00239 //die('I SEE ' . $testing->RecordCount());
00240 
00241 // Split Page
00242 // reset page when page is unknown
00243 if ($_GET['page'] == '' and $_GET['cID'] != '') {
00244   $check_page = $db->Execute($customers_query_raw);
00245   $check_count=1;
00246   if ($check_page->RecordCount() > MAX_DISPLAY_SEARCH_RESULTS_CUSTOMER) {
00247     while (!$check_page->EOF) {
00248       if ($check_page->fields['customers_id'] == $_GET['cID']) {
00249         break;
00250       }
00251       $check_count++;
00252       $check_page->MoveNext();
00253     }
00254     $_GET['page'] = round((($check_count/MAX_DISPLAY_SEARCH_RESULTS_CUSTOMER)+(fmod($check_count,MAX_DISPLAY_SEARCH_RESULTS_CUSTOMER) !=0 ? .5 : 0)),0);
00255 //    zen_redirect(zen_href_link(FILENAME_LINKPOINT_REVIEW, 'cID=' . $_GET['cID'] . (isset($_GET['page']) ? '&page=' . $_GET['page'] : ''), 'NONSSL'));
00256   } else {
00257     $_GET['page'] = 1;
00258   }
00259 }
00260 
00261     $customers_split = new splitPageResults($_GET['page'], MAX_DISPLAY_SEARCH_RESULTS_CUSTOMER, $customers_query_raw, $customers_query_numrows);
00262     $customers = $db->Execute($customers_query_raw);
00263     while (!$customers->EOF) {
00264       $info = $db->Execute("select customers_info_date_account_created as date_account_created,
00265                                    customers_info_date_account_last_modified as date_account_last_modified,
00266                                    customers_info_date_of_last_logon as date_last_logon,
00267                                    customers_info_number_of_logons as number_of_logons
00268                             from " . TABLE_CUSTOMERS_INFO . "
00269                             where customers_info_id = '" . $customers->fields['customers_id'] . "'");
00270 
00271       if ((!isset($_GET['cID']) || (isset($_GET['cID']) && ($_GET['cID'] == $customers->fields['customers_id']))) && !isset($cInfo)) {
00272         $country = $db->Execute("select countries_name
00273                                  from " . TABLE_COUNTRIES . "
00274                                  where countries_id = '" . (int)$customers->fields['entry_country_id'] . "'");
00275         if (!is_array($country->fields)) $country->fields = array();
00276 
00277         $customer_info = array_merge($country->fields, $info->fields);
00278 
00279         $cInfo_array = array_merge($customers->fields, $customer_info);
00280         $cInfo = new objectInfo($cInfo_array);
00281       }
00282 
00283         $group_query = $db->Execute("select group_name, group_percentage from " . TABLE_GROUP_PRICING . " where
00284                                      group_id = '" . $customers->fields['customers_group_pricing'] . "'");
00285 
00286         if ($group_query->RecordCount() < 1) {
00287           $group_name_entry = TEXT_NONE;
00288         } else {
00289           $group_name_entry = $group_query->fields['group_name'];
00290         }
00291 
00292 /*
00293       if (isset($cInfo) && is_object($cInfo) && ($customers->fields['customers_id'] == $cInfo->customers_id)) {
00294         echo '          <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . zen_href_link(FILENAME_LINKPOINT_REVIEW, zen_get_all_get_params(array('cID', 'action')) . '&search=xxx' . $cInfo->customers_id, 'NONSSL') . '\'">' . "\n";
00295       } else {
00296         echo '          <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . zen_href_link(FILENAME_LINKPOINT_REVIEW, zen_get_all_get_params(array('cID', 'action')) . '&search=xxx' . $cInfo->customers_id, 'NONSSL') . '\'">' . "\n";
00297       }
00298 */
00299         echo '          <tr class="dataTableRow">' . "\n";
00300 
00301 ?>
00302                 <td class="dataTableContent" align="right"><?php echo $customers->fields['id']; ?></td>
00303                 <td class="dataTableContent" align="right"><?php echo '<a href="' . zen_href_link(FILENAME_LINKPOINT_REVIEW, 'search=%23' . $customers->fields['customers_id'], 'NONSSL') . '">#' . ($customers->fields['transaction_result'] != 'APPROVED' ? '<span class="alert">' . $customers->fields['customers_id'] . '</span>' : $customers->fields['customers_id']) . '</a>'; ?></td>
00304                 <td class="dataTableContent"><?php echo '<a href="' . zen_href_link(FILENAME_CUSTOMERS, zen_get_all_get_params(array('cID', 'action', 'page', 'search', 'list_order')) . 'cID=' . $customers->fields['customer_id'], 'NONSSL') . '">' . ($customers->fields['transaction_result'] != 'APPROVED' ? '<span class="alert">' . $customers->fields['customers_lastname'] . '</span>' : $customers->fields['customers_lastname']) . '</a>'; ?></td>
00305                 <td class="dataTableContent"><?php echo '<a href="' . zen_href_link(FILENAME_CUSTOMERS, zen_get_all_get_params(array('cID', 'action', 'page', 'search', 'list_order')) . 'cID=' . $customers->fields['customer_id'], 'NONSSL') . '">' . ($customers->fields['transaction_result'] != 'APPROVED' ? '<span class="alert">' . $customers->fields['customers_firstname'] . '</span>' : $customers->fields['customers_firstname']) . '</a>'; ?></td>
00306                 <td class="dataTableContent"><?php echo '<a href="' . zen_href_link(FILENAME_CUSTOMERS, zen_get_all_get_params(array('cID', 'action', 'page', 'search', 'list_order')) . 'cID=' . $customers->fields['customer_id'], 'NONSSL') . '">' . ($customers->fields['transaction_result'] != 'APPROVED' ? '<span class="alert">' . $customers->fields['entry_company'] . '</span>' : $customers->fields['entry_company']) . '</a>'; ?></td>
00307 
00308                 <td class="dataTableContent">
00309                   <?php echo 'Credit Card Server Time: <strong>' . ($customers->fields['transaction_response_time'] == '' ? 'Not Connected' : $customers->fields['transaction_response_time']) . '</strong>'; ?>
00310                 </td>
00311                 <td class="dataTableContent">
00312                   <?php echo 'This Server Time: <strong>' . $customers->fields['date_added'] . '</strong>'; ?>
00313                 </td>
00314                 <td class="dataTableContent" align="right" style="color:red;">
00315                   <?php echo $currencies->format($customers->fields['chargetotal']); ?>
00316                 </td>
00317                 <td class="dataTableContent" align="center">
00318                   <?php echo zen_date_short($info->fields['date_account_created']); ?>
00319                 </td>
00320                 <td class="dataTableContent" align="right">
00321                 </td>
00322               </tr>
00323               <tr class="dataTableRow">
00324                 <td class="dataTableContent" colspan="4">
00325                   <?php echo
00326                     ($customers->fields['transaction_result'] != 'APPROVED' ? '<span class="alert">' . $customers->fields['transaction_result'] . '</span>' : $customers->fields['transaction_result']) . '<br />' .
00327                     $customers->fields['cc_number'] . '<br />' .
00328                     'Expires: ' . $customers->fields['cc_expire'] . '<br />' .
00329                     $customers->fields['lp_trans_num'] . '<br />' .
00330                     $customers->fields['transaction_reference_number'] . '<br />' .
00331                     ($customers->fields['avs_response'] != 'YYYM' ? '<span class="alert">' . $customers->fields['avs_response'] . '</span>' : $customers->fields['avs_response']) . ' ' . ($customers->fields['r_error'] != '' ? '<span class="alert">' . $customers->fields['r_error'] . '</span>' : '') . '<br />' .
00332                     $customers->fields['transaction_time'];
00333                   ?>
00334                 </td>
00335                 <td class="dataTableContent" colspan="6"><?php echo str_replace(array('PREAUTH','SALE'),array('<span style="color:orange;"><strong>PREAUTH</strong></span>','<span style="color:green;"><strong>SALE</strong></span>'), $customers->fields['cust_info']) . '<br /><br />'; ?></td>
00336               </tr>
00337               <tr>
00338                 <td colspan="10"><?php echo zen_draw_separator('pixel_black.gif', "100%", 3); ?></td>
00339               </tr>
00340 <?php
00341       $customers->MoveNext();
00342     }
00343 ?>
00344               <tr>
00345                 <td colspan="6"><table border="0" width="100%" cellspacing="0" cellpadding="2">
00346                   <tr>
00347                     <td class="smallText" align="right" valign="top"><?php echo $customers_split->display_count($customers_query_numrows, MAX_DISPLAY_SEARCH_RESULTS_CUSTOMER, $_GET['page'], TEXT_DISPLAY_NUMBER_OF_CUSTOMERS); ?></td>
00348                     <td class="smallText" align="right"><?php echo $customers_split->display_links($customers_query_numrows, MAX_DISPLAY_SEARCH_RESULTS_CUSTOMER, MAX_DISPLAY_PAGE_LINKS, $_GET['page'], zen_get_all_get_params(array('page', 'info', 'x', 'y', 'cID'))); ?></td>
00349                   </tr>
00350 <?php
00351     if (isset($_GET['search']) && zen_not_null($_GET['search'])) {
00352 ?>
00353                   <tr>
00354                     <td align="right"><?php echo '<a href="' . zen_href_link(FILENAME_LINKPOINT_REVIEW, '', 'NONSSL') . '">' . zen_image_button('button_reset.gif', IMAGE_RESET) . '</a>'; ?></td>
00355                   </tr>
00356 <?php
00357     }
00358 ?>
00359                 </table></td>
00360               </tr>
00361             </table></td>
00362           </tr>
00363         </table></td>
00364       </tr>
00365 <?php
00366   }
00367 ?>
00368     </table></td>
00369 <!-- body_text_eof //-->
00370   </tr>
00371 </table>
00372 <!-- body_eof //-->
00373 
00374 <!-- footer //-->
00375 <?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
00376 <!-- footer_eof //-->
00377 <br>
00378 </body>
00379 </html>
00380 <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
 All Data Structures Namespaces Files Functions Variables Enumerations