--- /dev/null
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\draggableviews\DraggableViews class.
+ */
+
+namespace Drupal\draggableviews;
+
+use Drupal\views\ViewExecutable;
+use Drupal\Component\Utility\Html;
+
+/**
+ * Class DraggableViews.
+ */
+class DraggableViews {
+
+ /**
+ * The view.
+ *
+ * @var \Drupal\views\ViewExecutable $view
+ */
+ public $view;
+
+ /**
+ * Constructs DraggableViewsRows object.
+ *
+ * @param \Drupal\views\ViewExecutable $view
+ * Views object.
+ */
+ public function __construct(ViewExecutable $view) {
+ $this->view = $view;
+ }
+
+ /**
+ * Get index by name and id.
+ */
+ public function getIndex($name, $id) {
+ foreach ($this->view->result as $item) {
+ if ($item->$name == $id) {
+ return $item->index;
+ }
+ }
+ return FALSE;
+ }
+
+ /**
+ * Get depth by index.
+ */
+ public function getDepth($index) {
+ if (!isset($this->view->result[$index])) {
+ return FALSE;
+ }
+ $row = $this->view->result[$index];
+ // If parent is available, set parent's depth +1.
+ return (!empty($row->draggableviews_structure_parent)) ? $this->getDepth($this->getIndex('nid', $row->draggableviews_structure_parent)) + 1 : 0;
+ }
+
+ /**
+ * Get parent by index.
+ */
+ public function getParent($index) {
+ return isset($this->view->result[$index]->draggableviews_structure_parent) ? $this->view->result[$index]->draggableviews_structure_parent : 0;
+ }
+
+ /**
+ * Get ancestor by index.
+ */
+ public function getAncestor($index) {
+ $row = $this->view->result[$index];
+ return !empty($row->draggableviews_structure_parent) ? $this->getAncestor($this->getIndex('nid', $row->draggableviews_structure_parent)) : $index;
+ }
+
+ /**
+ * Return value by it's name and index.
+ */
+ public function getValue($name, $index) {
+ return $this->view->result[$index]->$name;
+ }
+
+ /**
+ * Get HTML id for draggableviews table.
+ */
+ public function getHtmlId() {
+ return Html::getId('draggableviews-table-' . $this->view->id() . '-' . $this->view->current_display);
+ }
+
+}