Subdomain Posts
None | 13 min ago
None | 13 min ago
None | 1 hour ago
None | 3 hours ago
None | 6 hours ago
None | 6 hours ago
None | 7 hours ago
None | 10 hours ago
None | 13 hours ago
None | 19 hours ago
Recent Posts
SQL | 7 sec ago
None | 8 sec ago
PHP | 15 sec ago
PHP | 24 sec ago
PHP | 1 min ago
PHP | 1 min ago
None | 2 min ago
OCaml | 2 min ago
None | 3 min ago
None | 4 min ago
Sitereport
Find cool info about any domain on the internet?
visit sitereport
Free Subdomains
Want a pastebin.com sub-domain for your community?
learn more...
What is pastebin?
Pastebin is a website that hosts all your text & code on dedicated servers for easy sharing.
learn more...
Learn a little bit about the new Pastebin.com on our help page. hide message
By VKS on the 2nd of Jul 2009 12:30:20 PM Download | Raw | Embed | Report
  1. public function change_position_all($id1, $id2, $before = FALSE)
  2.         {
  3.                 if (!is_a($id1, get_class($this))) {
  4.                         $id1 = self::factory($this->object_name, $id1);
  5.                 }
  6.                
  7.                 if (!is_a($id2, get_class($this))) {
  8.                         $id2 = self::factory($this->object_name, $id2);
  9.                 }
  10.                
  11.                 if ($id1->level_column <> $id2->level_column) {
  12.             throw new Kohana_User_Exception('Error change position to node', 'Cannot move nodes with different levels');
  13.         }
  14.                
  15.                 if ($before == TRUE) {
  16.             if ($id1->lft > $id2->lft) {
  17.                 $sql = 'UPDATE ' . $this->table_name . ' SET '
  18.                 . $this->right_column . ' = CASE WHEN ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id1->rgt . ' THEN ' . $this->right_column . ' - ' . ($id1->lft - $id2->lft) . ' '
  19.                 . 'WHEN ' . $this->left_column . ' BETWEEN ' . $id2->lft . ' AND ' . ($id1->lft - 1) . ' THEN ' . $this->right_column . ' +  ' . ($id1->rgt - $id1->lft + 1) . ' ELSE ' . $this->right_column . ' END, '
  20.                 . $this->left_column . ' = CASE WHEN ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id1->rgt . ' THEN ' . $this->left_column . ' - ' . ($id1->lft - $id2->lft) . ' '
  21.                 . 'WHEN ' . $this->left_column . ' BETWEEN ' . $id2->lft . ' AND ' . ($id1->lft - 1) . ' THEN ' . $this->left_column . ' + ' . ($id1->rgt - $id1->lft + 1) . ' ELSE ' . $this->left_column . ' END '
  22.                 . 'WHERE ' . $this->left_column . ' BETWEEN ' . $id2->lft . ' AND ' . $id1->rgt;
  23.             } else {
  24.                 $sql = 'UPDATE ' . $this->table_name . ' SET '
  25.                 . $this->right_column . ' = CASE WHEN ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id1->rgt . ' THEN ' . $this->right_column . ' + ' . (($id2->lft - $id1->lft) - ($id1->rgt - $id1->lft + 1)) . ' '
  26.                 . 'WHEN ' . $this->left_column . ' BETWEEN ' . ($id1->rgt + 1) . ' AND ' . ($id2->lft - 1) . ' THEN ' . $this->right_column . ' - ' . (($id1->rgt - $id1->lft + 1)) . ' ELSE ' . $this->right_column . ' END, '
  27.                 . $this->left_column . ' = CASE WHEN ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id1->rgt . ' THEN ' . $this->left_column . ' + ' . (($id2->lft - $id1->lft) - ($id1->rgt - $id1->lft + 1)) . ' '
  28.                 . 'WHEN ' . $this->left_column . ' BETWEEN ' . ($id1->rgt + 1) . ' AND ' . ($id2->lft - 1) . ' THEN ' . $this->left_column . ' - ' . ($id1->rgt - $id1->lft + 1) . ' ELSE ' . $this->left_column . ' END '
  29.                 . 'WHERE ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . ($id2->lft - 1);
  30.             }
  31.         }
  32.                 else
  33.                 {
  34.             if ($id1->lft > $id2->lft) {
  35.                 $sql = 'UPDATE ' . $this->table_name . ' SET '
  36.                 . $this->right_column . ' = CASE WHEN ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id1->rgt . ' THEN ' . $this->right_column . ' - ' . ($id1->lft - $id2->lft - ($id2->rgt - $id2->lft + 1)) . ' '
  37.                 . 'WHEN ' . $this->left_column . ' BETWEEN ' . ($id2->rgt + 1) . ' AND ' . ($id1->lft - 1) . ' THEN ' . $this->right_column . ' +  ' . ($id1->rgt - $id1->lft + 1) . ' ELSE ' . $this->right_column . ' END, '
  38.                 . $this->left_column . ' = CASE WHEN ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id1->rgt . ' THEN ' . $this->left_column . ' - ' . ($id1->lft - $id2->lft - ($id2->rgt - $id2->lft + 1)) . ' '
  39.                 . 'WHEN ' . $this->left_column . ' BETWEEN ' . ($id2->rgt + 1) . ' AND ' . ($id1->lft - 1) . ' THEN ' . $this->left_column . ' + ' . ($id1->rgt - $id1->lft + 1) . ' ELSE ' . $this->left_column . ' END '
  40.                 . 'WHERE ' . $this->left_column . ' BETWEEN ' . ($id2->rgt + 1) . ' AND ' . $id1->rgt;
  41.             } else {
  42.                 $sql = 'UPDATE ' . $this->table_name . ' SET '
  43.                 . $this->right_column . ' = CASE WHEN ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id1->rgt . ' THEN ' . $this->right_column . ' + ' . ($id2->rgt - $id1->rgt) . ' '
  44.                 . 'WHEN ' . $this->left_column . ' BETWEEN ' . ($id1->rgt + 1) . ' AND ' . $id2->rgt . ' THEN ' . $this->right_column . ' - ' . (($id1->rgt - $id1->lft + 1)) . ' ELSE ' . $this->right_column . ' END, '
  45.                 . $this->left_column . ' = CASE WHEN ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id1->rgt . ' THEN ' . $this->left_column . ' + ' . ($id2->rgt - $id1->rgt) . ' '
  46.                 . 'WHEN ' . $this->left_column . ' BETWEEN ' . ($id1->rgt + 1) . ' AND ' . $id2->rgt . ' THEN ' . $this->left_column . ' - ' . ($id1->rgt - $id1->lft + 1) . ' ELSE ' . $this->left_column . ' END '
  47.                 . 'WHERE ' . $this->left_column . ' BETWEEN ' . $id1->lft . ' AND ' . $id2->rgt;
  48.             }
  49.                 }
  50.                
  51.                 $this->lock();
  52.                
  53.                 $this->db->query($sql);
  54.                
  55.                 $this->unlock();
  56.                
  57.                 $this->reload();
  58.         }
Submit a correction or amendment below. Make A New Post
To highlight particular lines, prefix each line with @h@
Syntax highlighting:
Post expiration:
Post exposure:
Name / Title:
Email: