/** * @method POST */ function post() { parse_str($this->request->data, $request); // parse request $friendlyId = $request['friendlyId']; $name = $request['name']; $s_passcode = $request['passcode']; $timeZone = $request['timeZone']; $email = ''; $password = ''; $language = 'en-us'; // language for the app $userId = -1; $theme = DEFAULT_THEME; // set theme if (isset($request['theme'])) { $theme = $request['theme']; } // set language if set if (isset($request['language'])) { $language = $request['language']; } // check for email and password if (isset($request['email'])) { $userLanguage = 'en-us'; if (isset($request['userLanguage'])) { $userLanguage = $request['userLanguage']; } $email = $request['email']; $password = $request['password']; } else { // get an authuser $authUser = new AuthUser(); if ($authUser->UserUniqId && $authUser->IsSuperAdmin == true) { // check if authorized $userId = $authUser->UserId; } else { return new Tonic\Response(Tonic\Response::UNAUTHORIZED); } } // defaults $firstName = 'New'; $lastName = 'User'; $domain = APP_URL . '/sites/' . $friendlyId; $domain = str_replace('http://', '', $domain); $logoUrl = 'sample-logo.png'; if ($s_passcode == PASSCODE) { // check for uniqueness of email if ($email != '') { $isUserUnique = User::IsLoginUnique($email); if ($isUserUnique == false) { return new Tonic\Response(Tonic\Response::CONFLICT); } } $isFriendlyIdUnique = Site::IsFriendlyIdUnique($friendlyId); if ($isFriendlyIdUnique == false) { return new Tonic\Response(Tonic\Response::CONFLICT); } // add the site $site = Site::Add($domain, $name, $friendlyId, $logoUrl, $theme, $email, $timeZone, $language); // add the site // add the admin if ($email != '') { $isActive = 1; // admins by default are active $user = User::Add($email, $password, $firstName, $lastName, 'Admin', $userLanguage, $isActive, $site['SiteId']); $userId = $user['UserId']; } // set the stripe plan, customer id, status if (DEFAULT_STRIPE_PLAN != '') { Stripe::setApiKey(STRIPE_API_KEY); $customer = Stripe_Customer::create(array("plan" => DEFAULT_STRIPE_PLAN, "email" => $email)); $customerId = $customer->id; Site::EditCustomer($site['SiteUniqId'], $customerId); } // read the defaults file $default_json_file = '../themes/' . $theme . '/default.json'; // set $siteId $siteId = $site['SiteId']; // check to make sure the defaults.json exists if (file_exists($default_json_file)) { // get json from the file $json_text = file_get_contents($default_json_file); // decode json $json = json_decode($json_text, true); // pagetypes $pagetypes = array(); // menu counts $primaryMenuCount = 0; $footerMenuCount = 0; // walk through defaults array foreach ($json as &$value) { // get values from array $url = $value['url']; $source = $value['source']; $name = $value['name']; $description = $value['description']; $layout = $value['layout']; $stylesheet = $value['stylesheet']; $primaryMenu = $value['primaryMenu']; $footerMenu = $value['footerMenu']; if (strpos($url, '/') !== false) { // the url has a pagetype $arr = explode('/', $url); // get friendly ids from $url $pageTypeFriendlyId = $arr[0]; $pageFriendlyId = $arr[1]; $pageTypeId = -1; $pageType = PageType::GetByFriendlyId($pageTypeFriendlyId, $siteId); // create a new pagetype if ($pageType == NULL) { $pageType = PageType::Add($pageTypeFriendlyId, 'Page', 'Pages', $layout, $stylesheet, 0, $siteId, $userId, $userId); } // get newly minted page type $pageTypeId = $pageType['PageTypeId']; } else { // root, no pagetype $pageFriendlyId = $url; $pageTypeId = -1; } // create a page $page = Page::Add($pageFriendlyId, $name, $description, $layout, $stylesheet, $pageTypeId, $site['SiteId'], $userId); // set the page to active Page::SetIsActive($page['PageUniqId'], 1); // build the content file $filename = '../themes/' . $theme . '/' . $source; $content = ''; // get the content for the page if (file_exists($filename)) { $content = file_get_contents($filename); // fix images $content = str_replace('{{site-dir}}', 'sites/' . $site['FriendlyId'], $content); } // publish the fragment Publish::PublishFragment($site['FriendlyId'], $page['PageUniqId'], 'publish', $content); // build the primary menu if ($primaryMenu == true) { MenuItem::Add($name, '', 'primary', $url, $page['PageId'], $primaryMenuCount, $site['SiteId'], $userId, $userId); $primaryMenuCount++; } // build the footer menu if ($footerMenu == true) { MenuItem::Add($name, '', 'footer', $url, $page['PageId'], $footerMenuCount, $site['SiteId'], $userId, $userId); $footerMenuCount++; } } } else { return new Tonic\Response(Tonic\Response::BADREQUEST); } // publishes a theme for a site Publish::PublishTheme($site, $theme); // publish the site Publish::PublishSite($site['SiteUniqId']); // send welcome email if (SEND_WELCOME_EMAIL == true && $email != '') { $to = $email; $from = REPLY_TO; $fromName = REPLY_TO_NAME; $subject = BRAND . ': Welcome to ' . BRAND; $file = 'emails/new-user.html'; // create strings to replace $loginUrl = APP_URL; $newSiteUrl = APP_URL . '/sites/' . $site['FriendlyId']; $replace = array('{{brand}}' => BRAND, '{{reply-to}}' => REPLY_TO, '{{new-site-url}}' => $newSiteUrl, '{{login-url}}' => $loginUrl); // send email from file Utilities::SendEmailFromFile($to, $from, $fromName, $subject, $replace, $file); } return new Tonic\Response(Tonic\Response::OK); } else { return new Tonic\Response(Tonic\Response::UNAUTHORIZED); } }
/** * @method POST */ function post() { // get token $token = Utilities::ValidateJWTToken(apache_request_headers()); // check if token is not null if ($token != NULL) { $site = Site::GetBySiteId($token->SiteId); $user = User::GetByUserId($token->UserId); // creates an access object $access = Utilities::SetAccess($user); parse_str($this->request->data, $request); // parse request $pageId = $request['pageId']; $content = $request['content']; $status = $request['status']; // draft or publish $image = $request['image']; // get page and site $page = Page::GetByPageId($pageId); // default is root $pageTypeId = -1; $pageType = NULL; // determine if file is in sub-direcotry if ($page['PageTypeId'] != -1) { $pageType = PageType::GetByPageTypeId($page['PageTypeId']); // set page type $pageTypeId = $pageType['PageTypeId']; } // get permissions $canEdit = Utilities::CanPerformAction($pageTypeId, $access['CanEdit']); $canPublish = Utilities::CanPerformAction($pageTypeId, $access['CanPublish']); // check permissions if ($canEdit == false && $canPublish == false) { return new Tonic\Response(Tonic\Response::UNAUTHORIZED); } // save content if ($status == 'publish') { Page::EditContent($pageId, $content, $token->UserId); } else { // save draft Page::EditDraft($pageId, $content, $token->UserId); } $url = ''; // publish if status is set to publish and the user can publish if ($status == 'publish' && $canPublish == true) { // set active Page::SetIsActive($page['PageId'], 1); // publish page $url = Publish::PublishPage($page['PageId'], false, true); // edit image Page::EditImage($page['PageId'], $image, $token->UserId); // if page is include only, republish content if ($page['IncludeOnly'] == 1) { Publish::PublishContent($page['SiteId']); } } // return successful response $response = new Tonic\Response(Tonic\Response::OK); $response->contentType = 'text/html'; $response->body = $url; return $response; } else { // unauthorized access return new Tonic\Response(Tonic\Response::UNAUTHORIZED); } }
public static function PublishDefaultContent($site, $theme, $userId) { // read the defaults file $default_json_file = APP_LOCATION . THEMES_FOLDER . '/' . $theme . '/default.json'; // set $siteId $siteId = $site['SiteId']; // check to make sure the defaults.json exists if (file_exists($default_json_file)) { // get json from the file $json_text = file_get_contents($default_json_file); // decode json $json = json_decode($json_text, true); // pagetypes $pagetypes = array(); // menu counts $primaryMenuCount = 0; $footerMenuCount = 0; // clear default types MenuItem::RemoveForType('primary', $siteId); MenuItem::RemoveForType('footer', $siteId); // walk through defaults array foreach ($json as &$value) { // get values from array $url = $value['url']; $source = $value['source']; $name = $value['name']; $description = $value['description']; $layout = $value['layout']; $stylesheet = $value['stylesheet']; $primaryMenu = $value['primaryMenu']; $footerMenu = $value['footerMenu']; $includeOnly = 0; // set includeOnly (if specified in default) if (isset($value['includeOnly'])) { if ($value['includeOnly'] == true) { $includeOnly = 1; } } // initialize PT $pageType = NULL; if (strpos($url, '/') !== false) { // the url has a pagetype $arr = explode('/', $url); // get friendly ids from $url $pageTypeFriendlyId = $arr[0]; $pageFriendlyId = $arr[1]; $pageTypeId = -1; $pageType = PageType::GetByFriendlyId($pageTypeFriendlyId, $siteId); // create a new pagetype if ($pageType == NULL) { $pageType = PageType::Add($pageTypeFriendlyId, $layout, $stylesheet, 0, $siteId, $userId); } // get newly minted page type $pageTypeId = $pageType['PageTypeId']; } else { // root, no pagetype $pageFriendlyId = $url; $pageTypeId = -1; } // determine if page is unique $isUnique = Page::IsFriendlyIdUnique($pageFriendlyId, $pageTypeId, $site['SiteId']); // initialize page $page = NULL; // if page has not been created, create a page if ($isUnique == true) { // create a page $page = Page::Add($pageFriendlyId, $name, $description, $layout, $stylesheet, $pageTypeId, $site['SiteId'], $userId); } else { // get the page $page = Page::GetByFriendlyId($pageFriendlyId, $pageTypeId, $site['SiteId']); } // quick check if ($page != NULL) { // set the page to active Page::SetIsActive($page['PageId'], 1); // set include only Page::SetIncludeOnly($page['PageId'], $includeOnly); // build the content file $filename = APP_LOCATION . THEMES_FOLDER . '/' . $theme . '/' . $source; $content = ''; // get the content for the page if (file_exists($filename)) { $content = file_get_contents($filename); // fix images $content = str_replace('{{site-dir}}', $site['Domain'], $content); } // edit the page content Page::EditContent($page['PageId'], $content, $userId); // build the primary menu if ($primaryMenu == true) { MenuItem::Add($name, '', 'primary', $url, $page['PageId'], $primaryMenuCount, $site['SiteId'], $userId); $primaryMenuCount++; } // build the footer menu if ($footerMenu == true) { MenuItem::Add($name, '', 'footer', $url, $page['PageId'], $footerMenuCount, $site['SiteId'], $userId); $footerMenuCount++; } } } } }
/** * @method POST */ function unpublish($pageUniqId) { // get an authuser $authUser = new AuthUser(); if (isset($authUser->UserUniqId)) { // check if authorized // get page $page = Page::GetByPageUniqId($pageUniqId); // make sure the user is part of the site (or is a superadmin) if ($authUser->IsSuperAdmin == false && $authUser->SiteId != $page['SiteId']) { return new Tonic\Response(Tonic\Response::UNAUTHORIZED); } // delete page $site = Site::GetBySiteId($page['SiteId']); $filename = '../sites/' . $site['FriendlyId'] . '/'; // default is root $pageTypeUniqId = -1; // get $pageTypeUniqId if ($page['PageTypeId'] != -1) { $pageType = PageType::GetByPageTypeId($page['PageTypeId']); $filename .= strtolower($pageType['FriendlyId']) . '/'; $pageTypeUniqId = $pageType['PageTypeUniqId']; } // check permissions if (Utilities::CanPerformAction($pageTypeUniqId, $authUser->CanPublish) == false) { return new Tonic\Response(Tonic\Response::UNAUTHORIZED); } // set active Page::SetIsActive($pageUniqId, 0); // remove file $filename = $filename . $page['FriendlyId'] . '.php'; if (file_exists($filename)) { unlink($filename); } // return a json response $response = new Tonic\Response(Tonic\Response::OK); } else { // unauthorized access return new Tonic\Response(Tonic\Response::UNAUTHORIZED); } }