Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
126 lines (103 loc) · 3.39 KB

File metadata and controls

126 lines (103 loc) · 3.39 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
class SortableDataObject extends DataObjectDecorator
{
static $sortable_classes = array();
static $many_many_sortable_relations = array();
static $sort_dir = "ASC";
public static function set_sort_dir($dir)
{
self::$sort_dir = $dir;
}
public static function add_sortable_class($className)
{
if(!self::is_sortable_class($className)) {
DataObject::add_extension($className,'SortableDataObject');
self::$sortable_classes[] = $className;
}
}
public function extraStatics()
{
return array (
'db' => array (
'SortOrder' => 'Int'
)
);
}
public static function add_sortable_classes(array $classes)
{
foreach($classes as $class)
self::add_sortable_class($class);
}
public static function add_sortable_many_many_relation($ownerClass,$componentName)
{
list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($ownerClass)->many_many($componentName);
Object::add_static_var($ownerClass,'many_many_extraFields',array(
$componentName => array(
'SortOrder' => 'Int'
)));
if(!isset(self::$many_many_sortable_relations[$componentClass]))
self::$many_many_sortable_relations[$componentClass] = array();
self::$many_many_sortable_relations[$componentClass][$parentClass] = $table;
self::add_sortable_class($componentClass);
}
public static function remove_sortable_class($class)
{
Object::remove_extension($class, 'SortableDataObject');
}
public static function is_sortable_class($classname)
{
if(in_array($classname, self::$sortable_classes))
return true;
foreach(self::$sortable_classes as $class) {
if(is_subclass_of($classname, $class))
return true;
}
return Object::has_extension($classname, 'SortableDataObject');
}
public static function is_sortable_many_many($componentClass, $parentClass = null)
{
$map = self::$many_many_sortable_relations;
if($parentClass === null)
return isset($map[$componentClass]);
else {
if(isset($map[$componentClass]))
return isset($map[$componentClass][$parentClass]);
return false;
}
}
public static function get_join_tables($classname)
{
if(isset(self::$many_many_sortable_relations[$classname]))
return self::$many_many_sortable_relations[$classname];
return false;
}
public function augmentSQL(SQLQuery &$query)
{
if(empty($query->select) || $query->delete || in_array("COUNT(*)",$query->select) || in_array("count(*)",$query->select)) return;
$sort_field = false;
if($join_tables = self::get_join_tables($this->owner->class)) {
foreach($query->from as $from) {
if($sort_field) break;
foreach($join_tables as $join_table) {
if(stristr($from,$join_table)) {
$sort_field = "\"$join_table\".\"SortOrder\"";
if(isset($query->select['SortOrder'])) {
$query->select['SortOrder'] = "\"{$this->owner->class}\".SortOrder AS LocalSort";
}
break;
}
}
}
}
if(!$sort_field) $sort_field = "\"SortOrder\"";
if(!$query->orderby || ($query->orderby == $this->owner->stat('default_sort')))
$query->orderby = "$sort_field " . self::$sort_dir;
}
public function onBeforeWrite()
{
if(!$this->owner->ID) {
if($peers = DataObject::get($this->owner->class))
$this->owner->SortOrder = $peers->Count()+1;
}
}
}
Morty Proxy This is a proxified and sanitized view of the page, visit original site.