Skip to content

Commit

Permalink
Merge pull request #70 from symphonists/integration
Browse files Browse the repository at this point in the history
Version 2.3.0
  • Loading branch information
nitriques committed Oct 7, 2015
2 parents 4491163 + 34328e3 commit 2f96e90
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 29 deletions.
14 changes: 10 additions & 4 deletions assets/order_entries.publish.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,11 @@

// Process sort order
oldSorting = getState();
startValue = parseInt(table.find('.order-entries-item').eq(0).text(),10);
if (table.find('.order-entries-item').length > 0){
startValue = parseInt(table.find('.order-entries-item').eq(0).text(),10);
} else {
startValue = parseInt(table.find('tbody tr').eq(0).data('order'),10);
}
var assumedStartValue = Symphony.Context.get('env').pagination['max-rows'] * (Symphony.Context.get('env').pagination['current'] - 1) + 1;
if (startValue == 0 || direction == 'asc' && startValue < assumedStartValue) {
startValue = assumedStartValue;
Expand Down Expand Up @@ -68,15 +72,17 @@
oldSorting = newSorting;

// Update indexes
var items = table.find('.order-entries-item');
var items = table.find('tbody tr');
items.each(function(index) {
if(direction == 'asc') {
$(this).text(index + startValue);
$(this).data('order',index + startValue);
$(this).find('.order-entries-item').text(index + startValue);
}
else {
var largest = startValue;
if ( items.length > largest ) largest = items.length;
$(this).text(largest - index);
$(this).data('order',largest - index);
$(this).find('.order-entries-item').text(largest - index);
}
});
},
Expand Down
17 changes: 17 additions & 0 deletions extension.driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,23 @@ public function adjustTable($context) {
if($this->force_sort == 'yes') {
$table->setAttribute('data-order-entries-force', 'true');
}

$field = FieldManager::fetch($this->field_id);

if ($field && $field->get('show_column') == 'no'){

// sort order is not provided by field, so add manually
$tbody = $table->getChildByName('tbody',0);

//not looping as only the first row is required for sorting and is far more efficient
$tr = $tbody->getChildByName('tr',0);

$entry_id = str_replace('id-', '', $tr->getAttribute('id'));
$entry = current(EntryManager::fetch($entry_id));
$data = $entry->getData($this->field_id);
$order = $field->getParameterPoolValue($data);
$tr->setAttribute('data-order',$order);
}

break;
}
Expand Down
8 changes: 6 additions & 2 deletions extension.meta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,14 @@
</author>
</authors>
<releases>
<release version="2.2.1" date="2015-01-26" min="2.5" max='2.6.x'>
<release version="2.3.0" date="2015-08-11" min="2.5" max="2.6.x">
- Added filtered ordering
- Bug fixes
</release>
<release version="2.2.1" date="2015-01-26" min="2.5" max="2.6.x">
- Fix entry selection
</release>
<release version="2.2.0" date="2015-01-22" min="2.5" max='2.6.x'>
<release version="2.2.0" date="2015-01-22" min="2.5" max="2.6.x">
- Add contextual Ordering using backend/frontend filters
- Add Disable Pagination Option
</release>
Expand Down
45 changes: 22 additions & 23 deletions fields/field.order_entries.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,26 +41,15 @@ function processRawFieldData($data, &$status, &$message = null, $simulate = fals
$status = self::__OK__;
$increment_subsequent_order = false;

$filters = Symphony::Database()->fetchCol('Field',"SHOW COLUMNS FROM tbl_entries_data_{$this->get('id')} WHERE Field like 'field_%';");
// for now if there are any filters completely ignore any override.
if (!empty($filters)){
$filterString = implode(',', $filters);
$current_values = Symphony::Database()->fetch("
SELECT value, {$filterString}
FROM tbl_entries_data_{$this->get('id')}
WHERE entry_id=".$entry_id."
");
$result= array();
foreach ($current_values as $key => $row) {
foreach ($row as $col => $value) {
$result[$col][$key] = $value;
}
}
return $result;
$filters = Symphony::Database()->fetchCol('Field',
"SHOW COLUMNS FROM tbl_entries_data_{$this->get('id')} WHERE Field like 'field_%';"
);

if ($entry_id != null) {
$entry_id = General::intval($entry_id);
}

if($entry_id) {

$new_value = $data;
$current_value = Symphony::Database()->fetchVar("value", 0, "
SELECT value
Expand Down Expand Up @@ -218,11 +207,16 @@ private function updateFilterTable(){

//change the value format to match the filtered fields stored
foreach ($currentFilters as $key => $value) {
$currentFilters[$key] = substr($value, 6);
$currentFilter = substr($value, 6);
if (!empty($currentFilter)) {
$currentFilters[$key] = $currentFilter;
} else {
unset($currentFilters[$key]);
}
}

$newFilters = array_diff($filteredFields, $currentFilters);
$removedFilters = array_diff($currentFilters, $filteredFields);
$newFilters = array_filter(array_diff($filteredFields, $currentFilters));
$removedFilters = array_filter(array_diff($currentFilters, $filteredFields));

foreach ($removedFilters as $key => $field_id) {
Symphony::Database()->query("ALTER TABLE `tbl_entries_data_{$orderFieldId}` DROP COLUMN `field_{$field_id}`");
Expand All @@ -231,7 +225,6 @@ private function updateFilterTable(){
foreach ($newFilters as $key => $field_id) {
//maybe in the future fields can give supported filters until then using a varchar for flexibility
$fieldtype = "varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL";

Symphony::Database()->query("ALTER TABLE `tbl_entries_data_{$orderFieldId}` ADD COLUMN `field_{$field_id}`{$fieldtype}");
}

Expand Down Expand Up @@ -409,14 +402,20 @@ private function getOrderValue($data){
$filterableFields = $this->get('filtered_fields');

//there are no filters to apply so should just be a single value
if (empty($filterableFields)) return $data['value'];
if (empty($filterableFields)) {
return $data['value'];
}

$filterableFields = explode(',', $filterableFields);
$section_id = $this->get('parent_section');

$orderEntriesExtension = ExtensionManager::create('order_entries');
$filters = $orderEntriesExtension->getFilters($filterableFields,$section_id);

// if there are no filter, bail out
if (empty($filters)) {
return $data['value'];
}

if (!is_array($data['value'])){
foreach ($data as $key => $value) {
Expand Down Expand Up @@ -448,7 +447,7 @@ private function getOrderValue($data){

if ( empty($keys) ){
//this view is not sorted
return 0;
return current($data['value']);
} else {
return $data['value'][current($keys)];
}
Expand Down

0 comments on commit 2f96e90

Please sign in to comment.