Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 04/21/2022 in all areas

  1. 2 points
    Yes, sort of. I have a working be version except there is a problem with shopping cart links that have attributes. I will post here when that have been fixed.
  2. 2 points
    Valqui, thanks for your comments! We are working on updating the whole of the eco-system of osCommerce. Some old parts that have not been used for years will be removed, some existing parts will be replaced. Announcements to come shortly. The main point is release of the new osCommerce v4 that is coming in just a few weeks from now. Open source and free.
  3. 1 point
    YePix

    NEED ADVICE ON MY OS COMMERCE WEBSITE

    hi, yes @Hotclutch is right. I switched to this version too. No offense, but it will still be many months before version 4.0 is ready for use.
  4. 1 point
    YePix

    Master Password

    file for Bootstrap frozen 2.3.4.1 catalog/admin/master_password.php <?php require('includes/application_top.php'); require('includes/functions/' . 'password_funcs.php'); $action = (isset($_GET['action']) ? $_GET['action'] : ''); if (tep_not_null($action)) { switch ($action) { case 'save': if (isset($_GET['mPID'])) $pass_id = tep_db_prepare_input($_GET['mPID']); $master_password = tep_db_prepare_input($_POST['master_password']); $sql_data_array = array( 'master_password' => tep_encrypt_password($master_password)); if ($action == 'save') { $sql_data_array = $sql_data_array; if (empty($master_password)){ function gennewPassword ( $passwordlength = 8, $numNonAlpha = 0, $numNumberChars = 0, $useCapitalLetter = false ) { $numberChars = '123456789'; $specialChars = '!$%&=?*-:;.,+~@_'; $secureChars = 'abcdefghjkmnpqrstuvwxyz'; $stack = ''; $stack = $secureChars; if ( $useCapitalLetter == true ) $stack .= strtoupper ( $secureChars ); $count = $passwordlength - $numNonAlpha - $numNumberChars; $temp = str_shuffle ( $stack ); $stack = substr ( $temp , 0 , $count ); if ( $numNonAlpha > 0 ) { $temp = str_shuffle ( $specialChars ); $stack .= substr ( $temp , 0 , $numNonAlpha ); } if ( $numNumberChars > 0 ) { $temp = str_shuffle ( $numberChars ); $stack .= substr ( $temp , 0 , $numNumberChars ); } $stack = str_shuffle ( $stack ); return $stack; } $passwd = gennewPassword ( 8, 2, 2, true ); tep_db_query("update master_pass set master_password = '" . tep_encrypt_password($passwd) . "' where pass_id = '" . (int)$pass_id . "'"); tep_db_query("update " . TABLE_CONFIGURATION . " set configuration_value = '" . tep_encrypt_password($passwd) . "' where configuration_key = 'MASTER_PASS'"); }else{ tep_db_perform('master_pass', $sql_data_array, 'update', "pass_id = '" . (int)$pass_id . "'"); tep_db_query("update " . TABLE_CONFIGURATION . " set configuration_value = '" . tep_encrypt_password($master_password) . "' where configuration_key = 'MASTER_PASS'"); } } if (USE_CACHE == 'true') { tep_reset_cache_block('pass_labels'); } tep_redirect(tep_href_link('master_password.php', (isset($_GET['page']) ? 'page=' . $_GET['page'] . '&' : '') . 'mPID=' . $pass_id)); break; } } require('includes/template_top.php'); ?> <table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><h1><?php echo MASTER_PASSWORT_HEADING_TITLE; ?></h1></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> <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 MASTER_PASSWORT_HEADING_TITLE; ?></td> <td class="dataTableHeadingContent" align="right"></td> </tr> <?php $masterpass_query_raw = "select pass_id, master_password from master_pass order by pass_id"; $masterpass_query = tep_db_query($masterpass_query_raw); while ($masterpass = tep_db_fetch_array($masterpass_query)) { $masterpass_id = $masterpass['pass_id']; if ((!isset($_GET['mPID']) || (isset($_GET['mPID']) && ($_GET['mPID'] == $masterpass['pass_id']))) && !isset($mpInfo) && (substr($action, 0, 3) != 'new')) { $mpInfo = new objectInfo($masterpass); } if (isset($mpInfo) && is_object($mpInfo) && ($masterpass['pass_id'] == $mpInfo->pass_id)) { echo ' <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link('master_password.php', '&mPID=' . $masterpass['pass_id'] . '&action=edit') . '\'">' . "\n"; } else { echo ' <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link('master_password.php', '&mPID=' . $masterpass['pass_id']) . '\'">' . "\n"; } ?> <td class="dataTableContent"> <?php echo MASTER_PASSWORT_TEXT_SECURE; ?></td> <td class="dataTableContent" align="right"> </td> </tr> <?php } ?> <tr> <td colspan="4"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td class="smallText" valign="top"></td> <td class="smallText" align="right"></td> </tr> </table></td> <tr> <td colspan="4"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <td colspan="4" class="smallText" align="right"></td> </tr> </table></td> <?php $heading = array(); $contents = array(); switch ($action) { case 'edit': $heading[] = array('text' => MASTER_PASSWORT_HEADING_TITLE . ' ' . TEXT_MASTER_PASSWORT_TITLE_EDIT); $contents = array('form' => tep_draw_form('pass_labels', 'master_password.php', '&mPID=' . $mpInfo->pass_id . '&action=save', 'post', 'enctype="multipart/form-data"')); $contents[] = array('text' => MASTER_PASSWORT_TEXT_EDIT_INTRO); $contents[] = array('text' => '<br />' . tep_draw_input_field('master_password', '', 'required aria-required="true"')); $contents[] = array('align' => 'center', 'text' => '<br />' . tep_draw_button(IMAGE_SAVE, 'plus', null, 'primary')); $contents[] = array('align' => 'center', 'text' => '<br />' . tep_draw_button(IMAGE_CANCEL, 'close', tep_href_link('master_password.php', '&mPID=' . $mpInfo->pass_id))); break; default: if (isset($mpInfo) && is_object($mpInfo)) { $heading[] = array('align' => 'center', 'text' => TEXT_MASTER_PASSWORT_TITLE_EDIT); $contents[] = array('align' => 'center', 'text' => tep_draw_button(IMAGE_EDIT, 'document', tep_href_link('master_password.php', '&mPID=' . $mpInfo->pass_id . '&action=edit'))); } break; } if ( (tep_not_null($heading)) && (tep_not_null($contents)) ) { echo ' <td width="25%" valign="top">' . "\n"; $box = new box; echo $box->infoBox($heading, $contents); echo ' </td>' . "\n"; } ?> </tr> </table></td> </tr> </table> <?php require('includes/template_bottom.php'); require('includes/application_bottom.php'); ?>
  5. 1 point
    True, but less chance for error with adding the new file. Besides, it is just a suggestion.
  6. 1 point
    ArtcoInc

    Store Search with Typeahead

    @ce7 Have you tried this? (in fact, please read the entire thread) There is also another discussion on this subject in the other forum. HTH M
  7. 1 point
    Hotclutch

    Search exploit ?

    The IPs appear to be bingbot.
  8. 1 point
    YePix

    W3 osCommerce WIP

    I wrote something useful for users of this version. Saving the emails from the file contact_us.php in the database and the possibility to answer them from the admin area. contact_us.php find: require('includes/application_top.php'); require('includes/languages/' . $language . '/contact_us.php'); add after: $account = array();$name = '';$email = '';$phone = ''; if (isset($_SESSION['customer_id'])) { $account_query = tep_db_query("select c.customers_id" . " FROM " . TABLE_CUSTOMERS . " c, " . TABLE_ADDRESS_BOOK . " ab " . " WHERE c.customers_id = '" . (int)$customer_id . "'" . " AND ab.address_book_id = c.customers_default_address_id"); $account = tep_db_fetch_array($account_query); $customer_id = $account['customers_id']; } find: tep_redirect(tep_href_link('contact_us.php', 'action=success')); add bevore: if (!empty($customer_id)){$cus_id = $customer_id;}else{$cus_id = '0';} tep_db_query("insert into contact_us ( customers_id, name, email, enquiry, date) VALUES ( '" . $cus_id . "', '" . tep_db_input($name) . "', '" . $email_address . "', '" . tep_db_input($enquiry) . "', Now())"); ******************** SQL - contact_us CREATE TABLE `contact_us` ( `email_id` int NOT NULL, `customers_id` text NOT NULL, `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_turkish_ci NOT NULL, `email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_unicode_ci NOT NULL, `enquiry` longtext CHARACTER SET utf8mb3 COLLATE utf8_unicode_ci NOT NULL, `date` datetime DEFAULT NULL, `status` int NOT NULL, `adminenquiry` longtext NOT NULL, `senddate` datetime NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; ALTER TABLE `contact_us` ADD PRIMARY KEY (`email_id`); ALTER TABLE `contact_us` MODIFY `email_id` int NOT NULL AUTO_INCREMENT; COMMIT; add to: catalog/admin/includes/languages/german.php define('BOX_CUSTOMERS_EMAILS_HEADING', 'Kundenanfragen'); ############################ catalog/admin/includes/boxes/customers.php array( 'code' => 'customers_email.php', 'title' => BOX_CUSTOMERS_EMAILS_HEADING, 'link' => tep_href_link('customers_email.php') ), ############################ New files: catalog/admin/includes/languages/german/customers_email.php <?php define('CUSTOMERS_EMAIL_HEADING_TITLE', 'Kundenemails'); define('CUSTOMERS_EMAIL_CUSTOMER_NAME', 'Kundenname'); define('CUSTOMERS_EMAIL_CUSTOMER_GUEST', 'Gast'); define('CUSTOMERS_EMAIL_CUSTOMER_MAIL_ID', 'E-Mail ID'); define('CUSTOMERS_EMAIL_CUSTOMER_ID', 'Kundennummer'); define('CUSTOMERS_EMAIL_CUSTOMER_EMAIL', 'E-Mail'); define('CUSTOMERS_EMAIL_CUSTOMER_PHONE', 'Telefonnummer'); define('CUSTOMERS_EMAIL_CUSTOMER_SUBJECT', 'Betreff'); define('CUSTOMERS_EMAIL_CUSTOMER_ENQUIRY', 'Kundenanfrage'); define('CUSTOMERS_EMAIL_CUSTOMER_ADMIN_ENQUIRY', 'Gesendete Antwort'); define('CUSTOMERS_EMAIL_CUSTOMER_DATE', 'Anfragedatum'); define('CUSTOMERS_EMAIL_CUSTOMER_STATUS', 'Status'); define('CUSTOMERS_EMAIL_TEXT_DISPLAY_NUMBER_OF_STOCKLABEL', 'Kunden und Besucheremails'); define('CUSTOMERS_EMAIL_SEND_MAIL', 'Kundenanfrage beantworten'); define('CUSTOMERS_EMAIL_SEND_STATUS_EDIT', 'Antwort umwiderruflich senden'); define('CUSTOMERS_EMAIL_SEND_STATUS_SEND', 'Status aktualisieren'); define('CUSTOMERS_EMAIL_SEND_STATUS_SEND_OK', 'Gesendet an'); define('CUSTOMERS_EMAIL_STATUS_ON', 'Aktiv'); define('CUSTOMERS_EMAIL_STATUS_OFF', 'Gelesen'); define('CUSTOMERS_EMAIL_STATUS_SEND_TO_CUSTOMER', 'E-Mail gesendet'); define('CUSTOMERS_EMAIL_STATUS_SEND_TO_CUSTOMER_OVER', 'E-Mail wurde bereits gesendet'); define('CUSTOMERS_EMAIL_STATUS_SEND_TO_CUSTOMER_CLOSE', 'Schliessen'); define('CUSTOMERS_EMAIL_STATUS_BUTTON_SHOW_EDIT', 'Details ansehen'); define('CUSTOMERS_EMAIL_STATUS_TEXT_DELETE_INTRO', 'Löschen'); define('CUSTOMERS_EMAIL_STATUS_TEXT_EDIT_INTRO', 'Bearbeiten'); define('CUSTOMERS_EMAIL_BUTTON_RETURN_TO_CUSTOMER', 'Auf E-Mail antworten'); define('CUSTOMERS_EMAIL_BUTTON_INDEX', 'Weiter zu Startseite'); define('CUSTOMERS_EMAIL_SENT_EMAIL_SUBJECT', 'Antwort auf Ihre Anfrage'); define('CUSTOMERS_EMAIL_SENT_EMAIL_TO_CUSTOMER_HEADING', 'Antwort auf Ihre Anfrage mit dem Betreff'); define('CUSTOMERS_EMAIL_TEXT_EMAIL_SEPARATOR', '<span class="small"><br>---------------------------<br></span>'); define('CUSTOMERS_EMAIL_TEXT_EMAIL_SIGNATURE_CR', '<br><span class="small"><a href="'. tep_href_link('../' . 'index.php') . '">' . STORE_NAME . '</a>' . '<br>' . STORE_ADDRESS . '<br>E-Mail: ' . STORE_OWNER_EMAIL_ADDRESS . '<br></span>'); ?> catalog/admin/customers_email.php <?php require('includes/application_top.php'); $action = (isset($_GET['action']) ? $_GET['action'] : ''); $status_array = array(array('id'=>'0', 'text'=>CUSTOMERS_EMAIL_STATUS_ON), array('id'=>'1', 'text'=>CUSTOMERS_EMAIL_STATUS_OFF), array('id'=>'2', 'text'=>CUSTOMERS_EMAIL_STATUS_SEND_TO_CUSTOMER)); if (tep_not_null($action)) { switch ($action) { case 'insert': case 'save': if (isset($_GET['emID'])) $email_id = tep_db_prepare_input($_GET['emID']); $status = tep_db_prepare_input($_POST['status']); $adminenquiry = tep_db_prepare_input($_POST['adminenquiry']); $sql_data_array = array( 'status' => $status, 'adminenquiry' => $adminenquiry ); if ($action == 'insert') { $sql_data_array = array_merge($sql_data_array); tep_db_perform('contact_us', $sql_data_array); tep_db_query("update contact_us set status = '1' where email_id = '" . (int)$email_id . "'"); $email_id = tep_db_insert_id(); } elseif ($action == 'save') { $sql_data_array = $sql_data_array; tep_db_perform('contact_us', $sql_data_array, 'update', "email_id = '" . (int)$email_id . "'"); tep_db_query("update contact_us set status = '1' where email_id = '" . (int)$email_id . "'"); } if (USE_CACHE == 'true') { tep_reset_cache_block('email_labels'); } tep_redirect(tep_href_link('customers_email.php', (isset($_GET['page']) ? 'page=' . $_GET['page'] . '&' : '') . 'emID=' . $email_id)); break; case 'sendmail': if (isset($_GET['emID'])) $email_id = tep_db_prepare_input($_GET['emID']); tep_db_query("update contact_us set senddate = now() where email_id = '" . (int)$email_id . "'"); tep_db_query("update contact_us set status = '2' where email_id = '" . (int)$email_id . "'"); if (USE_CACHE == 'true') { tep_reset_cache_block('email_labels'); } tep_redirect(tep_href_link('customers_email.php', (isset($_GET['page']) ? 'page=' . $_GET['page'] . '&' : '') . 'emID=' . $email_id)); break; case 'deleteconfirm': $email_id = tep_db_prepare_input($_GET['emID']); tep_db_query("delete from contact_us where email_id = '" . (int)$email_id . "'"); $auto_increment_query = tep_db_query("select email_id from contact_us where email_id"); if (tep_db_num_rows($auto_increment_query) < '1'){ tep_db_query("ALTER TABLE contact_us AUTO_INCREMENT =1"); } if (USE_CACHE == 'true') { tep_reset_cache_block('email_labels'); } tep_redirect(tep_href_link('customers_email.php', 'page=' . $_GET['page'])); break; } } require('includes/template_top.php'); ?> <div class="w3-padding"> <h1 class="pageHeading"><?php echo CUSTOMERS_EMAIL_HEADING_TITLE; ?></h1> <div class="d-flex flex-column flex-sm-row mb-3"> <div class="flex-grow-1"> <table class="w3-table w3-border w3-bordered w3-hoverable"> <thead class="w3-hover-none"> <tr class="w3-theme"> <th scope="col"><?php echo CUSTOMERS_EMAIL_CUSTOMER_NAME; ?></th> <th scope="col" class="w3-center"><?php echo CUSTOMERS_EMAIL_CUSTOMER_MAIL_ID; ?></th> <th scope="col" class="w3-center"><?php echo CUSTOMERS_EMAIL_CUSTOMER_ID; ?></th> <th scope="col" class="w3-center"><?php echo CUSTOMERS_EMAIL_CUSTOMER_EMAIL; ?></th> <th scope="col" class="w3-center"><?php echo CUSTOMERS_EMAIL_CUSTOMER_DATE; ?></th> <th scope="col" class="w3-center"><?php echo CUSTOMERS_EMAIL_CUSTOMER_STATUS; ?></th> <th scope="col" class="w3-center"><?php echo ''; ?>&nbsp;</th> </tr> </thead> <tbody> <?php $email_query_raw = "select email_id, customers_id, name, email, phone, subject, enquiry, date, status, adminenquiry, senddate from contact_us order by email_id"; $email_split = new splitPageResults($_GET['page'], MAX_DISPLAY_SEARCH_RESULTS, $email_query_raw, $email_query_numrows); $email_query = tep_db_query($email_query_raw); while ($email = tep_db_fetch_array($email_query)) { $email_id = $email['email_id']; if ($email['customers_id'] > '0'){$cus_id = $email['customers_id'];}else{$cus_id = CUSTOMERS_EMAIL_CUSTOMER_GUEST;} if ((!isset($_GET['emID']) || (isset($_GET['emID']) && ($_GET['emID'] == $email['email_id']))) && !isset($emInfo) && (substr($action, 0, 3) != 'new')) { $emInfo = new objectInfo($email); } if (isset($emInfo) && is_object($emInfo) && ($email['email_id'] == $emInfo->email_id)) { echo ' <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $email['email_id'] . '&action=edit') . '\'">' . "\n"; } else { echo ' <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $email['email_id']) . '\'">' . "\n"; } ?> <td class="dataTableContent">&nbsp;<?php echo $email['name']; ?></td> <td class="dataTableContent w3-center">&nbsp;<?php echo $email['email_id']; ?></td> <td class="dataTableContent w3-center">&nbsp;<?php echo $cus_id; ?></td> <td class="dataTableContent w3-center"><?php echo $email['email']; ?></td> <td class="dataTableContent w3-center">&nbsp;<?php echo tep_date_short($email['date']);?></td> <td class="dataTableContent w3-center"><?php if ($email['status'] == '0'){ echo CUSTOMERS_EMAIL_STATUS_ON;} if ($email['status'] == '1'){ echo CUSTOMERS_EMAIL_STATUS_OFF;} if ($email['status'] == '2'){ echo CUSTOMERS_EMAIL_STATUS_SEND_TO_CUSTOMER;}?></td> <td class="dataTableContent w3-right-align"><?php if (isset($emInfo) && is_object($emInfo) && ($email['email_id'] == $emInfo->email_id)) { echo '<span class="fas fa-angle-right" style="font-size:20px;"></span>'; } else { echo '<a href="' . tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id) . '"><span title="' . IMAGE_ICON_INFO . '" class="fas fa-info-circle" style="font-size:20px;"></span></a>'; } ?>&nbsp;</td> </tr> <?php } ?> </tbody> </table> <div class="d-flex flex-column flex-sm-row justify-content-sm-between mb-3"> <div class="w3-small"><?php echo $email_split->display_count($email_query_numrows, MAX_DISPLAY_SEARCH_RESULTS, $_GET['page'], CUSTOMERS_EMAIL_TEXT_DISPLAY_NUMBER_OF_STOCKLABEL); ?></div> <div class="w3-small"><?php echo $email_split->display_links($email_query_numrows, MAX_DISPLAY_SEARCH_RESULTS, MAX_DISPLAY_PAGE_LINKS, $_GET['page']); ?></div> </div> <div class="d-flex flex-column flex-sm-row justify-content-sm-end mb-3"> </div> </div> <?php $heading = ''; $contents = ''; switch ($action) { case 'edit': $heading = $emInfo->name . '&nbsp;' . $emInfo->email; $contents = tep_draw_form('email_labels', 'customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id . '&action=save', 'post', 'enctype="multipart/form-data"'); if ($emInfo->status == '2'){ $contents .= '<tr><td><div class="w3-border w3-border-red w3-black w3-padding mb-3">' . CUSTOMERS_EMAIL_STATUS_SEND_TO_CUSTOMER_OVER . '</div>'; }else{ if ($emInfo->status == '0'){ $contents .= '<tr><td><div class="mb-3">' . CUSTOMERS_EMAIL_CUSTOMER_STATUS . '<br />' . tep_draw_pull_down_menu('status', $status_array, $emInfo->status, 'class="w3-select w3-border w3-teal"') . '</div>'; }else{ $contents .= '<tr><td><div class="mb-3">' . CUSTOMERS_EMAIL_CUSTOMER_STATUS . '<br />' . tep_draw_pull_down_menu('status', $status_array, $emInfo->status, 'class="w3-select w3-border w3-red"') . '</div>'; } } $contents .= '<div class="mb-3">' . CUSTOMERS_EMAIL_CUSTOMER_ENQUIRY . '<br /><div class="w3-border w3-sand w3-padding mb-2">' . CUSTOMERS_EMAIL_CUSTOMER_SUBJECT . ': ' . $emInfo->subject . '<hr class="hr-gr mt-2 mb-2">' . $emInfo->enquiry . '</div></div>'; if ($emInfo->status == '2'){ $contents .= '<div class="mb-3">' . CUSTOMERS_EMAIL_CUSTOMER_ADMIN_ENQUIRY . '<br /><div class="w3-border w3-sand w3-padding mb-2">' . $emInfo->adminenquiry . '</div></div>'; }else{ $contents .= '<div class="mb-3">' . CUSTOMERS_EMAIL_SEND_MAIL . '<br>' . tep_draw_textarea_field('adminenquiry', 'soft', '60', '5', $emInfo->adminenquiry, 'class="w3-input w3-border"') . '</div></div>'; } if ($emInfo->status == '2'){ $contents .= '<hr class="hr-gr mt-2 mb-2"><div class="mb-3">' . tep_draw_w3_button(CUSTOMERS_EMAIL_STATUS_SEND_TO_CUSTOMER_CLOSE, 'fa fa-lock', tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id), null, null, 'class="w3-button w3-large w3-block w3-black"') . '</div>'; }else{ if ($emInfo->status == '0'){ $contents .= '<hr class="hr-gr mt-2 mb-2"><div class="mb-3 mt-3">' . tep_draw_w3_button(IMAGE_SAVE, 'fa fa-save', null, 'primary', null, 'class="w3-button w3-large w3-block w3-teal"') . '</div>'; }else{ $contents .= '<hr class="hr-gr mt-2 mb-2"><div class="mb-3 mt-3">' . tep_draw_w3_button(IMAGE_SAVE, 'fa fa-save', null, 'primary', null, 'class="w3-button w3-large w3-block w3-red"') . '</div>'; } $contents .= '<hr class="hr-gr mt-2 mb-2"><div class="mb-3">' . tep_draw_w3_button(IMAGE_CANCEL, 'fa fa-times', tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id), null, null, 'class="w3-button w3-large w3-block w3-theme-light"') . '</div>'; } $contents .= '</td></tr>'; $contents .= '</form>'; break; case 'send': $heading = CUSTOMERS_EMAIL_SEND_STATUS_SEND_OK . '&nbsp;' . $emInfo->email; $contents = '<tr><td>' . tep_draw_form('email_labels', 'customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id . '&action=sendmail', 'post', 'enctype="multipart/form-data"'); $contents .= '<div class="mb-3">' . CUSTOMERS_EMAIL_CUSTOMER_ENQUIRY . '<br /><div class="w3-border w3-sand w3-padding mb-2">' . CUSTOMERS_EMAIL_CUSTOMER_SUBJECT . ': ' . $emInfo->subject . '<hr class="hr-gr mt-2 mb-2">' . $emInfo->enquiry . '</div></div>'; $contents .= '<div class="mb-3">' . CUSTOMERS_EMAIL_CUSTOMER_ADMIN_ENQUIRY . '<br /><div class="w3-border w3-sand w3-padding mb-2">' . $emInfo->adminenquiry . '</div></div>'; if (!empty($emInfo->adminenquiry)){ tep_mail($emInfo->name, $emInfo->email, CUSTOMERS_EMAIL_SENT_EMAIL_SUBJECT, CUSTOMERS_EMAIL_SENT_EMAIL_TO_CUSTOMER_HEADING . ': ' . $emInfo->subject . CUSTOMERS_EMAIL_TEXT_EMAIL_SEPARATOR . $emInfo->adminenquiry . '<br>' . CUSTOMERS_EMAIL_TEXT_EMAIL_SEPARATOR . CUSTOMERS_EMAIL_CUSTOMER_ENQUIRY . ':<br>' . CUSTOMERS_EMAIL_CUSTOMER_SUBJECT . ': ' . $emInfo->subject . '<br>' . $emInfo->enquiry . CUSTOMERS_EMAIL_TEXT_EMAIL_SEPARATOR . CUSTOMERS_EMAIL_TEXT_EMAIL_SIGNATURE_CR, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS); } $contents .= '<div class="mb-3">' . tep_draw_w3_button(CUSTOMERS_EMAIL_SEND_STATUS_SEND, 'fa fa-sync-alt', null, 'primary', null, 'class="w3-button w3-large w3-block w3-teal"') . '</div>'; $contents .= '</td></tr>'; $contents .= '</form>'; break; case 'delete': $heading .= CUSTOMERS_EMAIL_CUSTOMER_NAME . '&nbsp;' . $emInfo->name . '&nbsp;' . CUSTOMERS_EMAIL_STATUS_TEXT_DELETE_INTRO; $contents = tep_draw_form('email_labels', 'customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id . '&action=deleteconfirm'); $contents .= '<tr><td>' . CUSTOMERS_EMAIL_STATUS_TEXT_DELETE_INTRO; $contents .= '<div class="w3-border w3-border-teal w3-pale-green w3-padding-small mb-3"><strong>' . $emInfo->name . '</strong></div>'; $contents .= '<div class="mb-3">' . tep_draw_w3_button(IMAGE_DELETE, 'fa fa-trash-alt', null, 'primary', null, 'class="w3-button w3-large w3-block w3-red"') . '</div>'; $contents .= '<div class="mb-3">' . tep_draw_w3_button(IMAGE_CANCEL, 'fa fa-times', tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $_GET['emID']), null, null, 'class="w3-button w3-large w3-block w3-theme-light"') . '</div>'; $contents .= '</td></tr>'; $contents .= '</form>'; break; default: if (isset($emInfo) && is_object($emInfo)) { $heading = $emInfo->name; if ($emInfo->status == '2'){ $contents .= '<tr><td>' . tep_draw_w3_button(CUSTOMERS_EMAIL_STATUS_BUTTON_SHOW_EDIT, 'fa fa-envelope-square', tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id . '&action=edit'), null, null, 'class="w3-button w3-large w3-block w3-black mb-3"'); }else{ $contents .= '<tr><td>' . tep_draw_w3_button(IMAGE_EDIT, 'fa fa-cog', tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id . '&action=edit'), null, null, 'class="w3-button w3-large w3-block w3-teal mb-3"'); } if ((!empty($emInfo->adminenquiry) && ($emInfo->status != '2'))){ $contents .= '<tr><td>' . tep_draw_w3_button(CUSTOMERS_EMAIL_SEND_STATUS_EDIT, 'fab fa-telegram-plane', tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id . '&action=send'), null, null, 'class="w3-button w3-large w3-block w3-black mb-3"'); } $contents .= tep_draw_w3_button(IMAGE_DELETE, 'fa fa-trash-alt', tep_href_link('customers_email.php', 'page=' . $_GET['page'] . '&emID=' . $emInfo->email_id . '&action=delete'), null, null, 'class="w3-button w3-large w3-block w3-red mb-3"'); if ($emInfo->status == '0'){ $statusname = '<div class="w3-leftbar w3-border-top w3-border-green"><div class="w3-padding-small">' . CUSTOMERS_EMAIL_CUSTOMER_STATUS . ' ' . CUSTOMERS_EMAIL_STATUS_ON . '</div></div>'; }if ($emInfo->status == '1'){ $statusname = '<div class="w3-leftbar w3-border-top w3-border-red"><div class="w3-padding-small">' . CUSTOMERS_EMAIL_CUSTOMER_STATUS . ' ' . CUSTOMERS_EMAIL_STATUS_OFF . '</div></div>'; }if ($emInfo->status == '2'){ $statusname = '<div class="w3-leftbar w3-border-top w3-border-black"><div class="w3-padding-small">' . CUSTOMERS_EMAIL_CUSTOMER_STATUS . ' ' . CUSTOMERS_EMAIL_STATUS_SEND_TO_CUSTOMER . '</div></div>'; } $contents .= '<div class="clearfix"></div>' . $statusname; $contents .= '</td></tr>'; } break; } if ( (tep_not_null($heading)) && (tep_not_null($contents)) ) { echo '<div class="w3-quarter ms-sm-2">' . "\n" . ' <table class="w3-table w3-border w3-border-black w3-light-gray">' . ' <thead>' . ' <tr class="w3-theme">' . ' <th scope="col">'. $heading . '</th>' . ' </tr>' . ' </thead>' . ' <tbody>' . $contents . '</tbody>' . ' </table>' . '</div>' . "\n"; } ?> </div> </div> <?php require('includes/template_bottom.php'); require('includes/application_bottom.php'); ?> FINISH I hope it will be useful to you. Sorry is only in german.
  9. 1 point
    osCommerce-Official

    osCommerce.com website

    Dear All, We have updated the platform of the main osCommerce.com website, getting it ready for the release of osCommerce v4 in the next few weeks. Please PM us via the Forum if you have experienced any issue with the main website. Thanks!
  10. 1 point
    @ce7You don''t edit files in that version. You need to create a new file that overridea the existing on. See my PM.
  11. 1 point
    Gyakutsuki

    E-commerce CMS

    Oscommerce 2.3.4 has the basic function but it's not maintained anymore you must wait for Osc v4 to have all the functions. Also there some articles on the internet can help you
  12. 1 point
    It would be nice to incorporate different levels of admin logins. Allowing for certain privileges and denying other privileges. Example: You may not one the persons entering products to have other privileges.
  13. 1 point
    Please see the PM I sent you.
  14. 1 point
    had a look at the pre installed version and had issues with it, would love to install it on my own server and see how it behaves.
  15. 1 point
    It is planned but I don't know when. The class you mentioned has to be overridden most likely. There is probably a way to do that but I haven't gone through the code. See if this post helps.
  16. 1 point
    Geez, it is a wild wild west. The tax below price module used the same technique and class name to extend the currencies class to display tax. Ya, pick either module, do a search and replace of all the "currencies_mod" to "currencies_mod_copy" should fix ur problem. I recall these module files were self-contained within the module's directory. Do a uninstall and install of that module afterward to activate the change. I suggest to use something like Sublime text editor to do the search and replace...unless PHPStorm is available to you...good luck! Yeah, you can't redeclare a class name.
  17. 1 point
    This link i have seen last time, and not finde again, thank you. The osCommers pages looks fine.
  18. 1 point
    Gyakutsuki

    Marketplace features

    Hello to start this topic : Sellers primarily want to sell. This means listing, selling and dispatching products efficiently. Buyers primarily want to buy. This means searching for the best products and purchasing them quickly. The platform connects buyers with sellers and generates revenue doing it. This means having the right tools to support The administrator must able to take fees (montly, annual) and via subscription or by products sell. Example of functionnalities can include in the version. Authorization and Security (user must sign up for providing personal details such as name, gender, email, date of birth, phone number, password) – here in Syndicode we take it as a priority: all user data must be protected! Registration for vendors. Vendors will have access to all functionality provided on your online marketplace, meaning they will be able to indicate the minimum or fixed price for their item, for example. Another important thing is the ability for the user to sign up via social network which is much easier than classic way suggests. Managing user profile and personal details update (this is more important for sellers than buyers because seller information should be clearly presented and easily managed by publishers). Note, that authorized users need to have the possibility to become publishers and add their content. Managing Listing (Listing is products or services on a web marketplace). Sellers need to publish and manage their items. Here you can check Woobra – perfect example of marketplace for product sourcing where Syndicode implemented this functionality of listing managing. For site visitors we added the ability to search, use a filter and view detailed information; for site publishers – to add a new listing, view their listings, publish, edit or unpublish their listing, etc. Booking/order process for clients (this functionality built to ensure reserving goods and services by users and collecting delivery information by publishers). Here developers need to add also the possibility for communication between viewers and publishers. Order management should allow multiple viewers and publishers to collaborate. Payment option (Online Marketplace requires advanced payment functionality: payment system, ability to use credit cards, cash, PayPal, billing and invoice operations). In Syndicode we usually develop marketplaces with multiple payment methods to ensure that both user’ groups can use them in the most convenient way. Don’t forget about Payout: publishers should retrieve their money from the system – this functionality demands additional code. Major payment providers have solutions for that, for example, Stripe Connect. Reviews and ratings (this instrument aimed to help publishers and customers understand the situation on the market and build trust between each other). Both sides should be able to see listings reviews, customers will be able to write them and rate listings. Notifications (they used for tracking the process of building relationships between viewer and publisher: with them, users can be informed about the arrival of their order and so on). Obviously, the user must be able to change notifications settings. The most widespread notification methods are SMS and emails. Landing pages for clients and vendors. There should be a possibility to set and customize different layouts for landing pages depends whether they aimed to capture clients’ or vendors’ attention. Landing pages for clients must be easily customized by vendors according to their needs (top products list, location data or special offers, collecting emails and so on). Browsing content (this feature lets the user find what he is looking for). As navigation getting more smooth the more attention is paid to the products. You can browse through Syndicode projects to evaluate our approach for navigation and design – we take user comfort among the first priorities. Customer service (allows to keep in touch with the customer and grow his loyalty). In this part marketplaces usually use promotions, partners recruitment, collecting and visualizing data to understand tendencies, email campaigns for customer onboarding.
  19. 1 point
    PhoenixAter

    Payment methods

    This also could be a KO factor. Not everyone needs 30-40 or more payments methods. At the end, I would say, ~95% are not in use. I would say 10 or 15, maybe 20 but not more, most important methods and all others as Add-On's. At Version 2.3.4.1 there are alone 23 methods of Moneybookers, today Skrill. Most of them are only for 1, 2 or 3 European countries. So why should a store e.g. in Singapore have all those methods in the box? I prefer a smaller and clearer , but faster system without to much overload.
  20. 1 point
    *** Resolved *** Yes, it was something I did ... 🙄 Starting somewhere during the osC CE 'Edge' development (and continuing still in the 'Phoenix' development), many file names, paths, and database table names became hard-coded. So, one of the tasks to update an old add-on to work with osC CE Phoenix is to make those hard-code changes. That's where I made my mistake ... In /admin/create_order_process.php, the original code was: include(DIR_FS_CATALOG . DIR_WS_LANGUAGES . $language . '/modules/order_total/' . $value); include(DIR_FS_CATALOG . DIR_WS_MODULES . 'order_total/' . $value); I changed this to: include('includes/languages/' . $language . '/modules/order_total/' . $value); include('includes/modules/order_total/' . $value); However, by leaving out the DIR_FS_CATALOG, the code was trying to search for the order_total modules (and language files) in the Admin side of the shop. The correct code is: include(DIR_FS_CATALOG .'includes/languages/' . $language . '/modules/order_total/' . $value); include(DIR_FS_CATALOG .'includes/modules/order_total/' . $value); I hope this helps anyone who is also trying to adapt this add-on to the newer versions of osC Phoenix. Malcolm
  21. 1 point
    ruden

    Google reCAPTCHA v3

    Add-on updated Add support Hook System ⚠️ This add-on use Hook System, for versions below < 2.3.5 install Hook System https://apps.oscommerce.com/p9Yyp&hook-system Create directory includes/hooks/shop/pwa_account Copy file includes/hooks/shop/create_account/Recaptcha3.php in includes/hooks/shop/pwa_account In file includes/hooks/shop/pwa_account/Recaptcha3.php replace $this->form_name = basename(dirname(__FILE__)); $this->form_name = 'create_account';
×