Example #1
0
 function SaveProfile($data, $form)
 {
     //Check for a logged in member
     if ($CurrentMember = Member::currentUser()) {
         //Get InfusionSoft Api
         $app = $this->getInfusionSoftApi();
         $returnFields = array('Id');
         $conInfo = $app->findByEmail($data['Email'], $returnFields);
         //Check for another member with the same email address
         if ($member = DataObject::get_one("Member", "Email = '" . Convert::raw2sql($data['Email']) . "' AND ID != " . $CurrentMember->ID)) {
             $form->addErrorMessage("Email", 'Sorry, that Email address already exists.', "bad");
             Session::set("FormInfo.Form_EditProfileForm.data", $data);
             return $this->redirectBack();
         } elseif ($CurrentMember->Email != $data['Email'] && !empty($conInfo)) {
             $form->addErrorMessage("Email", 'Sorry, that Email address already exists.', "bad");
             Session::set("FormInfo.Form_EditProfileForm.data", $data);
             return $this->redirectBack();
         } else {
             //Update the InfusionSoft contact details
             $isConID = $CurrentMember->ISContactID;
             $conDat = array('FirstName' => $data['FirstName'], 'LastName' => $data['Surname'], 'Email' => $data['Email']);
             $app->updateCon($isConID, $conDat);
             //Update the member on site
             $form->saveInto($CurrentMember);
             $CurrentMember->write();
             $this->setMessage('Success', 'Your profile has been saved!');
             return $this->redirectBack();
         }
     } else {
         return Security::PermissionFailure($this->controller, 'You must <a href="register">registered</a> and logged in to edit your profile:');
     }
 }
 /**
  * Send email to subscribers, notifying them the thread has been created or post added.
  */
 public function notifySubscribers()
 {
     // all members id except current user
     $member_id = Member::currentUserID();
     $list = DataObject::get("Forum_Subscribers", "\"ForumID\" = '" . $this->owner->ForumID . "' AND \"MemberID\" != '{$member_id}'");
     if ($list) {
         foreach ($list as $obj) {
             $SQL_id = Convert::raw2sql((int) $obj->MemberID);
             // Get the members details
             $member = DataObject::get_one("Member", "\"Member\".\"ID\" = '{$SQL_id}'");
             if ($member) {
                 //error_log("email sent ".$member->Email);
                 $type = $obj->Type;
                 switch ($type) {
                     // send all email notification
                     case 'all':
                         $this->createEmail($member);
                         break;
                         // send new thread only email notification
                     // send new thread only email notification
                     case 'thread':
                         //if($this->owner->isFirstPost()){
                         $this->createEmail($member);
                         //}
                         break;
                         //
                     //
                     default:
                         break;
                 }
             }
         }
     }
 }
 public function testAddressBookWithReadonlyFieldForCountry()
 {
     $member = $this->objFromFixture("Member", "joebloggs");
     $this->logInAs($member);
     $this->controller->init();
     //reinit to connect up member
     // setup a single-country site
     $siteconfig = DataObject::get_one('SiteConfig');
     $siteconfig->AllowedCountries = "NZ";
     $siteconfig->write();
     $singlecountry = SiteConfig::current_site_config();
     $this->assertEquals("NZ", $singlecountry->getSingleCountry(), "Confirm that the website is setup as a single country site");
     // Open the Address Book page to test form submission with a readonly field
     $page = $this->get("account/addressbook/");
     // goto address book page
     $this->assertEquals(200, $page->getStatusCode(), "a page should load");
     $this->assertContains("Form_CreateAddressForm_Country_readonly", $page->getBody(), "The Country field is readonly");
     $this->assertNotContains("<option value=\"NZ\">New Zealand</option>", $page->getBody(), "Dropdown field is not shown");
     // Create an address
     $data = array("Address" => "234 Hereford Street", "City" => "Christchurch", "State" => "Canterbury", "PostalCode" => "8011");
     $this->submitForm("Form_CreateAddressForm", "action_saveaddress", $data);
     $this->assertEquals(200, $page->getStatusCode(), "a page should load");
     $nz_address = Address::get()->filter('PostalCode', '8011')->sort('ID')->last();
     $this->assertEquals("NZ", $nz_address->Country, "New address successfully saved; even with a Country readonly field in the form");
     $this->assertEquals("234 Hereford Street", $nz_address->Address, "Ensure that the Address is 234 Hereford Street");
 }
	function testOneToManyAssociationWithDecorator() {
		// Fails in RestfulServerTest
		// Error: Object::__call() Method 'RelatedObjects' not found in class 'RestfulServerTest_Comment' 
		$contact = new DataObjectDecoratorTest_Member();
		$contact->Website = "http://www.example.com";
		
		$object = new DataObjectDecoratorTest_RelatedObject();
		$object->FieldOne = "Lorem ipsum dolor";
		$object->FieldTwo = "Random notes";
		
		// The following code doesn't currently work:
		// $contact->RelatedObjects()->add($object);
		// $contact->write();
		
		// Instead we have to do the following
		$contact->write();
		$object->ContactID = $contact->ID;
		$object->write();
		
		unset($contact);
		
		$contact = DataObject::get_one("DataObjectDecoratorTest_Member", "Website='http://www.example.com'");
		
		$this->assertType('DataObjectDecoratorTest_RelatedObject', $contact->RelatedObjects()->First());
		$this->assertEquals("Lorem ipsum dolor", $contact->RelatedObjects()->First()->FieldOne);
		$this->assertEquals("Random notes", $contact->RelatedObjects()->First()->FieldTwo);
		$contact->delete();
	}
Example #5
0
 /**
  * Get the current site's ModuleManager, and creates a new one through 
  * {@link make_module_manager()} if none is found.
  *
  * @return ModuleManager
  */
 public static function current_module_manager()
 {
     if ($moduleManager = DataObject::get_one('ModuleManager')) {
         return $moduleManager;
     }
     return self::make_module_manager();
 }
 /**
  * Get the order via url 'ID' or form submission 'OrderID'.
  * It will check for permission based on session id or member id.
  *
  * @return the order
  */
 public function orderfromid($extrafilter = null)
 {
     $orderid = Director::urlParam('ID');
     if (!$orderid) {
         $orderid = isset($_POST['OrderID']) ? $_POST['OrderID'] : null;
     }
     if (!is_numeric($orderid)) {
         return null;
     }
     $order = null;
     $filter = $this->orderfilter();
     if ($extrafilter) {
         $filter .= " AND {$extrafilter}";
     }
     $idfilter = $orderid ? " AND \"ID\" = {$orderid}" : "";
     //security filter to only allow viewing orders associated with this session, or member id
     $order = DataObject::get_one('Order', "\"Status\" NOT IN('Cart','AdminCancelled','MemberCancelled') AND " . $filter . $idfilter, true, "Created DESC");
     //if no id, then get first of latest orders for member or session id?
     /*
      //TODO: permission message on failure
     if(!$order){
     	//order doesn't exist, or don't have permission
     	$this->setSessionMessage($reason,'bad');
     }
     */
     return $order;
 }
Example #7
0
 /**
  * Find the given folder or create it both as {@link Folder} database records
  * and on the filesystem. If necessary, creates parent folders as well.
  * 
  * @param $folderPath string Absolute or relative path to the file.
  *  If path is relative, its interpreted relative to the "assets/" directory.
  * @return Folder
  */
 public static function find_or_make($folderPath)
 {
     // Create assets directory, if it is missing
     if (!file_exists(ASSETS_PATH)) {
         Filesystem::makeFolder(ASSETS_PATH);
     }
     $folderPath = trim(Director::makeRelative($folderPath));
     // replace leading and trailing slashes
     $folderPath = preg_replace('/^\\/?(.*)\\/?$/', '$1', $folderPath);
     $parts = explode("/", $folderPath);
     $parentID = 0;
     $item = null;
     foreach ($parts as $part) {
         if (!$part) {
             continue;
         }
         // happens for paths with a trailing slash
         $item = DataObject::get_one("Folder", sprintf("\"Name\" = '%s' AND \"ParentID\" = %d", Convert::raw2sql($part), (int) $parentID));
         if (!$item) {
             $item = new Folder();
             $item->ParentID = $parentID;
             $item->Name = $part;
             $item->Title = $part;
             $item->write();
         }
         if (!file_exists($item->getFullPath())) {
             Filesystem::makeFolder($item->getFullPath());
         }
         $parentID = $item->ID;
     }
     return $item;
 }
 /**
  * Check for default group, and if it doesn't exist, create it
  * Should be run under "requireDefaultRecords"
  * @param string $code
  * @param string $title
  * @param string $parent
  * @param array $permissions
  */
 public static function default_group($code, $title, $parentCode = null, $permissions = array())
 {
     $group = null;
     $action = null;
     if (!DataObject::get_one('Group', "Code = '" . $code . "'")) {
         $action = 'create';
         $group = new Group();
     } else {
         $action = 'update';
         $group = DataObject::get_one('Group', "Code = '" . $code . "'");
     }
     $group->Title = $title;
     $group->Code = $code;
     if ($parentCode) {
         $parentObj = DataObject::get_one("Group", "Code = '" . $parentCode . "'");
         $group->ParentID = $parentObj->ID;
     }
     $group->write();
     if (!empty($permissions)) {
         foreach ($permissions as $p) {
             Permission::grant($group->ID, $p);
         }
     }
     if ($action == 'create') {
         DB::alteration_message('Group ' . $title . ' (' . $code . ') has been created.', "created");
     }
     if ($action == 'update') {
         DB::alteration_message('Group ' . $title . ' (' . $code . ') has been updated.', "updated");
     }
     return $group;
 }
 public function testMultipleRowInsert()
 {
     $query = SQLInsert::create('"SQLInsertTestBase"');
     $query->addRow(array('"Title"' => 'First Object', '"Age"' => 10, '"Description"' => 'First the worst'));
     $query->addRow(array('"Title"' => 'Second object', '"Age"' => 12));
     $sql = $query->sql($parameters);
     // Only test this case if using the default query builder
     if (get_class(DB::get_conn()->getQueryBuilder()) === 'DBQueryBuilder') {
         $this->assertSQLEquals('INSERT INTO "SQLInsertTestBase" ("Title", "Age", "Description") VALUES (?, ?, ?), (?, ?, ?)', $sql);
     }
     $this->assertEquals(array('First Object', 10, 'First the worst', 'Second object', 12, null), $parameters);
     $query->execute();
     $this->assertEquals(2, DB::affected_rows());
     // Check inserted objects are correct
     $firstObject = DataObject::get_one('SQLInsertTestBase', array('"Title"' => 'First Object'), false);
     $this->assertNotEmpty($firstObject);
     $this->assertEquals($firstObject->Title, 'First Object');
     $this->assertEquals($firstObject->Age, 10);
     $this->assertEquals($firstObject->Description, 'First the worst');
     $secondObject = DataObject::get_one('SQLInsertTestBase', array('"Title"' => 'Second object'), false);
     $this->assertNotEmpty($secondObject);
     $this->assertEquals($secondObject->Title, 'Second object');
     $this->assertEquals($secondObject->Age, 12);
     $this->assertEmpty($secondObject->Description);
 }
 function run($request)
 {
     $orderStatusLogClassName = "OrderStatusLog";
     $submittedOrderStatusLogClassName = EcommerceConfig::get("OrderStatusLog", "order_status_log_class_used_for_submitting_order");
     if ($submittedOrderStatusLogClassName) {
         $sampleSubmittedStatusLog = DataObject::get_one($submittedOrderStatusLogClassName);
         if ($sampleSubmittedStatusLog) {
             $lastOrderStep = DataObject::get_one("OrderStep", "", "\"Sort\" DESC");
             if ($lastOrderStep) {
                 $joinSQL = "INNER JOIN \"{$orderStatusLogClassName}\" ON \"{$orderStatusLogClassName}\".\"OrderID\" = \"Order\".\"ID\"";
                 $whereSQL = "WHERE \"StatusID\" <> " . $lastOrderStep->ID . " AND \"{$orderStatusLogClassName}\".ClassName = '{$submittedOrderStatusLogClassName}'";
                 $count = DB::query("\r\n\t\t\t\t\t\tSELECT COUNT (\"Order\".\"ID\")\r\n\t\t\t\t\t\tFROM \"Order\"\r\n\t\t\t\t\t\t{$joinSQL}\r\n\t\t\t\t\t\t{$whereSQL}\r\n\t\t\t\t\t")->value();
                 $do = DB::query("\r\n\t\t\t\t\t\tUPDATE \"Order\"\r\n\t\t\t\t\t\t{$joinSQL}\r\n\t\t\t\t\t\tSET \"StatusID\" = " . $lastOrderStep->ID . "\r\n\t\t\t\t\t\t{$whereSQL}\r\n\t\t\t\t\t");
                 if ($count) {
                     DB::alteration_message("NOTE: {$count} records were updated.", "created");
                 } else {
                     DB::alteration_message("No records were updated.");
                 }
             } else {
                 DB::alteration_message("Could not find the last order step.", "deleted");
             }
         } else {
             DB::alteration_message("Could not find any submitted order logs.", "deleted");
         }
     } else {
         DB::alteration_message("Could not find a class name for submitted orders.", "deleted");
     }
 }
 public function transform($item, $parentObject, $duplicateStrategy)
 {
     $folderChildren = $item->stageChildren();
     $newFolder = new Folder();
     $parentId = $parentObject ? $parentObject->ID : 0;
     $existing = DataObject::get_one('File', '"ParentID" = \'' . Convert::raw2sql($parentId) . '\' and "Name" = \'' . Convert::raw2sql($item->Title) . '\'');
     if ($existing && $duplicateStrategy == ExternalContentTransformer::DS_SKIP) {
         // just return the existing children
         return new TransformResult($existing, $folderChildren);
     } else {
         if ($existing && $duplicateStrategy == ExternalContentTransformer::DS_OVERWRITE) {
             $newFolder = $existing;
         }
     }
     $newFolder->Name = $item->Title;
     $newFolder->Title = $item->Title;
     $newFolder->MenuTitle = $item->Title;
     $newFolder->ParentID = $parentObject->ID;
     $newFolder->Sort = 0;
     $newFolder->write();
     if (!file_exists($newFolder->getFullPath())) {
         mkdir($newFolder->getFullPath(), Filesystem::$folder_create_mask);
     }
     return new TransformResult($newFolder, $folderChildren);
 }
 function doRegister($data, Form $form)
 {
     //Check for existing member email address
     if ($member = DataObject::get_one("Member", "`Email` = '" . Convert::raw2sql($data['Email']) . "'")) {
         //Set error message
         $form->sessionMessage($data['Email'] . ". Sorry, that email address already exists. Please choose another.", 'bad');
         //Return back to form
         return $this->redirectBack();
         //return Director::redirectBack();
     } else {
         //Otherwise create new member and log them in
         $Member = new Member();
         $form->saveInto($Member);
         $Member->write();
         $Member->login();
         //Find or create the 'user' group
         if (!($userGroup = DataObject::get_one('Group', "Code = 'users'"))) {
             $userGroup = new Group();
             $userGroup->Code = "users";
             $userGroup->Title = "users";
             $userGroup->Write();
             $userGroup->Members()->add($Member);
         }
         //Add member to user group
         $userGroup->Members()->add($Member);
         //Get profile page
         if ($ProfilePage = DataObject::get_one('EditProfilePage')) {
             //echo "profile page exists";
             //Redirect to profile page with success message
             return $this->redirect($ProfilePage->Link());
         }
     }
 }
 /**
  * Tries to logon using the credentials in the SilverStripe database
  *
  * @access public
  *
  * @param  string $source Authentication source to be used 
  * @param  string $external_uid    The ID entered
  * @param  string $external_passwd The password of the user
  *
  * @return boolean  True if the authentication was a success, false 
  *                  otherwise
  */
 public function Authenticate($RAW_source, $RAW_external_uid, $RAW_external_passwd)
 {
     $SQL_identity = Convert::raw2sql($RAW_external_uid);
     // Default login (see Security::setDefaultAdmin())
     if (Security::check_default_admin($RAW_external_uid, $RAW_external_passwd)) {
         ExternalAuthenticator::AuthLog($RAW_external_uid . '.sstripe - Logging on with an Administrator account');
         $member = Security::findAnAdministrator();
     } else {
         $SQL_source = Convert::raw2sql($RAW_source);
         ExternalAuthenticator::AuthLog($RAW_external_uid . '.sstripe - Searching for user with source ' . $SQL_source . ' in database');
         $member = DataObject::get_one("Member", "\"Member\".\"External_UserID\" = '{$SQL_identity}'" . " AND \"Member\".\"External_SourceID\" = '{$SQL_source}'" . " AND \"Password\" IS NOT NULL");
         if ($member) {
             ExternalAuthenticator::AuthLog($RAW_external_uid . '.sstripe - User was found in database');
             if ($member->checkPassword($RAW_external_passwd) == false) {
                 ExternalAuthenticator::AuthLog($RAW_external_uid . '.sstripe - Password authentication failed');
                 $member = null;
             } else {
                 ExternalAuthenticator::AuthLog($RAW_external_uid . '.sstripe - Password authentication succeeded');
             }
         } else {
             ExternalAuthenticator::AuthLog($RAW_external_uid . '.sstripe - User was NOT found in database');
         }
     }
     if ($member) {
         return true;
     } else {
         ExternalAuthenticator::setAuthMessage(_t('ExternalAuthenticator.Failed'));
         return false;
     }
 }
 public function transform($item, $parentObject, $duplicateStrategy)
 {
     $newFile = $this->getTypeForFile($item->Name);
     $folderPath = $parentObject->getRelativePath();
     $parentId = $parentObject ? $parentObject->ID : 0;
     $filter = 'ParentID = \'' . Convert::raw2sql($parentId) . '\' and Title = \'' . Convert::raw2sql($item->Name) . '\'';
     $existing = DataObject::get_one('File', $filter);
     if ($existing && $duplicateStrategy == ExternalContentTransformer::DS_SKIP) {
         // just return the existing children
         return new TransformResult($existing, null);
     } else {
         if ($existing && $duplicateStrategy == ExternalContentTransformer::DS_OVERWRITE) {
             $newFile = $existing;
         }
     }
     //
     $newFile->Name = $item->Name;
     $newFile->Title = $item->Name;
     $newFile->MenuTitle = $item->Name;
     //
     $size = filesize($item->FilePath);
     $details = array('size' => $size, 'name' => $item->Name, 'tmp_name' => $item->FilePath);
     $upload = new FileLoader();
     $folderPath = trim(substr($folderPath, strpos($folderPath, '/')), '/');
     try {
         $upload->loadIntoFile($details, $newFile, $folderPath);
     } catch (ValidationException $ve) {
         // ignore for now, there should really be a proper error reporting mechanism though...
         SS_Log::log("File import failed: " . $ve->getMessage(), SS_Log::WARN);
     }
     return new TransformResult($newFile, null);
 }
 public function transform($item, $parentObject, $duplicateStrategy)
 {
     $pageChildren = $item->stageChildren();
     // okay, first we'll create the new page item,
     // and map a bunch of child information across
     $newFolder = new Folder();
     $parentId = $parentObject ? $parentObject->ID : 0;
     $existing = DataObject::get_one('File', '"ParentID" = \'' . Convert::raw2sql($parentId) . '\' and "Name" = \'' . Convert::raw2sql($item->Title) . '\'');
     if ($existing && $duplicateStrategy == ExternalContentTransformer::DS_SKIP) {
         // just return the existing children
         return new TransformResult($existing, $pageChildren);
     } else {
         if ($existing && $duplicateStrategy == ExternalContentTransformer::DS_OVERWRITE) {
             $newFolder = $existing;
         }
     }
     $newFolder->Name = $item->Title;
     $newFolder->Title = $item->Title;
     $newFolder->MenuTitle = $item->MenuTitle;
     // what else should we map across?
     // $newPage->MatrixId = $item->id;
     // $newPage->OriginalProperties = serialize($item->getRemoteProperties());
     $newFolder->ParentID = $parentObject->ID;
     $newFolder->Sort = 0;
     $newFolder->write();
     if (!file_exists($newFolder->getFullPath())) {
         mkdir($newFolder->getFullPath(), Filesystem::$folder_create_mask);
     }
     return new TransformResult($newFolder, $pageChildren);
 }
 /**
  * Convenience method to return links to cart related page.
  * 
  * @param String $type The type of cart page a link is needed for
  * @return String The URL to the particular page
  */
 function CartLink($type = 'Cart')
 {
     switch ($type) {
         case 'Account':
             if ($page = DataObject::get_one('AccountPage')) {
                 return $page->Link();
             } else {
                 break;
             }
         case 'Checkout':
             if ($page = DataObject::get_one('CheckoutPage')) {
                 return $page->Link();
             } else {
                 break;
             }
         case 'Login':
             return Director::absoluteBaseURL() . 'Security/login';
             break;
         case 'Logout':
             if ($page = DataObject::get_one('AccountPage')) {
                 return $page->Link() . 'logout';
             } else {
                 break;
             }
         case 'Cart':
         default:
             if ($page = DataObject::get_one('CartPage')) {
                 return $page->Link();
             } else {
                 break;
             }
     }
 }
 protected static function get_if_account_page_exists()
 {
     if ($page = DataObject::get_one('AccountPage')) {
         return $page;
     }
     user_error('No AccountPage was found. Please create one in the CMS!', E_USER_ERROR);
 }
 public function processRecord($record, $columnMap, &$results, $preview = false)
 {
     // We match by 'Code', the ID property is confusing the importer
     if (isset($record['ID'])) {
         unset($record['ID']);
     }
     $objID = parent::processRecord($record, $columnMap, $results, $preview);
     $group = DataObject::get_by_id($this->objectClass, $objID);
     // set group hierarchies - we need to do this after all records
     // are imported to avoid missing "early" references to parents
     // which are imported later on in the CSV file.
     if (isset($record['ParentCode']) && $record['ParentCode']) {
         $parentGroup = DataObject::get_one('Group', array('"Group"."Code"' => $record['ParentCode']));
         if ($parentGroup) {
             $group->ParentID = $parentGroup->ID;
             $group->write();
         }
     }
     // set permission codes - these are all additive, meaning
     // existing permissions arent cleared.
     if (isset($record['PermissionCodes']) && $record['PermissionCodes']) {
         foreach (explode(',', $record['PermissionCodes']) as $code) {
             $p = DataObject::get_one('Permission', array('"Permission"."Code"' => $code, '"Permission"."GroupID"' => $group->ID));
             if (!$p) {
                 $p = new Permission(array('Code' => $code));
                 $p->write();
             }
             $group->Permissions()->add($p);
         }
     }
     return $objID;
 }
 /**
  * @param $data
  * @param $form
  * @return bool|SS_HTTPResponse
  */
 function Register($data, $form)
 {
     // Set session array individually as setting the password breaks the form.
     $sessionArray = array('Email' => $data['Email']);
     // Check for existing member email address
     if ($existingUser = DataObject::get_one('Member', "Email = '" . Convert::raw2sql($data['Email']) . "'")) {
         $form->AddErrorMessage('Email', _t('RegistrationPage.EmailValidationText', 'Sorry, that email address already exists. Please choose another.'), 'validation');
         Session::set('FormInfo.Form_RegistrationForm.data', $sessionArray);
         return $this->redirectBack();
     }
     // Otherwise create new member and log them in
     $Member = new Member();
     $form->saveInto($Member);
     $Member->write();
     $Member->login();
     // Find or create the 'user' group
     if (!($userGroup = DataObject::get_one('Group', "Code = 'users'"))) {
         $userGroup = new Group();
         $userGroup->Code = 'users';
         $userGroup->Title = 'Users';
         $userGroup->Write();
         $userGroup->Members()->add($Member);
     }
     // Add member to user group
     $userGroup->Members()->add($Member);
     // Get profile page otherwise display warning.
     if ($ProfilePage = DataObject::get_one('EditProfilePage')) {
         $name = $data['FirstName'] ?: ($name = $data['Email']);
         $this->setFlash(_t('RegistrationPage.RegisteredSuccessText', 'Welcome ' . $name . ', your account has been created!'), 'success');
         return $this->redirect($ProfilePage->Link());
     } else {
         $this->setFlash(_t('RegistrationPage.RegisteredWarningText', 'Please add a "Edit Profile Page" in your SiteTree to enable profile editing'), 'warning');
         return $this->redirect(Director::absoluteBaseURL());
     }
 }
 public function transform($item, $parent, $strategy)
 {
     $page = new WordpressPage();
     $params = $this->importer->getParams();
     $exists = DataObject::get_one('WordpressPage', sprintf('"WordpressID" = %d AND "ParentID" = %d', $item->WordpressID, $parent->ID));
     if ($exists) {
         switch ($strategy) {
             case ExternalContentTransformer::DS_OVERWRITE:
                 $page = $exists;
                 break;
             case ExternalContentTransformer::DS_DUPLICATE:
                 break;
             case ExternalContentTransformer::DS_SKIP:
                 return;
         }
     }
     $page->Title = $item->Title;
     $page->MenuTitle = $item->Title;
     $page->Content = $item->Description;
     $page->Content = HTTP::urlRewriter($page->Content, ' WordpressPageTransformer::transform_url($URL) ');
     $page->URLSegment = $item->Slug;
     $page->ParentID = $parent->ID;
     $page->ProvideComments = $item->AllowComments;
     $page->WordpressID = $item->WordpressID;
     $properties = $item->getRemoteProperties();
     $page->OriginalData = serialize($properties);
     $page->OriginalLink = isset($properties['Link']) ? $properties['Link'] : null;
     $page->write();
     if (isset($params['ImportMedia'])) {
         $this->importMedia($item, $page);
     }
     return new TransformResult($page, $item->stageChildren());
 }
 /**
  * Creates a member in a group with the correct permissions.
  * Example: Given I am logged in with "ADMIN" permissions
  * 
  * @Given /^I am logged in with "([^"]*)" permissions$/
  */
 function iAmLoggedInWithPermissions($permCode)
 {
     if (!isset($this->cache_generatedMembers[$permCode])) {
         $group = \Group::get()->filter('Title', "{$permCode} group")->first();
         if (!$group) {
             $group = \Injector::inst()->create('Group');
         }
         $group->Title = "{$permCode} group";
         $group->write();
         $permission = \Injector::inst()->create('Permission');
         $permission->Code = $permCode;
         $permission->write();
         $group->Permissions()->add($permission);
         $member = \DataObject::get_one('Member', sprintf('"Email" = \'%s\'', "{$permCode}@example.org"));
         if (!$member) {
             $member = \Injector::inst()->create('Member');
         }
         // make sure any validation for password is skipped, since we're not testing complexity here
         $validator = \Member::password_validator();
         \Member::set_password_validator(null);
         $member->FirstName = $permCode;
         $member->Surname = "User";
         $member->Email = "{$permCode}@example.org";
         $member->PasswordEncryption = "none";
         $member->changePassword('Secret!123');
         $member->write();
         $group->Members()->add($member);
         \Member::set_password_validator($validator);
         $this->cache_generatedMembers[$permCode] = $member;
     }
     return new Step\Given(sprintf('I log in with "%s" and "%s"', "{$permCode}@example.org", 'Secret!123'));
 }
 public function transform($item, $parent, $strategy)
 {
     $page = new DrupalNode();
     $params = $this->importer->getParams();
     $exists = DataObject::get_one('DrupalNode', sprintf('"DrupalID" = %d AND "ParentID" = %d', $item->DrupalNodeID, $parent->ID));
     if ($exists) {
         switch ($strategy) {
             case ExternalContentTransformer::DS_OVERWRITE:
                 $page = $exists;
                 break;
             case ExternalContentTransformer::DS_DUPLICATE:
                 break;
             case ExternalContentTransformer::DS_SKIP:
                 return;
         }
     }
     $page->Title = $item->Title;
     $page->MenuTitle = isset($item->MenuTitle) ? $item->MenuTitle : $item->Title;
     $page->Content = $item->Body;
     $page->ParentID = $parent->ID;
     $page->DrupalID = $item->DrupalNodeID;
     $page->OriginalData = serialize($item->getRemoteProperties());
     $page->write();
     /*
     		if (isset($params['ImportMedia'])) {
     			$this->importMedia($item, $page);
     		}
     */
     return new TransformResult($page, $item->stageChildren());
 }
	function testFrontendBlogPostRequiresPermission() {
		// get valid SecurityID (from comments form, would usually be copy/pasted)
		$blogEntry = $this->objFromFixture('BlogEntry', 'entry1');
		$response = $this->get($blogEntry->URLSegment);
		$securityID = Session::get('SecurityID');
		
		// without login
		$data = array(
			'Title'=>'Disallowed',
			'Author'=>'Disallowed',
			'Content'=>'Disallowed',
			'action_postblog' => 'Post blog entry',
			'SecurityID' => $securityID
		);
		$response = $this->post('blog/BlogEntryForm', $data);
		$this->assertFalse(DataObject::get_one('BlogEntry', sprintf("Title = 'Disallowed'")));
		
		// with login
		$blogEditor = $this->objFromFixture('Member', 'blog_editor');
		$blogEditor->logIn();
		$data = array(
			'Title'=>'Allowed',
			'Author'=>'Allowed',
			'Content'=>'Allowed',
			'action_postblog' => 'Post blog entry',
			'SecurityID' => $securityID
		);
		$response = $this->post('blog/BlogEntryForm', $data);
		$this->assertType('BlogEntry', DataObject::get_one('BlogEntry', sprintf("Title = 'Allowed'")));
	}
 function doRegister($data, $form)
 {
     // Check for existing member emial address
     if ($member = DataObject::get_one("Member", "'Email' = '" . Convert::raw2sql($data['Email']) . "'")) {
         // Set error message
         $form->AddErrorMessage('Email', "Sorry, that email address already exists. Please choose another.", 'bad');
         // Set form data from submitted values
         Session::set("FormInfo.Form_RegistrationForm.data", $data);
         // Return back to form
         return Director::redirectBack();
     }
     // Otherwise create new member and log them in
     $Member = new Member();
     $form->saveInto($Member);
     $Member->write();
     $Member->login();
     // Find or create the 'user' group
     if (!($userGroup = DataObject::get_one('Group', "Code = 'users'"))) {
         $userGroup = new Group();
         $userGroup->Code = "users";
         $userGroup->Title = "Users";
         $userGroup->Write();
         $userGroup->Members()->add($Member);
     }
     // Add member to user group
     $userGroup->Members()->add($Member);
     // Get Profile page
     if ($ProfilePage = DataObject::get_one('EditProfilePage')) {
         return Director::redirect($ProfilePage->Link('?success=1'));
     }
 }
 private function _getOptions($obj = null, $prefix = '')
 {
     if (!$obj) {
         $parent = DataObject::get_one('BrowseWorldPage');
     } else {
         $parent = $obj;
     }
     //Debug::show($parent);
     $children = $parent->Children();
     $locations = array();
     if (get_class($children) == 'DataObjectSet') {
         foreach ($children as $child) {
             //Debug::show($child);
             if ($child->ClassName == 'BrowseContinentsPage' || $child->ClassName == 'BrowseCountriesPage') {
                 $businessCount = $child->getBusinessCount();
                 $locations[] = array('value' => $child->ID, 'title' => "{$prefix} " . $child->{$this->titleFieldName} . " ({$businessCount})");
                 $childLocations = $this->_getOptions($child, $prefix . $this->prefixChar);
                 if (is_array($childLocations)) {
                     $locations = array_merge($locations, $childLocations);
                 }
                 //Debug::show($locations);
             }
         }
     } else {
         //Debug::message("No children or only 1 child??");
         //Debug::show($parent);
         //Debug::show($children);
     }
     //Debug::show($businesses);
     return $locations;
 }
 public function php($data)
 {
     $member = $this->member;
     $valid = true;
     foreach ($this->unique as $field) {
         $other = DataObject::get_one('Member', sprintf('"%s" = \'%s\'', Convert::raw2sql($field), Convert::raw2sql($data[$field])));
         if ($other && (!$this->member || !$this->member->exists() || $other->ID != $this->member->ID)) {
             $fieldInstance = $this->form->Fields()->dataFieldByName($field);
             if ($fieldInstance->getCustomValidationMessage()) {
                 $message = $fieldInstance->getCustomValidationMessage();
             } else {
                 $message = sprintf(_t('MemberProfiles.MEMBERWITHSAME', 'There is already a member with the same %s.'), $field);
             }
             $valid = false;
             $this->validationError($field, $message, 'required');
         }
     }
     // Create a dummy member as this is required for custom password validators
     if (isset($data['Password']) && $data['Password'] !== "") {
         if (is_null($member)) {
             $member = Member::create();
         }
         if ($validator = $member::password_validator()) {
             $results = $validator->validate($data['Password'], $member);
             if (!$results->valid()) {
                 $valid = false;
                 foreach ($results->messageList() as $key => $value) {
                     $this->validationError('Password', $value, 'required');
                 }
             }
         }
     }
     return $valid && parent::php($data);
 }
 /**
  * @param $data
  * @param $form
  * @return bool|SS_HTTPResponse|void
  * @throws ValidationException
  * @throws null
  */
 public function Save($data, $form)
 {
     /** @var Form $form */
     $data = $form->getData();
     if ($CurrentMember = Member::currentUser()) {
         if ($member = DataObject::get_one('Member', "Email = '" . Convert::raw2sql($data['Email']) . "' AND ID != " . $CurrentMember->ID)) {
             $form->addErrorMessage('Email', 'Sorry, that Email already exists.', 'validation');
             return $this->controller->redirectBack();
         } else {
             /** If no password don't save the field */
             if (!isset($data['password'])) {
                 unset($data['password']);
             }
             $this->controller->setFlash('Your profile has been updated', 'success');
             $form->saveInto($CurrentMember);
             $CurrentMember->write();
             return $this->controller->redirect($this->controller->Link());
         }
     } else {
         /** Get registration page otherwise display warning.
          *
          * @var RegistrationPage $registerPage
          */
         if ($registerPage = DataObject::get_one('RegistrationPage')) {
             return Security::PermissionFailure($this->controller, 'You must <a href="' . $registerPage->Link() . '">registered</a> and logged in to edit your profile.');
         } else {
             $this->controller->setFlash('You must registered and logged in to edit your profile.', 'warning');
             return $this->controller->redirect(Director::absoluteBaseURL());
         }
     }
 }
 /**
  * Initialises the BreadcrumbNavigation class. Only called when Breadcrumbs are actually used.
  *
  * @return ArrayList of parent pages
  */
 function Pages()
 {
     if (!$this->initialised) {
         $this->parentPages = array();
         $page = $this->owner;
         $i = 0;
         while ($page && (!self::$maxDepth || sizeof($this->parentPages) < self::$maxDepth) && (!self::$stopAtPageType || $page->ClassName != self::$stopAtPageType)) {
             if (self::$showHidden || $page->ShowInMenus || $page->ID == $this->owner->ID) {
                 if ($page->URLSegment == self::$homeURLSegment) {
                     $this->hasHome = true;
                 }
                 if ($page->ID == $this->owner->ID) {
                     $page->isSelf = true;
                 }
                 if (!$page->isSelf || $page->isSelf && self::$includeSelf) {
                     array_unshift($this->parentPages, $page);
                 }
             }
             $page = $page->Parent;
         }
         if (!$this->hasHome && self::$includeHome) {
             array_unshift($this->parentPages, DataObject::get_one('SiteTree', "`URLSegment` = '" . self::$homeURLSegment . "'"));
         }
         $this->initialised = true;
     }
     return new ArrayList($this->parentPages);
 }
Example #29
0
 /**
  * Ensures that there is always a 404 page
  * by checking if there's an instance of
  * ErrorPage with a 404 and 500 error code. If there
  * is not, one is created when the DB is built.
  */
 function requireDefaultRecords()
 {
     parent::requireDefaultRecords();
     if ($this->class == 'ErrorPage' && SiteTree::get_create_default_pages()) {
         // Ensure that an assets path exists before we do any error page creation
         if (!file_exists(ASSETS_PATH)) {
             mkdir(ASSETS_PATH);
         }
         $pageNotFoundErrorPage = DataObject::get_one('ErrorPage', "\"ErrorCode\" = '404'");
         $pageNotFoundErrorPageExists = $pageNotFoundErrorPage && $pageNotFoundErrorPage->exists() ? true : false;
         $pageNotFoundErrorPagePath = self::get_filepath_for_errorcode(404);
         if (!($pageNotFoundErrorPageExists && file_exists($pageNotFoundErrorPagePath))) {
             if (!$pageNotFoundErrorPageExists) {
                 $pageNotFoundErrorPage = new ErrorPage();
                 $pageNotFoundErrorPage->ErrorCode = 404;
                 $pageNotFoundErrorPage->Title = _t('ErrorPage.DEFAULTERRORPAGETITLE', 'Page not found');
                 $pageNotFoundErrorPage->Content = _t('ErrorPage.DEFAULTERRORPAGECONTENT', '<p>Sorry, it seems you were trying to access a page that doesn\'t exist.</p><p>Please check the spelling of the URL you were trying to access and try again.</p>');
                 $pageNotFoundErrorPage->write();
                 $pageNotFoundErrorPage->publish('Stage', 'Live');
             }
             // Ensure a static error page is created from latest error page content
             $response = Director::test(Director::makeRelative($pageNotFoundErrorPage->Link()));
             $written = null;
             if ($fh = fopen($pageNotFoundErrorPagePath, 'w')) {
                 $written = fwrite($fh, $response->getBody());
                 fclose($fh);
             }
             if ($written) {
                 DB::alteration_message('404 error page created', 'created');
             } else {
                 DB::alteration_message(sprintf('404 error page could not be created at %s. Please check permissions', $pageNotFoundErrorPagePath), 'error');
             }
         }
         $serverErrorPage = DataObject::get_one('ErrorPage', "\"ErrorCode\" = '500'");
         $serverErrorPageExists = $serverErrorPage && $serverErrorPage->exists() ? true : false;
         $serverErrorPagePath = self::get_filepath_for_errorcode(500);
         if (!($serverErrorPageExists && file_exists($serverErrorPagePath))) {
             if (!$serverErrorPageExists) {
                 $serverErrorPage = new ErrorPage();
                 $serverErrorPage->ErrorCode = 500;
                 $serverErrorPage->Title = _t('ErrorPage.DEFAULTSERVERERRORPAGETITLE', 'Server error');
                 $serverErrorPage->Content = _t('ErrorPage.DEFAULTSERVERERRORPAGECONTENT', '<p>Sorry, there was a problem with handling your request.</p>');
                 $serverErrorPage->write();
                 $serverErrorPage->publish('Stage', 'Live');
             }
             // Ensure a static error page is created from latest error page content
             $response = Director::test(Director::makeRelative($serverErrorPage->Link()));
             $written = null;
             if ($fh = fopen($serverErrorPagePath, 'w')) {
                 $written = fwrite($fh, $response->getBody());
                 fclose($fh);
             }
             if ($written) {
                 DB::alteration_message('500 error page created', 'created');
             } else {
                 DB::alteration_message(sprintf('500 error page could not be created at %s. Please check permissions', $serverErrorPagePath), 'error');
             }
         }
     }
 }
 function up()
 {
     echo "Starting Migration Proc ...<BR>";
     //check if migration already had ran ...
     $migration = DataObject::get_one("Migration", "Name='{$this->title}'");
     if (!$migration) {
         DB::getConn()->transactionStart();
         try {
             // migrate records from Live to Stage table
             DB::query("DELETE FROM JobPage");
             DB::query("\nINSERT INTO JobPage\n\t\t(ID,\n\t\tJobPostedDate,\n\t\tJobCompany,\n\t\tJobMoreInfoLink,\n\t\tJobLocation,\n\t\tFoundationJob,\n\t\tExpirationDate,\n\t\tActive,\n\t\tJobInstructions2Apply,\n\t\tLocationType,\n\t\tTitle,\n\t\tContent)\nSELECT \tJobPage_Live.ID,\n\t\tJobPostedDate,\n\t\tJobCompany,\n\t\tJobMoreInfoLink,\n\t\tJobLocation,\n\t\tFoundationJob,\n\t\tExpirationDate,\n\t\tActive,\n\t\tJobInstructions2Apply,\n\t\tLocationType,\n\t\tTitle,\n\t\tContent\nFROM  \tJobPage_Live\nINNER JOIN Page_Live on Page_Live.Id = JobPage_Live.Id\nINNER JOIN SiteTree_Live on SiteTree_Live.Id = JobPage_Live.Id");
             DB::query("DROP TABLE JobPage_Live");
             DB::query("DROP TABLE JobPage_versions");
             // delete orphan records
             DB::query("delete from Page where Id in (select Id from SiteTree where ClassName = 'JobPage')");
             DB::query("delete from SiteTree where ClassName = 'JobPage'");
             DB::query("delete from Page_Live where Id in (select Id from SiteTree_Live where ClassName = 'JobPage')");
             DB::query("delete from SiteTree_Live where ClassName = 'JobPage'");
             DB::query("delete from Page_versions where Id in (select Id from SiteTree_versions where ClassName = 'JobPage')");
             DB::query("delete from SiteTree_versions where ClassName = 'JobPage'");
             DB::getConn()->transactionEnd();
         } catch (Exception $e) {
             DB::getConn()->transactionRollback();
             return;
         }
         $migration = new Migration();
         $migration->Name = $this->title;
         $migration->Description = $this->description;
         $migration->Write();
     }
     echo "Ending  Migration Proc ...<BR>";
 }