Completed
Push — master ( 29e0f1...60ba61 )
by Auke
19s
created

lib/templates/pobject/explore.browse.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
	$ARCurrent->allnls = true;
3
	if (!($this->CheckLogin("read") && $this->CheckConfig())) {
4
		return;
5
	}
6
	if ($AR->user->data->language && is_object($ARnls) ) {
7
		$ARnls->setLanguage($AR->user->data->language);
8
	}
9
10
	require_once($this->store->get_config("code")."modules/mod_yui.php");
11
	if (!$ARCurrent->arTypeTree) {
12
		$this->call("typetree.ini");
13
	}
14
	if (!$items_per_page) {
15
		$items_per_page = 60;
16
	}
17
	$current_page = $page;
18
	if (!$current_page) {
19
		$current_page = 1;
20
	}
21
	$direction = $this->getvar('direction');
22
	$direction = ($direction=="DESC" ? 'DESC' : 'ASC');
23
	$orderqueries = array(
24
		"name" => array(
25
			"name.$nls.value",
26
			"name.none.value"
27
		),
28
		"ctime" => array(
29
			"time.ctime",
30
			"name.$nls.value",
31
			"name.none.value"
32
		),
33
		"path" => array(
34
			"path",
35
			"name.$nls.value",
36
			"name.none.value"
37
		),
38
		"mtime" => array(
39
			"time.mtime",
40
			"name.$nls.value",
41
			"name.none.value"
42
		),
43
		"priority" => array(
44
			"priority",
45
			"name.$nls.value",
46
			"name.none.value"
47
		)
48
	);
49
50
	// Aliases
51
	$orderqueries['modified'] = $orderqueries['mtime'];
52
	$orderqueries['filename'] = $orderqueries['path'];
53
54
	$order = $this->getvar('order');
55
	if (!$order || !$orderqueries[$order]) {
56
		$orderQuery = "name.$nls.value $direction, name.none.value $direction";
57
	} else {
58
		$orderQuery = [];
59
		foreach( $orderqueries[$order] as $orderpart ) {
60
			$orderQuery[] = $orderpart.' '.$direction;
61
		}
62
		$orderQuery = implode(',',$orderQuery);
63
	}
64
65
	$offset = ($current_page-1) * $items_per_page;
66
67
	$colDefs = [
68
		'svn'      => [ 'label' => $ARnls['svn'], 'sortable' => true ],
69
		'type'     => [ 'label' => $ARnls['type'], 'sortable' => true ],
70
		'name'     => [ 'label' => $ARnls['name'], 'sortable' => true ],
71
		'path'     => [ 'label' => $ARnls['path'], 'sortable' => true ],
72
		'filename' => [ 'label' => $ARnls['filename'], 'sortable' => true ],
73
		'size'     => [ 'label' => $ARnls['size'], 'sortable' => true, 'parser' => 'number' ],
74
		'owner'    => [ 'label' => $ARnls['owner'], 'sortable' => true ],
75
		'modified' => [ 'label' => $ARnls['modified'], 'sortable' => true, 'formatterfunc' => 'muze.ariadne.explore.dateFormatter', 'parserfunc' => 'muze.ariadne.explore.dateParser' ],
76
		'language' => [ 'label' => $ARnls['language'], 'sortable' => true ],
77
		'priority' => [ 'label' => $ARnls['priority'], 'sortable' => true, 'parser' => 'number' ],
78
		'icons'    => [ 'label' => '', 'sortable' => false, 'hide' => true ],
79
		'icon'     => [ 'label' => '', 'sortable' => false, 'hide' => true ]
80
	];
81
	if (!$AR->SVN->enabled || !$this->CheckSilent('layout')) {
82
		// No SVN if SVN is not enabled;
83
		array_shift($colDefs);
84
	}
85
	$args = array(
86
		"path"      => ($this instanceof \pshortcut && $this->data->path && ar::exists($this->data->path)) ? $this->data->path : $this->path,
87
		"query"     => '',
88
		"limit"     => $items_per_page,
89
		"offset"    => $offset,
90
		"sanity"    => true,
91
		"order"     => $orderQuery,
92
		"view"      => $viewtype,
93
		"total"     => ar::ls()->count(),
94
		"template"  => 'system.list.entry.php',
95
		"args"      => array(
96
			"columns" => $colDefs
97
		),
98
		"filters"   => array(),
99
		"method"    => "post"
100
	);
101
	$args['parent'] = $args['path'];
102
103
	$eventData = ar_events::fire( 'ariadne:onFilterGather', $args );
104
	$eventData = ar_events::fire( 'ariadne:onFilter', $eventData );
105
	if ( $eventData ) {
106
                $query = $eventData['query'];
107
                if ( $eventData['parent'] && $query ) {
108
                        $query = sprintf('object.parent="%s" and ( %s )', $eventData['parent'], $query );
109
                } else if ( !$query ) {
110
                        $query = sprintf('object.parent="%s"', $eventData['parent'] ? $eventData['parent'] : $eventData['path']);
111
                }
112
113
		$object_list = ar::get($eventData['path'])
114
		->find($query)
115
		->limit($eventData['limit'], $eventData['offset'])
0 ignored issues
show
The call to ar_storeFind::limit() has too many arguments starting with $eventData['offset'].

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
116
		->order($eventData['order'])
117
		->call($eventData['template'], $eventData['args']);
118
119
		$object_count = ar::get($eventData['path'])
120
		->find($query)
121
		->limit($eventData['limit'], $eventData['offset'])
0 ignored issues
show
The call to ar_storeFind::limit() has too many arguments starting with $eventData['offset'].

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
122
		->order($eventData['order'])
123
		->count();
124
125
		$divId = "resultsDiv";
126
		$tableId = "resultsTable";
127
128
		$colDefs = $eventData['args']['columns'];
129
		foreach($colDefs as $colKey => $colDef ) {
130
		        if ( $colDef['hide'] ) {
131
		                unset($colDefs[$colKey]);
132
                        } else {
133
        			$colDefs[$colKey] = array_merge($colDef, [ 'key' => $colKey ]);
134
                        }
135
		}
136
		$colDefs = array_values($colDefs);
137
		$viewtype       = $eventData['view'];
138
		$items_per_page = $eventData['limit'];
139
		$current_page   = floor($eventData['offset'] / $eventData['limit']);
140
141
		if( $viewtype == "details" ) {
142
			$datalist = array();
143
			foreach($object_list as $item) {
144
				$datarow = $item;
145
				if ($AR->SVN->enabled) {
146
					$datarow['svn'] = yui::getSvnIcon($item['svn']['status']);
147
				}
148
				$datarow['type']     = yui::getTypeIcon($item, $args['view']);
149
150
				if (is_array($item['language'])) {
151
					$datarow['language'] = '';
152
					foreach( $item['language'] as $key => $value ) {
153
						$datarow['language'] .= "<img class=\"flag\" src=\"".$AR->dir->images."nls/small/".$key.".gif\" alt=\"".htmlspecialchars($value)."\"> ";
154
					}
155
				}
156
				array_push($datalist, $datarow);
157
			}
158
		}
159
		$colDefsJson = json_encode($colDefs);
160
		echo <<< EOF
161
	<script type="text/javascript">
162
		muze.ariadne.explore.viewpane.path = '{$this->path}';
163
	</script>
164
165
	<script type="text/json" id='yuiTableDefinition'>
166
		{$colDefsJson}
167
	</script>
168
	<script type="text/javascript">
169
                muze.ariadne.explore.viewpane.load_handler = function() {
170
                        var myColumnDefs = JSON.parse(document.getElementById('yuiTableDefinition').innerHTML);
171
                        var myFieldDefs  = myColumnDefs;
172
                        var myDataSource = new YAHOO.util.DataSource(YAHOO.util.Dom.get("resultsTable"));
173
                        myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
174
                        myDataSource.responseSchema = {
175
                                fields: myFieldDefs
176
                        };
177
                        muze.ariadne.explore.viewpane.dataTable = new YAHOO.widget.DataTable("resultsDiv",
178
                                myColumnDefs,
179
                                myDataSource,
180
                                {}
181
                        );
182
                        muze.ariadne.explore.viewpane.dataTable.subscribe("rowClickEvent", muze.ariadne.explore.viewpane.rowClick);
183
                        muze.ariadne.explore.viewpane.dataTable.subscribe("rowDblclickEvent", muze.ariadne.explore.viewpane.rowDoubleClick);
184
                        muze.ariadne.explore.viewpane.dataTable.subscribe("rowMouseoverEvent", muze.ariadne.explore.viewpane.onEventHighlightRow);
185
                        muze.ariadne.explore.viewpane.dataTable.subscribe("rowMouseoutEvent", muze.ariadne.explore.viewpane.onEventUnhighlightRow);
186
                        muze.ariadne.explore.viewpane.dataTable.subscribe("columnSortEvent", muze.ariadne.explore.viewpane.onEventSortColumn);
187
                        muze.ariadne.explore.viewpane.hideRows();
188
                };
189
		YAHOO.util.Event.onDOMReady(function() {
190
			muze.event.attach( document.body, 'click', function(evt) {
191
				evt = muze.event.get(evt);
192
				muze.ariadne.explore.viewpane.onClick(evt);
193
			});
194
			YAHOO.util.Event.addListener('archildren', 'selected', muze.ariadne.explore.viewpane.onSelected);
195
			YAHOO.util.Event.addListener('archildren', 'clearselection', muze.ariadne.explore.viewpane.unselectItem);
196
		});
197
	</script>
198
	<div class="browse viewpane {$viewtype}" id="viewpane">
199
EOF;
200
		yui::showPaging($object_count, $items_per_page, $current_page, "top");
201
		if ($viewtype == "details") {
202
			yui::showTable($divId, $tableId, $colDefs, $datalist);
203
			echo <<<EOF
204
			<script type="text/javascript">
205
				YAHOO.util.Event.onDOMReady(muze.ariadne.explore.viewpane.load_handler);
206
			</script>
207
EOF;
208
		} else {
209
			yui::showList(['objects' => $object_list, 'total' => $object_count], $viewtype);
210
		}
211
		echo '<div class="viewpane_footer"></div>';
212
		yui::showPaging($object_count, $items_per_page, $current_page, "bottom");
213
		echo <<<EOF
214
	</div>
215
<article class="dropzoneInfo">
216
	<progress id="uploadprogress" class="uploadprogress" min="0" max="100" value="0">0</progress>
217
</article>
218
EOF;
219
		ar_events::fire('ariadne:onexplore', $eventData);
220
	}
221
?>