public function Sortable()
 {
     return $this->IsReadOnly !== true && $this->controller->canEdit(Member::currentUser()) && (SortableDataObject::is_sortable_many_many($this->sourceClass()) || SortableDataObject::is_sortable_class($this->sourceClass()));
 }
	public function Sortable()
	{
	   return (SortableDataObject::is_sortable_many_many($this->sourceClass())) || (SortableDataObject::is_sortable_class($this->sourceClass()));
	}
	 public function dosort()
	 {
	    if(!empty($_POST) && is_array($_POST) && isset($this->urlParams['ID'])) {
	      $className = $this->urlParams['ID'];
	      if(stristr($className,"-") !== false) {
	       list($ownerClass, $className) = explode("-",$className);
	      }
	      $many_many = ((is_numeric($this->urlParams['OtherID'])) && SortableDataObject::is_sortable_many_many($className));
	      foreach($_POST as $group => $map) {
	        if(substr($group, 0, 7) == "record-") {
	          if($many_many) {
	            $controllerID = $this->urlParams['OtherID'];          
	            $candidates = singleton($ownerClass)->many_many();
	            if(is_array($candidates)) {
	              foreach($candidates as $name => $class)
	                if($class == $className) {
	                  $relationName = $name;
	                  break;
	                }
	            }
	            if(!isset($relationName)) return false;
	            list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($ownerClass)->many_many($relationName);            
	            foreach($map as $sort => $id)
	              DB::query("UPDATE \"$table\" SET \"SortOrder\" = $sort WHERE \"{$className}ID\" = $id AND \"{$ownerClass}ID\" = $controllerID");
	          }
	          else {
	            foreach($map as $sort => $id) {
	              $obj = DataObject::get_by_id($className, $id);
	              $obj->SortOrder = $sort;
	              $obj->write();
	            }           
	          }
	          break;
	        }
	      }
	    }
	}