Archive: ComponentOwl Rails app, DB backups, go redirect script

This commit is contained in:
EC2 Default User
2026-03-23 16:20:05 +00:00
commit 50037f386f
218 changed files with 14558 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
location_hp_featured:
type: TestimonialLocation
code: homepage-featured
value: Homepage Featured
location_order:
type: TestimonialLocation
code: order
value: Order Page
location_product:
type: TestimonialLocation
code: product
value: Product Page
location_download:
type: TestimonialLocation
code: download
value: Download Page
description_featured_phrase:
type: ProductDescriptionType
code: featured-phrase
value: Featured Phrase
description_featured_subphrase:
type: ProductDescriptionType
code: featured-subphrase
value: Featured Subphrase
description_heading:
type: ProductDescriptionType
code: heading
value: Section Heading
description_section:
type: ProductDescriptionType
code: section
value: Section Description
support_request_origin_support:
type: SupportRequestOrigin
code: support
value: Support Page
position: 1
support_request_origin_order:
type: SupportRequestOrigin
code: order
value: Order Page
position: 2
support_request_origin_product:
type: SupportRequestOrigin
code: product
value: Product Page
position: 3
support_request_origin_why_uninstall:
type: SupportRequestOrigin
code: why-uninstall
value: Why Uninstall
position: 4
support_request_origin_why_uninstall:
type: SupportRequestOrigin
code: landing-page
value: Landing Page
position: 5
url_destination_product_detail:
type: UrlDestination
code: product-detail
value: Product Detail Page
position: 1
url_destination_product_download:
type: UrlDestination
code: product-download
value: Product Download Page
position: 2
url_destination_order:
type: UrlDestination
code: order
value: Order Page
position: 3
url_destination_support:
type: UrlDestination
code: support
value: Support Page
position: 4
promo_dropdown_listed:
type: Promotion
code: dropdown
value: Dropdown Menu
template_type_articles_sidebar:
type: SubtemplateType
code: article-sidebar
value: Article Sidebar
position: 1

View File

@@ -0,0 +1 @@
"product_code","faq_category_url_param","url_param","question","featured","position"
1 product_code faq_category_url_param url_param question featured position

View File

@@ -0,0 +1,150 @@
<h2>Bugs and wrong behavior:</h2>
<table cellspacing="0">
<tr>
<th>Regular .NET ListView Control</th>
<th>Better ListView control</th>
</tr>
<tr>
<td>Some events fire twice bug</td>
<td>Fixed</td>
</tr>
<tr>
<td>Selection behavior different from Windows Explorer</td>
<td>Fixed; Behaves as expected</td>
</tr>
<tr>
<td>Drag &amp; Drop behavior different from Windows Explorer</td>
<td>Fixed; Behaves as expected</td>
</tr>
<tr>
<td>Checkboxes do not stay in the first column when the first column is reordered</td>
<td>Fixed; Behaves as expected</td>
</tr>
<tr>
<td>Non-standard checkboxes behavior (e.g. when using spacebar)</td>
<td>Fixed</td>
</tr>
<tr>
<td>Non-standard look, incompatible with system themes</td>
<td>Fixed; Always uses system theme. Looks great on all Windows versions. Works with Windows 7 themes and Aero</td>
</tr>
</table>
<h2>Limitations:</h2>
<table cellspacing="0">
<tr>
<th>Regular .NET ListView Control</th>
<th>Better ListView control</th>
</tr>
<tr>
<td>Just one image per item</td>
<td>Enhanced; Each sub-item can have image</td>
</tr>
<tr>
<td>ImageList must be used to display images</td>
<td>Both ImageList and Image instances can be used</td>
</tr>
<tr>
<td>Simple sorting only</td>
<td>Multi-column sorting; Users can use Shift+Click to add additional columns to the sort</td>
</tr>
<tr>
<td>Three-state checkboxes not supported</td>
<td>Support for both two-state and three-state check boxes</td>
</tr>
<tr>
<td>Very limited event data</td>
<td>Enhanced; Many events have rich event data with useful information</td>
</tr>
<tr>
<td>Only 1 context menu for whole ListView</td>
<td>Up to 3 separate context menus: One for column headers, one for items, and one for empty area</td>
</tr>
<tr>
<td>Columns can be shown only in &ldquo;Details&rdquo; layout</td>
<td>Columns can be shown in all layouts</td>
</tr>
<tr>
<td>Only &ldquo;SmallIcon&rdquo; and &ldquo;LargeIcon&rdquo; size supported</td>
<td>Images can be of arbitrary size per layout.</td>
</tr>
<tr>
<td>Image size is static</td>
<td>Images are scaled and centered smoothly when necessary while keeping their respective aspect ratios</td>
</tr>
<tr>
<td>Column header images are not supported</td>
<td>Both ImageList and custom Image instances can be set on column headers</td>
</tr>
<tr>
<td>Custom comparer for sorting has to be implemented from scratch</td>
<td>Custom comparer can be inherited from BetterListView&rsquo;s default comparer to extend its functionality; Any custom IComparer is supported as well</td>
</tr>
<tr>
<td>Sub-item images very limited; Usable only via WinAPI with limitations in size and color depth</td>
<td>Images for sub-item fully supported (both ImageList and custom Image instances)</td>
</tr>
<tr>
<td>Check boxes do not have animation effect like the standard control</td>
<td>Check boxes are animated when used with mouse or keyboard the same way as the CheckBox control</td>
</tr>
<tr>
<td>Searching with keyboard only on first column and limited to string prefixes</td>
<td>Keyboard searching can be used on columns of choice and the searching behavior can be further adjusted (any substring, character-based or word-based search)</td>
</tr>
<tr>
<td>Only simple item tooltips supported</td>
<td>Automatic and customizable tooltips on items, sub-items and columns are supported</td>
</tr>
<tr>
<td>Can scroll to just one item</td>
<td>One or several items can be specified to be scrolled into view</td>
</tr>
<tr>
<td>Vista-look only with WinAPI extension</td>
<td>Visual elements are used by default</td>
</tr>
<tr>
<td>No Drag &amp; Drop item highlighting</td>
<td>Items under cursor are properly highlighted during dragging; Highlighting can be switched off for selected items</td>
</tr>
</table>
<h2>Missing features:</h2>
<table cellspacing="0">
<tr>
<th>Regular .NET ListView Control</th>
<th>Better ListView control</th>
</tr>
<tr>
<td>No empty text support (watermark text when ListView is empty)</td>
<td>Added support; Empty text for empty ListView is supported; You can give hint to your users now</td>
</tr>
<tr>
<td>No inbuilt sort</td>
<td>Added inbuilt sort support; Zero-code sorting</td>
</tr>
<tr>
<td>No auto-scroll when reordering items</td>
<td>Added; Auto-scroll speed can be adjusted</td>
</tr>
<tr>
<td>No auto-scroll when reordering columns</td>
<td>Added; Auto-scroll speed can be adjusted</td>
</tr>
<tr>
<td>No inbuilt item/column reordering</td>
<td>Added item/column reordering support; Zero-code reordering</td>
</tr>
<tr>
<td>No auto-scroll when dragging an item</td>
<td>Added; Auto-scroll speed can be adjusted</td>
</tr>
<tr>
<td>Complex data binding not supported</td>
<td>Support for complex data binding; Any IList, DataSet, DataTable or several other types can be bound directly to the Better ListView</td>
</tr>
</table>

View File

@@ -0,0 +1,191 @@
<h1>Licensing &amp; pricing for Better ListView</h1>
<p class="section-info">Purchase the ideal replacement component for .NET ListView.</p>
<ul id="buy-nav" class="nav">
<li><%= link_to("Buy new licenses", {}, :class => "current") %></li>
<li><%= link_to("Renew subscription", {}) %></li>
</ul>
<div id="buy-panels">
<div class="panel">
<% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%>
<%= hidden_field_tag "CID", Settings.order.cid %>
<%= hidden_field_tag "CLR", Settings.order.clr %>
<%= hidden_field_tag "PRODUCTID", "", :class => "product-id" %>
<table cellspacing="0">
<tr>
<th colspan="4">Single developer licenses</th>
</tr>
<tr>
<td>Single developer license with 1 year subscription</td>
<td class="price">$345</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300056", false, :id => "support-single" %>
<%= label_tag "support-single", "Add 1 year priority support ($99)" %>
</td>
<td class="buy"><%= buy "18300042" %></td>
</tr>
<tr>
<td>Single developer license with source code and 1 year subscription</td>
<td class="price">$795</td>
<td class="buy"><%= buy "18300043" %></td>
</tr>
<tr>
<th colspan="4">5 developers licenses</th>
</tr>
<tr>
<td>5 developer license with 1 year subscription</td>
<td class="price">$995</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300057", false, :id => "support-5" %>
<%= label_tag "support-5", "Add 1 year priority support ($295)" %>
</td>
<td class="buy"><%= buy "18300044" %></td>
</tr>
<tr>
<td>5 developer license with source code and 1 year subscription</td>
<td class="price">$1995</td>
<td class="buy"><%= buy "18300045" %></td>
</tr>
<tr>
<th colspan="4">Site licenses - use at 1 site (office or building)</th>
</tr>
<tr>
<td>Site license with 1 year subscription</td>
<td class="price">$1995</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300058", false, :id => "support-site" %>
<%= label_tag "support-site", "Add 1 year priority support ($495)" %>
</td>
<td class="buy"><%= buy "18300046" %></td>
</tr>
<tr>
<td>Site license with source code and 1 year subscription</td>
<td class="price">$3995</td>
<td class="buy"><%= buy "18300047" %></td>
</tr>
<tr>
<th colspan="4">Enterprise license - use world-wide at unlimited sites</th>
</tr>
<tr>
<td>Enterprise license with source code and 1 year subscription</td>
<td class="price">$8995</td>
<td class="addon">
<%= check_box_tag "PRODUCTID", "18300059", false, :id => "support-enterprise" %>
<%= label_tag "support-enterprise", "Add 1 year priority support ($995)" %>
</td>
<td class="buy"><%= buy "18300048" %></td>
</tr>
</table>
<% end -%>
</div>
<div class="panel">
<% form_tag "https://secure.bmtmicro.com/servlets/Orders.ShoppingCart", :method => :get do -%>
<%= hidden_field_tag "CID", Settings.order.cid %>
<%= hidden_field_tag "CLR", Settings.order.clr %>
<%= hidden_field_tag "PRODUCTID", "", :class => "product-id" %>
<table cellspacing="0">
<tr>
<th colspan="4">Single developer licenses</th>
</tr>
<tr>
<td>Renew single developer 1 year subscription</td>
<td class="price">$138</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300056", false, :id => "renew-support-single" %>
<%= label_tag "renew-support-single", "Add 1 year priority support ($99)" %>
</td>
<td class="buy"><%= renew "18300049" %></td>
</tr>
<tr>
<td>Renew single developer 1 year subscription with source code</td>
<td class="price">$318</td>
<td class="buy"><%= renew "18300050" %></td>
</tr>
<tr>
<th colspan="4">5 developers licenses</th>
</tr>
<tr>
<td>Renew 5 developer 1 year subscription</td>
<td class="price">$398</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300057", false, :id => "renew-support-5" %>
<%= label_tag "renew-support-5", "Add 1 year priority support ($295)" %>
</td>
<td class="buy"><%= renew "18300051" %></td>
</tr>
<tr>
<td>Renew 5 developer 1 year subscription with source code</td>
<td class="price">$798</td>
<td class="buy"><%= renew "18300052" %></td>
</tr>
<tr>
<th colspan="4">Site licenses - use at 1 site (office or building)</th>
</tr>
<tr>
<td>Renew site license 1 year subscription</td>
<td class="price">$798</td>
<td class="addon" rowspan="2">
<%= check_box_tag "PRODUCTID", "18300058", false, :id => "renew-support-site" %>
<%= label_tag "renew-support-site", "Add 1 year priority support ($495)" %>
</td>
<td class="buy"><%= renew "18300053" %></td>
</tr>
<tr>
<td>Renews site license 1 year subscription with source code</td>
<td class="price">$1598</td>
<td class="buy"><%= renew "18300054" %></td>
</tr>
<tr>
<th colspan="4">Enterprise license - use world-wide at unlimited sites</th>
</tr>
<tr>
<td>Renew enterprise license 1 year subscription with source code</td>
<td class="price">$3598</td>
<td class="addon">
<%= check_box_tag "PRODUCTID", "18300059", false, :id => "renew-support-enterprise" %>
<%= label_tag "renew-support-enterprise", "Add 1 year priority support ($995)" %>
</td>
<td class="buy"><%= renew "18300055" %></td>
</tr>
</table>
<% end -%>
</div>
</div>
<div class="licenses-info">
<div class="block">
<p>All licenses are:</p>
<ul class="common">
<li>Life-time (non-expiring)</li>
<li>Royalty free</li>
</ul>
</div>
<div class="block">
<p>Subscription gets you:</p>
<ul class="common">
<li>Support</li>
<li>Updates</li>
</ul>
</div>
<div class="block last">
<p>Priority support gets you:</p>
<ul class="common">
<li>Guaranteed 24 hour reply</li>
<li>Help with implementing new features and extending Better ListView</li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,9 @@
<div class="screenshots">
<% reset_cycle %>
<% for screenshot in @product.screenshots.all_ordered %>
<% c = cycle("odd", "even") %>
<% if c == "odd" %><div class="screenshot-row"><% end %>
<div class="<%= c %>"><%= screenshot_link(screenshot, :version => :thumb_big) %><strong><%= truncate(screenshot.label, 40) %></strong></div>
<% if c == "even" || @product.screenshots.all_ordered.last == screenshot %></div><% end %>
<% end %>
</div>

View File

@@ -0,0 +1,91 @@
<h2>The story behind Better Listview</h2>
<p>Hi, my name is Jiri Novotny and Im the founder of Dextronet.com, a small software startup that operates ComponentOwl.com among other things.
Me and my team think of ourselves as independent software vendors (or mISV).</p>
<p>Surprise surprise - as it is with most independent components today, we did not originally actually intended to create Better ListView.</p>
<p>Our flagship product is Swift To-Do List, a desktop task management software. The old version of Swift To-Do List has been written in Visual Basic 6
which has many limitations, so weve decided to make a total rewrite in VB.NET and C#. The development started in July 2009.</p>
<p>Because Swift To-Do List is highly list-centric product (as the name suggests ), it soon become apparent that we will need excellent ListView control.
The ListView control included in .NET just didnt cut it. Not only its features are very limited, but there are braincracking bugs and strange behavior
in lots of cases. In fact, the default .NET ListView was so bad, that Ive oftentimes wished I could just use the ListView included in VB6
it has at least behaved mostly correctly.</p>
<p>So, because we couldnt use the default .NET ListView, I began searching for a replacement ListView
control. My requirements were actually not very demanding - I wanted a ListView control that looked and
behaved similarly as the one used in Windows Explorer. </p>
<p>Unfortunately, Ive soon discovered that in reality, I want lots of things that are not taken for granted in any ListView control that Ive found.
My requirements for a usable .NET ListView control are:</p>
<ul class="common">
<li>It must either inherit from native ListView or mimick it perfectly</li>
<li>It must use system theme seamlessly and not have some weird inconsistent custom look</li>
<li>It must support sub-item images flawlessly</li>
<li>It must have excellent drag &amp; drop support for item reordering</li>
<li>It must have perfect implementation of selection and drag-selection</li>
<li>It must support 3 different context menus: For items, column headers, and empty space</li>
<li>Multi-column sort</li>
<li>Must not be part of some huge control pack that I need to bundle with my app</li>
<li>Must be light-weight, fast and optimized</li>
<li>Must have all bugs and strange behavior of .NET ListView fixed</li>
</ul>
<p>There was also lot of nice-to-have things that Ive looked for, like:</p>
<ul class="common">
<li>Watermark text that is shown when the ListView is empty</li>
<li>Column reordering with auto-scrolling</li>
<li>100% managed code</li>
<li>... co mame dal? Napady! ...</li>
</ul>
<p>I did not want to use any DataGrid-based control, as it cant really replace ListView control it is much harder to manipulate for the user in most
cases, and it doesnt support many things that ListView does. </p>
<p>Swift To-Do List is a mass-market product, so it needed a ListView control that behaved as expected in all cases, no exceptions.
The ListView control used in Windows Explorer is a great model: Because every user knows how to work with Windows Explorer ListView already,
you can leverage that knowledge in your own applications. Your applications will be truly easy to use and learn.</p>
<p>Ive looked over dozen of ListView controls and Im not afraid to name them, because they just dont meet the above criteria.
The controls I looked over included ListView from SoftGroup, three different open source ListView controls from CodeProject,
ListView from Lidor systems, Grid and TreeView-Grid hybrid from DevExpres, WinListView from Infragistics, Ive also looked at all
ListView controls to be found at CodeGuru and ComponentSource and more basically everything that I could Google and everything
from all well-known (or not so well known) component providers.</p>
<p>I was disappointed with every single of these controls. Not one of them met my criteria.</p>
<p>Believe me, I *wanted* to find the perfect ListView control after all, I desperately needed it so we could use it in our own product.
But what Ive found during my extensive research? Nothing. Null. Nilch. Nada. Zero. My heart was broken. The dreams of our awesome Swift To-Do List 7
product started to shatter, because we needed an adequate ListView control first. When it comes to user experience, we simply couldnt settle
for anything less than great.</p>
<p>But we havent given up. The solution? To create our own ListView control. A Better ListView control. It was not originally intended to be
a product on its own, but when it has been finished, it was so good that it would be a sin to keep it selfishly just for ourselves.
So weve started selling it.</p>
<p>When we started building our own better ListView control, we wanted it to inherit from System.Windows.Forms.ListView at first.
Weve tried our best, but some of the bugs of .NET ListView were simply impossible to fix, even with ridiculous hacks. However, luck has shined upon us. </p>
<p>Weve met Libor Tinka, a genius C# developer with extensive experience with not just programming in general, but specifically Windows
control development as well. Hes the author and sole developer of ImagingShop, a powerful digital photography processing desktop application
that includes many of his custom controls, and lots of hardcore mathematics and unique algorithms (It has over 220k lines of code in total!).
That guy <strong>really</strong> is a genius and let me tell you, the code he writes is just beautiful. Hes an artist.</p>
<p>When weve asked Libor to create a better ListView control for us, he accepted the challenge. </p>
<p>(By the way, it might look easy at first, but implementing your own ListView control is extremely difficult, daunting and complicated task
there are so many corner cases in the controls behavior that it will make your brain want run away.)</p>
<p>Weve worked very closely with Libor during the intensive development process. Fast forward 10 months into the future - Better ListView is done,
and Libor is an integral part of our team. We still work together as we support and constantly enhance BetterListview.</p>
<p>Better ListView is now used not just in Swift To-Do List, but also in Libors own product ImagingShop, so we are trully eating our own dog foot.
This is your <strong>guarantee</strong> that we will <strong>not</strong> stop supporting Better ListView, fixing bugs and implementing new features
its the <strong>core</strong> and <strong>heart</strong> of our own desktop software products after all. We walk the talk.</p>
<p>If Better ListView existed before, I know I would be absolutely positively <strong>thrilled</strong> about it.
And so I hope that you are thrilled about it now that youve found it.</p>
<p>Any questions or comments? I would love to get them. Contact me at novotny@dextronet.com

View File

@@ -0,0 +1,4 @@
"product_code","code","name","tab","position"
"better-listview","story","Story",1,3
"better-listview","screenshots","Screenshots",1,3
"better-listview","pricing-licensing","Pricing &amp; Licensing",0,1
1 product_code code name tab position
2 better-listview story Story 1 3
3 better-listview screenshots Screenshots 1 3
4 better-listview pricing-licensing Pricing &amp; Licensing 0 1

View File

@@ -0,0 +1,51 @@
<h1>About Component Owl</h1>
<p>ComponentOwl.com has been founded in 2010 as a part of Dextronet.com network.</p>
<p>Our goal is to provide light-weight, flexible and reliable <strong>components and controls for Microsoft .NET</strong>
that are both user friendly and developer friendly.</p>
<p>Important thing about our controls is that they always use system themes, look, and behavior. We are opposed to controls with custom look and non-standard
behavior - in our opinion, controls that dont look and behave as expected are not user friendly. Aero looks great, and so do our controls. That being said,
you can still customize our controls to suit your special needs, using many properties and owner-drawing options.</p>
<p>Our first product is Better ListView. It is aimed to be the number one replacement for the regular .NET ListView included with Visual Studio. Read the
<%= link_to "Better ListView story", story_path(featured_product) %>.</p>
<h2>Support and development continuance</h2>
<p>All components provided are used in our own products. For example, Better ListView is used in
<%= link_to "task management software", "http://www.dextronet.com/swift-to-do-list-software" %> Swift To-Do List and professional photography processing
application ImagingShop. This is your guarantee that we will <strong>not</strong> stop developing and supporting our components. It is quite common to find abandoned
controls and components and this wont happen with Component Owl controls!</p>
<h2>Quality assurance</h2>
<p>Our quality assurance stands on three main pillars:</p>
<ol class="common">
<li>Unit tests. All code is covered by unit tests whenever possible.</li>
<li>Rigorous in-house testing with extreme focus on details.</li>
<li>Usage of our controls in real world. Thousands of users work with Better ListView every day, because it is part of Swift To-Do List
and other software products developed by us, our partners and customers.</li>
</ol>
<h2>Our team</h2>
<p>Our team members have more than 10+ years of experience with Win32 development on average.</p>
<p><strong>Jiri Novotny</strong> Dextronet.com founder and author of Swift To-Do List. Better ListView project leader and specs author.
Jiri has focused on making Better ListView as user friendly as possible. He also ensured its compatibility with all Windows versions and themes.</p>
<p><strong>Libor Tinka</strong> Chief developer of Better ListView. Control development and C# expert. Libor is author of ImagingShop, digital photography
processing application.</p>
<p><strong>Ondrej Tomec</strong> Dextronet.com developer, author of various software projects, and co-developer of Better ListView. Ondrej helped to make
Better ListView better with his rigorous quality assurance procedures and code analysis.</p>
<h2>Contact us today</h2>
<p>Get in touch using the contact form in <%= link_to "Support", "/support" %> section, or directly at <span class="emil">support (at) componentowl (dot) com</span>.</p>
<h2>ComponentSource Author</h2>
<p>We are certified ComponentSource author. ComponentSource is our authorized reseller.<br /><br /><%= image_tag("Online-AuthorTierLogo.gif", :alt => "Online ComponentSource Author") %></p>

View File

@@ -0,0 +1,346 @@
<h1>Resellers and Customer Service</h1>
<p>Our Customer Services representatives speak English, French, German, Italian, Spanish, Japanese and Korean and are available to assist
with all your sales and technical queries. Call us free of charge from the countries listed below.</p>
<%= image_tag "CSLogo.gif", :alt => "ComponentSource.com" %>
<table cellspacing="0">
<thead>
<tr>
<th colspan="2">Country</th>
<th>Toll Free Number</th>
<th>Availability (Mon - Fri Local Time)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="flag"><%= image_tag('countries/us.gif', :alt => "USA", :width => 16, :height => 11) %></td>
<td class="country">USA</td>
<td class="number">(888) 850 9911</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/us.gif', :alt => "USA - Gov Sales", :width => 16, :height => 11) %></td>
<td class="country">USA - Gov Sales</td>
<td class="number">(888) 850 9966</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/ca.gif', :alt => "Canada", :width => 16, :height => 11) %></td>
<td class="country">Canada</td>
<td class="number">(888) 850 9911</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/gb.gif', :alt => "United Kingdom", :width => 16, :height => 11) %></td>
<td class="country">United Kingdom</td>
<td class="number">0800 581111</td>
<td class="availability">24 hour  </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/ar.gif', :alt => "Argentina", :width => 16, :height => 11) %></td>
<td class="country">Argentina</td>
<td class="number">0800 666 3484</td>
<td class="availability">5:00am-7:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/au.gif', :alt => "Australia", :width => 16, :height => 11) %></td>
<td class="country">Australia</td>
<td class="number">1 800 0 15292</td>
<td class="availability">11:00am-7:00pm  EST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/at.gif', :alt => "Austria", :width => 16, :height => 11) %></td>
<td class="country">Austria</td>
<td class="number">0800 281 750</td>
<td class="availability">9:00am-5:30pm  CEST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/be.gif', :alt => "Belgium", :width => 16, :height => 11) %></td>
<td class="country">Belgium</td>
<td class="number">0800 7 5603</td>
<td class="availability">9:00am-5:30pm  CEST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/br.gif', :alt => "Brazil", :width => 16, :height => 11) %></td>
<td class="country">Brazil</td>
<td class="number">0800 891 6478</td>
<td class="availability">6:00am-7:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/bg.gif', :alt => "Bulgaria", :width => 16, :height => 11) %></td>
<td class="country">Bulgaria</td>
<td class="number">00800 115 4445</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/cl.gif', :alt => "Chile", :width => 16, :height => 11) %></td>
<td class="country">Chile</td>
<td class="number">1230 020 6857</td>
<td class="availability">4:00am-6:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/cn.gif', :alt => "China (North)", :width => 16, :height => 11) %></td>
<td class="country">China (North)</td>
<td class="number">10800 481 1661</td>
<td class="availability">8:00am-4:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/cn.gif', :alt => "China (South)", :width => 16, :height => 11) %></td>
<td class="country">China (South)</td>
<td class="number">10800 813 1594 </td>
<td class="availability">8:00am-4:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/co.gif', :alt => "Colombia", :width => 16, :height => 11) %></td>
<td class="country">Colombia</td>
<td class="number">01800 710 2043</td>
<td class="availability">3:00am-5:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/hr.gif', :alt => "Croatia", :width => 16, :height => 11) %></td>
<td class="country">Croatia</td>
<td class="number">0800 22255</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/cz.gif', :alt => "Czech Republic", :width => 16, :height => 11) %></td>
<td class="country">Czech Republic</td>
<td class="number">800 143 313</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/dm.gif', :alt => "Denmark", :width => 16, :height => 11) %></td>
<td class="country">Denmark</td>
<td class="number">80 88 17 20</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/ec.gif', :alt => "Ecuador", :width => 16, :height => 11) %></td>
<td class="country">Ecuador</td>
<td class="number">1 800 010 562</td>
<td class="availability">3:00am-5:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/fi.gif', :alt => "Finland", :width => 16, :height => 11) %></td>
<td class="country">Finland</td>
<td class="number">0800 1 18002</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/fr.gif', :alt => "France", :width => 16, :height => 11) %></td>
<td class="country">France</td>
<td class="number">0800 90 92 62</td>
<td class="availability">9:00am-5:30pm  CEST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/de.gif', :alt => "Germany", :width => 16, :height => 11) %></td>
<td class="country">Germany</td>
<td class="number">0800 186 07 06</td>
<td class="availability">9:00am-5:30pm  CEST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/gr.gif', :alt => "Greece", :width => 16, :height => 11) %></td>
<td class="country">Greece</td>
<td class="number">00800 44121891</td>
<td class="availability">24 hour </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/hk.gif', :alt => "Hong Kong", :width => 16, :height => 11) %></td>
<td class="country">Hong Kong</td>
<td class="number">800 908 581</td>
<td class="availability">8:00am-4:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/hu.gif', :alt => "Hungary", :width => 16, :height => 11) %></td>
<td class="country">Hungary</td>
<td class="number">06800 16674</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/in.gif', :alt => "India", :width => 16, :height => 11) %></td>
<td class="country">India</td>
<td class="number">000 800 44 01 455</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/ie.gif', :alt => "Ireland", :width => 16, :height => 11) %></td>
<td class="country">Ireland</td>
<td class="number">1 800 535 661</td>
<td class="availability">24 hour</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/il.gif', :alt => "Israel", :width => 16, :height => 11) %></td>
<td class="country">Israel</td>
<td class="number">180 924 2003</td>
<td class="availability">24 hour </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/it.gif', :alt => "Italy", :width => 16, :height => 11) %></td>
<td class="country">Italy</td>
<td class="number">800 790046</td>
<td class="availability">9:00am-5:30pm  CEST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/jp.gif', :alt => "Japan", :width => 16, :height => 11) %></td>
<td class="country">Japan</td>
<td class="number">0120 343 550 </td>
<td class="availability">10:00am-6:00pm  JST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/mx.gif', :alt => "Mexico", :width => 16, :height => 11) %></td>
<td class="country">Mexico</td>
<td class="number">01 800 681 1559</td>
<td class="availability">2:00am-4:00pm  CST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/nl.gif', :alt => "Netherlands", :width => 16, :height => 11) %></td>
<td class="country">Netherlands</td>
<td class="number">0800 022 8832</td>
<td class="availability">24 hour  </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/nz.gif', :alt => "New Zealand", :width => 16, :height => 11) %></td>
<td class="country">New Zealand</td>
<td class="number">800 449181</td>
<td class="availability">12:00pm-8:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/no.gif', :alt => "Norway", :width => 16, :height => 11) %></td>
<td class="country">Norway</td>
<td class="number">800 1 3685</td>
<td class="availability">24 hour </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/pa.gif', :alt => "Panama", :width => 16, :height => 11) %></td>
<td class="country">Panama</td>
<td class="number">00 1 800 203 1587</td>
<td class="availability">3:00am-5:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/pe.gif', :alt => "Peru", :width => 16, :height => 11) %></td>
<td class="country">Peru</td>
<td class="number">0800 53288</td>
<td class="availability">3:00am-5:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/pl.gif', :alt => "Poland", :width => 16, :height => 11) %></td>
<td class="country">Poland</td>
<td class="number">00800 442 1092</td>
<td class="availability">24 hour </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/pt.gif', :alt => "Portugal", :width => 16, :height => 11) %></td>
<td class="country">Portugal</td>
<td class="number">800 844 125 </td>
<td class="availability">9:00am-10:00pm  WEST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/ru.gif', :alt => "Russia", :width => 16, :height => 11) %></td>
<td class="country">Russia</td>
<td class="number">810 800 2251 1044</td>
<td class="availability">24 hour </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/sg.gif', :alt => "Singapore", :width => 16, :height => 11) %></td>
<td class="country">Singapore</td>
<td class="number">800 810 2136</td>
<td class="availability">8:00am-4:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/si.gif', :alt => "Slovenia", :width => 16, :height => 11) %></td>
<td class="country">Slovenia</td>
<td class="number">0800 80297</td>
<td class="availability">24 hour </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/za.gif', :alt => "South Africa", :width => 16, :height => 11) %></td>
<td class="country">South Africa</td>
<td class="number">0800 99 1088</td>
<td class="availability">24 hour  </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/kr.gif', :alt => "South Korea", :width => 16, :height => 11) %></td>
<td class="country">South Korea</td>
<td class="number">00798 14 800 6332 </td>
<td class="availability">10:00am-6:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/es.gif', :alt => "Spain", :width => 16, :height => 11) %></td>
<td class="country">Spain</td>
<td class="number">900 93 8926</td>
<td class="availability">9:00am-11:00pm  CEST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/se.gif', :alt => "Sweden", :width => 16, :height => 11) %></td>
<td class="country">Sweden</td>
<td class="number">020 794 989</td>
<td class="availability">24 hour  </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/ch.gif', :alt => "Switzerland", :width => 16, :height => 11) %></td>
<td class="country">Switzerland</td>
<td class="number">0800 83 5305</td>
<td class="availability">9:00am-5:30pm  CEST</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/tw.gif', :alt => "Taiwan", :width => 16, :height => 11) %></td>
<td class="country">Taiwan</td>
<td class="number">00 801 814313</td>
<td class="availability">8:00am-4:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/tr.gif', :alt => "Turkey", :width => 16, :height => 11) %></td>
<td class="country">Turkey</td>
<td class="number">00 800 4491 3617</td>
<td class="availability">24 hour </td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/uy.gif', :alt => "Uruguay", :width => 16, :height => 11) %></td>
<td class="country">Uruguay</td>
<td class="number">000 401 902 38</td>
<td class="availability">5:00am-7:00pm</td>
</tr>
<tr>
<td class="flag"><%= image_tag('countries/ve.gif', :alt => "Venezuela", :width => 16, :height => 11) %></td>
<td class="country">Venezuela</td>
<td class="number">0 800 100 9103</td>
<td class="availability">3:30am-5:30pm</td>
</tr>
</tbody>
</table>
<div class="blocks">
<div class="block">
<h3>US Headquarters</h3>
ComponentSource<br />
650 Claremore Professional Way<br />
Suite 100<br />
Woodstock GA 30188-5188<br />
USA<br /><br /><br />
Tel: +1 770 250 6100<br />
Fax: +1 770 250 6199
</div>
<div class="block">
<h3>US Headquarters</h3>
ComponentSource<br />
30 Greyfriars Road<br />
Reading, Berkshire<br />
RG1 1PE<br />
United Kingdom<br /><br /><br />
Tel: +44 118 958 1111<br />
Fax: +44 118 958 9999
</div>
<div class="block">
<h3>Asia-Pac Headquarters</h3>
ComponentSource<br />
3F Kojimachi Square Bldg<br />
3-3 Kojimachi Chiyoda-ku<br />
Tokyo<br />
Japan<br />
102-0083<br /><br />
Tel: +81 3 3237 0281<br />
Fax: +81 3 3237 0282
</div>
</div>

View File

@@ -0,0 +1,21 @@
<p>The information contained in this website is for general information purposes only. The information is provided by Jiri Novotny and
Dextronet.com and while we endeavor to keep the information up to date and correct, we make no representations or warranties of any kind,
express or implied, about the completeness, accuracy, reliability, suitability or availability with respect to the website or the information,
products, services, or related graphics contained on the website for any purpose. Any reliance you place on such information is therefore
strictly at your own risk. All content is provided "as is".</p>
<p>In no event will we be liable for any loss or damage including without limitation, indirect or consequential loss or damage, or any loss
or damage whatsoever arising from loss of data or profits arising out of, or in connection with, the use of this website.</p>
<p>Through this website you are able to link to other websites which are not under our control. We have no control over the nature, content
and availability of those sites. The inclusion of any links does not necessarily imply a recommendation or endorse the views expressed
within them.</p>
<p>Every effort is made to keep the website up and running smoothly. However, Jiri Novotny and Dextronet.com take no responsibility for,
and will not be liable for, the website or any related products or services being temporarily unavailable due to technical issues
beyond our control.</p>
<p>All software offered by Jiri Novotny and Dextronet.com comes with End User License Agreement that you are bound to accept and agree
to in order to install and use the software.</p>
<p>This website and its content is copyright of Jiri Novotny and Dextronet.com © Jiri Novotny and Dextronet.com 2005-2010. All rights reserved.</p>

View File

@@ -0,0 +1 @@
<h1>EULA</h1>

View File

@@ -0,0 +1,108 @@
<h3 class="compatiblehd">Better ListView is compatible with:</h3>
<div class="compatiblelists">
<ul class="compatiblelist list-l">
<li class="logo vs"><%= image_tag('logo-vs-big.gif') %></li>
<li>Visual Studio 2005, 2008, 2010, and newer.</li>
<li>C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.</li>
</ul>
<ul class="compatiblelist list-r">
<li class="logo dotnet"><%= image_tag('logo-dotnet-big.gif') %></li>
<li>.NET 2, .NET 3, .NET 3.5, .NET 4, and newer.</li>
<li>Windows 2000, XP, 2003, Vista, 7, and newer, both 32-bit and 64-bit.</li>
</ul>
</div>
<div class="lists">
<div class="list-l">
<h3>Better ListView<strong> advantages:</strong></h3>
<ul class="common checklist">
<li>Single small DLL file (less than 250kB when compressed).</li>
<li>Easy deployment (xcopy). No dependencies. No installation.</li>
<li>Royalty-free distribution. No runtime licensing.</li>
<li>Written from scratch in pure managed code.</li>
<li>Lightning fast, optimized for 100.000+ items.</li>
<li>Minimum learning needed. Very similar to regular .NET ListView control.</li>
<li>User-friendly and developer-friendly.</li>
<li>No limits of the regular Microsoft .NET ListView control bundled with Visual Studio!</li>
<li>Tested by thousands of users world-wide.</li>
<li>Guaranteed continued support and development. We use Better ListView ourselves in our
popular and successful desktop products, like
<%= link_to 'Swift To-Do List', 'http://www.dextronet.com/swift-to-do-list-software', :class => "nowrap" %>.</li>
<li>Well documented, intuitive method/properties names.</li>
<li>Always looks great. Always fully uses the current Windows theme, including Aero support.</li>
<li>Enterprise source code licenses available.</li>
<li>Well documented.</li>
<li>Fast 24-hour or faster support.</li>
</ul>
</div>
<div class="list-r">
<h3>BetterListView<strong> extra features:</strong></h3>
<p>Better ListView has hundreds of extra features, compared to the regular .NET ListView control.
Plus, it removes all its limitations and bugs. Some of the most notable extra features include:</p>
<ul class="common checklist">
<li>Hierarchical items. Supports sub-items like in the tree view control.</li>
<li>Thumbnails view.</li>
<li>Serialization XML and Binary</li>
<li>Save/load Better ListView content into XML or binary, string or file, in just 1 line of code.</li>
<li>Inbuilt drag &amp; drop reordering (with insertion mark indicator).</li>
<li>Sub-item images</li>
<li>Double-buffered and flicker-free.</li>
<li>Highly customizable and flexible.</li>
<li>Multi-column sorting.</li>
<li>Inbuilt sorting (zero code needed).</li>
<li>Checkboxes in all views, 3-state support</li>
<li>Better grouping preserves item order, customizable group headers look and behavior,
collapsible, image support, context menu support, focusable, etc.</li>
<li>Embedded editing controls, support for custom controls.</li>
<li>Many other useful features - <%= link_to 'see more Better ListView features', featured_product %>.</li>
</ul>
</div>
</div>
<div class="testimonial-wide">
<blockquote>&ldquo;Better List View is <b>awesome</b>.&rdquo; &ndash; Daniel N.</blockquote>
</div>
<div class="tellingct">
<div class="tellingcnt">
<h3 class="tellinghd">Why is Better ListView the best ListView<br />replacement component for .NET (C#, VB)?</h3>
<p>To put it simply, there is nothing like Better ListView out there. Nothing.</p>
<p>Better ListView has been designed as a component that can easily replace the original
ListView control supplied with .NET.</p>
<p>There is virtually no learning needed. Its just intuitive.</p>
<p>Better ListView looks native and always fully utilizes the current system theme (so there is
no weird inconsistent look), and it also behaves exactly like it should. Weve modeled it after
the original list view component and the list view used in Windows Explorer everyone already
knows how to use it. It fully leverages the previous user knowledge.</p>
<p>We put extreme attention to details. All the little quirks and nuances that drive us crazy when
it comes to components of many smaller vendors are resolved in Better ListView. You will be
amazed how flexible and customizable it is, and how great it feels to use it. The users of your
application will feel right at home.</p>
<p>And most importantly, Better ListView is packed full of great features.</p>
<p>If you are wondering why we created Better ListView, you can read
<%= link_to 'our story', story_path(featured_product) %>.</p>
<p class="ending">And by the way, Better ListView comes with awesome samples gallery. Download and install
the trial package right now and see for yourself what Better ListView can do:</p>
</div>
<div class="testimonial ">
<blockquote>Better ListView really is better - it kills the standard!</blockquote>
<em>Mitchell V.</em>
</div>
</div>

View File

@@ -0,0 +1,107 @@
<h2>Why is Better ListView the best ListView replacement component for .NET?</h2>
<p class="intro">Lets face it the regular .NET ListView control included with Visual Studio is not very good and other alternatives are usually complex overkills.
<strong>Better ListView is just what you are looking for. It is the ideal replacement component for .NET ListView.</strong></p>
<div class="hilightbox"><%= link_to(t('txt.home.see_comparison_table'), features_path(featured_product)) %></div>
<h3><b>Fast, light-weight, pure managed code</b></h3>
<ol>
<li>Written from scratch in pure managed C# code does <strong class="underline">not</strong> inherit from regular ListView</li>
<li>No dependencies</li>
<li>Easy deployment - single DLL binary that has just 80 kB when compressed in a ZIP archive</li>
<li>100% compatible with .NET 2.0 or higher</li>
<li>Lightning fast. Optimized for 100.000+ items</li>
</ol>
<h3><b>Fixed all bugs and issues related to regular .NET ListView control</b></h3>
<p>Since weve written the whole control from scratch and it does <strong>not</strong> inherit from the regular Microsoft .NET ListView component,
the original ListView bugs are not present.</p>
<p>Furthermore, weve fixed all issues and some limitations related to the regular .NET ListView control, especially incorrect behavior and non-standard
implementation of many features (selections, drag &amp; drop, checkboxes, etc).</p>
<p>Surprisingly, .NET ListView <strong>does not</strong> support complex data binding. This forces developers to write additional code for populating and
updating the control. Better ListView, however, <strong>has the ability</strong> just like the DataGrid control one can simply bound any IList, DataSet,
DataTable and several other types directly to Better ListView and left all the management on .NET internals.</p>
<h3><b>Better drag &amp; drop support:</b></h3>
<ol>
<li>Insertion mark for inner reordering of items helps users preview the action</li>
<li>Auto-scroll while reordering items added</li>
</ol>
<h3><b>Better column headers:</b></h3>
<ol>
<li>Columns can be shown in all layouts (not just Details)</li>
<li>Column headers have their own context menu</li>
<li>Auto-scroll when reordering column headers added</li>
</ol>
<h3><b>Better sorting:</b></h3>
<ol>
<li>Inbuilt sorting (zero code needed)</li>
<li>Multi-column sort supported (use Shift+Click to add additional columns to sort)</li>
<li>Ability to create custom comparer</li>
</ol>
<div class="screenshot">
<div><%= product_image(1) %></div>
</div>
<h3><b>Images support:</b></h3>
<ol>
<li>Each sub-item can have its own image</li>
<li>Use both ImageList control or individual images</li>
<li>Supports images of all sizes</li>
<li>Can automatically resize images nicely if needed (no pixelated horrors!)</li>
<li>Column header images are supported</li>
</ol>
<h3><b>Better checkboxes:</b></h3>
<ol>
<li>Checkboxes can be used in all layouts (not just Details)</li>
<li>Fixed behavior. Checkboxes behave as expected this makes Better ListView user friendly, compared to regular ListView.</li>
<li>Three-state checkboxes supported</li>
</ol>
<div class="screenshot">
<div><%= product_image(2) %></div>
</div>
<h3><b>Looks and feels great</b></h3>
<ol>
<li>Better ListView always fully utilizes the current Windows theme</li>
<li>Double-buffered and flicker-free</li>
</ol>
<h3><b>Fixed bugs and wrong behavior of regular .NET ListView</b></h3>
<p>The regular ListView has various obscure bugs (like events firing twice) and non-standard implementation of behavior in many cases. Weve fixed all the bugs,
and made it to <strong>always behave as expected</strong>. See more below.</p>
<h3><b>User friendly:</b></h3>
<p><strong>Leverage the user knowledge of Windows Explorer ListView.</strong> The ListView in Windows Explorer is a great model, because every Windows user already
knows how it works and how to use it. Unfortunately, the regular .NET ListView deviates from this behavior, and is thus not user friendly. Better Listview
replicates the correct standard behavior of Windows Explorer ListView whenever possible. <strong>Better ListView always works as expected.</strong></p>
<h3><b>Developer friendly:</b></h3>
<p><strong>BetterListview can be used just like the common ListView.</strong> All the method names and property names are the same whenever possible. If you know
how to use the common ListView, BetterListview will require nearly no learning on your side. Better ListView is a true pragmatic choice &mdash;
<strong>skip the learning time, and focus on development.</strong></p>
<h3><b>Powerful, flexible, customizable:</b></h3>
<p>Advanced features like super powerful HitTest and ability to have owner-drawn item are supported. You might be surprised by all the things that
are possible to do with Better ListView.</p>
<h3><b>Guaranteed supported and continued development</b></h3>
<p>Better ListView is developed as a joint-venture of two software companies that use it in their flagship products (Swift To-Do List and ImagingShop), used
by thousands of users daily. <strong>This is your guarantee that it will be supported and developed in the future.</strong></p>
<h3><b>Tested in real world applications by thousands of users</b></h3>
<p>Because Better ListView is used in professional consumer software applications - Swift To-Do List and ImagingShop, thousands of users work with it every day.
Although we do <strong>unit tests</strong>, and do thorough inhouse testing, <strong>this is your true bullet-proof guarantee that it is tested thoroughly
in the real world.</strong></p>
<h3><b>Other nice-to-have and might-come-handy features:</b></h3>
<ol>
<li>Customizable searching by typing</li>
<li>Ability to set custom size for items in all layouts</li>
<li>Any element of the control can be customized with properties and owner-drawing</li>
</ol>

View File

@@ -0,0 +1,46 @@
<h1>Our Commitment To Privacy</h1>
<p>Your privacy is important to us. To better protect your privacy we provide this notice explaining our online information practices and the choices you can make
about the way your information is collected and used. You retain rights to all your information and data.</p>
<p>Your credit card information is used by our BMT Micro ecommerce partner only to process your order and it is not stored in any way and never viewed by us
or available to us.</p>
<h2>The Information We Collect</h2>
<p>We collect only the necessary contact information when you contact us and personal information provided by you when you purchase a product from us.</p>
<h2>The Way We Use Information</h2>
<p>We do not share your personal information with outside parties except to the extent necessary to complete your order.</p>
<p>The information provided by you is used only to process your order and/or to inform you about new products and product updates.
You can opt-out from these email updates.</p>
<p>We use non-identifying and aggregate information to better design our website and products.</p>
<p>When you contact us, we might use a part of the email message in our promotion materials as a testimonial, without publishing your full name.
You have to right to decline any such use and we will promptly remove any such materials in 24 hours after your written request.</p>
<p>We reserve the right to publish the name and logo of your company in the list of our customers. We will promptly remove the name of your company
in 24 hours after your written request.</p>
<p>Finally, we never use or share the personally identifiable information provided to us online in ways unrelated to the ones described above without
also providing you an opportunity to opt-out or otherwise prohibit such unrelated uses.</p>
<h2>Our Commitment To Data Security</h2>
<p>To prevent unauthorized access, maintain data accuracy, and ensure the correct use of information, we have put in place appropriate physical,
electronic, and managerial procedures to safeguard and secure the information we collect online.</p>
<h2>How You Can Access Or Correct Your Information</h2>
<p>You can access or correct all your personally identifiable information that we collect online and maintain by contacting us.</p>
<h2>How To Contact Us</h2>
<p>Should you have other questions or concerns about these privacy policies, please contact us via our <%= link_to("support form", "/support") %>.</p>

View File

@@ -0,0 +1,9 @@
"code","url_param","name"
"about","about-us","About"
"home","home","Home"
"home-blv20","home-blv20","Home BLV 2.0"
"disclaimer","disclaimer","Disclaimer"
"privacy-policy","privacy-policy","Privacy Policy"
"eula","eula","EULA"
"press-resources","press-resources","Press Resources"
"customer-service","customer-service","Resellers and Customer Service"
1 code url_param name
2 about about-us About
3 home home Home
4 home-blv20 home-blv20 Home BLV 2.0
5 disclaimer disclaimer Disclaimer
6 privacy-policy privacy-policy Privacy Policy
7 eula eula EULA
8 press-resources press-resources Press Resources
9 customer-service customer-service Resellers and Customer Service

View File

@@ -0,0 +1,332 @@
class InitialMigration < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :first_name
t.string :last_name
t.string :login, :null => false
t.string :email, :null => false
t.string :crypted_password, :null => false
t.string :password_salt, :null => false
t.string :persistence_token, :null => false
t.string :single_access_token, :null => false
t.string :perishable_token, :null => false
t.integer :login_count, :null => false, :default => 0
t.integer :failed_login_count, :null => false, :default => 0
t.datetime :last_request_at
t.datetime :current_login_at
t.datetime :last_login_at
t.string :current_login_ip
t.string :last_login_ip
t.timestamps
t.datetime :deleted_at
end
create_table :allowed_values do |t|
t.string :type
t.string :code
t.string :value
t.integer :position
t.timestamps
t.datetime :deleted_at
end
create_table :product_categories do |t|
t.string :code
t.string :name
t.integer :position
t.timestamps
t.datetime :deleted_at
end
add_index(:product_categories, :code, :unique => true)
create_table :products do |t|
t.integer :product_category_id
t.string :code
t.string :internal_code
t.string :file
t.string :name
t.string :label
t.boolean :promoted, :default => false
t.boolean :homepage, :default => false
t.decimal :price, :scale => 2, :precision => 10
t.decimal :regular_price, :scale => 2, :precision => 10
t.integer :bmtID
t.integer :position
t.timestamps
t.datetime :deleted_at
end
add_index(:products, :code, :unique => true)
add_index(:products, :internal_code, :unique => true)
create_table :products_promotions, :id => false, :primary_key => [:product_id, :promotion_id] do |t|
t.integer :product_id
t.integer :promotion_id, :references => :allowed_values
end
create_table :product_descriptions do |t|
t.integer :product_description_type_id, :references => :allowed_values
t.integer :product_id
t.string :title
t.text :value
t.timestamps
end
create_table :product_pages do |t|
t.integer :parent_id, :references => :product_pages
t.integer :product_id
t.boolean :tab, :default => false
t.string :code
t.string :name
t.text :html
t.integer :position
t.timestamps
t.datetime :deleted_at
end
create_table :product_offers do |t|
t.integer :product_id
t.integer :related_product_id, :references => :products
t.integer :bmtID
t.string :name
t.text :description
t.decimal :price, :scale => 2, :precision => 10
t.datetime :begins_at
t.datetime :expires_at
t.integer :position
t.timestamps
end
create_table :product_editions do |t|
t.integer :product_id
t.string :code
t.string :internal_code
t.integer :bmtID
t.string :name
t.text :description
t.decimal :price, :scale => 2, :precision => 10
t.decimal :regular_price, :scale => 2, :precision => 10
t.boolean :initial, :default => false
t.integer :position
t.timestamps
end
add_index(:product_editions, :internal_code, :unique => true)
create_table :product_discounts do |t|
t.integer :product_id
t.integer :product_edition_id
t.string :discount_type
t.string :discount_code
t.decimal :price, :scale => 2, :precision => 10
t.timestamps
end
create_table :product_upgrades do |t|
t.integer :product_id
t.integer :product_edition_id
t.string :upgrade_type
t.string :bmtID
t.decimal :price, :scale => 2, :precision => 10
t.timestamps
end
create_table :product_url_params do |t|
t.integer :product_id
t.integer :url_destination_id, :references => :allowed_values
t.string :url_param
t.boolean :default, :default => false
t.timestamps
end
create_table :releases do |t|
t.integer :product_id
t.string :version
t.integer :build
t.text :description
t.text :changelog
t.date :date
t.datetime :postpone_till
t.timestamps
end
create_table :testimonials do |t|
t.integer :product_id
t.text :text
t.string :author
t.boolean :hidden, :default => false
t.integer :position
t.timestamps
t.datetime :deleted_at
end
create_table :testimonial_positions do |t|
t.integer :testimonial_id
t.integer :testimonial_location_id, :references => :allowed_values
t.integer :product_id
t.text :extract
t.integer :position
end
create_table :product_images do |t|
t.integer :product_id
t.string :image
t.string :alt
t.string :label
t.timestamps
end
create_table :screenshots do |t|
t.integer :product_id
t.string :image
t.string :alt
t.string :label
t.integer :position
t.timestamps
end
create_table :product_icons do |t|
t.integer :product_id
t.string :icon
t.integer :size
t.timestamps
end
create_table :latests do |t|
t.string :title
t.string :link
t.text :body
t.date :date
t.timestamps
t.datetime :deleted_at
end
create_table :faq_categories do |t|
t.integer :product_id
t.string :url_param
t.string :name
t.string :description
t.integer :position
t.timestamps
t.datetime :deleted_at
end
create_table :faqs do |t|
t.integer :faq_category_id
t.string :url_param
t.text :question
t.text :answer
t.boolean :featured, :default => false
t.integer :position
t.timestamps
t.datetime :deleted_at
end
create_table :support_requests do |t|
t.integer :support_request_origin_id, :references => :allowed_values
t.string :name
t.string :email
t.integer :product_id
t.string :subject
t.text :message
t.boolean :mail_sent, :default => false
t.timestamps
t.datetime :deleted_at
end
create_table :volume_discounts do |t|
t.integer :from
t.integer :to
t.integer :discount
t.timestamps
end
create_table :download_logs do |t|
t.integer :product_id
t.text :request
t.timestamp :created_at
end
create_table :meta_tags do |t|
t.string :path
t.string :title
t.text :keywords
t.text :description
t.timestamps
end
create_table :sitemap_titles do |t|
t.string :path
t.string :title
t.timestamps
end
create_table :static_pages do |t|
t.string :code
t.string :url_param
t.string :name
t.text :html
t.timestamps
t.datetime :deleted_at
end
add_index(:static_pages, :code, :unique => true)
end
def self.down
drop_table :static_pages
drop_table :sitemap_titles
drop_table :meta_tags
drop_table :download_logs
drop_table :volume_discounts
drop_table :support_requests
drop_table :faqs
drop_table :faq_categories
drop_table :latests
drop_table :product_icons
drop_table :product_screenshots
drop_table :product_images
drop_table :testimonial_positions
drop_table :testimonials
drop_table :releases
drop_table :product_url_params
drop_table :product_upgrades
drop_table :product_discounts
drop_table :product_editions
drop_table :product_offers
drop_table :product_pages
drop_table :product_descriptions
drop_table :products_promotions
drop_table :products
drop_table :product_categories
drop_table :allowed_values
drop_table :users
end
end

View File

@@ -0,0 +1,9 @@
class AddInternalCodeToProductOffer < ActiveRecord::Migration
def self.up
add_column :product_offers, :internal_code, :string
end
def self.down
remove_column :product_offers, :internal_code
end
end

View File

@@ -0,0 +1,15 @@
class CreatePageIncludes < ActiveRecord::Migration
def self.up
create_table :page_includes do |t|
t.string :path
t.string :description
t.text :inklude
t.timestamps
end
end
def self.down
drop_table :page_includes
end
end

View File

@@ -0,0 +1,16 @@
class ChangeProductUpgradesRelationships < ActiveRecord::Migration
def self.up
change_table :product_upgrades do |t|
t.remove :product_id
t.integer :upgradable_id, :references => nil
t.integer :upgradable_to_id, :references => nil
t.string :upgradable_type, :default => 'ProductEdition'
t.string :upgradable_to_type
end
ProductUpgrade.update_all(["upgradable_id = product_edition_id"])
remove_column :product_upgrades, :product_edition_id
end
def self.down
end
end

View File

@@ -0,0 +1,59 @@
class AddNewsletterEngine < ActiveRecord::Migration
def self.up
create_table :newsletter_allowed_values do |t|
t.string :type
t.string :code
t.string :value
t.integer :position
t.timestamps
t.datetime :deleted_at
end
create_table :contacts do |t|
t.string :email
t.string :first_name
t.string :last_name
t.string :country
t.integer :active_subscriptions, :default => 0
t.timestamps
t.datetime :deleted_at
end
create_table :subscription_lists do |t|
t.integer :subscription_list_type_id, :references => :newsletter_allowed_values
t.integer :product_id
t.string :name
t.timestamps
t.datetime :deleted_at
end
create_table :subscriptions do |t|
t.integer :subscription_list_id
t.integer :contact_id
t.datetime :started_at
t.datetime :ended_at
t.boolean :active, :default => true
t.timestamps
t.datetime :deleted_at
end
create_table :subscription_list_types_subscription_locations, :id => false, :primary_key => [:subscription_list_type_id, :subscription_location_id] do |t|
t.integer :subscription_list_type_id, :references => :newsletter_allowed_values
t.integer :subscription_location_id, :references => :newsletter_allowed_values
end
end
def self.down
drop_table :subscription_list_types_subscription_locations
drop_table :subscriptions
drop_table :subscription_lists
drop_table :contacts
end
end

View File

@@ -0,0 +1,9 @@
class AddLocationToSubscription < ActiveRecord::Migration
def self.up
add_column :subscriptions, :subscription_location_id, :integer, :references => :newsletter_allowed_values
end
def self.down
remove_column :subscriptions, :subscription_location_id
end
end

View File

@@ -0,0 +1,39 @@
class UploadColumnToPaperclip < ActiveRecord::Migration
include UploadColumnMigration
def self.up
add_paperclip_fields :products, :setup_file
Product.reset_column_information
Product.all.each do |product|
populate_paperclip_from_upload_column(product, File.join(Rails.root, "public", "files", "downloads"), product[:file], 'setup_file')
end
add_paperclip_fields :product_icons, :icon
ProductIcon.reset_column_information
ProductIcon.all.each do |icon|
ext = icon[:icon].split(".").last
populate_paperclip_from_upload_column(icon, File.join(Rails.root, "public", "files", "icons"), "#{icon.product.code}_#{icon.size}.#{ext}", 'icon')
end
add_paperclip_fields :screenshots, :image
Screenshot.reset_column_information
Screenshot.all.each do |screenshot|
populate_paperclip_from_upload_column(screenshot, File.join(Rails.root, "public", "files", "images"), screenshot[:image], 'image')
end
add_paperclip_fields :product_images, :image
ProductImage.reset_column_information
ProductImage.all.each do |product_image|
populate_paperclip_from_upload_column(product_image, File.join(Rails.root, "public", "files", "images"), product_image[:image], 'image')
end
end
def self.down
remove_paperclip_fields :products, :setup_file
remove_paperclip_fields :product_icons, :icon
remove_paperclip_fields :screenshots, :image
remove_paperclip_fields :product_images, :image
end
end

View File

@@ -0,0 +1,18 @@
class SetupFilesToCloudFront < ActiveRecord::Migration
include UploadColumnMigration
def self.up
setup_files_path = File.join(Rails.root, "public", "system", "setup_files")
puts "Uploading setup files to CloudFront... (this may take a while)"
Product.all.each do |product|
if product.setup_file.instance_variable_get(:@storage).to_s == 's3' && product.setup_file.file?
puts "Uploading #{product.setup_file.original_filename}..."
upload_to_s3(product.setup_file, File.join(setup_files_path, product.id.to_s, product.setup_file.original_filename), product.setup_file.path(:original))
end
end
end
def self.down
end
end

View File

@@ -0,0 +1,22 @@
class CreatePadValues < ActiveRecord::Migration
include PadImport
def self.up
create_table :pad_values do |t|
t.integer :product_id, :references => :products
t.string :key
t.text :value
t.timestamps
end
puts "Migrating existing PAD files to database..."
Product.all.each do |product|
import_pad(product) if product.setup_file.file?
end
end
def self.down
drop_table :pad_values
end
end

View File

@@ -0,0 +1,23 @@
class CreateArticles < ActiveRecord::Migration
def self.up
create_table :articles do |t|
t.string :title, :null => false
t.string :slug, :null => false
t.text :content, :null => false
t.date :date, :null => false
t.string :status, :default => 'draft'
t.string :keywords
t.text :custom_subtemplate
t.integer :screenshot_id
t.timestamps
t.datetime :deleted_at
end
add_index(:articles, :slug, :unique => true)
end
def self.down
drop_table :articles
end
end

View File

@@ -0,0 +1,15 @@
class CreateSubtemplates < ActiveRecord::Migration
def self.up
create_table :subtemplates do |t|
t.integer :subtemplate_type_id, :references => :allowed_values
t.string :name
t.text :content
t.timestamps
end
end
def self.down
drop_table :subtemplates
end
end

View File

@@ -0,0 +1,9 @@
class AddAnnounceToRelease < ActiveRecord::Migration
def self.up
add_column :releases, :announce, :boolean, :default => true
end
def self.down
remove_column :releases, :announce
end
end

View File

@@ -0,0 +1,74 @@
class CustomerTracking < ActiveRecord::Migration
def self.up
create_table :customers do |t|
t.string :first_name
t.string :last_name
t.string :email
t.string :company
t.text :customer_attributes
t.timestamps
t.datetime :deleted_at
end
create_table :orders do |t|
t.integer :customer_id
t.integer :orderable_id, :references => nil
t.string :orderable_type
t.text :license_key
t.text :order_attributes
t.timestamps
t.datetime :deleted_at
end
create_table :visitors do |t|
t.string :trackable_number
t.string :user_agent
t.timestamps
t.datetime :deleted_at
end
create_table :customers_visitors, :id => false, :primary_key => [:customer_id, :visitor_id] do |t|
t.integer :customer_id
t.integer :visitor_id
end
create_table :visitor_tracks do |t|
t.integer :visitor_id
t.text :track
t.integer :trackable_id, :references => nil
t.string :trackable_type
t.integer :source_type_id, :references => :allowed_values
t.string :source
t.string :url
t.string :keywords
t.string :targetable
t.boolean :download, :default => false
t.boolean :checkout, :default => false
t.boolean :order, :default => false
t.timestamps
end
create_table :redirects do |t|
t.integer :source_type_id, :references => :allowed_values
t.string :name
t.string :redirect_path, :null => false
t.string :redirect_to, :null => false
t.timestamps
end
end
def self.down
drop_table :customers
drop_table :orders
drop_table :visitors
drop_table :customers_visitors
drop_table :visitor_tracks
drop_table :redirects
end
end

View File

@@ -0,0 +1,24 @@
class CreateAutoresponders < ActiveRecord::Migration
def self.up
create_table :autoresponders do |t|
t.integer :subscription_list_id, :null => false
t.string :subject, :null => false
t.text :message, :null => false
t.integer :delay, :default => 0
t.timestamps
t.datetime :deleted_at
end
create_table :sent_autoresponders do |t|
t.integer :autoresponder_id, :null => false
t.integer :contact_id, :null => false
t.datetime :sent_at
end
end
def self.down
drop_table :autoresponders
drop_table :sent_autoresponders
end
end

View File

@@ -0,0 +1,15 @@
class CreateEmails < ActiveRecord::Migration
def self.up
create_table :emails do |t|
t.column :from, :string
t.column :to, :string
t.column :last_send_attempt, :integer, :default => 0
t.column :mail, :text
t.column :created_on, :datetime
end
end
def self.down
drop_table :emails
end
end

View File

@@ -0,0 +1,13 @@
class CreateSiteSettings < ActiveRecord::Migration
def self.up
create_table :site_settings do |t|
t.text :settings
t.timestamps
end
end
def self.down
drop_table :site_settings
end
end

View File

@@ -0,0 +1,9 @@
class AddExcludeFromAutoupdateToReleases < ActiveRecord::Migration
def self.up
add_column :releases, :exclude_from_autoupdate, :boolean, :default => false
end
def self.down
remove_column :releases, :exclude_from_autoupdate
end
end

View File

@@ -0,0 +1,16 @@
class CreateActivations < ActiveRecord::Migration
def self.up
create_table :activations do |t|
t.integer :order_id, :null => false
t.integer :build, :null => false
t.string :computer_id, :null => false, :references => nil
t.string :product
t.timestamps
end
end
def self.down
drop_table :activations
end
end

View File

@@ -0,0 +1,13 @@
class AddAttributesToActivations < ActiveRecord::Migration
def self.up
add_column :activations, :serial_key, :string
add_column :activations, :ip, :string
add_column :activations, :final_judgement, :text
end
def self.down
remove_column :activations, :serial_key
remove_column :activations, :ip
remove_column :activations, :final_judgement
end
end

View File

@@ -0,0 +1,19 @@
class CreateFailedActivations < ActiveRecord::Migration
def self.up
create_table :failed_activations do |t|
t.string :serial_key
t.integer :build
t.string :computer_id, :references => nil
t.string :product
t.string :ip
t.string :result
t.text :final_judgement
t.timestamps
end
end
def self.down
drop_table :failed_activations
end
end

View File

@@ -0,0 +1,19 @@
class CreateComics < ActiveRecord::Migration
def self.up
create_table :comics do |t|
t.date :publish_on, :null => false
t.string :image_file_name, :null => false
t.string :image_content_type
t.integer :image_file_size
t.datetime :image_updated_at
t.string :name
t.text :story
t.timestamps
end
end
def self.down
drop_table :comics
end
end

View File

@@ -0,0 +1,16 @@
class AddNumberToComics < ActiveRecord::Migration
def self.up
add_column :comics, :number, :integer, :null => false
number = 1
Comic.ordered.each do |comic|
comic.number = number
comic.save
number += 1
end
end
def self.down
remove_column :comics, :number
end
end

700
db/schema.rb Normal file
View File

@@ -0,0 +1,700 @@
# This file is auto-generated from the current state of the database. Instead of editing this file,
# please use the migrations feature of Active Record to incrementally modify your database, and
# then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your database schema. If you need
# to create the application database on another system, you should be using db:schema:load, not running
# all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20110802100859) do
create_table "activations", :force => true do |t|
t.integer "order_id", :null => false
t.integer "build", :null => false
t.string "computer_id", :null => false
t.string "product"
t.datetime "created_at"
t.datetime "updated_at"
t.string "serial_key"
t.string "ip"
t.text "final_judgement"
end
add_index "activations", ["order_id"], :name => "order_id"
create_table "allowed_values", :force => true do |t|
t.string "type"
t.string "code"
t.string "value"
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
create_table "articles", :force => true do |t|
t.string "title", :null => false
t.string "slug", :null => false
t.text "content", :null => false
t.date "date", :null => false
t.string "status", :default => "draft"
t.string "keywords"
t.text "custom_subtemplate"
t.integer "screenshot_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "articles", ["slug"], :name => "index_articles_on_slug", :unique => true
add_index "articles", ["screenshot_id"], :name => "screenshot_id"
create_table "autoresponders", :force => true do |t|
t.integer "subscription_list_id", :null => false
t.string "subject", :null => false
t.text "message", :null => false
t.integer "delay", :default => 0
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "autoresponders", ["subscription_list_id"], :name => "subscription_list_id"
create_table "comics", :force => true do |t|
t.date "publish_on", :null => false
t.string "image_file_name", :null => false
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.string "name"
t.text "story"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "number", :null => false
end
create_table "contacts", :force => true do |t|
t.string "email"
t.string "first_name"
t.string "last_name"
t.string "country"
t.integer "active_subscriptions", :default => 0
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
create_table "customers", :force => true do |t|
t.string "first_name"
t.string "last_name"
t.string "email"
t.string "company"
t.text "customer_attributes"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
create_table "customers_visitors", :id => false, :force => true do |t|
t.integer "customer_id"
t.integer "visitor_id"
end
add_index "customers_visitors", ["customer_id"], :name => "customer_id"
add_index "customers_visitors", ["visitor_id"], :name => "visitor_id"
create_table "download_logs", :force => true do |t|
t.integer "product_id"
t.text "request"
t.datetime "created_at"
end
add_index "download_logs", ["product_id"], :name => "product_id"
create_table "emails", :force => true do |t|
t.string "from"
t.string "to"
t.integer "last_send_attempt", :default => 0
t.text "mail"
t.datetime "created_on"
end
create_table "failed_activations", :force => true do |t|
t.string "serial_key"
t.integer "build"
t.string "computer_id"
t.string "product"
t.string "ip"
t.string "result"
t.text "final_judgement"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "faq_categories", :force => true do |t|
t.integer "product_id"
t.string "url_param"
t.string "name"
t.string "description"
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "faq_categories", ["product_id"], :name => "product_id"
create_table "faqs", :force => true do |t|
t.integer "faq_category_id"
t.string "url_param"
t.text "question"
t.text "answer"
t.boolean "featured", :default => false
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "faqs", ["faq_category_id"], :name => "faq_category_id"
create_table "latests", :force => true do |t|
t.string "title"
t.string "link"
t.text "body"
t.date "date"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
create_table "meta_tags", :force => true do |t|
t.string "path"
t.string "title"
t.text "keywords"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "newsletter_allowed_values", :force => true do |t|
t.string "type"
t.string "code"
t.string "value"
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
create_table "orders", :force => true do |t|
t.integer "customer_id"
t.integer "orderable_id"
t.string "orderable_type"
t.text "license_key"
t.text "order_attributes"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "orders", ["customer_id"], :name => "customer_id"
create_table "pad_values", :force => true do |t|
t.integer "product_id"
t.string "key"
t.text "value"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "pad_values", ["product_id"], :name => "product_id"
create_table "page_includes", :force => true do |t|
t.string "path"
t.string "description"
t.text "inklude"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "product_categories", :force => true do |t|
t.string "code"
t.string "name"
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "product_categories", ["code"], :name => "index_product_categories_on_code", :unique => true
create_table "product_descriptions", :force => true do |t|
t.integer "product_description_type_id"
t.integer "product_id"
t.string "title"
t.text "value"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "product_descriptions", ["product_description_type_id"], :name => "product_description_type_id"
add_index "product_descriptions", ["product_id"], :name => "product_id"
create_table "product_discounts", :force => true do |t|
t.integer "product_id"
t.integer "product_edition_id"
t.string "discount_type"
t.string "discount_code"
t.decimal "price", :precision => 10, :scale => 2
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "product_discounts", ["product_id"], :name => "product_id"
add_index "product_discounts", ["product_edition_id"], :name => "product_edition_id"
create_table "product_editions", :force => true do |t|
t.integer "product_id"
t.string "code"
t.string "internal_code"
t.integer "bmtID"
t.string "name"
t.text "description"
t.decimal "price", :precision => 10, :scale => 2
t.decimal "regular_price", :precision => 10, :scale => 2
t.boolean "initial", :default => false
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "product_editions", ["internal_code"], :name => "index_product_editions_on_internal_code", :unique => true
add_index "product_editions", ["product_id"], :name => "product_id"
create_table "product_icons", :force => true do |t|
t.integer "product_id"
t.string "icon"
t.integer "size"
t.datetime "created_at"
t.datetime "updated_at"
t.string "icon_file_name"
t.string "icon_content_type"
t.integer "icon_file_size"
t.datetime "icon_updated_at"
end
add_index "product_icons", ["product_id"], :name => "product_id"
create_table "product_images", :force => true do |t|
t.integer "product_id"
t.string "image"
t.string "alt"
t.string "label"
t.datetime "created_at"
t.datetime "updated_at"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
end
add_index "product_images", ["product_id"], :name => "product_id"
create_table "product_offers", :force => true do |t|
t.integer "product_id"
t.integer "related_product_id"
t.integer "bmtID"
t.string "name"
t.text "description"
t.decimal "price", :precision => 10, :scale => 2
t.datetime "begins_at"
t.datetime "expires_at"
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.string "internal_code"
end
add_index "product_offers", ["product_id"], :name => "product_id"
add_index "product_offers", ["related_product_id"], :name => "related_product_id"
create_table "product_pages", :force => true do |t|
t.integer "parent_id"
t.integer "product_id"
t.boolean "tab", :default => false
t.string "code"
t.string "name"
t.text "html"
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "product_pages", ["parent_id"], :name => "parent_id"
add_index "product_pages", ["product_id"], :name => "product_id"
create_table "product_upgrades", :force => true do |t|
t.string "upgrade_type"
t.string "bmtID"
t.decimal "price", :precision => 10, :scale => 2
t.datetime "created_at"
t.datetime "updated_at"
t.integer "upgradable_id"
t.integer "upgradable_to_id"
t.string "upgradable_type", :default => "ProductEdition"
t.string "upgradable_to_type"
end
create_table "product_url_params", :force => true do |t|
t.integer "product_id"
t.integer "url_destination_id"
t.string "url_param"
t.boolean "default", :default => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "product_url_params", ["product_id"], :name => "product_id"
add_index "product_url_params", ["url_destination_id"], :name => "url_destination_id"
create_table "products", :force => true do |t|
t.integer "product_category_id"
t.string "code"
t.string "internal_code"
t.string "file"
t.string "name"
t.string "label"
t.boolean "promoted", :default => false
t.boolean "homepage", :default => false
t.decimal "price", :precision => 10, :scale => 2
t.decimal "regular_price", :precision => 10, :scale => 2
t.integer "bmtID"
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
t.string "setup_file_file_name"
t.string "setup_file_content_type"
t.integer "setup_file_file_size"
t.datetime "setup_file_updated_at"
end
add_index "products", ["code"], :name => "index_products_on_code", :unique => true
add_index "products", ["internal_code"], :name => "index_products_on_internal_code", :unique => true
add_index "products", ["product_category_id"], :name => "product_category_id"
create_table "products_promotions", :id => false, :force => true do |t|
t.integer "product_id"
t.integer "promotion_id"
end
add_index "products_promotions", ["product_id"], :name => "product_id"
add_index "products_promotions", ["promotion_id"], :name => "promotion_id"
create_table "redirects", :force => true do |t|
t.integer "source_type_id"
t.string "name"
t.string "redirect_path", :null => false
t.string "redirect_to", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "redirects", ["source_type_id"], :name => "source_type_id"
create_table "releases", :force => true do |t|
t.integer "product_id"
t.string "version"
t.integer "build"
t.text "description"
t.text "changelog"
t.date "date"
t.datetime "postpone_till"
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "announce", :default => true
t.boolean "exclude_from_autoupdate", :default => false
end
add_index "releases", ["product_id"], :name => "product_id"
create_table "screenshots", :force => true do |t|
t.integer "product_id"
t.string "image"
t.string "alt"
t.string "label"
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
end
add_index "screenshots", ["product_id"], :name => "product_id"
create_table "sent_autoresponders", :force => true do |t|
t.integer "autoresponder_id", :null => false
t.integer "contact_id", :null => false
t.datetime "sent_at"
end
add_index "sent_autoresponders", ["autoresponder_id"], :name => "autoresponder_id"
add_index "sent_autoresponders", ["contact_id"], :name => "contact_id"
create_table "site_settings", :force => true do |t|
t.text "settings"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "sitemap_titles", :force => true do |t|
t.string "path"
t.string "title"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "static_pages", :force => true do |t|
t.string "code"
t.string "url_param"
t.string "name"
t.text "html"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "static_pages", ["code"], :name => "index_static_pages_on_code", :unique => true
create_table "subscription_list_types_subscription_locations", :id => false, :force => true do |t|
t.integer "subscription_list_type_id"
t.integer "subscription_location_id"
end
add_index "subscription_list_types_subscription_locations", ["subscription_list_type_id"], :name => "subscription_list_type_id"
add_index "subscription_list_types_subscription_locations", ["subscription_location_id"], :name => "subscription_location_id"
create_table "subscription_lists", :force => true do |t|
t.integer "subscription_list_type_id"
t.integer "product_id"
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "subscription_lists", ["subscription_list_type_id"], :name => "subscription_list_type_id"
add_index "subscription_lists", ["product_id"], :name => "product_id"
create_table "subscriptions", :force => true do |t|
t.integer "subscription_list_id"
t.integer "contact_id"
t.datetime "started_at"
t.datetime "ended_at"
t.boolean "active", :default => true
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
t.integer "subscription_location_id"
end
add_index "subscriptions", ["subscription_list_id"], :name => "subscription_list_id"
add_index "subscriptions", ["contact_id"], :name => "contact_id"
add_index "subscriptions", ["subscription_location_id"], :name => "subscription_location_id"
create_table "subtemplates", :force => true do |t|
t.integer "subtemplate_type_id"
t.string "name"
t.text "content"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "subtemplates", ["subtemplate_type_id"], :name => "subtemplate_type_id"
create_table "support_requests", :force => true do |t|
t.integer "support_request_origin_id"
t.string "name"
t.string "email"
t.integer "product_id"
t.string "subject"
t.text "message"
t.boolean "mail_sent", :default => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "support_requests", ["support_request_origin_id"], :name => "support_request_origin_id"
add_index "support_requests", ["product_id"], :name => "product_id"
create_table "testimonial_positions", :force => true do |t|
t.integer "testimonial_id"
t.integer "testimonial_location_id"
t.integer "product_id"
t.text "extract"
t.integer "position"
end
add_index "testimonial_positions", ["testimonial_id"], :name => "testimonial_id"
add_index "testimonial_positions", ["testimonial_location_id"], :name => "testimonial_location_id"
add_index "testimonial_positions", ["product_id"], :name => "product_id"
create_table "testimonials", :force => true do |t|
t.integer "product_id"
t.text "text"
t.string "author"
t.boolean "hidden", :default => false
t.integer "position"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
add_index "testimonials", ["product_id"], :name => "product_id"
create_table "users", :force => true do |t|
t.string "first_name"
t.string "last_name"
t.string "login", :null => false
t.string "email", :null => false
t.string "crypted_password", :null => false
t.string "password_salt", :null => false
t.string "persistence_token", :null => false
t.string "single_access_token", :null => false
t.string "perishable_token", :null => false
t.integer "login_count", :default => 0, :null => false
t.integer "failed_login_count", :default => 0, :null => false
t.datetime "last_request_at"
t.datetime "current_login_at"
t.datetime "last_login_at"
t.string "current_login_ip"
t.string "last_login_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
create_table "visitor_tracks", :force => true do |t|
t.integer "visitor_id"
t.text "track"
t.integer "trackable_id"
t.string "trackable_type"
t.integer "source_type_id"
t.string "source"
t.string "url"
t.string "keywords"
t.string "targetable"
t.boolean "download", :default => false
t.boolean "checkout", :default => false
t.boolean "order", :default => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "visitor_tracks", ["visitor_id"], :name => "visitor_id"
add_index "visitor_tracks", ["source_type_id"], :name => "source_type_id"
create_table "visitors", :force => true do |t|
t.string "trackable_number"
t.string "user_agent"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "deleted_at"
end
create_table "volume_discounts", :force => true do |t|
t.integer "from"
t.integer "to"
t.integer "discount"
t.datetime "created_at"
t.datetime "updated_at"
end
add_foreign_key "activations", ["order_id"], "orders", ["id"], :name => "activations_ibfk_1"
add_foreign_key "articles", ["screenshot_id"], "screenshots", ["id"], :name => "articles_ibfk_1"
add_foreign_key "autoresponders", ["subscription_list_id"], "subscription_lists", ["id"], :name => "autoresponders_ibfk_1"
add_foreign_key "customers_visitors", ["customer_id"], "customers", ["id"], :name => "customers_visitors_ibfk_1"
add_foreign_key "customers_visitors", ["visitor_id"], "visitors", ["id"], :name => "customers_visitors_ibfk_2"
add_foreign_key "download_logs", ["product_id"], "products", ["id"], :name => "download_logs_ibfk_1"
add_foreign_key "faq_categories", ["product_id"], "products", ["id"], :name => "faq_categories_ibfk_1"
add_foreign_key "faqs", ["faq_category_id"], "faq_categories", ["id"], :name => "faqs_ibfk_1"
add_foreign_key "orders", ["customer_id"], "customers", ["id"], :name => "orders_ibfk_1"
add_foreign_key "pad_values", ["product_id"], "products", ["id"], :name => "pad_values_ibfk_1"
add_foreign_key "product_descriptions", ["product_description_type_id"], "allowed_values", ["id"], :name => "product_descriptions_ibfk_1"
add_foreign_key "product_descriptions", ["product_id"], "products", ["id"], :name => "product_descriptions_ibfk_2"
add_foreign_key "product_discounts", ["product_id"], "products", ["id"], :name => "product_discounts_ibfk_1"
add_foreign_key "product_discounts", ["product_edition_id"], "product_editions", ["id"], :name => "product_discounts_ibfk_2"
add_foreign_key "product_editions", ["product_id"], "products", ["id"], :name => "product_editions_ibfk_1"
add_foreign_key "product_icons", ["product_id"], "products", ["id"], :name => "product_icons_ibfk_1"
add_foreign_key "product_images", ["product_id"], "products", ["id"], :name => "product_images_ibfk_1"
add_foreign_key "product_offers", ["product_id"], "products", ["id"], :name => "product_offers_ibfk_1"
add_foreign_key "product_offers", ["related_product_id"], "products", ["id"], :name => "product_offers_ibfk_2"
add_foreign_key "product_pages", ["parent_id"], "product_pages", ["id"], :name => "product_pages_ibfk_1"
add_foreign_key "product_pages", ["product_id"], "products", ["id"], :name => "product_pages_ibfk_2"
add_foreign_key "product_url_params", ["product_id"], "products", ["id"], :name => "product_url_params_ibfk_1"
add_foreign_key "product_url_params", ["url_destination_id"], "allowed_values", ["id"], :name => "product_url_params_ibfk_2"
add_foreign_key "products", ["product_category_id"], "product_categories", ["id"], :name => "products_ibfk_1"
add_foreign_key "products_promotions", ["product_id"], "products", ["id"], :name => "products_promotions_ibfk_1"
add_foreign_key "products_promotions", ["promotion_id"], "allowed_values", ["id"], :name => "products_promotions_ibfk_2"
add_foreign_key "redirects", ["source_type_id"], "allowed_values", ["id"], :name => "redirects_ibfk_1"
add_foreign_key "releases", ["product_id"], "products", ["id"], :name => "releases_ibfk_1"
add_foreign_key "screenshots", ["product_id"], "products", ["id"], :name => "screenshots_ibfk_1"
add_foreign_key "sent_autoresponders", ["autoresponder_id"], "autoresponders", ["id"], :name => "sent_autoresponders_ibfk_1"
add_foreign_key "sent_autoresponders", ["contact_id"], "contacts", ["id"], :name => "sent_autoresponders_ibfk_2"
add_foreign_key "subscription_list_types_subscription_locations", ["subscription_list_type_id"], "newsletter_allowed_values", ["id"], :name => "subscription_list_types_subscription_locations_ibfk_1"
add_foreign_key "subscription_list_types_subscription_locations", ["subscription_location_id"], "newsletter_allowed_values", ["id"], :name => "subscription_list_types_subscription_locations_ibfk_2"
add_foreign_key "subscription_lists", ["subscription_list_type_id"], "newsletter_allowed_values", ["id"], :name => "subscription_lists_ibfk_1"
add_foreign_key "subscription_lists", ["product_id"], "products", ["id"], :name => "subscription_lists_ibfk_2"
add_foreign_key "subscriptions", ["subscription_location_id"], "newsletter_allowed_values", ["id"], :name => "subscriptions_ibfk_3"
add_foreign_key "subscriptions", ["subscription_list_id"], "subscription_lists", ["id"], :name => "subscriptions_ibfk_1"
add_foreign_key "subscriptions", ["contact_id"], "contacts", ["id"], :name => "subscriptions_ibfk_2"
add_foreign_key "subtemplates", ["subtemplate_type_id"], "allowed_values", ["id"], :name => "subtemplates_ibfk_1"
add_foreign_key "support_requests", ["support_request_origin_id"], "allowed_values", ["id"], :name => "support_requests_ibfk_1"
add_foreign_key "support_requests", ["product_id"], "products", ["id"], :name => "support_requests_ibfk_2"
add_foreign_key "testimonial_positions", ["testimonial_id"], "testimonials", ["id"], :name => "testimonial_positions_ibfk_1"
add_foreign_key "testimonial_positions", ["testimonial_location_id"], "allowed_values", ["id"], :name => "testimonial_positions_ibfk_2"
add_foreign_key "testimonial_positions", ["product_id"], "products", ["id"], :name => "testimonial_positions_ibfk_3"
add_foreign_key "testimonials", ["product_id"], "products", ["id"], :name => "testimonials_ibfk_1"
add_foreign_key "visitor_tracks", ["visitor_id"], "visitors", ["id"], :name => "visitor_tracks_ibfk_1"
add_foreign_key "visitor_tracks", ["source_type_id"], "allowed_values", ["id"], :name => "visitor_tracks_ibfk_2"
end