Jump to content

bsmither

Member
  • Posts

    17,958
  • Joined

  • Last visited

  • Days Won

    602

Everything posted by bsmither

  1. " I think once the seo link has been deleted, it takes the page being clicked on to refresh it. " There is an issue with having the Maintenance kill SEO links. See: https://github.com/cubecart/v6/issues/1490
  2. " but after 5 or so refreshes, the page pulls up " I was going to say this sounds like an external caching issue (not your browser and not CubeCart, but something your hosting provider is running your site through). But that doesn't make sense. A new seo path wouldn't be in the external cache.and no external cache would block a request for a page it doesn't have. If it is CubeCart that is returning a 404 (a "404 message" within a regular Cubecart page), then either: The URL is not getting rewritten in the .htaccess file, or The seo path cannot be found in the CubeCart_seo_urls database table. Check the table for the exact, correct spelling of the seo path being used.
  3. There is a disconnect between CC61X and the Mican skin. In CC61X, the admin Store Settings, General tab, has a list of Social Accounts, in which for each entry, you enter the social account's URL or user name. These entries pass through some validation checks at GUI->_displaySocial(). Finally, the URLs are given to the template variable SOCIAL_LINKS and the template file element.social.php is rendered. This does not work with Mican (unless the template is made to work with CC6 in this way). CC61X also collects up the social plugins found in /modules/social/. Each plugin should have a function called getButtonHTML(). The HTML that this function creates is given to the template variable SHARE in Cubecart->_product() and ->_document(). The list of URLs you can add in Store Settings (for Foundation and compatible skins) is not the same as the collection of social plugins you install (originally for CC5 compatible skins, as well as Foundation and compatible skins). So, see if there is a Facebook Social Plugin at the MarketPlace.
  4. The following is a plan to create two Code Snippets for CC615: one to "globalize" the Mailer class instance instantiated by Order->orderStatus(), and the other to toss in all admin emails that have been set to receive such notifications to a BCC array. In admin, Manage Hooks, Code Snippets tab, click Add Snippet. Enabled: Checked Unique ID: classize_mailer@cubecart Execution Order: 99 Description: Class-izes the Mailer instantiation so that it can be seen outside the orderStatus() method. Trigger: class.order.order_status Version: 1.0 Author: https://forums.cubecart.com/topic/52330-how-to-add-admin-as-bcc-of-all-customers-order-status-emails/ PHP Code: <?php $this->_mailer =& $mailer; Save. Start another Code Snippet. Enabled: Checked Unique ID: bcc_admin@cubecart Execution Order: 99 Description: BCC's the admins on all customer emails. Trigger: class.order.assign_order_details Version: 1.0 Author: https://forums.cubecart.com/topic/52330-how-to-add-admin-as-bcc-of-all-customers-order-status-emails/ PHP Code: <?php //$this->_mailer->SMTPDebug = 2; //$this->_mailer->Debugoutput = 'error_log'; $addBCC_notify_admins = explode(',', $this->_notifyAdmins()); foreach ($addBCC_notify_admins as $admin) { $this->_mailer->addBCC($admin); } Save. As I have been testing this, a couple of things are preventing me from discovering if this really works. I see the names getting added to the BCC array, and I see the names being mentioned in RCPT TO commands to the SMTP Server. But (due to a funny thing about my web server), the Test Gateway does not complete, so I do not get all the diagnostics I want, and maybe the SMTP server I am sending this out to is grouping all the email addresses (as the customer and all admins have the same domain of an email address). I do not see any BCC TO command. So, more experimenting. But I wanted to get this posted.
  5. Where is the message in the page, and what else is on the page? If the message is in a weird place on a standard CubeCart page, then the message may be coming from the social site. There is no such phrase in CubeCart's lexicon.
  6. Please keep in mind that the browser that receives the order.print.php rendered file will likely have cached the print.css file. So, no matter if edited, unless the browser is 'tricked' into loading this file all the time (as opposed to using the copy in its cache), nothing changes. Feel free to post copies of those files here, or ZIP them up and make them available for download from some site. We can take a look. If the browser using the copy in its cache is the problem, try: In orders.print.php, find: <link rel="stylesheet" href="../{$SKIN_VARS.admin_folder}/skins/{$SKIN_VARS.skin_folder}/styles/print.css" media="screen,print"> Change to: <link rel="stylesheet" href="../{$SKIN_VARS.admin_folder}/skins/{$SKIN_VARS.skin_folder}/styles/print.css?v={$smarty.now}" media="screen,print"> This adds the current epoch timestamp to a querystring. It's guaranteed to be unique, (supposedly causes all caching mechanisms from your browser to CubeCart inclusive to to be bypassed, and is completely ignored. That is, will not affect what the web server sends back.
  7. I will have to study your 'trailing space' issue separately. I have not tried the following, but these two lines will remove characters that would interfere with the RLIKE word boundary syntax. But that opens other considerations. In catalogue.class.php, searchCatalogue() function, find: if(strtolower($search_mode) == 'rlike') { $like_keyword = "RLIKE"; $like_prefix = '[[:<:]]'; $like_postfix = '[[:>:]].*'; } else { $like_keyword = "LIKE"; $like_prefix = '%'; $like_postfix = '%'; } for ($i=0; $i<$noKeys; ++$i) { dbgClue('Working with this term from $searchArray: '.$searchArray[$i],array(),false); $ucSearchTerm = strtoupper($searchArray[$i]); if (($ucSearchTerm != 'AND') && ($ucSearchTerm != 'OR')) { On a new blankline AFTER that, add: if(strtolower($search_mode) == 'rlike'){$searchArray[$i] = str_replace(array('.','^','$','*','+','?','(',')','[','{','\\','|'),'',$searchArray[$i]);} if(strtolower($search_mode) == 'like'){$searchArray[$i] = str_replace(array('_','%'),array('\_','\%'),$searchArray[$i]);} So, AND I.product_code RLIKE '[[:<:]](not[[:>:]]' AND I.product_code RLIKE '[[:<:]]sold)[[:>:]]' will now look like: AND I.product_code RLIKE '[[:<:]]not[[:>:]]' AND I.product_code RLIKE '[[:<:]]sold[[:>:]]' Even if escaped, as in '[[:<:]]sold\)[[:>:]]', the database engine would still ignore the escaped closing parenthesis because it is not an alphanumeric character. In an RLIKE search term such as St.Louis, (no space) the period will be stripped, resulting in the term being StLouis.
  8. A proper solution would be more involved than the following (a proper list item on the Transaction Logs tab, for example), but here is an edit that puts a field on the Billing tab - which I think is more appropriate than Delivery. In the admin template orders.index.php, find near line 264: <fieldset> <legend>{$LANG.account.contact_details}</legend> On a new blabnk line ABOVE that, add: <fieldset> <legend>{$LANG.orders.gateway_name}</legend> <div><label for="sum_gateway">{$LANG.email.macro_gateway}</label><span><input type="text" id="sum_gateway" name="summary[gateway]" value="{$SUMMARY.gateway}" class="textbox"></span></div> </fieldset>
  9. Good observation. I think posting an issue in the Github is in order.
  10. I do not see anything wrong with the overall structure of the query. I would therefore conclude the problem is within a regex pattern, which does use parentheses for 'grouping'. So, AND I.product_code RLIKE '[[:<:]](not[[:>:]]' AND I.product_code RLIKE '[[:<:]]sold)[[:>:]]' has parentheses which will cause problems. This illustrates a need for the search terms to be "escaped" against regex control characters, or have those characters stripped out.
  11. Depends what you want to do. If the edit is to change a wortd or two, then an UPDATE query should work. More than that, I suggest you find a CSV Editor dedicated to the task of editing and managing CSV files. As always, there are free, but competent, tools with a basic, but common, feature set. Then there are not so free applications that can do wonders on a CSV file. A spreadasheet is NOT the tool to use on a CSV file, even though spreaadsheets usually read and write CSV files. They are horrible at managing the data in them. Have phpMyAdmin dump the inventory table to a CSV, make your edits as efficiently as possible, then import the CSV back into a truncated table.
  12. If the command ini_set() is still disabled, the consequences -- not seen as yet -- will come back to bite you in the ....
  13. The Warning, not so much of a critical issue. The call to mb_strlower() is necessary for CC615 (and maybe a couple earlier versions). If you are hosted by a commercial operation, you will need to have them change to a more recent version of PHP, or to somehow add the Multi-Byte library to PHP. This may involve re-compiling PHP from its source with Multi-Byte capability included in the options. (On Linux systems, apparently it's fairly easy to compile PHP with whatever optional capabilities are needed.) The command ini_set() being disabled is a critical concern. Even the admin side of CubeCart wants to use ini_set(). So why admin works is a mystery. Why CC5 worked is a mystery. If there are only some settings that can't be overridden, maybe that's what is going on. But this is a critical issue that must be resolved with your hosting provider.
  14. The 'missing column' situation should not be causing the Homepage to not display. That particular query simply gets a "friendly" version of a link to a category page. If there is no result from the query, CubeCart should not crash. If a blank Homepage is still an issue, please create the error_log and maybe there is a clue we can explore.
  15. If the latest CC6 codebase overwrote the CC5 codebase (typical procedure of a CubeCart upgrade), but you did not run to completion the www.mystore.com/setup/index.php process, then the database may not have the necessary structure to successfully run CC6. If you haven't run setup, please do so. Make sure it runs to completion. (Some browsers can have meta-redirect disabled - meaning for each step of the database upgrade sequence, the user will need to click Continue.) I mention this because having the 'custom' column missing in the CubeCart_seo_urls table indicates to me the setup did not run to completion.
  16. There is this: https://www.cubecart.com/extensions/plugins/absolute-matrix-option-prices-price-list-hide-out-of-stock-matrix-options
  17. This is an ongoing concern. The essential problem is, what happens when there is more than one option? Size, Color, Style An option matrix can get out of hand very quickly, and it is only through the options matrix that allows for stock levels of specific option combinations. For example, a "Black 12" is out of stock, but a "Black 10" and a "Red 12" is available. Neither "Black" nor "12", individually, can be indicated as unavailable. I have seen 1D and 2D tables created from the options matrix. Any dimension above that will require being very inventive. I did, however, make a Dynamic Stock Level Indicator that, once all required options were chosen, a query was sent to the store to determine if it was available.
  18. Not as a part number. VARCHAR and TEXT and BLOB, etc, do not cause the database server to act on mathematical symbols. However, CubeCart does, but in a way that shouldn't cause any problem as hypothesized.
  19. CubeCart destroys sessions when the customer or admin actually logs out. I would recommend against not being able to log out. The timeStart is when the session first logged in, and the timeLast is when the most recent page request was made. For every page request, CubeCart is supposed to send back the same cookie with a new expiration date/time that is for the customer according to that setting in admin, and for the admin, no expiration as the cookie is considered a "session" cookie (the browser keeps it alive until the browser is closed). Customer #255 has made their most recent page request 261 seconds.after logging in. When rows in the sessions table get deleted, CubeCart is clearing out obsolete entries. There is a function in cc_session.php, deleteOldSessions(), that takes the time duration set in admin, subtracts it from now to get some past date, then deletes all records where timeLast is less than that past date. Thus, having zero as that admin setting will cause quite a bit of confusing session behavior.
  20. You would need a Code Snippet. The standard search mechanism must have keywords to search on. Then, from the Advanced Search page, you can filter against chosen Manufacturers. You may think that one can search for wild-card anything, and name the manufacturer in the URL, but it doesn't work that way - unfortunately. Here is a Code Snippet you can try: In admin, Manage Hooks, Code Snippets tab, click Add Snippet. Enabled: checked Unique ID: search_specific@cubecart -- max 32 chars Execution Order: 1 Description: Allows to search for specific properties Trigger: class.catalogue.pre_search Version: 1.0 Author: https://forums.cubecart.com/topic/52317-turn-manufacturer-field-into-a-tag/ PHP Code: <?php /* Specify in the array the names of the columns containing specific value properties of the inventory. * That is, the property that uniquely identifies an item. * Use the actual names of the columns holding these properties. */ $specific_properties = array( 'found' => "Publisher", // Found "what" on the Search Results page 'table' => "CubeCart_manufacturers", 'alias' => "CCM", 'on' => array('master' => "I.manufacturer", 'slave' => "id"), 'column' => array("name"), ); foreach($specific_properties['column'] as $property) { if(isset($search_data[$specific_properties['alias']][$property]) && !empty($search_data[$specific_properties['alias']][$property])) { $search_mode = ($search_mode == 'RLIKE' || $search_mode == 'LIKE') ? $search_mode : 'RLIKE'; // Can't use fulltext - not using fulltext index $_REQUEST['search']['keywords'] = $specific_properties['found'].":".$search_data[$specific_properties['alias']][$property]; // Needed to show on Search Results page $joins[] = sprintf( '%1$s'.$specific_properties['table']." AS ".$specific_properties['alias'] .' ON '.$specific_properties['on']['master'].' = '.$specific_properties['alias'].'.'.$specific_properties['on']['slave'] ,$GLOBALS['config']->get('config', 'dbprefix') ); $where[] = $specific_properties['alias'].".".$property." LIKE ".$GLOBALS['db']->sqlSafe("%".$search_data[$specific_properties['alias']][$property]."%",true); // example, searching for "%Riley%" anywhere in the name; } } Now, this gives you a specific URL you can use to initiate a search. That is to say, if you put this URL as a link on a page, CubeCart will perform a search for what you want: http://www.mystore.com/search.html?search%5BCCM%5D%5Bname%5D=Riley&_a=category where Riley is part of the Manufacturer's name.
  21. Somewhere in CC4's admin is Server Info. It will show the current PHP settings that CubeCart is running under. In the "Session" table, there is a 'local' and a 'master' value column. This PHP page explains what these values mean. I am going to say that CC4 does not change what is available from the Master column. I will also say that gc_maxlifetime at 0 is wrong.
  22. Your statement will always resolve to true. But, you are using {$cat_id} when the correct variable is {$category.cat_id}. {if $category.cat_id eq 173}iframe stuff{/if} Smarty allows for the comparison operator eq in place of PHP's comparison operator ==. Your statement uses a single equals sign which is PHP's assignment operator. You are attempting to make $cat_id contain the value 173. The question is: will $cat_id acquire the value 173? The answer is: (probably) yes. (But that's not how Smarty works, so...Hm,?) Thus, this expression resolves to true.
  23. If the "unknown" person and your customer both have dynamically assigned IP addresses, by the time you had your conversation with her, she may have acquired the IP address that the unknown person had some time ago. If that may be the case, then note the time the order was placed (the Order Id adjusted for time zone differences, or some other time mark associated with the order). Look in the raw access logs at around that time (adjusting for time zone differences), ignoring the IP address.
  24. The difference between a product's description and a category description is only in the name of the key that is being POSTed: Product has "description" (and "description_short", but that's not important) Category has "cat[cat_desc]" Perhaps the mod_security has an exemption for a POST key of "description".
×
×
  • Create New...