/**
  * Generates the form used for adding snippets
  * @return {Form} Form used to add snippets
  */
 public function AddForm()
 {
     $sng = singleton('Snippet');
     $fields = $sng->getCMSFields();
     $validator = $sng->getCMSValidator();
     $actions = new FieldList(FormAction::create('doAdd', _t('CodeBank.CREATE', '_Create'))->addExtraClass('ss-ui-action-constructive')->setAttribute('data-icon', 'accept')->setUseButtonTag(true));
     $form = CMSForm::create($this, 'AddForm', $fields, $actions)->setHTMLID('Form_AddForm');
     $form->setValidator($validator);
     $form->disableDefaultAction();
     $form->addExtraClass('cms-add-form cms-edit-form');
     $form->setResponseNegotiator($this->getResponseNegotiator());
     $form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));
     $form->addExtraClass('center ' . $this->BaseCSSClasses());
     $form->setAttribute('data-pjax-fragment', 'CurrentForm');
     //Handle Language id in url
     if ($this->request->getVar('LanguageID')) {
         $langField = $form->Fields()->dataFieldByName('LanguageID');
         if ($langField && $langField->Value() == '') {
             $langField->setValue(intval(str_replace('language-', '', $this->request->getVar('LanguageID'))));
         }
     }
     //Handle folder id in url (or post)
     if ($this->request->getVar('FolderID')) {
         $folder = SnippetFolder::get()->byID(intval($this->request->getVar('FolderID')));
         if (!empty($folder) && $folder !== false && $folder->ID != 0) {
             $langField = $form->Fields()->dataFieldByName('LanguageID')->setValue($folder->ParentID);
             $form->Fields()->replaceField('LanguageID', $langField->performReadonlyTransformation());
             $form->Fields()->push(new HiddenField('FolderID', 'FolderID', $folder->ID));
         }
     } else {
         if ($this->request->postVar('FolderID')) {
             $folder = SnippetFolder::get()->byID(intval($this->request->postVar('FolderID')));
             if (!empty($folder) && $folder !== false && $folder->ID != 0) {
                 $langField = $form->Fields()->dataFieldByName('LanguageID')->setValue($folder->ParentID);
                 $form->Fields()->replaceField('LanguageID', $langField->performReadonlyTransformation());
                 $form->Fields()->push(new HiddenField('FolderID', 'FolderID', $folder->ID));
             }
         }
     }
     $this->extend('updateAddForm', $form);
     //Display message telling user to run dev/build because the version numbers are out of sync
     if (CB_VERSION != '@@VERSION@@' && CodeBankConfig::CurrentConfig()->Version != CB_VERSION . ' ' . CB_BUILD_DATE) {
         $form->insertBefore(new LiteralField('<p class="message error">' . _t('CodeBank.UPDATE_NEEDED', '_A database upgrade is required please run {startlink}dev/build{endlink}.', array('startlink' => '<a href="dev/build?flush=all">', 'endlink' => '</a>')) . '</p>'), 'LanguageID');
     } else {
         if ($this->hasOldTables()) {
             $form->insertBefore(new LiteralField('<p class="message warning">' . _t('CodeBank.MIGRATION_AVAILABLE', '_It appears you are upgrading from Code Bank 2.2.x, your old data can be migrated {startlink}click here to begin{endlink}, though it is recommended you backup your database first.', array('startlink' => '<a href="dev/tasks/CodeBankLegacyMigrate">', 'endlink' => '</a>')) . '</p>'), 'LanguageID');
         }
     }
     $form->Actions()->push(new LiteralField('CodeBankVersion', '<p class="codeBankVersion">Code Bank: ' . $this->getVersion() . '</p>'));
     Requirements::javascript(CB_DIR . '/javascript/CodeBank.EditForm.js');
     return $form;
 }
 /**
  * @return Array Map of Snippet Folder IDs
  */
 public function snippetFoldersIncluded()
 {
     if ($this->_cache_snippet_ids === null) {
         $this->populateSnippetIDs();
     }
     if (empty($this->_cache_snippet_ids)) {
         return array();
     }
     $ids = array();
     $q = SnippetFolder::get();
     if (isset($this->params['LanguageID']) && !empty($this->params['LanguageID'])) {
         $q = $q->filter('LanguageID', intval($this->params['LanguageID']));
     }
     $q = $q->filter('Snippets.ID', array_keys($this->_cache_snippet_ids));
     return $q->column('ID');
 }
 /**
  * Deletes a folder
  * @param {stdClass} $data Data passed from ActionScript
  * @return {array} Standard response base
  */
 public function moveSnippet($data)
 {
     $response = CodeBank_ClientAPI::responseBase();
     //Ensure logged in
     if (!Permission::check('CODE_BANK_ACCESS')) {
         $response['status'] = 'EROR';
         $response['message'] = _t('CodeBankAPI.PERMISSION_DENINED', '_Permission Denied');
         return $response;
     }
     $snippet = Snippet::get()->byID(intval($data->id));
     if (empty($snippet) || $snippet === false || $snippet->ID == 0) {
         $response['status'] = "EROR";
         $response['message'] = _t('CodeBankAPI.SNIPPET_NOT_FOUND', '_Snippet not found');
         return $response;
     }
     if ($data->folderID != 0) {
         $snippetFolder = SnippetFolder::get()->byID(intval($data->folderID));
         if (empty($snippetFolder) || $snippetFolder === false || $snippetFolder->ID == 0) {
             $response['status'] = "EROR";
             $response['message'] = _t('CodeBankAPI.FOLDER_DOES_NOT_EXIST', '_Folder does not exist');
             return $response;
         }
         if ($snippetFolder->LanguageID != $snippet->LanguageID) {
             $response['status'] = "EROR";
             $response['message'] = _t('CodeBankAPI.LANGUAGE_NOT_SAME', '_Folder is not in the same language as the snippet');
             return $response;
         }
     }
     try {
         $snippet->FolderID = $data->folderID;
         $snippet->write();
         $response['status'] = "HELO";
     } catch (Exception $e) {
         $response['status'] = "EROR";
         $response['message'] = "Internal Server error occured";
     }
     return $response;
 }
 /**
  * Deletes a folder node
  */
 public function deleteFolder()
 {
     $folder = SnippetFolder::get()->byID(intval(str_replace('folder-', '', $this->request->getVar('ID'))));
     if (empty($folder) || $folder === false || $folder->ID == 0) {
         $this->response->setStatusCode(404, _t('CodeBank.FOLDER_NOT_FOUND', '_Folder could not be found'));
         return;
     }
     $folder->delete();
     return 'HELO';
 }