/**
  * Refreshes the file list. If passed an array of ids, it will add those to the list.
  *
  * @todo Add some better error handling.
  * @param SS_HTTPRequest
  * @return string|SS_Viewer
  */
 public function refresh(SS_HTTPRequest $r)
 {
     if ($r->requestVar('ids')) {
         $id = reset($r->requestVar('ids'));
         if ($file = DataObject::get_by_id("File", (int) $id)) {
             $this->processFile($file);
         } else {
             die("File {$id} doesn't exist");
         }
     } else {
         $file = $this->File();
     }
     return $this->customise(array('File' => $file))->renderWith($this->AttachedFilesTemplate);
 }
 /**
  * This may need to be optimised. We'll just have to see how it performs.
  *
  * @param SS_HTTPRequest $req
  * @return array
  */
 public function downloads(SS_HTTPRequest $req)
 {
     $downloads = new ArrayList();
     $member = Member::currentUser();
     if (!$member || !$member->exists()) {
         $this->httpError(401);
     }
     // create a dropdown for sorting
     $sortOptions = Config::inst()->get('DownloadableAccountPageController', 'sort_options');
     if ($sortOptions) {
         $sort = $req->requestVar('sort');
         if (empty($sort)) {
             reset($sortOptions);
             $sort = key($sortOptions);
         }
         $sortControl = new DropdownField('download-sort', 'Sort By:', $sortOptions, $sort);
     } else {
         $sort = 'PurchaseDate';
         $sortControl = '';
     }
     // create a list of downloads
     $orders = $member->getPastOrders();
     if (!empty($orders)) {
         foreach ($orders as $order) {
             if ($order->DownloadsAvailable()) {
                 $downloads->merge($order->getDownloads());
             }
         }
     }
     Requirements::javascript(SHOP_DOWNLOADABLE_FOLDER . '/javascript/AccountPage_downloads.js');
     return array('Title' => 'Digital Purchases', 'Content' => '', 'SortControl' => $sortControl, 'HasDownloads' => $downloads->count() > 0, 'Downloads' => $downloads->sort($sort));
 }
 protected function getToken(SS_HTTPRequest $request)
 {
     $token = $request->requestVar('token');
     if (!$token) {
         $token = $request->getHeader('X-Auth-Token');
     }
     return $token;
 }
Esempio n. 4
0
 /**
  * Delete a file
  *
  * @param SS_HTTPRequest
  */
 public function deletefile(SS_HTTPRequest $r)
 {
     if ($file = DataObject::get_by_id("File", (int) $r->requestVar('id'))) {
         $file->delete();
         return new SS_HTTPResponse("OK", 200);
     }
     return false;
 }
 function GET(SS_HTTPRequest $request)
 {
     // If we get a request var set as 'Error', trigger an errpr
     if ($request->requestVar('Error')) {
         $this->addResponseHeader('x-exception-id', '1');
         return $this->respondWithError(404);
     }
     // Normal response - set a header, and respond
     $this->addResponseHeader('x-some-sideinfo', 'Zap!');
     return $this->respondWith('ID', 'Baz', 'Qux');
 }
Esempio n. 6
0
	public function index(SS_HTTPRequest $r) {
		if(isset($_FILES["Filedata"]) && is_uploaded_file($_FILES["Filedata"]["tmp_name"])) {
			$upload_folder = urldecode($r->requestVar('uploadFolder'));
			if(isset($_REQUEST['FolderID'])) {
				if($folder = DataObject::get_by_id("Folder", Convert::raw2sql($_REQUEST['FolderID']))) {
					$upload_folder = UploadifyField::relative_asset_dir($folder->Filename);
				}
			}
			$ext = strtolower(end(explode('.', $_FILES['Filedata']['name'])));
			$class = in_array($ext, UploadifyField::$image_extensions) ? $r->requestVar('imageClass') : $r->requestVar('fileClass');
			$file = new $class();
			$u = new Upload();
			$u->loadIntoFile($_FILES['Filedata'], $file, $upload_folder);
			$file->write();
			echo $file->ID;
		} 
		else {
			echo ' '; // return something or SWFUpload won't fire uploadSuccess
		}	
	}
 public function spellcheck(SS_HTTPRequest $request)
 {
     $this->owner->request->addHeader('Content-Type', 'text/plain');
     $this->owner->request->addHeader('Content-Encoding', 'UTF-8');
     $this->owner->request->addHeader('Expires', 'Mon, 26 Jul 1007 05:00:00 GMT');
     $this->owner->request->addHeader('Last-Modified', SS_DateTime::now()->Format('D, d M Y H:i:s') . ' GMT');
     $this->owner->request->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
     $this->owner->request->addHeader('Cache-Control', 'post-check=0, pre-check=0');
     $this->owner->request->addHeader('Pragma', 'no-cache');
     $engine = self::$engine;
     $shell = self::$shell;
     if (!defined('SPELLCHECK_POST_SS3')) {
         $engine = Config::inst()->get('CMSSpellChecker', 'engine') ?: $engine;
         $shell = Config::inst()->get('CMSSpellChecker', 'shell') ?: $shell;
     }
     if (!defined('PSPELL_FAST')) {
         define('PSPELL_FAST', 1);
     }
     # Fast mode (least number of suggestions)
     if (!defined('PSPELL_NORMAL')) {
         define('PSPELL_NORMAL', 2);
     }
     # Normal mode (more suggestions)
     if (!defined('PSPELL_BAD_SPELLERS')) {
         define('PSPELL_BAD_SPELLERS', 3);
     }
     # Slow mode (a lot of suggestions)
     $config['general.engine'] = $engine;
     $config['PSpell.mode'] = PSPELL_FAST;
     $config['PSpell.spelling'] = '';
     $config['PSpell.jargon'] = '';
     $config['PSpell.encoding'] = '';
     $config['PSpellShell.mode'] = PSPELL_FAST;
     $config['PSpellShell.aspell'] = $shell;
     $config['PSpellShell.tmp'] = '/tmp';
     $output = array('id' => null, 'result' => null, 'error' => null);
     $raw = $request->requestVar('json_data') ?: '';
     if (!$raw) {
         $raw = '' . file_get_contents('php://input');
     }
     if (!$raw) {
         $output['error'] = array('errstr' => 'Could not get raw post data', 'errfile' => '', 'errline' => null, 'errcontext' => '', 'level' => 'FATAL');
         echo json_encode($output);
         exit;
     }
     $input = json_decode($raw, true);
     if (isset($config['general.engine'])) {
         $spellchecker = new $config['general.engine']($config);
         $result = call_user_func_array(array($spellchecker, $input['method']), $input['params']);
     }
     $output['id'] = $input['id'];
     $output['result'] = $result;
     echo json_encode($output);
 }
 function preview(SS_HTTPRequest $request)
 {
     $strValue = $request->requestVar('markdown');
     if ($strValue) {
         $shortCodeParser = ShortcodeParser::get_active();
         $strValue = $shortCodeParser->parse($strValue);
         $parseDown = new Parsedown();
         $strValue = $parseDown->text($strValue);
     }
     return $strValue;
 }
 /**
  * 
  * @param SS_HTTPRequest $request
  */
 public function run($request)
 {
     $memberEmail = $request->requestVar('email');
     $message = trim($request->requestVar('message'));
     if (!$memberEmail) {
         echo 'Please provide an email, eg ?email=user@example.com' . PHP_EOL;
         exit(1);
     }
     $members = Member::get()->filter('Email', $memberEmail);
     if (!$members->count()) {
         echo 'Please provide an existing member email' . PHP_EOL;
         exit(1);
     }
     $member = $members->first();
     if (!$message) {
         echo 'Please provide a message, eg ?message=hello' . PHP_EOL;
         exit(1);
     }
     TimelineEvent::notify($member, $message);
     echo 'Member ' . $member->Email . ' has been notified' . PHP_EOL;
 }
 /**
  * Refreshes the file list. If passed an array of IDs in the request, 
  * it augments the list with those files.
  *
  * @param SS_HTTPRequest
  * @return SSViewer
  */
 public function refresh(SS_HTTPRequest $r)
 {
     if ($r->requestVar('ids')) {
         $ids = array_unique($r->requestVar('ids'));
         $files = new DataObjectSet();
         $implodestring = implode(',', $ids);
         $implodestring = preg_replace("/^[,]/", "", $implodestring);
         if ($set = DataObject::get("File", "`ID` IN ({$implodestring})")) {
             foreach ($set as $file) {
                 $this->processFile($file);
                 $files->push($file);
             }
             $files->merge($this->Files());
             $files->removeDuplicates();
         } else {
             die("File {$id} doesn't exist");
         }
     } else {
         $files = $this->Files();
     }
     return $this->customise(array('Files' => $files))->renderWith($this->AttachedFilesTemplate);
 }
 /**
  * A controller action that handles the reordering of the panels
  *
  * @param SS_HTTPRequest The current request
  * @return SS_HTTPResponse
  */
 public function sort(SS_HTTPRequest $r)
 {
     if ($sort = $r->requestVar('dashboard-panel')) {
         foreach ($sort as $index => $id) {
             if ($panel = DashboardPanel::get()->byID((int) $id)) {
                 if ($panel->MemberID == Member::currentUserID()) {
                     $panel->SortOrder = $index;
                     $panel->write();
                 }
             }
         }
     }
 }
Esempio n. 12
0
 public function getresults(SS_HTTPRequest $r)
 {
     $q = Convert::raw2sql($r->requestVar('q'));
     $results = DataObject::get($this->sourceClass, $this->labelField . " LIKE '%{$q}%'");
     if ($results) {
         $set = new DataObjectSet();
         foreach ($results->toDropdownMap('ID', $this->labelField) as $key => $val) {
             $set->push(new ArrayData(array('Key' => $key, 'Val' => $val)));
         }
     } else {
         $set = false;
     }
     return $this->customise(array('Results' => $set))->renderWith('LiveDropdownField_results');
 }
 /**
  * @param SS_HTTPRequest $req
  * @return string
  */
 public function search_suggest(SS_HTTPRequest $req)
 {
     /** @var SS_HTTPResponse $response */
     $response = $this->owner->getResponse();
     $callback = $req->requestVar('callback');
     // convert the search results into usable json for search-as-you-type
     if (ShopSearch::config()->search_as_you_type_enabled) {
         $searchVars = $req->requestVars();
         $searchVars[ShopSearch::config()->qs_query] = $searchVars['term'];
         unset($searchVars['term']);
         $results = ShopSearch::inst()->suggestWithResults($searchVars);
     } else {
         $results = array('suggestions' => ShopSearch::inst()->suggest($req->requestVar('term')));
     }
     if ($callback) {
         $response->addHeader('Content-type', 'application/javascript');
         $response->setBody($callback . '(' . json_encode($results) . ');');
     } else {
         $response->addHeader('Content-type', 'application/json');
         $response->setBody(json_encode($results));
     }
     return $response;
 }
 public function importlist(SS_HTTPRequest $request)
 {
     if ($id = $request->requestVar('FolderID')) {
         if (is_numeric($id)) {
             $files = DataObject::get("File", "\"ParentID\" = {$id} AND \"File\".\"ClassName\" != 'Folder'");
             if ($ext = $request->requestVar('FileExt')) {
                 $ext = str_replace('*.', '', $ext);
                 $ext_arr = explode(';', $ext);
                 $ext = ' AND (';
                 $x = 0;
                 foreach ($ext_arr as $e) {
                     if ($x++ == 0) {
                         $ext .= " Name LIKE '%.{$e}' ";
                     } else {
                         $ext .= " OR Name LIKE '%.{$e}' ";
                     }
                 }
                 $ext .= ')';
                 $files = DataObject::get("File", "ParentID = {$id} AND File.ClassName != 'Folder'" . $ext);
             } else {
                 $files = DataObject::get("File", "ParentID = {$id} AND File.ClassName != 'Folder'");
             }
             if ($files && $this->form) {
                 if ($record = $this->form->getRecord()) {
                     if ($relation_name = $this->getForeignRelationName($record)) {
                         foreach ($files as $f) {
                             if ($f->{$relation_name}) {
                                 $f->Disabled = true;
                             }
                         }
                     }
                 }
             }
             return $this->customise(array('Files' => $files))->renderWith('ImportList');
         }
     }
 }
 /**
  * Looks first for the X-Pull-Regions header and then for a __regions__ get/post var.
  * @return array
  */
 protected function getPulledRegionIDs()
 {
     if (!$this->request) {
         return array();
     }
     $header = $this->request->getHeader(self::PULL_HEADER);
     if (!empty($header)) {
         return explode(',', $header);
     }
     $param = $this->request->requestVar(self::PULL_PARAM);
     if (!empty($param)) {
         return explode(',', $param);
     }
     return array();
 }
Esempio n. 16
0
 public function checkAuthToken(SS_HTTPRequest $r)
 {
     if ($token = $r->requestVar('token')) {
         if ($member = Member::get()->filter('AuthenticationToken', $token)->first()) {
             if ($member->checkToken()) {
                 $member->refreshToken();
                 $member->login();
                 return true;
             }
             return $this->owner->httpError(403, "Token is expired");
         }
         return $this->owner->httpError(403, "Invalid token");
     }
     return false;
 }
Esempio n. 17
0
 /**
  * @param \SS_HTTPRequest $request
  * @return \SS_HTTPResponse
  */
 public function history(\SS_HTTPRequest $request)
 {
     $data = [];
     $list = $this->environment->DeployHistory('DeployStarted');
     $fromTimestamp = $request->requestVar('from');
     if ($fromTimestamp) {
         $from = SS_Datetime::create();
         $from->setValue($fromTimestamp);
         $list = $list->filter('LastEdited:GreaterThan', $from->Format('Y-m-d H:i:s'));
     }
     foreach ($list as $deployment) {
         $data[] = $this->formatter->getDeploymentData($deployment);
     }
     return $this->getAPIResponse(['list' => $data], 200);
 }
 public function update(SS_HTTPRequest $r)
 {
     $ret = array();
     $filter = null;
     if ($filter = $r->requestVar('q')) {
         $filter = "{$this->filteredField} = '" . Convert::raw2sql($filter) . "'";
     }
     $results = DataObject::get($this->sourceClass, $filter);
     if ($results) {
         foreach ($results as $r) {
             $ret[$r->{$this->returnKey}] = $r->{$this->returnLabel};
         }
     }
     return Convert::array2json($ret);
 }
 /**
  * @param SS_HTTPRequest $req
  * @return string
  */
 public function notify(SS_HTTPRequest $req)
 {
     $notify = Config::inst()->get('FBComments', 'notify');
     $notifyFrom = Config::inst()->get('FBComments', 'notify_from');
     $notifySubject = Config::inst()->get('FBComments', 'notify_subject');
     if (!is_array($notify) || count($notify) <= 0) {
         return $this->httpError(401);
     }
     foreach ($notify as $to) {
         $email = new Email($notifyFrom, $to, $notifySubject);
         $email->setTemplate('FBCommentNotificationEmail');
         $email->populateTemplate(array('URL' => $req->requestVar('page'), 'SiteConfig' => SiteConfig::current_site_config()));
         $email->send();
     }
     return 'ok';
 }
 /**
  * Redirect back. Uses either the HTTP_REFERER or a manually set request-variable called
  * _REDIRECT_BACK_URL.
  * This variable is needed in scenarios where not HTTP-Referer is sent (
  * e.g when calling a page by location.href in IE).
  * If none of the two variables is available, it will redirect to the base
  * URL (see {@link Director::baseURL()}).
  * @uses redirect()
  */
 function redirectBack()
 {
     if ($this->request->requestVar('_REDIRECT_BACK_URL')) {
         $url = $this->request->requestVar('_REDIRECT_BACK_URL');
     } else {
         if ($this->request->getHeader('Referer')) {
             $url = $this->request->getHeader('Referer');
         } else {
             $url = Director::baseURL();
         }
     }
     // absolute redirection URLs not located on this site may cause phishing
     if (Director::is_site_url($url)) {
         return $this->redirect($url);
     } else {
         return false;
     }
 }
 public function importlist(SS_HTTPRequest $request)
 {
     if ($id = $request->requestVar('FolderID')) {
         if (is_numeric($id)) {
             $files = DataObject::get("File", "ParentID = {$id} AND ClassName != 'Folder'");
             if ($files && $this->form) {
                 if ($record = $this->form->getRecord()) {
                     if ($relation_name = $this->getForeignRelationName($record)) {
                         foreach ($files as $f) {
                             if ($f->{$relation_name}) {
                                 $f->Disabled = true;
                             }
                         }
                     }
                 }
             }
             return $this->customise(array('Files' => $files))->renderWith('ImportList');
         }
     }
 }
 /**
  * Refresh the attached files box. This method may receive a list of IDs,
  * but it will only accept the last one in the list. 
  *
  * @param SS_HTTPRequest $request
  * @return SSViewer
  */
 public function refresh(SS_HTTPRequest $request)
 {
     ContentNegotiator::disable();
     if ($id = $request->requestVar('FileIDs')) {
         if (!is_numeric($id)) {
             $arr = explode(',', $id);
             if (is_array($arr)) {
                 $id = end($arr);
             }
         }
         $this->setValue($id);
         $name = null;
         if (is_numeric($id)) {
             if ($file = DataObject::get_by_id($this->baseFileClass, Convert::raw2sql($id))) {
                 $name = $file->Name;
             }
         }
     }
     return Convert::array2json(array('html' => $this->renderWith('AttachedFiles'), 'success' => sprintf(_t('Uploadify.SUCCESSFULADDSINGLE', 'Added file "%s" successfully.'), $name)));
 }
 public function getresults(SS_HTTPRequest $r)
 {
     $q = Convert::raw2sql($r->requestVar('q'));
     $qArray = explode(" ", $q);
     if (is_array($qArray) && count($qArray) > 1) {
         $where = $this->labelField . "!='' ";
         foreach ($qArray as $value) {
             $where .= "AND " . $this->labelField . " LIKE '%{$value}%' ";
         }
     } else {
         $where = $this->labelField . " LIKE '%{$q}%'";
     }
     $results = DataObject::get($this->sourceClass, $where);
     if ($results) {
         $set = new DataObjectSet();
         foreach ($results->toDropdownMap('ID', $this->labelField) as $key => $val) {
             $set->push(new ArrayData(array('Key' => $key, 'Val' => $val)));
         }
     } else {
         $set = false;
     }
     return $this->customise(array('Results' => $set))->renderWith('LiveDropdownField_results');
 }
 /**
  * Executes the main functionality of the input processor
  * @param  \SS_HTTPRequest $request Request to process
  * @return mixed
  */
 public function process(\SS_HTTPRequest $request)
 {
     $couponHolder = $this->getCouponHolder();
     if ($request->param('ID') == 'add') {
         $couponCode = $request->requestVar('couponcode');
         if (!$couponCode) {
             return ['Success' => false];
         }
         /** @var CouponInterface[] $dbCoupons */
         $dbCoupons = array_filter($this->getCouponsFromDatabase($couponCode), function ($coupon) {
             return $coupon instanceof CouponInterface && $coupon->isValid();
         });
         $coupons = $couponHolder->getCoupons();
         if (count($dbCoupons) > 0) {
             foreach ($dbCoupons as $coupon) {
                 $coupons[] = $coupon;
             }
             $couponHolder->setCoupons($coupons);
             return ['Success' => true];
         }
     } elseif ($request->param('ID') == 'remove') {
         /** @var CouponInterface[] $dbCoupons */
         $dbCoupons = array_filter($this->getCouponsFromDatabase($request->param('OtherID')), function ($coupon) {
             return $coupon instanceof CouponInterface;
         });
         $coupons = $couponHolder->getCoupons();
         if (count($dbCoupons) > 0) {
             foreach ($dbCoupons as $coupon) {
                 unset($coupons[$coupon->getIdentifier()->getFull()]);
             }
             $couponHolder->setCoupons($coupons);
             return ['Success' => true];
         }
     }
     return ['Success' => false];
 }
 /**
  * Returns the token from the request.
  *
  * Silverstripe doesn't include Authorization header in its requests. We should check it, because we can use the
  * mechanism in the tests.
  * @param \SS_HTTPRequest $request
  * @return String the token
  * @throws \Exception
  */
 public static function get_token($request)
 {
     // try to get the token from request object
     $tokenStrFromHeader = $request->getHeader('Authorization');
     $tokenStrFromVar = $request->requestVar('access_token');
     if (!empty($tokenStrFromHeader)) {
         // string must have format: type token
         return explode(' ', $tokenStrFromHeader)[1];
     } else {
         if (!empty($tokenStrFromVar)) {
             // try variables
             return $tokenStrFromVar;
         } else {
             if (function_exists('getallheaders')) {
                 // get all headers from apache server
                 $headers = getallheaders();
                 if (isset($headers['Authorization'])) {
                     return explode(' ', $headers['Authorization'])[1];
                 }
             }
         }
     }
     throw new \Exception("Token can't be read or was not specified");
 }
Esempio n. 26
0
 /**
  * Build snapshot move form.
  *
  * @param SS_HTTPRequest $request
  * @param DNDataArchive|null $dataArchive
  *
  * @return Form|SS_HTTPResponse
  */
 public function getMoveForm(SS_HTTPRequest $request, DNDataArchive $dataArchive = null)
 {
     $dataArchive = $dataArchive ? $dataArchive : DNDataArchive::get()->byId($request->requestVar('DataArchiveID'));
     $envs = $dataArchive->validTargetEnvironments();
     if (!$envs) {
         return $this->environment404Response();
     }
     $warningMessage = '<div class="alert alert-warning"><strong>Warning:</strong> This will make the snapshot ' . 'available to people with access to the target environment.<br>By pressing "Change ownership" you ' . 'confirm that you have considered data confidentiality regulations.</div>';
     $form = Form::create($this, 'MoveForm', FieldList::create(HiddenField::create('DataArchiveID', null, $dataArchive->ID), LiteralField::create('Warning', $warningMessage), DropdownField::create('EnvironmentID', 'Environment', $envs->map())->setEmptyString('Select an environment')), FieldList::create(FormAction::create('doMove', 'Change ownership')->addExtraClass('btn')));
     $form->setFormAction($this->getCurrentProject()->Link() . '/MoveForm');
     return $form;
 }
 /**
  * Get's the previous URL that lead up to the current request.
  *
  * NOTE: Honestly, this should be built into SS_HTTPRequest, but we can't depend on that right now... so instead,
  * this is being copied verbatim from Controller (in the framework).
  *
  * @param SS_HTTPRequest $request
  * @return string
  */
 protected function getBackURL(SS_HTTPRequest $request)
 {
     // Initialize a sane default (basically redirects to root admin URL).
     $controller = $this->getToplevelController();
     $url = method_exists($this->requestHandler, "Link") ? $this->requestHandler->Link() : $controller->Link();
     // Try to parse out a back URL using standard framework technique.
     if ($request->requestVar('BackURL')) {
         $url = $request->requestVar('BackURL');
     } else {
         if ($request->isAjax() && $request->getHeader('X-Backurl')) {
             $url = $request->getHeader('X-Backurl');
         } else {
             if ($request->getHeader('Referer')) {
                 $url = $request->getHeader('Referer');
             }
         }
     }
     return $url;
 }
 /** Send an email with a link to unsubscribe from all this user's newsletters */
 public function sendUnsubscribeLink(SS_HTTPRequest $request)
 {
     //get the form object (we just need its name to set the session message)
     $form = NewsletterContentControllerExtension::getUnsubscribeFormObject($this);
     $email = Convert::raw2sql($request->requestVar('email'));
     $recipient = Recipient::get()->filter('Email', $email)->First();
     if ($recipient) {
         //get the IDs of all the Mailing Lists this user is subscribed to
         $lists = $recipient->MailingLists()->column('ID');
         $listIDs = implode(',', $lists);
         $days = UnsubscribeController::get_days_unsubscribe_link_alive();
         if ($recipient->ValidateHash) {
             $recipient->ValidateHashExpired = date('Y-m-d H:i:s', time() + 86400 * $days);
             $recipient->write();
         } else {
             $recipient->generateValidateHashAndStore($days);
         }
         $templateData = array('FirstName' => $recipient->FirstName, 'UnsubscribeLink' => Director::absoluteBaseURL() . "unsubscribe/index/" . $recipient->ValidateHash . "/{$listIDs}");
         //send unsubscribe link email
         $email = new Email();
         $email->setTo($recipient->Email);
         $from = Email::getAdminEmail();
         $email->setFrom($from);
         $email->setTemplate('UnsubscribeLinkEmail');
         $email->setSubject(_t('Newsletter.ConfirmUnsubscribeSubject', "Confirmation of your unsubscribe request"));
         $email->populateTemplate($templateData);
         $email->send();
         $form->sessionMessage(_t('Newsletter.GoodEmailMessage', 'You have been sent an email containing an unsubscribe link'), "good");
     } else {
         //not found Recipient, just reload the form
         $form->sessionMessage(_t('Newsletter.BadEmailMessage', 'Email address not found'), "bad");
     }
     Controller::curr()->redirectBack();
 }
 /**
  * Get the whole tree of a part of the tree via an AJAX request.
  *
  * @param SS_HTTPRequest $request
  * @return string
  */
 public function tree(SS_HTTPRequest $request)
 {
     // Array sourceObject is an explicit list of values - construct a "flat tree"
     if (is_array($this->sourceObject)) {
         $output = "<ul class=\"tree\">\n";
         foreach ($this->sourceObject as $k => $v) {
             $output .= '<li id="selector-' . $this->name . '-' . $k . '"><a>' . $v . '</a>';
         }
         $output .= "</ul>";
         return $output;
     }
     // Regular source specification
     $isSubTree = false;
     $this->search = $request->requestVar('search');
     $ID = is_numeric($request->latestparam('ID')) ? (int) $request->latestparam('ID') : (int) $request->requestVar('ID');
     if ($ID && !$request->requestVar('forceFullTree')) {
         $obj = DataObject::get_by_id($this->sourceObject, $ID);
         $isSubTree = true;
         if (!$obj) {
             throw new Exception("TreeDropdownField->tree(): the object #{$ID} of type {$this->sourceObject} could not be found");
         }
     } else {
         if ($this->baseID) {
             $obj = DataObject::get_by_id($this->sourceObject, $this->baseID);
         }
         if (!$this->baseID || !$obj) {
             $obj = singleton($this->sourceObject);
         }
     }
     // pre-process the tree - search needs to operate globally, not locally as marking filter does
     if ($this->search != "") {
         $this->populateIDs();
     }
     if ($this->filterCallback || $this->search != "") {
         $obj->setMarkingFilterFunction(array($this, "filterMarking"));
     }
     $obj->markPartialTree($nodeCountThreshold = 30, $context = null, $this->childrenMethod, $this->numChildrenMethod);
     // allow to pass values to be selected within the ajax request
     if (isset($_REQUEST['forceValue']) || $this->value) {
         $forceValue = isset($_REQUEST['forceValue']) ? $_REQUEST['forceValue'] : $this->value;
         if (($values = preg_split('/,\\s*/', $forceValue)) && count($values)) {
             foreach ($values as $value) {
                 if (!$value || $value == 'unchanged') {
                     continue;
                 }
                 $obj->markToExpose($this->objectForKey($value));
             }
         }
     }
     $self = $this;
     $titleFn = function (&$child) use(&$self) {
         $keyField = $self->keyField;
         $labelField = $self->labelField;
         return sprintf('<li id="selector-%s-%s" data-id="%s" class="class-%s %s %s"><a rel="%d">%s</a>', Convert::raw2xml($self->getName()), Convert::raw2xml($child->{$keyField}), Convert::raw2xml($child->{$keyField}), Convert::raw2xml($child->class), Convert::raw2xml($child->markingClasses($self->numChildrenMethod)), $self->nodeIsDisabled($child) ? 'disabled' : '', (int) $child->ID, $child->obj($labelField)->forTemplate());
     };
     // Limit the amount of nodes shown for performance reasons.
     // Skip the check if we're filtering the tree, since its not clear how many children will
     // match the filter criteria until they're queried (and matched up with previously marked nodes).
     $nodeThresholdLeaf = Config::inst()->get('Hierarchy', 'node_threshold_leaf');
     if ($nodeThresholdLeaf && !$this->filterCallback && !$this->search) {
         $className = $this->sourceObject;
         $nodeCountCallback = function ($parent, $numChildren) use($className, $nodeThresholdLeaf) {
             if ($className == 'SiteTree' && $parent->ID && $numChildren > $nodeThresholdLeaf) {
                 return sprintf('<ul><li><span class="item">%s</span></li></ul>', _t('LeftAndMain.TooManyPages', 'Too many pages'));
             }
         };
     } else {
         $nodeCountCallback = null;
     }
     if ($isSubTree) {
         $html = $obj->getChildrenAsUL("", $titleFn, null, true, $this->childrenMethod, $this->numChildrenMethod, true, null, $nodeCountCallback);
         return substr(trim($html), 4, -5);
     } else {
         $html = $obj->getChildrenAsUL('class="tree"', $titleFn, null, true, $this->childrenMethod, $this->numChildrenMethod, true, null, $nodeCountCallback);
         return $html;
     }
 }
Esempio n. 30
0
 /**
  * Determines if a specified file exists
  * 
  * @param SS_HTTPRequest $request
  */
 public function fileexists(SS_HTTPRequest $request)
 {
     // Assert that requested filename doesn't attempt to escape the directory
     $originalFile = $request->requestVar('filename');
     if ($originalFile !== basename($originalFile)) {
         $return = array('error' => _t('File.NOVALIDUPLOAD', 'File is not a valid upload'));
     } else {
         $return = array('exists' => $this->checkFileExists($originalFile));
     }
     // Encode and present response
     $response = new SS_HTTPResponse(Convert::raw2json($return));
     $response->addHeader('Content-Type', 'application/json');
     if (!empty($return['error'])) {
         $response->setStatusCode(400);
     }
     return $response;
 }