function smtpmail($config, $to, $subject, $body, $headers = null) { // Fix any bare linefeeds in the message to make it RFC821 Compliant. $body = preg_replace("#(?<!\r)\n#si", "\r\n", $body); $cc = $bcc = array(); if (isset($headers)) { $headers = rtrim($headers); // Make sure there are no bare linefeeds in the headers $headers = preg_replace('#(?<!\\r)\\n#si', "\r\n", $headers); if (preg_match('#^cc:\\s*(.*?)\\s*$#mi', $headers, $match)) { $cc = split(', *', $match[1]); } if (preg_match('#^bcc:\\s*(.*?)\\s*$#mi', $headers, $match)) { $bcc = split(', *', $match[1]); $headers = preg_replace('#^bcc:.*$#mi', '', $headers); } } if (trim($subject) == '') { return GalleryCoreApi::error(ERROR_PLATFORM_FAILURE, __FILE__, __LINE__, "No email Subject specified"); } if (trim($body) == '') { return GalleryCoreApi::error(ERROR_PLATFORM_FAILURE, __FILE__, __LINE__, "Email message was blank"); } // Connect list($config['smtp.host'], $port) = array_merge(explode(':', $config['smtp.host']), array(25)); if (!($socket = fsockopen($config['smtp.host'], $port, $errno, $errstr, 20))) { return GalleryCoreApi::error(ERROR_PLATFORM_FAILURE, __FILE__, __LINE__, "Could not connect to smtp host : {$errno} : {$errstr}"); } // Wait for reply $ret = server_parse($socket, "220"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } // Do we want to use AUTH?, send RFC2554 EHLO, else send RFC821 HELO if (!empty($config['smtp.username']) && !empty($config['smtp.password'])) { fputs($socket, "EHLO " . $config['smtp.host'] . "\r\n"); $ret = server_parse($socket, "250"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } fputs($socket, "AUTH LOGIN\r\n"); $ret = server_parse($socket, "334"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } fputs($socket, base64_encode($config['smtp.username']) . "\r\n"); $ret = server_parse($socket, "334"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } fputs($socket, $config['smtp.password'] . "\r\n"); // Already encoded $ret = server_parse($socket, "235"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } } else { fputs($socket, "HELO " . $config['smtp.host'] . "\r\n"); $ret = server_parse($socket, "250"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } } // From this point onward most server response codes should be 250 // Specify who the mail is from.... fputs($socket, "MAIL FROM: <" . $config['smtp.from'] . ">\r\n"); $ret = server_parse($socket, "250"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } // Add an additional bit of error checking to the To field. $to = trim($to) == '' ? 'Undisclosed-recipients:;' : trim($to); if (preg_match('#[^ ]+\\@[^ ]+#', $to)) { fputs($socket, "RCPT TO: <{$to}>\r\n"); $ret = server_parse($socket, "250"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } } // Ok now do the CC and BCC fields... foreach (array_merge($cc, $bcc) as $address) { $address = trim($address); if (preg_match('#[^ ]+\\@[^ ]+#', $address)) { fputs($socket, "RCPT TO: <{$address}>\r\n"); $ret = server_parse($socket, "250"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } } } // Ok now we tell the server we are ready to start sending data fputs($socket, "DATA\r\n"); // This is the last response code we look for until the end of the message. $ret = server_parse($socket, "354"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } // Send the Subject Line... fputs($socket, "Subject: {$subject}\r\n"); // Now the To Header. fputs($socket, "To: {$to}\r\n"); // Now any custom headers.... if (isset($headers)) { fputs($socket, "{$headers}\r\n"); } // Ok now we are ready for the message... fputs($socket, "\r\n{$body}\r\n"); // Ok the all the ingredients are mixed in let's cook this puppy... fputs($socket, ".\r\n"); $ret = server_parse($socket, "250"); if ($ret) { return $ret->wrap(__FILE__, __LINE__); } // Now tell the server we are done and close the socket... fputs($socket, "QUIT\r\n"); fclose($socket); return null; }
/** * Process our request * @return array object GalleryStatus a status code * array[] */ function _GalleryMain($embedded = false) { global $gallery; $main = array(); $urlGenerator =& $gallery->getUrlGenerator(); /* Figure out the target view/controller */ list($viewName, $controllerName) = GalleryUtilities::getRequestVariables('view', 'controller'); $gallery->debug("controller {$controllerName}, view {$viewName}"); /* Check if core module needs upgrading */ list($ret, $core) = GalleryCoreApi::loadPlugin('module', 'core', true); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } $installedVersions = $core->getInstalledVersions(); if ($installedVersions['core'] != $core->getVersion()) { if ($redirectUrl = @$gallery->getConfig('mode.maintenance')) { /* Maintenance mode -- redirect if given url, else simple message */ if ($redirectUrl === true) { print $core->translate('Site is temporarily down for maintenance.'); exit; } } else { $gallery->debug('Redirect to the upgrade wizard, core module version is out of date'); $redirectUrl = $urlGenerator->getCurrentUrlDir(true) . 'upgrade/index.php'; } return array(null, _GalleryMain_doRedirect($redirectUrl)); } $ret = GalleryInitSecondPass(); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } /* Load and run the appropriate controller */ $results = array(); if (!empty($controllerName)) { GalleryCoreApi::requireOnce('modules/core/classes/GalleryController.class'); list($ret, $controller) = GalleryController::loadController($controllerName); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } if (!$embedded && $gallery->getConfig('mode.embed.only') && !$controller->isAllowedInEmbedOnly()) { /* Lock out direct access when embed-only is set */ return array(GalleryCoreApi::error(ERROR_PERMISSION_DENIED, __FILE__, __LINE__), null); } if ($gallery->getConfig('mode.maintenance') && !$controller->isAllowedInMaintenance()) { /* Maintenance mode - allow admins, else redirect to given or standard url */ list($ret, $isAdmin) = GalleryCoreApi::isUserInSiteAdminGroup(); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } if (!$isAdmin) { if (($redirectUrl = $gallery->getConfig('mode.maintenance')) === true) { $redirectUrl = $urlGenerator->generateUrl(array('view' => 'core.MaintenanceMode'), array('forceFullUrl' => true)); } return array(null, _GalleryMain_doRedirect($redirectUrl)); } } /* Get our form and return variables */ $form = GalleryUtilities::getFormVariables('form'); /* Let the controller handle the input */ list($ret, $results) = $controller->handleRequest($form); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } /* Check to make sure we got back everything we want */ if (!isset($results['status']) || !isset($results['error']) || !isset($results['redirect']) && !isset($results['delegate']) && !isset($results['return'])) { return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER, __FILE__, __LINE__, 'Controller results are missing status, ' . 'error, (redirect, delegate, return)'), null); } /* Try to return if the controller instructs it */ if (!empty($results['return'])) { list($ret, $navigationLinks) = $urlGenerator->getNavigationLinks(1); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } if (count($navigationLinks) > 0) { /* Go back to the previous navigation point in our history */ $redirectUrl = $navigationLinks[0]['url']; } else { $redirectUrl = GalleryUtilities::getRequestVariables('return'); if (empty($redirectUrl)) { $redirectUrl = GalleryUtilities::getRequestVariables('formUrl'); } } } /* Failing that, redirect if so instructed */ if (empty($redirectUrl) && !empty($results['redirect'])) { /* * If we have a status, store its data in the session and attach it * to the URL. */ if (!empty($results['status'])) { $session =& $gallery->getSession(); $results['redirect']['statusId'] = $session->putStatus($results['status']); } $urlToGenerate = $results['redirect']; /* Keep our navId in the URL */ $navId = $urlGenerator->getNavigationId(); if (!empty($navId)) { $urlToGenerate['navId'] = $navId; } $redirectUrl = $urlGenerator->generateUrl($urlToGenerate, array('forceFullUrl' => true)); } /* If we have a redirect url.. use it */ if (!empty($redirectUrl)) { return array(null, _GalleryMain_doRedirect($redirectUrl, null, $controllerName)); } /* Let the controller specify the next view */ if (!empty($results['delegate'])) { /* Load any errors into the request */ if (!empty($results['error'])) { foreach ($results['error'] as $error) { GalleryUtilities::putRequestVariable($error, 1); } } /* Save the view name, put the rest into the request so the view can get it */ foreach ($results['delegate'] as $key => $value) { switch ($key) { case 'view': $viewName = $value; break; default: GalleryUtilities::putRequestVariable($key, $value); break; } } } } /* Load and run the appropriate view */ if (empty($viewName)) { $viewName = GALLERY_DEFAULT_VIEW; GalleryUtilities::putRequestVariable('view', $viewName); } list($ret, $view) = GalleryView::loadView($viewName); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } if ($gallery->getConfig('mode.maintenance') && !$view->isAllowedInMaintenance()) { /* Maintenance mode - allow admins, else redirect to given url or show standard view */ list($ret, $isAdmin) = GalleryCoreApi::isUserInSiteAdminGroup(); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } if (!$isAdmin) { if (($redirectUrl = $gallery->getConfig('mode.maintenance')) !== true) { return array(null, _GalleryMain_doRedirect($redirectUrl)); } $viewName = 'core.MaintenanceMode'; list($ret, $view) = GalleryView::loadView($viewName); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } } } if (!$embedded && $gallery->getConfig('mode.embed.only') && !$view->isAllowedInEmbedOnly()) { /* Lock out direct access when embed-only is set */ return array(GalleryCoreApi::error(ERROR_PERMISSION_DENIED, __FILE__, __LINE__), null); } /* Check if the page is cached and return the cached version, else generate the page */ list($ret, $shouldCache) = GalleryDataCache::shouldCache('read', 'full'); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } $html = ''; if ($shouldCache) { $session =& $gallery->getSession(); list($ret, $html) = GalleryDataCache::getPageData('page', $urlGenerator->getCacheableUrl()); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } } if (!empty($html)) { /* * TODO: If we cache all the headers and replay them here, we could send a 304 not * modified back */ $session =& $gallery->getSession(); $html = $session->replaceTempSessionIdIfNecessary($html); /* Set the appropriate charset in our HTTP header */ if (!headers_sent()) { header('Content-Type: text/html; charset=UTF-8'); } print $html; $data['isDone'] = true; } else { /* Initialize our container for template data */ $gallery->setCurrentView($viewName); /* * If we render directly to the browser, we need get a session before, * or no session at all */ if ($view->isImmediate() || $viewName == 'core.ProgressBar') { /* * Session: Find out whether we need to send a cookie & get a new sessionId and save it * (make sure there's a sessionId before starting to render, but only if we need a * session) */ $session =& $gallery->getSession(); $ret = $session->start(); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } /* From now on, don't add navid / sessionId to URLs if there's no persistent session */ $session->doNotUseTempId(); } /* * If this is an immediate view, it will send its own output directly. This is * used in the situation where we want to send back data that's not controlled by the * layout. That's usually something that's not user-visible like a binary file. */ $data = array(); if ($view->isImmediate()) { $status = isset($results['status']) ? $results['status'] : array(); $error = isset($results['error']) ? $results['error'] : array(); $ret = $view->renderImmediate($status, $error); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } $data['isDone'] = true; } else { GalleryCoreApi::requireOnce('modules/core/classes/GalleryTemplate.class'); $template = new GalleryTemplate(dirname(__FILE__)); list($ret, $results, $theme) = $view->doLoadTemplate($template); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } if (isset($results['redirect']) || isset($results['redirectUrl'])) { if (isset($results['redirectUrl'])) { $redirectUrl = $results['redirectUrl']; } else { $redirectUrl = $urlGenerator->generateUrl($results['redirect'], array('forceFullUrl' => true)); } return array(null, _GalleryMain_doRedirect($redirectUrl, $template)); } if (empty($results['body'])) { return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER, __FILE__, __LINE__, 'View results are missing body file'), null); } $templatePath = 'gallery:' . $results['body']; $template->setVariable('l10Domain', $theme->getL10Domain()); $template->setVariable('isEmbedded', $embedded); if ($viewName == 'core.ProgressBar') { /* Render progress bar pages immediately so that the user sees the bar moving */ $ret = $template->display($templatePath); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } $data['isDone'] = true; } else { list($ret, $html) = $template->fetch($templatePath); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } $html = preg_replace('/^\\s+/m', '', $html); list($ret, $shouldCache) = GalleryDataCache::shouldCache('write', 'full'); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } if ($shouldCache && $results['cacheable']) { $htmlForCache = $html; } /* * Session: Find out whether we need to send a cookie & need a new session * (only if we don't have one yet) */ $session =& $gallery->getSession(); $ret = $session->start(); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } $html = $session->replaceTempSessionIdIfNecessary($html); if ($embedded) { $data = $theme->splitHtml($html, $results); $data['themeData'] =& $template->getVariableByReference('theme'); $data['isDone'] = false; } else { /* Set the appropriate charset in our HTTP header */ if (!headers_sent()) { header('Content-Type: text/html; charset=UTF-8'); } print $html; if ($shouldCache && $results['cacheable']) { $session =& $gallery->getSession(); if ($session->getId() != SESSION_TEMP_ID) { $htmlForCache = str_replace($session->getId(), SESSION_TEMP_ID, $htmlForCache); } $ret = GalleryDataCache::putPageData('page', $results['cacheable'], $urlGenerator->getCacheableUrl(), $htmlForCache); if ($ret) { return array($ret->wrap(__FILE__, __LINE__), null); } } $data['isDone'] = true; } } } } return array(null, $data); }
/** * Process our request. * @return array GalleryStatus a status code * array */ function _GalleryMain($embedded = false, $template = null) { global $gallery; $urlGenerator =& $gallery->getUrlGenerator(); /* Figure out the target view/controller */ list($controllerName, $viewName) = GalleryUtilities::getRequestVariables('controller', 'view'); $controllerName = is_string($controllerName) ? $controllerName : null; $viewName = is_string($viewName) ? $viewName : null; $gallery->debug("controller {$controllerName}, view {$viewName}"); /* Check if core module needs upgrading */ list($ret, $core) = GalleryCoreApi::loadPlugin('module', 'core', true); if ($ret) { return array($ret, null); } $installedVersions = $core->getInstalledVersions(); if ($installedVersions['core'] != $core->getVersion()) { if ($redirectUrl = @$gallery->getConfig('mode.maintenance')) { /* Maintenance mode - redirect if given URL, else simple message */ if ($redirectUrl === true) { header('Content-Type: text/html; charset=UTF-8'); print $core->translate('Site is temporarily down for maintenance.'); exit; } } else { $gallery->debug('Redirect to the upgrade wizard, core module version is out of date'); $redirectUrl = $urlGenerator->getCurrentUrlDir(true) . 'upgrade/index.php'; } list($ignored, $results) = _GalleryMain_doRedirect($redirectUrl, null, null, true); return array(null, $results); } $ret = GalleryInitSecondPass(); if ($ret) { return array($ret, null); } /* Load and run the appropriate controller */ $results = array(); if (!empty($controllerName)) { GalleryCoreApi::requireOnce('modules/core/classes/GalleryController.class'); list($ret, $controller) = GalleryController::loadController($controllerName); if ($ret) { return array($ret, null); } if (!$embedded && $gallery->getConfig('mode.embed.only') && !$controller->isAllowedInEmbedOnly()) { /* Lock out direct access when embed-only is set */ if (($redirectUrl = $gallery->getConfig('mode.embed.only')) === true) { return array(GalleryCoreApi::error(ERROR_PERMISSION_DENIED), null); } list($ignored, $results) = _GalleryMain_doRedirect($redirectUrl, null, null, true); return array(null, $results); } if ($gallery->getConfig('mode.maintenance') && !$controller->isAllowedInMaintenance()) { /* Maintenance mode - allow admins, else redirect to given or standard URL */ list($ret, $isAdmin) = GalleryCoreApi::isUserInSiteAdminGroup(); if ($ret) { return array($ret, null); } if (!$isAdmin) { if (($redirectUrl = $gallery->getConfig('mode.maintenance')) === true) { $redirectUrl = $urlGenerator->generateUrl(array('view' => 'core.MaintenanceMode'), array('forceFullUrl' => true)); } list($ignored, $results) = _GalleryMain_doRedirect($redirectUrl, null, null, true); return array(null, $results); } } /* Get our form and return variables */ $form = GalleryUtilities::getFormVariables('form'); /* Verify the genuineness of the request */ if (!$controller->omitAuthTokenCheck()) { $ret = GalleryController::assertIsGenuineRequest(); if ($ret) { return array($ret, null); } } /* Let the controller handle the input */ list($ret, $results) = $controller->handleRequest($form); if ($ret) { list($ret, $results) = $controller->permissionCheck($ret); if ($ret) { return array($ret, null); } } /* Check to make sure we got back everything we want */ if (!isset($results['status']) || !isset($results['error']) || !isset($results['redirect']) && !isset($results['delegate']) && !isset($results['return'])) { return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER, __FILE__, __LINE__, 'Controller results are missing status, error, (redirect, delegate, return)'), null); } /* Try to return if the controller instructs it */ if (!empty($results['return'])) { $redirectUrl = GalleryUtilities::getRequestVariables('return'); if (empty($redirectUrl)) { $redirectUrl = GalleryUtilities::getRequestVariables('formUrl'); } } /* Failing that, redirect if so instructed */ if (empty($redirectUrl) && !empty($results['redirect'])) { /* If we have a status, store its data in the session */ if (!empty($results['status'])) { $session =& $gallery->getSession(); $session->putStatus($results['status']); } $urlToGenerate = $results['redirect']; $redirectUrl = $urlGenerator->generateUrl($urlToGenerate, array('forceFullUrl' => true)); } /* If we have a redirect URL use it */ if (!empty($redirectUrl)) { return _GalleryMain_doRedirect($redirectUrl, null, $controllerName); } /* Let the controller specify the next view */ if (!empty($results['delegate'])) { /* Load any errors into the request */ if (!empty($results['error'])) { foreach ($results['error'] as $error) { GalleryUtilities::putRequestVariable($error, 1); } } /* Save the view name, put the rest into the request so the view can get it */ foreach ($results['delegate'] as $key => $value) { switch ($key) { case 'view': $viewName = $value; break; default: GalleryUtilities::putRequestVariable($key, $value); break; } } } } /* Load and run the appropriate view */ if (empty($viewName)) { $viewName = GALLERY_DEFAULT_VIEW; GalleryUtilities::putRequestVariable('view', $viewName); } list($ret, $view) = GalleryView::loadView($viewName); if ($ret) { return array($ret, null); } if ($gallery->getConfig('mode.maintenance') && !$view->isAllowedInMaintenance()) { /* Maintenance mode - allow admins, else redirect to given url or show standard view */ list($ret, $isAdmin) = GalleryCoreApi::isUserInSiteAdminGroup(); if ($ret) { return array($ret, null); } if (!$isAdmin) { if (($redirectUrl = $gallery->getConfig('mode.maintenance')) !== true) { list($ignored, $results) = _GalleryMain_doRedirect($redirectUrl, null, null, true); return array(null, $results); } $viewName = 'core.MaintenanceMode'; list($ret, $view) = GalleryView::loadView($viewName); if ($ret) { return array($ret, null); } } } if (!$embedded && $gallery->getConfig('mode.embed.only') && !$view->isAllowedInEmbedOnly()) { /* Lock out direct access when embed-only is set */ if (($redirectUrl = $gallery->getConfig('mode.embed.only')) === true) { return array(GalleryCoreApi::error(ERROR_PERMISSION_DENIED), null); } return _GalleryMain_doRedirect($redirectUrl); } /* Check if the page is cached and return the cached version, else generate the page */ list($ret, $shouldCache) = GalleryDataCache::shouldCache('read', 'full'); if ($ret) { return array($ret, null); } $html = ''; if ($shouldCache) { $session =& $gallery->getSession(); list($ret, $html) = GalleryDataCache::getPageData('page', $urlGenerator->getCacheableUrl()); if ($ret) { return array($ret, null); } if (!empty($html) && $embedded) { /* Also get the theme data */ list($ret, $themeData) = GalleryDataCache::getPageData('theme', $urlGenerator->getCacheableUrl()); if ($ret) { return array($ret, null); } } } if (!empty($html) && (!$embedded || !empty($themeData))) { /* TODO: If we cache all the headers and replay them here, we could send a 304 back */ $session =& $gallery->getSession(); if (!$embedded) { /* Set the appropriate charset in our HTTP header */ if (!headers_sent()) { header('Content-Type: text/html; charset=UTF-8'); } print $session->replaceTempSessionIdIfNecessary($html); $data['isDone'] = true; } else { $html = unserialize($html); $themeData = unserialize($themeData); $data = $session->replaceSessionIdInData($html); $data['themeData'] = $session->replaceSessionIdInData($themeData); $data['isDone'] = false; } } else { /* Initialize our container for template data */ $gallery->setCurrentView($viewName); if ($view->isControllerLike()) { /* Verify the genuineness of the request */ $ret = GalleryController::assertIsGenuineRequest(); if ($ret) { return array($ret, null); } } /* If we render directly to the browser, we need a session before, or no session at all */ if ($view->isImmediate() || $viewName == 'core.ProgressBar') { /* * Session: Find out whether we need to send a cookie & get a new sessionId and save it * (make sure there's a sessionId before starting to render, but only if we need a * session) */ $session =& $gallery->getSession(); $ret = $session->start(); if ($ret) { return array($ret, null); } /* From now on, don't add sessionId to URLs if there's no persistent session */ $session->doNotUseTempId(); } /* * If this is an immediate view, it will send its own output directly. This is used in the * situation where we want to send back data that's not controlled by the layout. That's * usually something that's not user-visible like a binary file. */ $data = array(); if ($view->isImmediate()) { if ($view->autoCacheControl()) { /* r17660 removed the default on the $template parameter */ $null = null; $ret = $view->setCacheControl($null); if ($ret) { return array($ret, null); } } $status = isset($results['status']) ? $results['status'] : array(); $error = isset($results['error']) ? $results['error'] : array(); $ret = $view->renderImmediate($status, $error); if ($ret) { list($ret2, $inGroup) = GalleryCoreApi::isUserInSiteAdminGroup(); if ($ret->getErrorCode() & ERROR_MISSING_OBJECT && ($ret2 || !$inGroup)) { /* Normalize error to GalleryView::_permissionCheck() */ $ret->addErrorCode(ERROR_PERMISSION_DENIED); } return array($ret, null); } $data['isDone'] = true; } else { if (!isset($template)) { GalleryCoreApi::requireOnce('modules/core/classes/GalleryTemplate.class'); $template = new GalleryTemplate(dirname(__FILE__)); } list($ret, $results, $theme) = $view->doLoadTemplate($template); if ($ret) { list($ret, $results) = $view->_permissionCheck($ret); if ($ret) { return array($ret, null); } } if (isset($results['redirect']) || isset($results['redirectUrl'])) { if (isset($results['redirectUrl'])) { $redirectUrl = $results['redirectUrl']; } else { $redirectUrl = $urlGenerator->generateUrl($results['redirect'], array('forceFullUrl' => true)); } return _GalleryMain_doRedirect($redirectUrl, $template); } if (empty($results['body'])) { return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER, __FILE__, __LINE__, 'View results are missing body file'), null); } $templatePath = 'gallery:' . $results['body']; $template->setVariable('l10Domain', $theme->getL10Domain()); $template->setVariable('isEmbedded', $embedded); if ($viewName == 'core.ProgressBar') { @ini_set('output_buffering', '0'); /** * Try to prevent Apache's mod_deflate from gzipping the output since that * can interfere with streamed output. */ if (function_exists('apache_setenv') && !@$gallery->getConfig('apacheSetenvBroken')) { @apache_setenv('no-gzip', '1'); } /* Render progress bar pages immediately so that the user sees the bar moving */ $ret = $template->display($templatePath); if ($ret) { return array($ret, null); } $data['isDone'] = true; } else { $event = GalleryCoreApi::newEvent('Gallery::BeforeDisplay'); $event->setEntity($template); $event->setData(array('templatePath' => $templatePath, 'view' => $view)); list($ret, $ignored) = GalleryCoreApi::postEvent($event); if ($ret) { return array($ret, null); } list($ret, $html) = $template->fetch($templatePath); if ($ret) { return array($ret, null); } /* * Session: Find out whether we need to send a cookie & need a new session (only if * we don't have one yet) */ $session =& $gallery->getSession(); $ret = $session->start(); if ($ret) { return array($ret, null); } list($ret, $shouldCache) = GalleryDataCache::shouldCache('write', 'full'); if ($ret) { return array($ret, null); } if ($embedded) { $html = $theme->splitHtml($html, $results); } if ($shouldCache && $results['cacheable']) { $htmlForCache = $html; if ($embedded) { $themeDataForCache = $template->getVariable('theme'); } } if ($embedded) { $data = $session->replaceSessionIdInData($html); $data['themeData'] =& $template->getVariableByReference('theme'); $data['themeData'] = $session->replaceSessionIdInData($data['themeData']); $data['isDone'] = false; } else { /* Set the appropriate charset in our HTTP header */ if (!headers_sent()) { header('Content-Type: text/html; charset=UTF-8'); } print $session->replaceTempSessionIdIfNecessary($html); $data['isDone'] = true; } if ($shouldCache && $results['cacheable']) { $session =& $gallery->getSession(); $cacheKey = $urlGenerator->getCacheableUrl(); $sessionId = $session->getId(); if (!empty($sessionId) && $sessionId != SESSION_TEMP_ID) { $htmlForCache = $session->replaceSessionIdInData($htmlForCache, $sessionId, SESSION_TEMP_ID); if ($embedded) { $data['themeData'] = $session->replaceSessionIdInData($data['themeData'], $sessionId, SESSION_TEMP_ID); } } if ($embedded) { $htmlForCache = serialize($htmlForCache); $ret = GalleryDataCache::putPageData('theme', $results['cacheable'], $cacheKey, serialize($data['themeData'])); if ($ret) { return array($ret, null); } } $ret = GalleryDataCache::putPageData('page', $results['cacheable'], $cacheKey, $htmlForCache); if ($ret) { return array($ret, null); } } } } } return array(null, $data); }
$templateData = array(); $templateData['bodyFile'] = 'ImportRequest.html'; $renderFullPage = true; $ret = GalleryEmbed::init(array('fullInit' => false)); if ($ret) { $templateData['errors'][] = $ret->getAsHtml(); } else { $platform =& $gallery->getPlatform(); $storage =& $gallery->getStorage(); $templateData['warnings'] = array(); if (isset($_REQUEST['importDatabase'])) { $importFile = $_REQUEST['importFile']; /* Sanitize the input */ GalleryUtilities::sanitizeInputValues($importFile); if (!$platform->file_exists($importFile)) { return GalleryCoreApi::error(ERROR_BAD_PARAMETER, null, null, 'The file "' . $importFile . '" does not exist.'); } $verifiedFile = $_REQUEST['verifiedFile']; /* Sanitize the input */ GalleryUtilities::sanitizeInputValues($verifiedFile); $doImportFlag = true; if ($verifiedFile != $importFile) { $templateData['verifiedFile'] = $importFile; $verifiedFile = $importFile; $doImportFlag = verifyVersions($templateData, $importFile); } if ($doImportFlag) { $template->renderHeader(true); $template->renderStatusMessage('Restoring Gallery Database', '', 0); /* Do the database import */ $importer = $storage->getDatabaseImporter();
/** * Find admin user and set as active user * @param bool $fallback (optional) whether we should try to fall back if the * API to load the admin user object fails * @return GalleryStatus a status code */ function selectAdminUser($fallback = false) { global $gallery; list($ret, $siteAdminGroupId) = GalleryCoreApi::getPluginParameter('module', 'core', 'id.adminGroup'); if ($ret) { return $ret; } list($ret, $adminUserInfo) = GalleryCoreApi::fetchUsersForGroup($siteAdminGroupId, 1); if ($ret) { return $ret; } if (empty($adminUserInfo)) { return GalleryCoreApi::error(ERROR_MISSING_VALUE); } /* Fetch the first admin from list */ list($userId, $userName) = each($adminUserInfo); list($ret, $adminUser) = GalleryCoreApi::loadEntitiesById($userId, 'GalleryUser'); if ($ret) { if ($fallback) { /* Initialize a GalleryUser with the id of a real admin */ $gallery->debug('Unable to load admin user. Using in-memory user object as fallback'); GalleryCoreApi::requireOnce('modules/core/classes/GalleryUser.class'); $adminUser = new GalleryUser(); $adminUser->setId((int) $userId); $adminUser->setUserName($userName); } else { return $ret; } } $gallery->setActiveUser($adminUser); $session =& $gallery->getSession(); $session->put('isUpgrade', true); return null; }