Saphali Woocommerce Russian - Version 1.0

Version Description

  • Woocommerce ( + ).
  • (.), (.) (.)
  • . , . / .
  • .

=

Download this release

Release Info

Developer Saphali
Plugin Icon wp plugin Saphali Woocommerce Russian
Version 1.0
Comparing to
See all releases

Version 1.0

count-column.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?
2
+ if(isset($_POST['column_count_saphali'])) {
3
+ if(empty($_POST["clear"])) {
4
+ if(!empty($_POST["column_count_saphali"])) {
5
+ if(!update_option('column_count_saphali',$_POST['column_count_saphali'])) add_option('column_count_saphali',$_POST['column_count_saphali']);
6
+ }
7
+ } else delete_option('column_count_saphali');
8
+ }
9
+
10
+ ?>
11
+ <form action="" method="POST">
12
+ Количество колонок: <input value='<?=get_option('column_count_saphali'); ?>' type="text" name="column_count_saphali" />
13
+ <div class='clear'></div>
14
+ <input type="submit" class="button alignleft" value="Сохранить"/>
15
+ </form>
16
+ <form action="" method="POST"><input type="hidden" name="column_count_saphali" value="1"/><input type="hidden" name="clear" value="1"/><input type="submit" class="button alignright" value="Сброс на умолчание"/></form>
go_pro.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php echo wpautop('<span style="color: #ff0000;"><strong>У вас установлена бесплатная версия Saphali Woocommerce LITE</strong></span>
2
+
3
+ Плагин вносит в магазин следующие дополнения:
4
+ 1. Улучшенная русская локализация Woocommerce.
5
+ 2. В общий список валют добавлены — Украинская гривна (грн.), Русский рубль (руб.) и Белорусский рубль (руб.)
6
+ 3. Управление полями на странице заказа и на странице профиля. Функция позволяет настроить заказную форму регистрации, чтобы настроить магазин на упрощенение оформления заказа. Вы можете сделать некоторые поля необязательными при регистрации/оформленнии заказа либо удалить их полностью.
7
+ 4. Управление количеством колонок в каталоге товаров и рубриках.
8
+
9
+ Мы открыты для ваших предложений. Ваши идеи, предложения и пожелания по улучшению Lite версии пишите на saphali@ukr.net. Возможно, именно Ваше предложение добавит новые возможности. Если вы заметили какие-либо неточности перевода или ошибки, сообщите нам об этом, и в ближайшее время исправления будут добавлены в плагин.
10
+
11
+ <h2>Другие платные версии Saphali Woocommerce</h2>
12
+
13
+ <strong>Saphali Woocommerce STANDARD</strong>
14
+ Плагин вносит в магазин следующие дополнения:
15
+ 1. Улучшенная русская локализация Woocommerce.
16
+ 2. В общий список валют добавлены — Украинская гривна (грн.), Российский рубль (руб.) и Белорусский рубль (руб.)
17
+ 3. Управление полями на странице заказа и на странице профиля. Функция позволяет настроить заказную форму регистрации, чтобы настроить магазин на упрощенение оформления заказа. Вы можете сделать некоторые поля необязательными при регистрации/оформленнии заказа либо удалить их полностью.
18
+
19
+ 4. Дополнительные методы оплаты - Приват24, LiqPay (прием оплаты с карт VISA и MasterCard), WebMoney, Яндекс.Деньги, ROBOKASSA, QIWI.
20
+ 5. Импорт / Экспорт товаров из прайсов.
21
+ 6. Экспорт товаров WooCommerce в Яндекс.Маркет (Yandex.Market) в формате YML.
22
+ 7. Поиск по заказным полям (позволяет искать товары по артикулу, цене, свойствам товара и т.д.)
23
+ 8. Скрытие цен. Функция позволяет переключить интернет-магазин в режим каталога - только просмотр, заказ возможен только после регистрации и утверждения администратором.
24
+ 9. Оптовые цены.
25
+ 10. Дополнительная вкладка (таб) «Видео» с возможностью добавления видео как через embed-код, так и через специальную кнопку для быстрого добавления видео с таких сервисов как YouTube, Vimeo и др. (интеграция с плагином Viper’s Video Quicktags).
26
+ 11. Защита изображений от воровства. Наложения водяных знаков (watermark) на изображения товаров.
27
+ 12. Защита авторского права. Блокировка правой кнопки мышки.
28
+ 13. Виджет "Обратный звонок".
29
+ Подробнее на сайте <strong><a href="http://saphali.com/saphali-woocommerce-plugin-wordpress" target="_blank">saphali.com</a></strong>
30
+
31
+
32
+ <strong>Saphali Woocommerce PLUS</strong>
33
+ Плагин вносит в магазин следующие дополнения:
34
+ 1. Все функции перечисленные в версии Saphali Woocommerce STANDARD.
35
+ 2. Фильтры по техническим параметрам (по свойствам). Фильтры можно задействовать в каталоге (и категориях), если у товаров заполнены какие-либо дополнительные характеристики.
36
+ 3. Функция "Быстрый заказ".
37
+ 4. Виджет "Фильтр по цене" — удобный регулятор ценового диапазона, с ползунками.
38
+ 5. Функция "Сравнение товаров".
39
+ 6. Список желаний.
40
+ 7. Функция «Уведомить когда будет в наличии», если товара нет в наличии.
41
+ 8. Последние просмотренные товары.
42
+ 9. «Отложить (пометить) товар» — чтобы посетитель, когда зайдет в следующий раз, мог быстро его найти.
43
+ 10. Форсированные продажи. Позволяет связять с основным товаром другие товары/услуги, при добавлении основного товара в корзину, добавляется вся цепь из товаров).
44
+ 11. Комбинированные товары. Позволяет продавать комплекты товаров по особой цене. Например, в качестве "бонуса" к основному товару предложите еще один товар бесплатно (как подарок).
45
+ 12. Минимальное количество заказываемого товара.
46
+ Подробнее на сайте <strong><a href="http://saphali.com/saphali-woocommerce-plugin-wordpress" target="_blank">saphali.com</a></strong>
47
+
48
+
49
+ <strong>Saphali Woocommerce VIDEO</strong>
50
+ Плагин позволяет продавать видеоконтент, например, обучающие курсы.
51
+ Плагин вносит в магазин следующие дополнения:
52
+ 1. Все функции перечисленные в версии Saphali Woocommerce STANDARD.
53
+ 2. Открывает видеоролик (плеер) лайтбоксом при клике на изображение (превью) товара.
54
+ 3. Генерирование тумбнейлов (превью товара) из ваших YouTube, Vimeo... роликов в товарной записи.
55
+ 4. Комбинированные товары - позволяет формировать комплекты из нескольких видеокурсов и продавать по специальной цене.
56
+ 5. Демо-просмотр видеоролика на заданное количество минут.
57
+ Подробнее на сайте <strong><a href="http://saphali.com/saphali-woocommerce-plugin-wordpress" target="_blank">saphali.com</a></strong>
58
+ ');
59
+ ?>
js/jquery.tablednd.0.5.js ADDED
@@ -0,0 +1,382 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * TableDnD plug-in for JQuery, allows you to drag and drop table rows
3
+ * You can set up various options to control how the system will work
4
+ * Copyright (c) Denis Howlett <denish@isocra.com>
5
+ * Licensed like jQuery, see http://docs.jquery.com/License.
6
+ *
7
+ * Configuration options:
8
+ *
9
+ * onDragStyle
10
+ * This is the style that is assigned to the row during drag. There are limitations to the styles that can be
11
+ * associated with a row (such as you can't assign a border--well you can, but it won't be
12
+ * displayed). (So instead consider using onDragClass.) The CSS style to apply is specified as
13
+ * a map (as used in the jQuery css(...) function).
14
+ * onDropStyle
15
+ * This is the style that is assigned to the row when it is dropped. As for onDragStyle, there are limitations
16
+ * to what you can do. Also this replaces the original style, so again consider using onDragClass which
17
+ * is simply added and then removed on drop.
18
+ * onDragClass
19
+ * This class is added for the duration of the drag and then removed when the row is dropped. It is more
20
+ * flexible than using onDragStyle since it can be inherited by the row cells and other content. The default
21
+ * is class is tDnD_whileDrag. So to use the default, simply customise this CSS class in your
22
+ * stylesheet.
23
+ * onDrop
24
+ * Pass a function that will be called when the row is dropped. The function takes 2 parameters: the table
25
+ * and the row that was dropped. You can work out the new order of the rows by using
26
+ * table.rows.
27
+ * onDragStart
28
+ * Pass a function that will be called when the user starts dragging. The function takes 2 parameters: the
29
+ * table and the row which the user has started to drag.
30
+ * onAllowDrop
31
+ * Pass a function that will be called as a row is over another row. If the function returns true, allow
32
+ * dropping on that row, otherwise not. The function takes 2 parameters: the dragged row and the row under
33
+ * the cursor. It returns a boolean: true allows the drop, false doesn't allow it.
34
+ * scrollAmount
35
+ * This is the number of pixels to scroll if the user moves the mouse cursor to the top or bottom of the
36
+ * window. The page should automatically scroll up or down as appropriate (tested in IE6, IE7, Safari, FF2,
37
+ * FF3 beta
38
+ * dragHandle
39
+ * This is the name of a class that you assign to one or more cells in each row that is draggable. If you
40
+ * specify this class, then you are responsible for setting cursor: move in the CSS and only these cells
41
+ * will have the drag behaviour. If you do not specify a dragHandle, then you get the old behaviour where
42
+ * the whole row is draggable.
43
+ *
44
+ * Other ways to control behaviour:
45
+ *
46
+ * Add class="nodrop" to any rows for which you don't want to allow dropping, and class="nodrag" to any rows
47
+ * that you don't want to be draggable.
48
+ *
49
+ * Inside the onDrop method you can also call $.tableDnD.serialize() this returns a string of the form
50
+ * <tableID>[]=<rowID1>&<tableID>[]=<rowID2> so that you can send this back to the server. The table must have
51
+ * an ID as must all the rows.
52
+ *
53
+ * Other methods:
54
+ *
55
+ * $("...").tableDnDUpdate()
56
+ * Will update all the matching tables, that is it will reapply the mousedown method to the rows (or handle cells).
57
+ * This is useful if you have updated the table rows using Ajax and you want to make the table draggable again.
58
+ * The table maintains the original configuration (so you don't have to specify it again).
59
+ *
60
+ * $("...").tableDnDSerialize()
61
+ * Will serialize and return the serialized string as above, but for each of the matching tables--so it can be
62
+ * called from anywhere and isn't dependent on the currentTable being set up correctly before calling
63
+ *
64
+ * Known problems:
65
+ * - Auto-scoll has some problems with IE7 (it scrolls even when it shouldn't), work-around: set scrollAmount to 0
66
+ *
67
+ * Version 0.2: 2008-02-20 First public version
68
+ * Version 0.3: 2008-02-07 Added onDragStart option
69
+ * Made the scroll amount configurable (default is 5 as before)
70
+ * Version 0.4: 2008-03-15 Changed the noDrag/noDrop attributes to nodrag/nodrop classes
71
+ * Added onAllowDrop to control dropping
72
+ * Fixed a bug which meant that you couldn't set the scroll amount in both directions
73
+ * Added serialize method
74
+ * Version 0.5: 2008-05-16 Changed so that if you specify a dragHandle class it doesn't make the whole row
75
+ * draggable
76
+ * Improved the serialize method to use a default (and settable) regular expression.
77
+ * Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table
78
+ */
79
+ jQuery.tableDnD = {
80
+ /** Keep hold of the current table being dragged */
81
+ currentTable : null,
82
+ /** Keep hold of the current drag object if any */
83
+ dragObject: null,
84
+ /** The current mouse offset */
85
+ mouseOffset: null,
86
+ /** Remember the old value of Y so that we don't do too much processing */
87
+ oldY: 0,
88
+
89
+ /** Actually build the structure */
90
+ build: function(options) {
91
+ // Set up the defaults if any
92
+
93
+ this.each(function() {
94
+ // This is bound to each matching table, set up the defaults and override with user options
95
+ this.tableDnDConfig = jQuery.extend({
96
+ onDragStyle: null,
97
+ onDropStyle: null,
98
+ // Add in the default class for whileDragging
99
+ onDragClass: "tDnD_whileDrag",
100
+ onDrop: null,
101
+ onDragStart: null,
102
+ scrollAmount: 5,
103
+ serializeRegexp: /[^\-]*$/, // The regular expression to use to trim row IDs
104
+ serializeParamName: null, // If you want to specify another parameter name instead of the table ID
105
+ dragHandle: null // If you give the name of a class here, then only Cells with this class will be draggable
106
+ }, options || {});
107
+ // Now make the rows draggable
108
+ jQuery.tableDnD.makeDraggable(this);
109
+ });
110
+
111
+ // Now we need to capture the mouse up and mouse move event
112
+ // We can use bind so that we don't interfere with other event handlers
113
+ jQuery(document)
114
+ .bind('mousemove', jQuery.tableDnD.mousemove)
115
+ .bind('mouseup', jQuery.tableDnD.mouseup);
116
+
117
+ // Don't break the chain
118
+ return this;
119
+ },
120
+
121
+ /** This function makes all the rows on the table draggable apart from those marked as "NoDrag" */
122
+ makeDraggable: function(table) {
123
+ var config = table.tableDnDConfig;
124
+ if (table.tableDnDConfig.dragHandle) {
125
+ // We only need to add the event to the specified cells
126
+ var cells = jQuery("td."+table.tableDnDConfig.dragHandle, table);
127
+ cells.each(function() {
128
+ // The cell is bound to "this"
129
+ jQuery(this).mousedown(function(ev) {
130
+ jQuery.tableDnD.dragObject = this.parentNode;
131
+ jQuery.tableDnD.currentTable = table;
132
+ jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
133
+ if (config.onDragStart) {
134
+ // Call the onDrop method if there is one
135
+ config.onDragStart(table, this);
136
+ }
137
+ return false;
138
+ });
139
+ })
140
+ } else {
141
+ // For backwards compatibility, we add the event to the whole row
142
+ var rows = jQuery("tr", table); // get all the rows as a wrapped set
143
+ rows.each(function() {
144
+ // Iterate through each row, the row is bound to "this"
145
+ var row = jQuery(this);
146
+ if (! row.hasClass("nodrag")) {
147
+ row.mousedown(function(ev) {
148
+ if (ev.target.tagName == "TD") {
149
+ jQuery.tableDnD.dragObject = this;
150
+ jQuery.tableDnD.currentTable = table;
151
+ jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
152
+ if (config.onDragStart) {
153
+ // Call the onDrop method if there is one
154
+ config.onDragStart(table, this);
155
+ }
156
+ return false;
157
+ }
158
+ }).css("cursor", "move"); // Store the tableDnD object
159
+ }
160
+ });
161
+ }
162
+ },
163
+
164
+ updateTables: function() {
165
+ this.each(function() {
166
+ // this is now bound to each matching table
167
+ if (this.tableDnDConfig) {
168
+ jQuery.tableDnD.makeDraggable(this);
169
+ }
170
+ })
171
+ },
172
+
173
+ /** Get the mouse coordinates from the event (allowing for browser differences) */
174
+ mouseCoords: function(ev){
175
+ if(ev.pageX || ev.pageY){
176
+ return {x:ev.pageX, y:ev.pageY};
177
+ }
178
+ return {
179
+ x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
180
+ y:ev.clientY + document.body.scrollTop - document.body.clientTop
181
+ };
182
+ },
183
+
184
+ /** Given a target element and a mouse event, get the mouse offset from that element.
185
+ To do this we need the element's position and the mouse position */
186
+ getMouseOffset: function(target, ev) {
187
+ ev = ev || window.event;
188
+
189
+ var docPos = this.getPosition(target);
190
+ var mousePos = this.mouseCoords(ev);
191
+ return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
192
+ },
193
+
194
+ /** Get the position of an element by going up the DOM tree and adding up all the offsets */
195
+ getPosition: function(e){
196
+ var left = 0;
197
+ var top = 0;
198
+ /** Safari fix -- thanks to Luis Chato for this! */
199
+ if (e.offsetHeight == 0) {
200
+ /** Safari 2 doesn't correctly grab the offsetTop of a table row
201
+ this is detailed here:
202
+ http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/
203
+ the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild.
204
+ note that firefox will return a text node as a first child, so designing a more thorough
205
+ solution may need to take that into account, for now this seems to work in firefox, safari, ie */
206
+ e = e.firstChild; // a table cell
207
+ }
208
+
209
+ while (e.offsetParent){
210
+ left += e.offsetLeft;
211
+ top += e.offsetTop;
212
+ e = e.offsetParent;
213
+ }
214
+
215
+ left += e.offsetLeft;
216
+ top += e.offsetTop;
217
+
218
+ return {x:left, y:top};
219
+ },
220
+
221
+ mousemove: function(ev) {
222
+ if (jQuery.tableDnD.dragObject == null) {
223
+ return;
224
+ }
225
+
226
+ var dragObj = jQuery(jQuery.tableDnD.dragObject);
227
+ var config = jQuery.tableDnD.currentTable.tableDnDConfig;
228
+ var mousePos = jQuery.tableDnD.mouseCoords(ev);
229
+ var y = mousePos.y - jQuery.tableDnD.mouseOffset.y;
230
+ //auto scroll the window
231
+ var yOffset = window.pageYOffset;
232
+ if (document.all) {
233
+ // Windows version
234
+ //yOffset=document.body.scrollTop;
235
+ if (typeof document.compatMode != 'undefined' &&
236
+ document.compatMode != 'BackCompat') {
237
+ yOffset = document.documentElement.scrollTop;
238
+ }
239
+ else if (typeof document.body != 'undefined') {
240
+ yOffset=document.body.scrollTop;
241
+ }
242
+
243
+ }
244
+
245
+ if (mousePos.y-yOffset < config.scrollAmount) {
246
+ window.scrollBy(0, -config.scrollAmount);
247
+ } else {
248
+ var windowHeight = window.innerHeight ? window.innerHeight
249
+ : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
250
+ if (windowHeight-(mousePos.y-yOffset) < config.scrollAmount) {
251
+ window.scrollBy(0, config.scrollAmount);
252
+ }
253
+ }
254
+
255
+
256
+ if (y != jQuery.tableDnD.oldY) {
257
+ // work out if we're going up or down...
258
+ var movingDown = y > jQuery.tableDnD.oldY;
259
+ // update the old value
260
+ jQuery.tableDnD.oldY = y;
261
+ // update the style to show we're dragging
262
+ if (config.onDragClass) {
263
+ dragObj.addClass(config.onDragClass);
264
+ } else {
265
+ dragObj.css(config.onDragStyle);
266
+ }
267
+ // If we're over a row then move the dragged row to there so that the user sees the
268
+ // effect dynamically
269
+ var currentRow = jQuery.tableDnD.findDropTargetRow(dragObj, y);
270
+ if (currentRow) {
271
+ // TODO worry about what happens when there are multiple TBODIES
272
+ if (movingDown && jQuery.tableDnD.dragObject != currentRow) {
273
+ jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow.nextSibling);
274
+ } else if (! movingDown && jQuery.tableDnD.dragObject != currentRow) {
275
+ jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow);
276
+ }
277
+ }
278
+ }
279
+
280
+ return false;
281
+ },
282
+
283
+ /** We're only worried about the y position really, because we can only move rows up and down */
284
+ findDropTargetRow: function(draggedRow, y) {
285
+ var rows = jQuery.tableDnD.currentTable.rows;
286
+ for (var i=0; i<rows.length; i++) {
287
+ var row = rows[i];
288
+ var rowY = this.getPosition(row).y;
289
+ var rowHeight = parseInt(row.offsetHeight)/2;
290
+ if (row.offsetHeight == 0) {
291
+ rowY = this.getPosition(row.firstChild).y;
292
+ rowHeight = parseInt(row.firstChild.offsetHeight)/2;
293
+ }
294
+ // Because we always have to insert before, we need to offset the height a bit
295
+ if ((y > rowY - rowHeight) && (y < (rowY + rowHeight))) {
296
+ // that's the row we're over
297
+ // If it's the same as the current row, ignore it
298
+ if (row == draggedRow) {return null;}
299
+ var config = jQuery.tableDnD.currentTable.tableDnDConfig;
300
+ if (config.onAllowDrop) {
301
+ if (config.onAllowDrop(draggedRow, row)) {
302
+ return row;
303
+ } else {
304
+ return null;
305
+ }
306
+ } else {
307
+ // If a row has nodrop class, then don't allow dropping (inspired by John Tarr and Famic)
308
+ var nodrop = jQuery(row).hasClass("nodrop");
309
+ if (! nodrop) {
310
+ return row;
311
+ } else {
312
+ return null;
313
+ }
314
+ }
315
+ return row;
316
+ }
317
+ }
318
+ return null;
319
+ },
320
+
321
+ mouseup: function(e) {
322
+ if (jQuery.tableDnD.currentTable && jQuery.tableDnD.dragObject) {
323
+ var droppedRow = jQuery.tableDnD.dragObject;
324
+ var config = jQuery.tableDnD.currentTable.tableDnDConfig;
325
+ // If we have a dragObject, then we need to release it,
326
+ // The row will already have been moved to the right place so we just reset stuff
327
+ if (config.onDragClass) {
328
+ jQuery(droppedRow).removeClass(config.onDragClass);
329
+ } else {
330
+ jQuery(droppedRow).css(config.onDropStyle);
331
+ }
332
+ jQuery.tableDnD.dragObject = null;
333
+ if (config.onDrop) {
334
+ // Call the onDrop method if there is one
335
+ config.onDrop(jQuery.tableDnD.currentTable, droppedRow);
336
+ }
337
+ jQuery.tableDnD.currentTable = null; // let go of the table too
338
+ }
339
+ },
340
+
341
+ serialize: function() {
342
+ if (jQuery.tableDnD.currentTable) {
343
+ return jQuery.tableDnD.serializeTable(jQuery.tableDnD.currentTable);
344
+ } else {
345
+ return "Error: No Table id set, you need to set an id on your table and every row";
346
+ }
347
+ },
348
+
349
+ serializeTable: function(table) {
350
+ var result = "";
351
+ var tableId = table.id;
352
+ var rows = table.rows;
353
+ for (var i=0; i<rows.length; i++) {
354
+ if (result.length > 0) result += "&";
355
+ var rowId = rows[i].id;
356
+ if (rowId && rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) {
357
+ rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0];
358
+ }
359
+
360
+ result += tableId + '[]=' + rowId;
361
+ }
362
+ return result;
363
+ },
364
+
365
+ serializeTables: function() {
366
+ var result = "";
367
+ this.each(function() {
368
+ // this is now bound to each matching table
369
+ result += jQuery.tableDnD.serializeTable(this);
370
+ });
371
+ return result;
372
+ }
373
+
374
+ }
375
+
376
+ jQuery.fn.extend(
377
+ {
378
+ tableDnD : jQuery.tableDnD.build,
379
+ tableDnDUpdate : jQuery.tableDnD.updateTables,
380
+ tableDnDSerialize: jQuery.tableDnD.serializeTables
381
+ }
382
+ );
languages/themewoocommerce-ru_RU.mo ADDED
Binary file
languages/themewoocommerce-ru_RU.po ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WooCommerce theme v1.0.0\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: 2012-10-19 18:40+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
+ "X-Poedit-SourceCharset: utf-8\n"
14
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
15
+ "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
16
+ "X-Poedit-Basepath: ../\n"
17
+ "X-Textdomain-Support: yes\n"
18
+ "Language: ru\n"
19
+ "X-Generator: Poedit 1.5.4\n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+
22
+ # @ woocommerce
23
+ #: functions.php:40
24
+ msgid "Ukrainian hryvnia ( grn.)"
25
+ msgstr "Украинская гривна ( грн.)"
26
+
27
+ # @ woocommerce
28
+ #: functions.php:40
29
+ msgid "Russian ruble ( rub.)"
30
+ msgstr "Русский рубль ( руб.)"
31
+
32
+ # @ woocommerce
33
+ #: functions.php:40
34
+ msgid "Belarusian ruble ( Br.)"
35
+ msgstr "Белорусский рубль ( Br.)"
36
+
37
+ # @ woocommerce
38
+ #: functions.php:40
39
+ msgid ""
40
+ "Log Qiwi events, such as IPN requests, inside <code>woocommerce/logs/qiwi."
41
+ "txt</code>"
42
+ msgstr ""
43
+ "Журнал событий, таких как запросы/ответы на/от сервера Qiwi, внутри "
44
+ "документа <code>woocommerce/logs/qiwi.txt</code>"
45
+
46
+ # @ woocommerce
47
+ #: functions.php:40
48
+ msgid ""
49
+ "Log LiqPay events, such as IPN requests, inside <code>woocommerce/logs/"
50
+ "liqpay.txt</code>"
51
+ msgstr ""
52
+ "Журнал событий, таких как запросы/ответы на/от сервера LiqPay, внутри "
53
+ "документа <code>woocommerce/logs/liqpay.txt</code>"
54
+
55
+ # @ woocommerce
56
+ #: functions.php:40
57
+ msgid ""
58
+ "Log Privat24 events, such as IPN requests, inside <code>woocommerce/logs/"
59
+ "privat24.txt</code>"
60
+ msgstr ""
61
+ "Журнал событий, таких как запросы/ответы на/от сервера Privat24, внутри "
62
+ "документа <code>woocommerce/logs/privat24.txt</code>"
63
+
64
+ # @ woocommerce
65
+ #: functions.php:40
66
+ msgid ""
67
+ "Log WebMoney events, such as IPN requests, inside <code>woocommerce/logs/"
68
+ "webmoney.txt</code>"
69
+ msgstr ""
70
+ "Журнал событий, таких как запросы/ответы на/от сервера WebMoney, внутри "
71
+ "документа <code>woocommerce/logs/webmoney.txt</code>"
72
+
73
+ # @ woocommerce
74
+ #: functions.php:40
75
+ msgid "Debug Log"
76
+ msgstr "Журнал отладки"
77
+
78
+ # @ woocommerce
79
+ #: functions.php:40
80
+ msgid "Enable logging"
81
+ msgstr "Включить журналирование"
82
+
83
+ # @ woocommerce
84
+ #: functions.php:40
85
+ msgid ""
86
+ "Pay via Qiwi; you can pay with your credit card if you don't have a Qiwi "
87
+ "account or terminal."
88
+ msgstr ""
89
+ "Заплатить через Qiwi. Вы также можете заплатить пластиковой картой или "
90
+ "через терминал."
91
+
92
+ # @ woocommerce
93
+ #: functions.php:40
94
+ msgid ""
95
+ "Pay via LiqPay; you can pay with your credit card if you don't have a LiqPay "
96
+ "account or terminal."
97
+ msgstr ""
98
+ "Заплатить через LiqPay. Вы можете заплатить пластиковой картой, если у вас "
99
+ "нет LiqPay аккаунта или через терминал."
100
+
101
+ msgid ""
102
+ "Thank you for your order, please click the button below to pay with LiqPay."
103
+ msgstr ""
104
+ "Спасибо за заказ, пожалуйста, нажмите на кнопку внизу, чтобы оплатить при "
105
+ "помощи LiqPay."
106
+
107
+ msgid ""
108
+ "Thank you for your order, please click the button below to pay with Qiwi."
109
+ msgstr ""
110
+ "Спасибо за заказ, пожалуйста, нажмите на кнопку внизу, чтобы оплатить при "
111
+ "помощи Qiwi."
112
+
113
+ msgid ""
114
+ "Thank you for your order, please click the button below to pay with Privat24."
115
+ msgstr ""
116
+ "Спасибо за заказ, пожалуйста, нажмите на кнопку внизу, чтобы оплатить при "
117
+ "помощи Privat24."
118
+
119
+ msgid ""
120
+ "Thank you for your order, please click the button below to pay with WebMoney."
121
+ msgstr ""
122
+ "Спасибо за заказ, пожалуйста, нажмите на кнопку внизу, чтобы оплатить при "
123
+ "помощи WebMoney."
124
+
125
+ msgid ""
126
+ "Thank you for your order, please click the button below to pay with "
127
+ "Robokassa."
128
+ msgstr ""
129
+ "Спасибо за заказ, пожалуйста, нажмите на кнопку внизу, чтобы оплатить при "
130
+ "помощи Robokassa."
languages/woocommerce-ru_RU.mo ADDED
Binary file
languages/woocommerce-ru_RU.po ADDED
@@ -0,0 +1,576 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WooCommerce theme v1.0.0\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: 2012-10-20 14:27+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
+ "X-Poedit-SourceCharset: utf-8\n"
14
+ "X-Poedit-KeywordsList: __;_e;_x;_n;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
15
+ "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
16
+ "X-Poedit-Basepath: ../\n"
17
+ "X-Textdomain-Support: yes\n"
18
+ "Language: ru\n"
19
+ "X-Generator: Poedit 1.5.4\n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+
22
+ # @ woocommerce
23
+ #: functions.php:40
24
+ msgid ""
25
+ "SKU refers to a Stock-keeping unit, a unique identifier for each distinct "
26
+ "product and service that can be purchased."
27
+ msgstr ""
28
+ "Артикул относится к складской единице учета, уникальный идентификатор для "
29
+ "каждого отдельного продукта и услуг, которые могут быть приобретены."
30
+
31
+ # @ woocommerce
32
+ #: admin/post-types/product.php:70 admin/post-types/product.php:483
33
+ #: admin/post-types/writepanels/writepanel-order_data.php:274
34
+ #: admin/post-types/writepanels/writepanel-product-type-variable.php:157
35
+ #: admin/post-types/writepanels/writepanel-product-type-variable.php:367
36
+ #: admin/post-types/writepanels/writepanel-product_data.php:91
37
+ #: admin/woocommerce-admin-reports.php:1527
38
+ #: admin/woocommerce-admin-reports.php:1562
39
+ msgid "SKU:"
40
+ msgstr "Артикул:"
41
+
42
+ msgid "SKU"
43
+ msgstr "Артикул"
44
+
45
+ msgid "Product SKU:"
46
+ msgstr "Артикул товара:"
47
+
48
+ msgid "[%s with SKU of %s]"
49
+ msgstr "[%s с артикул из %s]"
50
+
51
+ # @ woocommerce
52
+ #: admin/settings/settings-init.php:598
53
+ msgid "Enable the SKU field for products"
54
+ msgstr "Включить для указания поля с артикулом для товаров"
55
+
56
+ # @ woocommerce
57
+ #: admin/post-types/writepanels/writepanel-product-type-variable.php:157
58
+ #: admin/post-types/writepanels/writepanel-product-type-variable.php:367
59
+ msgid ""
60
+ "Enter a SKU for this variation or leave blank to use the parent product SKU."
61
+ msgstr ""
62
+ "Введите артикул для этого варианта или оставьте пустым для использования "
63
+ "артикула согласно главному товару."
64
+
65
+ # @ woocommerce
66
+ #: functions.php:40
67
+ msgid "Weight in decimal form"
68
+ msgstr "Вес в десятичном формате"
69
+
70
+ # @ woocommerce
71
+ #: functions.php:40
72
+ msgid "LxWxH in decimal form"
73
+ msgstr "ДлинаxШиринаxВысота в десятичном формате"
74
+
75
+ # @ woocommerce
76
+ #: functions.php:40
77
+ msgid "Taxes"
78
+ msgstr "Налоги"
79
+
80
+ # @ woocommerce
81
+ #: functions.php:40
82
+ msgid "Enable reviews"
83
+ msgstr "Включить отзывы"
84
+
85
+ # @ woocommerce
86
+ #: functions.php:40
87
+ msgid "Shipping class"
88
+ msgstr "Класс доставки"
89
+
90
+ # @ woocommerce
91
+ #: functions.php:40
92
+ msgid ""
93
+ "Shipping classes are used by certain shipping methods to group similar "
94
+ "products."
95
+ msgstr ""
96
+ "Классы доставки используют определенные методы доставки в группе аналогичных "
97
+ "продуктов."
98
+
99
+ # @ woocommerce
100
+ #: functions.php:40
101
+ msgid "No shipping class"
102
+ msgstr "Нет класса доставки"
103
+
104
+ # @ woocommerce
105
+ #: functions.php:40
106
+ msgid "Search for a product..."
107
+ msgstr "Поиск товара..."
108
+
109
+ # @ woocommerce
110
+ #: functions.php:40
111
+ msgid "Shipping Classes"
112
+ msgstr "Классы доставки"
113
+
114
+ # @ woocommerce
115
+ #: functions.php:40
116
+ msgid "Tags"
117
+ msgstr "Метки"
118
+
119
+ # @ woocommerce
120
+ #: widgets/widget-product_categories.php:110
121
+ msgid "No product categories exist."
122
+ msgstr "Нет товаров в существующих категориях."
123
+
124
+ # @ woocommerce
125
+ #: functions.php:40
126
+ msgid "Categories"
127
+ msgstr "Рубрики"
128
+
129
+ # @ woocommerce
130
+ #: admin/settings/settings-init.php:535
131
+ msgid "Default product sorting"
132
+ msgstr "Сортировать товар по умолчанию"
133
+
134
+ # @ woocommerce
135
+ #: admin/settings/settings-init.php:542 templates/loop/sorting.php:10
136
+ msgid "Default sorting"
137
+ msgstr "Сортировать по умолчанию"
138
+
139
+ # @ woocommerce
140
+ #: admin/settings/settings-init.php:543 templates/loop/sorting.php:11
141
+ msgid "Sort alphabetically"
142
+ msgstr "Сортировать по наименованию"
143
+
144
+ # @ woocommerce
145
+ #: admin/settings/settings-init.php:544 templates/loop/sorting.php:12
146
+ msgid "Sort by most recent"
147
+ msgstr "Сортировать по дате"
148
+
149
+ # @ woocommerce
150
+ #: admin/settings/settings-init.php:545 templates/loop/sorting.php:13
151
+ msgid "Sort by price"
152
+ msgstr "Сортировать по цене"
153
+
154
+ # @ woocommerce
155
+ #: admin/settings/settings-init.php:545 templates/loop/sorting.php:13
156
+ msgid "Enable guest checkout (no account required)"
157
+ msgstr "Включить гостевой заказ (без необходимости регистрации)"
158
+
159
+ # @ woocommerce
160
+ #: admin/settings/settings-init.php:545 templates/loop/sorting.php:13
161
+ msgid "Force secure checkout"
162
+ msgstr "Использовать безопасное соединение при заказе"
163
+
164
+ # @ woocommerce
165
+ #: admin/settings/settings-init.php:545 templates/loop/sorting.php:13
166
+ msgid "Registration"
167
+ msgstr "Регистрация"
168
+
169
+ # @ woocommerce
170
+ #: admin/settings/settings-init.php:545 templates/loop/sorting.php:13
171
+ msgid "Allow registration on the checkout page"
172
+ msgstr "Разрешить регистрацию на странице оформления заказа"
173
+
174
+ msgid "Allow registration on the \"My Account\" page"
175
+ msgstr "Разрешить регистрацию на странице \"Мой аккаунт\""
176
+
177
+ msgid "Register using the email address for the username"
178
+ msgstr ""
179
+ "Регистрировать, используя адрес электронной почты в качестве имени "
180
+ "пользователя"
181
+
182
+ msgid "Allow customers to repurchase past orders"
183
+ msgstr "Разрешить клиентам обратно купить по прошлым заказам"
184
+
185
+ msgid "Access Restrictions"
186
+ msgstr "Ограничения доступа"
187
+
188
+ msgid "Must be logged in to download files"
189
+ msgstr "Должны быть зарегистрированы (авторизированы), чтобы скачивать файлы"
190
+
191
+ msgid "This setting does not apply to guest downloads."
192
+ msgstr "Этот параметр не применяется к гостевой загрузки."
193
+
194
+ msgid "Grant access to downloadable products after payment"
195
+ msgstr "Предоставление доступа к загружаемых продуктам после оплаты"
196
+
197
+ msgid ""
198
+ "Turn this option off to only grant access when an order is \"complete\", "
199
+ "rather than \"processing\""
200
+ msgstr ""
201
+ "Включите эту опцию, чтобы разрешить доступ только, когда заказ находиться в "
202
+ "статусе \"выполнен\", а не в статусе \"обработка\""
203
+
204
+ msgid "Limit the purchasable quantity of downloadable-virtual items to 1"
205
+ msgstr "Ограничьте количество приобретаемых загружаемо-виртуальных товаров к 1"
206
+
207
+ msgid "Advanced"
208
+ msgstr "Дополнительно"
209
+
210
+ msgid "Enable enhanced country select boxes "
211
+ msgstr ""
212
+
213
+ # @ woocommerce
214
+ #: admin/post-types/writepanels/writepanel-product_data.php:483
215
+ msgid "Cross-Sells"
216
+ msgstr "Перекрестные продажи (Cross-Sells) в корзине"
217
+
218
+ # @ woocommerce
219
+ #: admin/post-types/writepanels/writepanel-product_data.php:464
220
+ msgid "Up-Sells"
221
+ msgstr "Апселл (Upsell)"
222
+
223
+ # @ woocommerce
224
+ #: admin/post-types/writepanels/writepanel-product_data.php:464
225
+ msgid "Username or email"
226
+ msgstr "Имя пользователя или e-mail"
227
+
228
+ # @ woocommerce
229
+ #: admin/post-types/writepanels/writepanel-order_data.php:131
230
+ #: admin/post-types/writepanels/writepanel-order_data.php:214
231
+ #: admin/woocommerce-admin-users.php:133 admin/woocommerce-admin-users.php:182
232
+ #: classes/class-wc-countries.php:899 classes/class-wc-countries.php:900
233
+ #: classes/class-wc-countries.php:975
234
+ msgid "State/County"
235
+ msgstr "Область, Район"
236
+
237
+ # @ woocommerce
238
+ #: classes/class-wc-countries.php:976
239
+ msgctxt "placeholder"
240
+ msgid "State/County"
241
+ msgstr "Область, Район"
242
+
243
+ # @ woocommerce
244
+ # @ woocommerce
245
+ #: templates/checkout/form-shipping.php:25
246
+ #: templates/checkout/form-login.php:13
247
+ msgid ""
248
+ "If you have shopped with us before, please enter your details in the boxes "
249
+ "below. If you are a new customer please proceed to the Billing &amp; "
250
+ "Shipping section."
251
+ msgstr ""
252
+ "Если вы раньше делали заказ, пожалуйста, введите Ваши данные в полях снизу. "
253
+ "Если вы новый клиент, то, пожалуйста, заполните раздел с информацией об "
254
+ "оплате и доставке."
255
+
256
+ # @ woocommerce
257
+ #: woocommerce.php:744
258
+ msgctxt "Admin menu name"
259
+ msgid "Products"
260
+ msgstr "Товары"
261
+
262
+ # @ woocommerce
263
+ #: woocommerce.php:879
264
+ msgctxt "Admin menu name"
265
+ msgid "Coupons"
266
+ msgstr "Купоны"
267
+
268
+ msgid "System Status"
269
+ msgstr "Состояние системы"
270
+
271
+ msgctxt "Admin menu name"
272
+ msgid "Orders"
273
+ msgstr "Заказы"
274
+
275
+ # @ woocommerce
276
+ #: woocommerce.php:649
277
+ msgctxt "Admin menu name"
278
+ msgid "Shipping Classes"
279
+ msgstr "Классы доставки"
280
+
281
+ # @ woocommerce
282
+ #: woocommerce.php:587
283
+ msgctxt "Admin menu name"
284
+ msgid "Categories"
285
+ msgstr "Категории"
286
+
287
+ # @ woocommerce
288
+ #: woocommerce.php:618
289
+ msgctxt "Admin menu name"
290
+ msgid "Tags"
291
+ msgstr "Метки"
292
+
293
+ # @ woocommerce
294
+ #: admin/post-types/writepanels/writepanel-product_data.php:984
295
+ msgid "Featured Product"
296
+ msgstr "Рекомендуемый товар"
297
+
298
+ # @ woocommerce
299
+ #: admin/post-types/writepanels/writepanels-init.php:36
300
+ msgid "Product Short Description"
301
+ msgstr "Краткое описание товара"
302
+
303
+ # @ woocommerce
304
+ #: admin/post-types/writepanels/writepanel-product_data.php:982
305
+ msgid "Enable this option to feature this product."
306
+ msgstr "Включите эту опцию, чтобы отметить этот товар, как рекомендуемый."
307
+
308
+ # @ woocommerce
309
+ #: admin/post-types/writepanels/writepanel-product_data.php:946
310
+ msgid "Catalog/search"
311
+ msgstr "Каталог/Поиск"
312
+
313
+ # @ woocommerce
314
+ #: admin/post-types/writepanels/writepanel-product_data.php:959
315
+ msgid "Catalog visibility:"
316
+ msgstr "Видимость:"
317
+
318
+ # @ woocommerce
319
+ #: admin/post-types/writepanels/writepanel-product_data.php:976
320
+ msgid ""
321
+ "Define the loops this product should be visible in. The product will still "
322
+ "be accessible directly."
323
+ msgstr ""
324
+ "Определите циклы, в которых этот продукт должен быть видимым. Продукт также "
325
+ "будет доступен напрямую."
326
+
327
+ # @ woocommerce
328
+ #: admin/woocommerce-admin-reports.php:36
329
+ msgid "Taxes by month"
330
+ msgstr "Налоги за месяц"
331
+
332
+ # @ woocommerce
333
+ #: admin/woocommerce-admin-reports.php:353
334
+ #: admin/woocommerce-admin-reports.php:620
335
+ #: admin/woocommerce-admin-reports.php:800
336
+ msgid "items"
337
+ msgstr "позиций"
338
+
339
+ # @ woocommerce
340
+ #: admin/woocommerce-admin-reports.php:369
341
+ msgid "Discounts used"
342
+ msgstr "Использованы купоны"
343
+
344
+ # @ woocommerce
345
+ #: admin/woocommerce-admin-reports.php:375
346
+ msgid "Total shipping costs"
347
+ msgstr "Всего расходы по доставке"
348
+
349
+ # @ woocommerce
350
+ #: admin/woocommerce-admin-reports.php:1149
351
+ #, php-format
352
+ msgid "Sales for %s:"
353
+ msgstr "Продажи %s:"
354
+
355
+ # @ woocommerce
356
+ #: admin/woocommerce-admin-dashboard.php:394
357
+ #: admin/woocommerce-admin-reports.php:193
358
+ #: admin/woocommerce-admin-reports.php:482
359
+ #: admin/woocommerce-admin-reports.php:673
360
+ #: admin/woocommerce-admin-reports.php:850
361
+ msgid "Number of sales"
362
+ msgstr "Число продаж"
363
+
364
+ # @ woocommerce
365
+ #: admin/woocommerce-admin-dashboard.php:395
366
+ #: admin/woocommerce-admin-reports.php:188
367
+ #: admin/woocommerce-admin-reports.php:482
368
+ #: admin/woocommerce-admin-reports.php:673
369
+ #: admin/woocommerce-admin-reports.php:850
370
+ msgid "Sales amount"
371
+ msgstr "Сумма продажи"
372
+
373
+ # @ woocommerce
374
+ #: admin/settings/settings-init.php:143
375
+ msgid "Enable coupons"
376
+ msgstr "Включить купоны"
377
+
378
+ # @ woocommerce
379
+ #: admin/settings/settings-init.php:152
380
+ msgid "Enable coupon form on cart"
381
+ msgstr "Активировать форму купона в корзине"
382
+
383
+ # @ woocommerce
384
+ #: admin/settings/settings-init.php:254
385
+ msgid "Enable enhanced country select boxes"
386
+ msgstr "Включить поиск страны из списка (умный поиск)"
387
+
388
+ msgid "Store Notice"
389
+ msgstr "Уведомления магазина"
390
+
391
+ # @ woocommerce
392
+ #: admin/settings/settings-init.php:551
393
+ msgid "Show subcategories"
394
+ msgstr "Показать подкатегории"
395
+
396
+ # @ woocommerce
397
+ #: admin/settings/settings-init.php:594
398
+ msgid ""
399
+ "The following options affect the fields available on the edit product page."
400
+ msgstr ""
401
+ "Следующие параметры влияют на полях, которые находятся на странице "
402
+ "редактирования продукта."
403
+
404
+ # @ woocommerce
405
+ #: admin/settings/settings-init.php:663
406
+ msgid "Product Ratings"
407
+ msgstr "Рейтинг товара"
408
+
409
+ # @ woocommerce
410
+ #: admin/settings/settings-init.php:664
411
+ msgid "Enable the star rating field on the review form"
412
+ msgstr "Активировать звездный рейтинг на форме отзывов"
413
+
414
+ # @ woocommerce
415
+ #: admin/settings/settings-init.php:673
416
+ msgid "Ratings are required to leave a review"
417
+ msgstr "Чтобы оставить отзыв, покупателю потребуется указать рейтинг товара"
418
+
419
+ # @ woocommerce
420
+ #: admin/settings/settings-init.php:682
421
+ msgid "Show \"verified owner\" label for customer reviews"
422
+ msgstr ""
423
+
424
+ # @ woocommerce
425
+ #: admin/settings/settings-init.php:692
426
+ msgid "The following options affect how prices are displayed on the frontend."
427
+ msgstr "Следующие параметры влияют на отображение цен на сайте."
428
+
429
+ # @ woocommerce
430
+ #: admin/settings/settings-init.php:745
431
+ msgid "Trailing zeros"
432
+ msgstr "Завершающие нули"
433
+
434
+ # @ woocommerce
435
+ #: admin/settings/settings-init.php:746
436
+ msgid ""
437
+ "Remove zeros after the decimal point. e.g. <code>$10.00</code> becomes <code>"
438
+ "$10</code>"
439
+ msgstr ""
440
+ "Удалить нули после запятой, например, <code>10.00 руб.</code> becomes "
441
+ "<code>10 руб.</code>"
442
+
443
+ # @ woocommerce
444
+ #: admin/settings/settings-init.php:849
445
+ msgid "Stock display format"
446
+ msgstr "Формат отображения запаса"
447
+
448
+ # @ woocommerce
449
+ #: admin/settings/settings-init.php:850
450
+ msgid "This controls how stock is displayed on the frontend."
451
+ msgstr "Эта опция определяет отображение запаса на сайте."
452
+
453
+ # @ woocommerce
454
+ #: admin/settings/settings-init.php:856
455
+ msgid "Always show stock e.g. \"12 in stock\""
456
+ msgstr "Всегда показывать запас, например, \"12 в запасе\""
457
+
458
+ # @ woocommerce
459
+ #: admin/settings/settings-init.php:857
460
+ msgid "Only show stock when low e.g. \"Only 2 left in stock\" vs. \"In Stock\""
461
+ msgstr ""
462
+ "Покавать наличие, только когда оно низкое, например, \"В наличии осталось "
463
+ "только 2\" вместо \"В наличии\""
464
+
465
+ # @ woocommerce
466
+ #: admin/settings/settings-init.php:858
467
+ msgid "Never show stock amount"
468
+ msgstr "Никогда не показывать количество запаса"
469
+
470
+ # @ woocommerce
471
+ #: admin/settings/settings-init.php:980
472
+ msgid "Display taxes even when the amount is zero"
473
+ msgstr "Показать налоги, даже если сумма равна нулю"
474
+
475
+ # @ woocommerce
476
+ #: admin/settings/settings-init.php:1030
477
+ #, php-format
478
+ msgid "Reduced Rate%sZero Rate"
479
+ msgstr "Льготный тариф%sНулевой тариф"
480
+
481
+ # @ woocommerce
482
+ #: admin/settings/settings-init.php:890
483
+ msgid "Hide shipping costs until an address is entered"
484
+ msgstr "Скрыть стоимость доставки, пока адрес не будет введен"
485
+
486
+ # @ woocommerce
487
+ #: admin/settings/settings-init.php:898
488
+ msgid "Shipping method display"
489
+ msgstr "Отображение способа доставки"
490
+
491
+ # @ woocommerce
492
+ #: admin/settings/settings-init.php:899
493
+ msgid ""
494
+ "This controls how multiple shipping methods are displayed on the frontend."
495
+ msgstr ""
496
+ "Эта опция управляет тем, как будут отображаться несколько способов доставки "
497
+ "на сайте."
498
+
499
+ # @ woocommerce
500
+ #: admin/settings/settings-init.php:912
501
+ msgid "Shipping Destination"
502
+ msgstr "Назначение доставки"
503
+
504
+ # @ woocommerce
505
+ #: admin/settings/settings-init.php:929
506
+ msgid "Collect shipping address even when not required"
507
+ msgstr "Сбор адреса доставки, даже если не требуется"
508
+
509
+ # @ woocommerce
510
+ #: admin/settings/settings-shipping-methods.php:17
511
+ msgid "Drag and drop methods to control their display order."
512
+ msgstr "Перетащите методы доставки, чтобы указать порядок их отображения."
513
+
514
+ # @ woocommerce
515
+ #: admin/settings/settings-init.php:947
516
+ msgid ""
517
+ "Installed payment gateways are displayed below. Drag and drop payment "
518
+ "gateways to control their display order on the checkout."
519
+ msgstr ""
520
+ "Установленные платежные шлюзы показаны ниже. Перетащите платежные шлюзы, "
521
+ "чтобы указать порядок их отображения при заказе."
522
+
523
+ # @ woocommerce
524
+ #: classes/gateways/bacs/class-wc-bacs.php:68
525
+ msgid "Account Details"
526
+ msgstr "Реквизиты счета"
527
+
528
+ # @ woocommerce
529
+ #: classes/gateways/bacs/class-wc-bacs.php:70
530
+ msgid "Optionally enter your bank details below for customers to pay into."
531
+ msgstr ""
532
+ "При необходимости ввести банковские реквизиты ниже для оплаты клиентами."
533
+
534
+ # @ woocommerce
535
+ #: classes/gateways/cod/class-wc-cod.php:47
536
+ msgid "Enable Cash on Delivery"
537
+ msgstr "Позволь наложенный платеж"
538
+
539
+ msgid "Pay with cash upon delivery."
540
+ msgstr "Оплата наличными при доставке."
541
+
542
+ # @ woocommerce
543
+ #: classes/integrations/sharethis/class-wc-sharethis.php:58
544
+ msgid "ShareThis Code"
545
+ msgstr "Код ShareThis"
546
+
547
+ # @ woocommerce
548
+ #: classes/integrations/sharethis/class-wc-sharethis.php:59
549
+ msgid "You can tweak the ShareThis code by editing this option."
550
+ msgstr "Вы можете настроить код ShareThis, редактированием этой опции."
551
+
552
+ # @ woocommerce
553
+ #: templates/checkout/form-billing.php:42
554
+ msgid ""
555
+ "Create an account by entering the information below. If you are a returning "
556
+ "customer please login at the top of the page."
557
+ msgstr ""
558
+ "Заполнив нижеуказанные поля, можно создать постоянный профиль на нашем "
559
+ "сайте. Если вы уже совершали покупки у нас и регистрировались ранее, то вы "
560
+ "можете авторизоваться, заполнив поле логина и пароля наверху."
561
+
562
+ # @ woocommerce
563
+ #: templates/checkout/form-shipping.php:25
564
+ msgid "Ship to billing address?"
565
+ msgstr "Отправлять на платежный адрес?"
566
+
567
+ # @ woocommerce
568
+ #: classes/class-wc-cart.php:704 classes/class-wc-cart.php:712
569
+ #, php-format
570
+ msgid ""
571
+ "<a href=\"%s\" class=\"button\">%s</a> You cannot add that amount to the "
572
+ "cart &mdash; we have %s in stock and you already have %s in your cart."
573
+ msgstr ""
574
+ "<a href=\"%s\" class=\"button\">%s</a> Вы не можете добавить этот товар в "
575
+ "таком количестве в корзину &mdash; у нас в наличии: %s, и он уже есть в "
576
+ "вашей корзине: %s."
readme.txt ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Saphali Woocommerce LITE ===
2
+ Contributors: Saphali
3
+ Plugin Name: Saphali Woocommerce LITE
4
+ Plugin URI: http://saphali.com/saphali-woocommerce-plugin-wordpress
5
+ Donate link: http://saphali.com/
6
+ Tags: woocommerce, woo commerce russian, russian ruble, ukrainian hryvnia, mod, manadger filds checkout
7
+ Requires at least: 3.3 or higher
8
+ Tested up to: 3.4.2
9
+ Stable tag: 1.0
10
+ Version: 1.0
11
+ License: GPLv2 or later
12
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
13
+
14
+ Набор дополнений к магазину на Woocommerce, которые расширяют его возможности.
15
+
16
+ == Description ==
17
+
18
+ Saphali - set of additions to Woocommerce.
19
+
20
+ Это бесплатный вордпресс плагин, который добавляет набор дополнений к интернет-магазину на Woocommerce.
21
+
22
+ = Особенности =
23
+
24
+ Плагин вносит в магазин следующие дополнения:
25
+
26
+ * Улучшенная русская локализация Woocommerce (корректировка перевода + дополнительный перевод).
27
+ * В общий список валют добавлены — Украинская гривна (грн.), Русский рубль (руб.) и Белорусский рубль (руб.)
28
+ * Управление полями на странице заказа и на странице профиля. Функция позволяет настроить заказную форму регистрации, чтобы настроить магазин на упрощенение оформления заказа. Вы можете сделать некоторые поля необязательными при регистрации/оформленнии заказа либо удалить их полностью.
29
+ * Управление количеством колонок в каталоге товаров и рубриках.
30
+
31
+ Также есть коммерческие версии плагина Saphali Woocommerce, которые значительно больше расширяют функциональность интернет-магазина на осове плагина Woocommerce, адаптируют его к использованию в странах СНГ, делают магазин более удобным в использовании и администрировании, подключают основные российские и украинские способы оплаты - Приват24, LiqPay (прием оплаты с карт VISA и MasterCard), WebMoney, Яндекс.Деньги, ROBOKASSA, QIWI.
32
+ Подробнее на сайте http://saphali.com/saphali-woocommerce-plugin-wordpress
33
+
34
+ == Installation ==
35
+
36
+ 1. Разархивируйте содержимое zip файла в папку плагинов вашего сайта (wp-content/plugins/), используя вашу любимую FTP программу.
37
+ 2. Активируйте плагин на странице "Плагины" в панели администратора.
38
+ 3. Все установка завершена.
39
+
40
+ == Screenshots ==
41
+
42
+ 1. Улучшенная русская локализация Woocommerce. В общий список валют добавлены — Украинская гривна (грн.), Русский рубль (руб.) и Белорусский рубль (руб.)
43
+ 2. Управление полями на странице заказа и на странице профиля. Функция позволяет настроить заказную форму регистрации, чтобы настроить магазин на упрощенение оформления заказа. Вы можете сделать некоторые поля необязательными при регистрации/оформленнии заказа либо удалить их полностью.
44
+ 3. Управление количеством колонок в каталоге товаров и рубриках.
45
+
46
+ == Changelog ==
47
+
48
+ = 1.0 =
49
+ * Улучшенная русская локализация Woocommerce (корректировка перевода + дополнительный перевод).
50
+ * В общий список валют добавлены — Украинская гривна (грн.), Русский рубль (руб.) и Белорусский рубль (руб.)
51
+ * Управление полями на странице заказа и на странице профиля. Функция позволяет настроить заказную форму регистрации, чтобы настроить магазин на упрощенение оформления заказа. Вы можете сделать некоторые поля необязательными при регистрации/оформленнии заказа либо удалить их полностью.
52
+ * Управление количеством колонок в каталоге товаров и рубриках.
53
+
54
+
55
+
56
+ == License ==
57
+
58
+ Этот плагин является бесплатным для всех, поскольку он выпущен под GPL. Вы можете использовать его бесплатно в ваших интернет-магазинах. Но если Вам нравится этот плагин, вы можете поблагодарить нас, если поделитесь с друзями и коллегами ссылкой на наш сайт.
59
+
60
+ == Translations ==
61
+
62
+ Мы допускаем, что русскую локализацию для Woocommerce можно еще больше улучшить. Если вы заметили в настройках Woocommerce некорректный перевод или его можно заменить на альтернативный и более подходящий, напишите об этом нам.
63
+
64
+ == Demo ==
65
+ Проверить этот плагин в работе вы можете на нашем сайте http://saphali.com/ - на странице "Демо Интернет-магазин".
66
+
67
+ == Upgrade Notice ==
68
+
69
+ = 1.0 =
70
+ Выпущен релиз.
71
+
saphali-woocommerce-lite.php ADDED
@@ -0,0 +1,556 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: Saphali Woocommerce LITE
4
+ Plugin URI: http://saphali.com/
5
+ Description: Saphali Woocommerce LITE - это бесплатный вордпресс плагин, который добавляет набор дополнений к интернет-магазину на Woocommerce.
6
+ Version: 1.0
7
+ Author: Saphali
8
+ Author URI: http://saphali.com/saphali-woocommerce-plugin-wordpress
9
+ */
10
+
11
+
12
+ /*
13
+
14
+ This program is free software; you can redistribute it and/or modify
15
+ it under the terms of the GNU General Public License, version 2, as
16
+ published by the Free Software Foundation.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program; if not, write to the Free Software
25
+
26
+ */
27
+
28
+
29
+ /* Add a custom payment class to woocommerce
30
+ ------------------------------------------------------------ */
31
+ // Подключение валюты и локализации
32
+ define('SAPHALI_PLUGIN_DIR_URL',plugin_dir_url(__FILE__));
33
+ define('SAPHALI_PLUGIN_DIR_PATH',plugin_dir_path(__FILE__));
34
+ function add_inr_currency( $currencies ) {
35
+ $currencies['UAH'] = __( 'Ukrainian hryvnia ( grn.)', 'themewoocommerce' );
36
+ $currencies['RUR'] = __( 'Russian ruble ( rub.)', 'themewoocommerce' );
37
+ $currencies['BYR'] = __( 'Belarusian ruble ( Br.)', 'themewoocommerce' );
38
+ return $currencies;
39
+ }
40
+
41
+ function add_inr_currency_symbol( $symbol ) {
42
+ $currency = get_option( 'woocommerce_currency' );
43
+ switch( $currency ) {
44
+ case 'UAH': $symbol = 'грн.'; break;
45
+ case 'RUB': $symbol = 'руб.'; break;
46
+ case 'RUR': $symbol = 'руб.'; break;
47
+ case 'BYR': $symbol = 'руб.'; break;
48
+ }
49
+ return $symbol;
50
+ }
51
+
52
+
53
+ //END
54
+
55
+ add_action('plugins_loaded', 'woocommerce_lang', 0);
56
+ function woocommerce_lang() {
57
+
58
+ add_action('admin_menu', 'woocommerce_saphali_admin_menu', 9);
59
+ load_plugin_textdomain( 'woocommerce', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
60
+ load_plugin_textdomain( 'themewoocommerce', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
61
+ if($_GET['page'] != 'woocommerce_saphali' && $_GET['tab'] !=1) {
62
+ // Hook in
63
+ add_filter( 'woocommerce_checkout_fields' , 'saphali_custom_override_checkout_fields' );
64
+ add_filter( 'woocommerce_billing_fields', 'saphali_custom_billing_fields', 10, 1 );
65
+ add_filter( 'woocommerce_shipping_fields', 'saphali_custom_shipping_fields', 10, 1 );
66
+ }
67
+ // Our hooked in function - $fields is passed via the filter!
68
+ function saphali_custom_override_checkout_fields( $fields ) {
69
+
70
+ $fieldss = get_option('woocommerce_saphali_filds_filters');
71
+ if(is_array($fieldss)) {
72
+ $fields["billing"] = $fieldss["billing"];
73
+ $fields["shipping"] = $fieldss["shipping"];
74
+ $fields["order"] = $fieldss["order"];
75
+ }
76
+ return $fields;
77
+ }
78
+ function saphali_custom_billing_fields( $fields ) {
79
+
80
+ $fieldss = get_option('woocommerce_saphali_filds_filters');
81
+ if(is_array($fieldss))
82
+ $fields = $fieldss["billing"];
83
+ return $fields;
84
+ }
85
+ function saphali_custom_shipping_fields( $fields ) {
86
+
87
+ $fieldss = get_option('woocommerce_saphali_filds_filters');
88
+ if(is_array($fieldss))
89
+ $fields = $fieldss["shipping"];
90
+ return $fields;
91
+ }
92
+ add_filter( 'woocommerce_currencies', 'add_inr_currency' );
93
+ add_filter( 'woocommerce_currency_symbol', 'add_inr_currency_symbol' );
94
+ add_action( 'admin_enqueue_scripts', 'admin_enqueue_scripts_page_saphali' );
95
+
96
+ function admin_enqueue_scripts_page_saphali() {
97
+ if($_GET['page'] == 'woocommerce_saphali' && $_GET['tab'] ==1 )
98
+ wp_enqueue_script( 'tablednd', plugins_url('/js/jquery.tablednd.0.5.js', __FILE__) );
99
+ }
100
+
101
+
102
+ function woocommerce_saphali_page () {
103
+
104
+
105
+ ?>
106
+ <div class="wrap woocommerce"><div class="icon32 icon32-woocommerce-reports" id="icon-woocommerce"><br /></div>
107
+ <h2 class="nav-tab-wrapper woo-nav-tab-wrapper">
108
+ Настройки Saphali WC
109
+ </h2>
110
+ <ul class="subsubsub">
111
+
112
+ <li><a href="admin.php?page=woocommerce_saphali" <? if($_GET["tab"] == '') echo 'class="current"';?>><span color="red">Переход на PRO версии</span></a> | </li>
113
+ <li><a href="admin.php?page=woocommerce_saphali&tab=1" <? if($_GET["tab"] == 1) echo 'class="current"';?>>Управление полями</a> | </li>
114
+ <li><a href="admin.php?page=woocommerce_saphali&tab=2" <? if($_GET["tab"] == 2) echo 'class="current"';?>>Число колонок в каталоге</a></li>
115
+
116
+ </ul>
117
+ <? if($_GET["tab"] == '') {?>
118
+ <div class="clear"></div>
119
+ <h2 class="woo-nav-tab-wrapper">Переход на PRO версии</h2>
120
+ <? include_once (SAPHALI_PLUGIN_DIR_PATH . 'go_pro.php'); ?>
121
+
122
+ <?php } elseif($_GET["tab"] == 2) {?>
123
+ <div class="clear"></div>
124
+ <h2 class="woo-nav-tab-wrapper">Число колонок в каталоге товаров и в рубриках</h2>
125
+ <? include_once (SAPHALI_PLUGIN_DIR_PATH . 'count-column.php'); ?>
126
+
127
+ <?php } elseif($_GET["tab"] == 1) {
128
+ global $woocommerce;
129
+ $f = $woocommerce->checkout();
130
+ if($_POST){
131
+ if($_POST["reset"] != 'All') {
132
+ if(is_array($_POST["billing"]["new_fild"])) {
133
+ foreach($_POST["billing"]["new_fild"] as $k_nf => $v_nf) {
134
+ if($k_nf == 'name')
135
+ foreach($v_nf as $v_nf_f)
136
+ $new_fild[] = $v_nf_f;
137
+ else {
138
+ foreach($v_nf as $k_nf_f => $v_nf_f) {
139
+ $addFild["billing"][$new_fild[$k_nf_f]][$k_nf] = $v_nf_f;
140
+ }
141
+ }
142
+ }
143
+ unset($_POST["billing"]["new_fild"]);
144
+ }
145
+ if(is_array($_POST["shipping"]["new_fild"])) {
146
+ foreach($_POST["shipping"]["new_fild"] as $k_nf => $v_nf) {
147
+ if($k_nf == 'name')
148
+ foreach($v_nf as $v_nf_f)
149
+ $new_fild[] = $v_nf_f;
150
+ else {
151
+ foreach($v_nf as $k_nf_f => $v_nf_f) {
152
+ $addFild["shipping"][$new_fild[$k_nf_f]][$k_nf] = $v_nf_f;
153
+ }
154
+ }
155
+ }
156
+ unset($_POST["shipping"]["new_fild"]);
157
+ }
158
+ if(is_array($_POST["order"]["new_fild"])) {
159
+ foreach($_POST["order"]["new_fild"] as $k_nf => $v_nf) {
160
+ if($k_nf == 'name')
161
+ foreach($v_nf as $v_nf_f)
162
+ $new_fild[] = $v_nf_f;
163
+ else {
164
+ foreach($v_nf as $k_nf_f => $v_nf_f) {
165
+ $addFild["order"][$new_fild[$k_nf_f]][$k_nf] = $v_nf_f;
166
+ }
167
+ }
168
+ }
169
+ unset($_POST["order"]["new_fild"]);
170
+ }
171
+ $filds = $f->checkout_fields;
172
+ foreach($filds["billing"] as $key_post => $value_post) {
173
+ $filds_new["billing"][$_POST["billing"][$key_post]["order"]][$key_post] = $value_post;
174
+ foreach($value_post as $k_post=> $v_post){
175
+ if($_POST["billing"][$key_post]['public'] != 'on') {
176
+ $filds_new["billing"][$_POST["billing"][$key_post]["order"]][$key_post]["public"] = false;
177
+ $fild_remove_filter["billing"][] = $key_post;
178
+ } else {$filds_new["billing"][$_POST["billing"][$key_post]["order"]][$key_post]["public"] = true;}
179
+ if($k_post == 'required') {$_POST["billing"][$key_post]['required'] = ($_POST["billing"][$key_post]['required'] == 'on') ? true : false ; }
180
+
181
+ if( $_POST["billing"][$key_post][$k_post] != $v_post && isset($_POST["billing"][$key_post][$k_post]) ) {
182
+ $filds_new["billing"][$_POST["billing"][$key_post]["order"]][$key_post][$k_post] = $_POST["billing"][$key_post][$k_post];
183
+ }
184
+
185
+ }
186
+ unset($_POST["billing"][$key_post]);
187
+ }
188
+ foreach($filds["shipping"] as $key_post => $value_post) {
189
+ $filds_new["shipping"][$_POST["shipping"][$key_post]["order"]][$key_post] = $value_post;
190
+
191
+ if($_POST["shipping"][$key_post]['public'] != 'on') {
192
+ $filds_new["shipping"][$_POST["shipping"][$key_post]["order"]][$key_post]["public"] = false;
193
+ $fild_remove_filter["shipping"][] = $key_post;
194
+ } else {$filds_new["shipping"][$_POST["shipping"][$key_post]["order"]][$key_post]["public"] = true;}
195
+
196
+ foreach($value_post as $k_post=> $v_post){
197
+ if($k_post == 'required') {$_POST["shipping"][$key_post]['required'] = ($_POST["shipping"][$key_post]['required'] == 'on') ? true : false ; }
198
+
199
+ if( $_POST["shipping"][$key_post][$k_post] != $v_post && isset($_POST["shipping"][$key_post][$k_post]) ) {
200
+ $filds_new["shipping"][$_POST["shipping"][$key_post]["order"]][$key_post][$k_post] = $_POST["shipping"][$key_post][$k_post];
201
+ }
202
+
203
+ }
204
+ unset($_POST["shipping"][$key_post]);
205
+ }
206
+
207
+ foreach($filds["order"] as $key_post => $value_post) {
208
+ $filds_new["order"][$_POST["order"][$key_post]["order"]][$key_post] = $value_post;
209
+ if($_POST["order"][$key_post]['public'] != 'on') {
210
+ $filds_new["order"][$_POST["order"][$key_post]["order"]][$key_post]["public"] = false;
211
+ $fild_remove_filter["order"][] = $key_post;
212
+ } else {$filds_new["order"][$_POST["order"][$key_post]["order"]][$key_post]["public"] = true;}
213
+ foreach($value_post as $k_post=> $v_post){
214
+ if($k_post == 'required') {$_POST["order"][$key_post]['required'] = ($_POST["order"][$key_post]['required'] == 'on') ? true : false ; }
215
+
216
+ if( $_POST["order"][$key_post][$k_post] != $v_post && isset($_POST["order"][$key_post][$k_post]) ) {
217
+ $filds_new["order"][$_POST["order"][$key_post]["order"]][$key_post][$k_post] = $_POST["order"][$key_post][$k_post];
218
+ }
219
+
220
+ }
221
+ unset($_POST["order"][$key_post]);
222
+ }
223
+
224
+ if(!empty($_POST["billing"])) {
225
+ foreach($_POST["billing"] as $k_post => $v_post) {
226
+ if($v_post["public"] != 'on' )
227
+ $fild_remove_filter["billing"][] = $k_post;
228
+ }
229
+ }
230
+ if(!empty($_POST["shipping"])) {
231
+ foreach($_POST["shipping"] as $k_post => $v_post) {
232
+ if($v_post["public"] != 'on' )
233
+ $fild_remove_filter["shipping"][] = $k_post;
234
+ }
235
+ }
236
+ if(!empty($_POST["order"])) {
237
+ foreach($_POST["order"] as $k_post => $v_post) {
238
+ if($v_post["public"] != 'on' )
239
+ $fild_remove_filter["order"][] = $k_post;
240
+ }
241
+ }
242
+ $filds_finish["billing"] = $filds_finish["shipping"] = $filds_finish["order"] = array();
243
+
244
+ for($i = 0; $i<count($filds_new["billing"]); $i++) {
245
+ if(isset($filds_new["billing"][$i]))
246
+ $filds_finish["billing"] = $filds_finish["billing"] + $filds_new["billing"][$i];
247
+ }
248
+ for($i = 0; $i<count($filds_new["shipping"]); $i++) {
249
+ if(isset($filds_new["shipping"][$i]))
250
+ $filds_finish["shipping"] = $filds_finish["shipping"] + $filds_new["shipping"][$i];
251
+ }
252
+ for($i = 0; $i<count($filds_new["order"]); $i++) {
253
+ if(isset($filds_new["order"][$i]))
254
+ $filds_finish["order"] = $filds_finish["order"] + $filds_new["order"][$i];
255
+ }
256
+
257
+ if(is_array($addFild["billing"]))
258
+ $filds_finish["billing"] = $filds_finish["billing"] + $addFild["billing"];
259
+ if(is_array($addFild["shipping"]))
260
+ $filds_finish["shipping"] = $filds_finish["shipping"] + $addFild["shipping"]+ $_POST["shipping"];
261
+ if(is_array($addFild["order"]))
262
+ $filds_finish["order"] = $filds_finish["order"] + $addFild["order"] + $_POST["order"];
263
+
264
+ if(is_array($_POST["billing"]))
265
+ $filds_finish["billing"] = $filds_finish["billing"] + $_POST["billing"];
266
+ if(is_array($_POST["shipping"]))
267
+ $filds_finish["shipping"] = $filds_finish["shipping"] + $_POST["shipping"];
268
+ if(is_array($_POST["order"]))
269
+ $filds_finish["order"] = $filds_finish["order"] + $_POST["order"];
270
+
271
+ $filds_finish_filter = $filds_finish;
272
+ if(is_array($fild_remove_filter["billing"])) {
273
+ foreach($fild_remove_filter["billing"] as $v_filt){
274
+ unset($filds_finish_filter["billing"][$v_filt]);
275
+ }
276
+ }
277
+ if(is_array($fild_remove_filter["shipping"])) {
278
+ foreach($fild_remove_filter["shipping"] as $v_filt){
279
+ unset($filds_finish_filter["shipping"][$v_filt]);
280
+ }
281
+ }
282
+ if(is_array($fild_remove_filter["order"])) {
283
+ foreach($fild_remove_filter["order"] as $v_filt){
284
+ unset($filds_finish_filter["order"][$v_filt]);
285
+ }
286
+ }
287
+ if(!update_option('woocommerce_saphali_filds',$filds_finish))add_option('woocommerce_saphali_filds',$filds_finish);
288
+ if(!update_option('woocommerce_saphali_filds_filters',$filds_finish_filter))add_option('woocommerce_saphali_filds_filters',$filds_finish_filter);
289
+ } else {
290
+ delete_option('woocommerce_saphali_filds');
291
+ delete_option('woocommerce_saphali_filds_filters');
292
+ }
293
+ }
294
+
295
+ ?>
296
+ <div class="clear"></div>
297
+ <h3 class="nav-tab-wrapper woo-nav-tab-wrapper" style="text-align: center;">Управление полями на странице заказа и на странице профиля</h3>
298
+
299
+ <h2 align="center">Реквизиты оплаты</h2>
300
+ <form action="" method="post">
301
+ <table class="wp-list-table widefat fixed posts" cellspacing="0">
302
+ <thead>
303
+ <tr>
304
+ <th width="115px">Название</th>
305
+ <th>Заголовок</th>
306
+ <th>Текст в поле</th>
307
+ <th>Обязательное</th>
308
+
309
+ <th>Обубликовать</th>
310
+
311
+ <th>Удалить/Добавить</th>
312
+ </tr>
313
+ </thead>
314
+ <tfoot>
315
+ <tr>
316
+ <th>Название</th>
317
+ <th>Заголовок</th>
318
+ <th>Текст в поле</th>
319
+ <th>Обязательное</th>
320
+
321
+ <th>Обубликовать</th>
322
+
323
+ <th>Удалить/Добавить</th>
324
+ </tr>
325
+ </tfoot>
326
+ <tbody id="the-list" class="myTable">
327
+ <?
328
+
329
+ $count = 0;
330
+
331
+ $checkout_fields = get_option('woocommerce_saphali_filds');
332
+
333
+ if(is_array($checkout_fields["billing"])) $f->checkout_fields["billing"] = $checkout_fields["billing"];
334
+ foreach($f->checkout_fields["billing"] as $key => $value) {
335
+ if(empty($value['public']) && !is_array($checkout_fields["billing"])) $value['public'] = true;
336
+ ?>
337
+ <tr>
338
+ <td><input value='<?=$key?>' type="text" name="billing[<?=$key?>][name]" /></td>
339
+ <td><input value='<?=$value['label']?>' type="text" name="billing[<?=$key?>][label]" /></td>
340
+ <td><input value='<?=$value['placeholder']?>' type="text" name="billing[<?=$key?>][placeholder]" /></td>
341
+ <td><input <? if($value['required']) echo 'checked'?> type="checkbox" name="billing[<?=$key?>][required]" /></td>
342
+
343
+ <td><input <? if($value['public']) echo 'checked';?> type="checkbox" name="billing[<?=$key?>][public]" /></td>
344
+
345
+ <td><input rel="sort_order" id="order_count" type="hidden" name="billing[<?=$key?>][order]" value="<?=$count?>" />
346
+ <input type="button" class="button" id="billing_delete" value="Удалить -"/></td>
347
+ </tr>
348
+ <? $count++;
349
+ }
350
+ ?>
351
+ <tr class="nodrop nodrag">
352
+ <td></td>
353
+ <td></td>
354
+ <td></td>
355
+ <td></td>
356
+
357
+ <td></td>
358
+
359
+ <td><input type="button" class="button" id="billing" value="Добавить +"/></td>
360
+ </tr>
361
+ </tbody>
362
+ </table>
363
+
364
+ <h2 align="center">Реквизиты доставки</h2>
365
+ <table class="wp-list-table widefat fixed posts" cellspacing="0">
366
+ <thead>
367
+ <tr>
368
+ <th width="115px">Название</th>
369
+ <th>Заголовок</th>
370
+ <th>Текст в поле</th>
371
+ <th>Обязательное</th>
372
+
373
+ <th>Обубликовать</th>
374
+
375
+ <th>Удалить/Добавить</th>
376
+ </tr>
377
+ </thead>
378
+ <tfoot>
379
+ <tr>
380
+ <th>Название</th>
381
+ <th>Заголовок</th>
382
+ <th>Текст в поле</th>
383
+ <th>Обязательное</th>
384
+
385
+ <th>Обубликовать</th>
386
+
387
+ <th>Удалить/Добавить</th>
388
+ </tr>
389
+ </tfoot>
390
+ <tbody id="the-list" class="myTable">
391
+ <? $count = 0;
392
+ if(is_array($checkout_fields["shipping"])) $f->checkout_fields["shipping"] = $checkout_fields["shipping"];
393
+ foreach($f->checkout_fields["shipping"] as $key => $value) {
394
+ if( empty($value['public']) && !is_array($checkout_fields["billing"]) ) $value['public'] = true;
395
+ ?>
396
+ <tr>
397
+ <td><input disabled value=<?=$key?> type="text" name="shipping[<?=$key?>][name]" /></td>
398
+ <td><input value='<?=$value['label']?>' type="text" name="shipping[<?=$key?>][label]" /></td>
399
+ <td><input value='<?=$value['placeholder']?>' type="text" name="shipping[<?=$key?>][placeholder]" /></td>
400
+ <td><input <? if($value['required']) echo 'checked'?> type="checkbox" name="shipping[<?=$key?>][required]" /></td>
401
+
402
+ <td><input <? if($value['public']) echo 'checked';?> type="checkbox" name="shipping[<?=$key?>][public]" /></td>
403
+
404
+ <td><input rel="sort_order" id="order_count" type="hidden" name="shipping[<?=$key?>][order]" value="<?=$count?>" /><input type="button" class="button" id="billing_delete" value="Удалить -"/></td>
405
+ </tr>
406
+ <? $count++;
407
+ }
408
+ ?>
409
+ <tr class="nodrop nodrag">
410
+ <td></td>
411
+ <td></td>
412
+ <td></td>
413
+
414
+ <td></td>
415
+ <td></td>
416
+
417
+ <td><input type="button" class="button" id="shipping" value="Добавить +"/></td>
418
+ </tr>
419
+
420
+ </tbody>
421
+ </table>
422
+ <br />
423
+ <h2 align="center">Дополнительные поля</h2>
424
+ <table class="wp-list-table widefat fixed posts" cellspacing="0">
425
+ <thead>
426
+ <tr>
427
+ <th width="120px">Название</th>
428
+ <th>Заголовок</th>
429
+ <th>Текст в поле</th>
430
+ <th>Тип поля</th>
431
+ <th>Обубликовать</th>
432
+
433
+ <th>Удалить/Добавить</th>
434
+ </tr>
435
+ </thead>
436
+ <tfoot>
437
+ <tr>
438
+ <th>Название</th>
439
+ <th>Заголовок</th>
440
+ <th>Текст в поле</th>
441
+ <th>Тип поля</th>
442
+ <th>Обубликовать</th>
443
+
444
+ <th>Удалить/Добавить</th>
445
+ </tr>
446
+ </tfoot>
447
+ <tbody id="the-list" class="myTable">
448
+ <? $count = 0;
449
+ if(is_array($checkout_fields["order"])) $f->checkout_fields["order"] = $checkout_fields["order"];
450
+ foreach($f->checkout_fields["order"] as $key => $value) {
451
+ if(empty($value['public']) && !is_array($checkout_fields["billing"])) $value['public'] = true;
452
+ ?>
453
+ <tr>
454
+ <td><input disabled value=<?=$key?> type="text" name="order[<?=$key?>][name]" /></td>
455
+ <td><input value='<?=$value['label']?>' type="text" name="order[<?=$key?>][label]" /></td>
456
+ <td><input value='<?=$value['placeholder']?>' type="text" name="order[<?=$key?>][placeholder]" /></td>
457
+ <td><input value='<?=$value['type']?>' type="text" name="order[<?=$key?>][type]" /></td>
458
+ <td><input <? if($value['public']) echo 'checked';?> type="checkbox" name="order[<?=$key?>][public]" /></td>
459
+
460
+ <td><input id="order_count" rel="sort_order" type="hidden" name="order[<?=$key?>][order]" value="<?=$count?>" /><input type="button" class="button" id="billing_delete" value="Удалить -"/></td>
461
+ </tr>
462
+ <? $count++;
463
+ }
464
+ ?>
465
+ <tr class="nodrop nodrag">
466
+ <td></td>
467
+ <td></td>
468
+ <td></td>
469
+ <td></td>
470
+ <td></td>
471
+
472
+ <td><input type="button" class="button" id="order" value="Добавить +"/></td>
473
+ </tr>
474
+ </tbody>
475
+ </table><br />
476
+ <input type="submit" class="button alignleft" value="Сохранить"/>
477
+ </form>
478
+ <form action="" method="post">
479
+ <input type="hidden" name="reset" value="All"/>
480
+ <input type="submit" class="button alignright" value="Восстановить поля по умолчанию"/>
481
+ </form>
482
+
483
+ <script>
484
+ jQuery('.button#billing').live('click',function() {
485
+ var obj = jQuery(this).parent().parent();
486
+ obj.html('<td><input value="new_fild'+(parseInt(obj.parent().find('tr td input#order_count:last').val(),10)+1)+'" type="text" name="billing[new_fild][name][]" /></td><td><input value="" type="text" name="billing[new_fild][label][]" /></td><td><input value="" type="text" name="billing[new_fild][placeholder][]" /></td><td><input checked type="checkbox" name="billing[new_fild][required][]" /></td><td><input checked type="checkbox" name="billing[new_fild][public][]" /></td><td><input id="order_count" rel="sort_order" type="hidden" name="billing[new_fild][order][]" value="'+(parseInt(obj.parent().find('tr td input#order_count:last').val(),10)+1)+'" /><input type="button" class="button" id="billing_delete" value="Удалить -"/></td>');
487
+ obj.removeClass('nodrop nodrag');
488
+ obj.after('<tr class="nodrop nodrag"><td></td><td></td><td></td><td></td><td></td><td><input type="button" class="button" id="billing" value="Добавить +"/></td></tr>');
489
+ });
490
+ jQuery('.button#shipping').live('click',function() {
491
+ var obj = jQuery(this).parent().parent();
492
+ obj.html('<td><input value="new_fild'+(parseInt(obj.parent().find('tr td input#order_count:last').val(),10)+1)+'" type="text" name="shipping[new_fild][name][]" /></td><td><input value="" type="text" name="shipping[new_fild][label][]" /></td><td><input value="" type="text" name="shipping[new_fild][placeholder][]" /></td><td><input checked type="checkbox" name="shipping[new_fild][required][]" /></td><td><input checked type="checkbox" name="shipping[new_fild][public][]" /></td><td><input id="order_count" rel="sort_order" type="hidden" name="shipping[new_fild][order][]" value="'+(parseInt(obj.parent().find('tr td input#order_count:last').val(),10)+1)+'" /><input type="button" class="button" id="billing_delete" value="Удалить -"/></td>');
493
+ obj.removeClass('nodrop nodrag');
494
+ obj.after('<tr class="nodrop nodrag"><td></td><td></td><td></td><td></td><td></td><td><input type="button" class="button" id="shipping" value="Добавить +"/></td></tr>');
495
+ });
496
+ jQuery('.button#order').live('click',function() {
497
+ var obj = jQuery(this).parent().parent();
498
+ obj.html('<td><input value="new_fild'+(parseInt(obj.parent().find('tr td input#order_count:last').val(),10)+1)+'" type="text" name="order[new_fild][name][]" /></td><td><input value="" type="text" name="order[new_fild][label][]" /></td><td><input value="" type="text" name="order[new_fild][placeholder][]" /></td><td><input checked type="text" name="order[new_fild][type][]" /></td><td><input checked type="checkbox" name="order[new_fild][public][]" /></td><td><input id="order_count" rel="sort_order" type="hidden" name="order[new_fild][order][]" value="'+(parseInt(obj.parent().find('tr td input#order_count:last').val(),10)+1)+'" /><input type="button" class="button" id="billing_delete" value="Удалить -"/></td>');
499
+ obj.removeClass('nodrop nodrag');
500
+ obj.after('<tr class="nodrop nodrag"><td></td><td></td><td></td><td></td><td></td><td><input type="button" class="button" id="order" value="Добавить +"/></td></tr>');
501
+ });
502
+
503
+ jQuery('.button#billing_delete').live('click',function() {
504
+ var obj = jQuery(this).parent().parent();
505
+ var obj_r = obj.parent();
506
+ obj.remove();
507
+ obj_r.find("tr").each(function(i, e){
508
+ jQuery(e).find("td input#order_count").val(i);
509
+ });
510
+ });
511
+ jQuery(document).ready(function() {
512
+ jQuery(".myTable").tableDnD({
513
+ onDragClass: "sorthelper",
514
+ onDrop: function(table, row) {
515
+ var data = new Object();
516
+ data.data = new Object();
517
+ data.key = jQuery(table).find("tr td input").attr("rel");
518
+ jQuery(row).fadeOut("fast").fadeIn("slow");
519
+
520
+ jQuery(table).find("tr").each(function(i, e){
521
+ var id = jQuery(e).find("td input#order_count").attr("id");
522
+ data.data[i] = id;
523
+ jQuery(e).find("td input#order_count").val(i);
524
+ });
525
+ }
526
+ });
527
+ });
528
+ </script>
529
+ <? } ?>
530
+
531
+ </div>
532
+ <?
533
+ }
534
+ }
535
+ function woocommerce_saphali_admin_menu() {
536
+ add_submenu_page('woocommerce', __('Настройки Saphali WC Lite', 'woocommerce'), __('Saphali WC Lite', 'woocommerce') , 'manage_woocommerce', 'woocommerce_saphali', 'woocommerce_saphali_page');
537
+ }
538
+ $column_count_saphali = get_option('column_count_saphali');
539
+ if(!empty($column_count_saphali)) {
540
+ global $woocommerce_loop;
541
+ $woocommerce_loop['columns'] = $column_count_saphali;
542
+ add_action("wp_head", 'print_script_columns', 10, 1);
543
+ function print_script_columns($woocommerce_loop) {
544
+ global $woocommerce_loop;
545
+ if($woocommerce_loop['columns'] > 0) {
546
+ ?>
547
+ <style type='text/css'>
548
+ ul.products li.product {
549
+ width:<? if($woocommerce_loop['columns'] <= 3 ) echo floor(100/$woocommerce_loop['columns'] - $woocommerce_loop['columns']); elseif($woocommerce_loop['columns'] > 3 )echo floor(100/$woocommerce_loop['columns'] - 4);?>%;
550
+ }
551
+ </style>
552
+ <?
553
+ }
554
+ }
555
+ }
556
+ ?>
screenshot-1.png ADDED
Binary file
screenshot-2.png ADDED
Binary file
screenshot-3.png ADDED
Binary file