Archive: ComponentOwl Rails app, DB backups, go redirect script
This commit is contained in:
104
db/import/allowed_values.yml
Normal file
104
db/import/allowed_values.yml
Normal 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
|
||||
1
db/import/faqs/questions.csv
Normal file
1
db/import/faqs/questions.csv
Normal file
@@ -0,0 +1 @@
|
||||
"product_code","faq_category_url_param","url_param","question","featured","position"
|
||||
|
150
db/import/product_pages/better-listview_features.erb
Normal file
150
db/import/product_pages/better-listview_features.erb
Normal 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 & 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 “Details” layout</td>
|
||||
<td>Columns can be shown in all layouts</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Only “SmallIcon” and “LargeIcon” 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’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 & 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>
|
||||
191
db/import/product_pages/better-listview_pricing-licensing.erb
Normal file
191
db/import/product_pages/better-listview_pricing-licensing.erb
Normal file
@@ -0,0 +1,191 @@
|
||||
<h1>Licensing & 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>
|
||||
9
db/import/product_pages/better-listview_screenshots.erb
Normal file
9
db/import/product_pages/better-listview_screenshots.erb
Normal 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>
|
||||
91
db/import/product_pages/better-listview_story.erb
Normal file
91
db/import/product_pages/better-listview_story.erb
Normal file
@@ -0,0 +1,91 @@
|
||||
<h2>The story behind Better Listview</h2>
|
||||
|
||||
<p>Hi, my name is Jiri Novotny and I’m 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 we’ve 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 didn’t 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 I’ve oftentimes wished I could just use the ListView included in VB6 –
|
||||
it has at least behaved mostly correctly.</p>
|
||||
|
||||
<p>So, because we couldn’t 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, I‘ve soon discovered that in reality, I want lots of things that are not taken for granted in any ListView control that I’ve 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 & 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 I’ve 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 can’t really replace ListView control – it is much harder to manipulate for the user in most
|
||||
cases, and it doesn’t 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>I’ve looked over dozen of ListView controls – and I’m not afraid to name them, because they just don’t 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, I’ve 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 I‘ve 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 couldn’t settle
|
||||
for anything less than great.</p>
|
||||
|
||||
<p>But we haven’t given up. The solution? To create our own ListView control. A Better ListView control. It was not originally intended to be
|
||||
a product on it’s 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 we’ve 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.
|
||||
We’ve 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>We’ve met Libor Tinka, a genius C# developer with extensive experience with not just programming in general, but specifically Windows
|
||||
control development as well. He’s the author and sole developer of ImagingShop, a powerful digital photography processing desktop application
|
||||
that includes many of his custom controls, and lot’s 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. He’s an artist.</p>
|
||||
|
||||
<p>When we’ve 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 control‘s behavior that it will make your brain want run away.)</p>
|
||||
|
||||
<p>We’ve 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 Libor’s 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 –
|
||||
it’s 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 you’ve found it.</p>
|
||||
|
||||
<p>Any questions or comments? I would love to get them. Contact me at novotny@dextronet.com
|
||||
4
db/import/product_pages/product_pages.csv
Normal file
4
db/import/product_pages/product_pages.csv
Normal 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 & Licensing",0,1
|
||||
|
51
db/import/static_pages/about.erb
Normal file
51
db/import/static_pages/about.erb
Normal 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 don’t 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 won’t 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>
|
||||
346
db/import/static_pages/customer-service.erb
Normal file
346
db/import/static_pages/customer-service.erb
Normal 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>
|
||||
21
db/import/static_pages/disclaimer.erb
Normal file
21
db/import/static_pages/disclaimer.erb
Normal 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>
|
||||
1
db/import/static_pages/eula.erb
Normal file
1
db/import/static_pages/eula.erb
Normal file
@@ -0,0 +1 @@
|
||||
<h1>EULA</h1>
|
||||
108
db/import/static_pages/home-blv20.erb
Normal file
108
db/import/static_pages/home-blv20.erb
Normal 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 & 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>“Better List View is <b>awesome</b>.” – 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. It’s 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. We’ve 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>
|
||||
107
db/import/static_pages/home.erb
Normal file
107
db/import/static_pages/home.erb
Normal file
@@ -0,0 +1,107 @@
|
||||
<h2>Why is Better ListView the best ListView replacement component for .NET?</h2>
|
||||
<p class="intro">Let’s 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 we’ve 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, we’ve 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 & 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 & 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. We’ve 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 —
|
||||
<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>
|
||||
46
db/import/static_pages/privacy-policy.erb
Normal file
46
db/import/static_pages/privacy-policy.erb
Normal 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>
|
||||
9
db/import/static_pages/static_pages.csv
Normal file
9
db/import/static_pages/static_pages.csv
Normal 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"
|
||||
|
332
db/migrate/20090713163655_initial_migration.rb
Normal file
332
db/migrate/20090713163655_initial_migration.rb
Normal 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
|
||||
@@ -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
|
||||
15
db/migrate/20100524184938_create_page_includes.rb
Normal file
15
db/migrate/20100524184938_create_page_includes.rb
Normal 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
|
||||
@@ -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
|
||||
59
db/migrate/20100629062929_add_newsletter_engine.rb
Normal file
59
db/migrate/20100629062929_add_newsletter_engine.rb
Normal 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
|
||||
@@ -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
|
||||
39
db/migrate/20100728060310_upload_column_to_paperclip.rb
Normal file
39
db/migrate/20100728060310_upload_column_to_paperclip.rb
Normal 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
|
||||
18
db/migrate/20100808085226_setup_files_to_cloud_front.rb
Normal file
18
db/migrate/20100808085226_setup_files_to_cloud_front.rb
Normal 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
|
||||
22
db/migrate/20100818082747_create_pad_values.rb
Normal file
22
db/migrate/20100818082747_create_pad_values.rb
Normal 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
|
||||
23
db/migrate/20100819135437_create_articles.rb
Normal file
23
db/migrate/20100819135437_create_articles.rb
Normal 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
|
||||
15
db/migrate/20100819140017_create_subtemplates.rb
Normal file
15
db/migrate/20100819140017_create_subtemplates.rb
Normal 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
|
||||
9
db/migrate/20101010101010_add_announce_to_release.rb
Normal file
9
db/migrate/20101010101010_add_announce_to_release.rb
Normal 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
|
||||
74
db/migrate/20101010145127_customer_tracking.rb
Normal file
74
db/migrate/20101010145127_customer_tracking.rb
Normal 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
|
||||
24
db/migrate/20101102185849_create_autoresponders.rb
Normal file
24
db/migrate/20101102185849_create_autoresponders.rb
Normal 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
|
||||
15
db/migrate/20101103125852_create_emails.rb
Normal file
15
db/migrate/20101103125852_create_emails.rb
Normal 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
|
||||
13
db/migrate/20101103181314_create_site_settings.rb
Normal file
13
db/migrate/20101103181314_create_site_settings.rb
Normal 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
|
||||
@@ -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
|
||||
16
db/migrate/20101203131634_create_activations.rb
Normal file
16
db/migrate/20101203131634_create_activations.rb
Normal 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
|
||||
13
db/migrate/20101207141645_add_attributes_to_activations.rb
Normal file
13
db/migrate/20101207141645_add_attributes_to_activations.rb
Normal 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
|
||||
19
db/migrate/20101207170801_create_failed_activations.rb
Normal file
19
db/migrate/20101207170801_create_failed_activations.rb
Normal 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
|
||||
19
db/migrate/20110730141514_create_comics.rb
Normal file
19
db/migrate/20110730141514_create_comics.rb
Normal 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
|
||||
16
db/migrate/20110802100859_add_number_to_comics.rb
Normal file
16
db/migrate/20110802100859_add_number_to_comics.rb
Normal 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
700
db/schema.rb
Normal 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
|
||||
Reference in New Issue
Block a user