Пример #1
0
        protected override void OnError(EventArgs e)
        {
            Exception lastError = Server.GetLastError();

            if ((lastError != null) && (lastError is PathTooLongException))
            {
                //let it be handled elsewhere (global.asax.cs)
                return;
            }

            string exceptionUrl       = string.Empty;
            string exceptionIpAddress = string.Empty;

            if (HttpContext.Current != null)
            {
                if (HttpContext.Current.Request != null)
                {
                    exceptionUrl       = String.Format("{0} - {1}", CultureInfo.CurrentCulture, HttpContext.Current.Request.RawUrl);
                    exceptionIpAddress = SiteUtils.GetIP4Address();
                }
            }

            if (lastError != null)
            {
                log.Error(String.Format("{0}-{1}", exceptionIpAddress, exceptionUrl), lastError);
            }



            int siteCount = DatabaseHelper.ExistingSiteCount();

            if (siteCount == 0)
            {
                Server.ClearError();

                log.Info("no sites or no database found in application error so try to redirect to Setup Page");

                try
                {
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.Redirect(String.Format("{0}/Setup/Default.aspx", WebUtils.GetSiteRoot()));
                }
                catch (HttpException) { }
            }

            bool upgradeNeeded = CSetup.UpgradeIsNeeded();

            if (upgradeNeeded)
            {
                try
                {
                    log.Info("detected need for upgrade so redirecting to setup");

                    Server.ClearError();
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.Redirect(String.Format("{0}/Setup/Default.aspx", WebUtils.GetSiteRoot()));
                }
                catch (HttpException) { }
            }
        }
Пример #2
0
        private bool CoreSystemIsReady()
        {
            bool result = true;

            if (!canAccessDatabase)
            {
                return(false);
            }

            if (!DatabaseHelper.SchemaHasBeenCreated())
            {
                return(false);
            }

            if (CSetup.UpgradeIsNeeded())
            {
                return(false);
            }



            return(result);
        }
Пример #3
0
        private void ProbeSystem()
        {
            WritePageContent(
                SetupResource.ProbingSystemMessage,
                false);

            dbPlatform           = DatabaseHelper.DBPlatform();
            dataFolderIsWritable = CSetup.DataFolderIsWritable();

            if (dataFolderIsWritable)
            {
                WritePageContent(
                    SetupResource.FileSystemPermissionsOKMesage,
                    false);
            }
            else
            {
                WritePageContent(
                    SetupResource.FileSystemPermissionProblemsMessage,
                    false);

                WritePageContent(
                    String.Format("<div>{0}</div>", GetFolderDetailsHtml()),
                    false);
            }

            canAccessDatabase = DatabaseHelper.CanAccessDatabase();

            if (canAccessDatabase)
            {
                WritePageContent(
                    dbPlatform
                    + " " + SetupResource.DatabaseConnectionOKMessage,
                    false);
            }
            else
            {
                string dbError = string.Format(
                    SetupResource.FailedToConnectToDatabase,
                    dbPlatform);

                WritePageContent(String.Format("<div>{0}</div>", dbError), false);

                showConnectionError = ConfigHelper.GetBoolProperty("ShowConnectionErrorOnSetup", false);


                if (showConnectionError)
                {
                    WritePageContent(
                        String.Format("<div>{0}</div>", DatabaseHelper.GetConnectionError(null)),
                        false);
                }
            }


            if (canAccessDatabase)
            {
                canAlterSchema = DatabaseHelper.CanAlterSchema(null);

                if (canAlterSchema)
                {
                    WritePageContent(
                        SetupResource.DatabaseCanAlterSchemaMessage,
                        false);
                }
                else
                {
                    WritePageContent(
                        String.Format("<div>{0}</div>", SetupResource.CantAlterSchemaWarning),
                        false);
                }

                schemaHasBeenCreated = DatabaseHelper.SchemaHasBeenCreated();

                if (schemaHasBeenCreated)
                {
                    WritePageContent(
                        SetupResource.DatabaseSchemaAlreadyExistsMessage,
                        false);


                    needSchemaUpgrade = CSetup.UpgradeIsNeeded();

                    if (needSchemaUpgrade)
                    {
                        WritePageContent(
                            SetupResource.DatabaseSchemaNeedsUpgradeMessage,
                            false);
                    }
                    else
                    {
                        WritePageContent(
                            SetupResource.DatabaseSchemaUpToDateMessage,
                            false);
                    }

                    existingSiteCount = DatabaseHelper.ExistingSiteCount();

                    WritePageContent(
                        string.Format(
                            SetupResource.ExistingSiteCountMessageMessage,
                            existingSiteCount.ToString()),
                        false);
                }
                else
                {
                    WritePageContent(
                        SetupResource.DatabaseSchemaNotCreatedYetMessage,
                        false);
                }
            }

            if (!CSetup.RunningInFullTrust())
            {
                // inform of Medium trust configuration issues
                WritePageContent(
                    String.Format("<b>{0}</b><br />{1}<br /><br />", SetupResource.MediumTrustGeneralMessage, GetDataAccessMediumTrustMessage()),
                    false);
            }
        }
Пример #4
0
        private void RunSetup()
        {
            #region setup Cynthia-core

            if (!schemaHasBeenCreated)
            {
                if (canAlterSchema)
                {
                    CreateInitialSchema("Cynthia-core");
                    schemaHasBeenCreated = DatabaseHelper.SchemaHasBeenCreated();
                    if (schemaHasBeenCreated)
                    {
                        //recheck
                        needSchemaUpgrade = CSetup.UpgradeIsNeeded();
                    }
                }
            }

            if (
                (schemaHasBeenCreated) &&
                (needSchemaUpgrade) &&
                (canAlterSchema)
                )
            {
                needSchemaUpgrade = UpgradeSchema("Cynthia-core");
            }

            if (!CoreSystemIsReady())
            {
                return;
            }

            existingSiteCount = DatabaseHelper.ExistingSiteCount();
            if (existingSiteCount == 0)
            {
                CreateSiteAndAdminUser();
            }


            // look for new features or settings to install
            SetupFeatures("Cynthia-core");


            #endregion

            #region setup other applications

            // install other apps

            String pathToApplicationsFolder
                = HttpContext.Current.Server.MapPath(
                      "~/Setup/applications/");

            if (!Directory.Exists(pathToApplicationsFolder))
            {
                WritePageContent(
                    pathToApplicationsFolder
                    + " " + SetupResource.ScriptFolderNotFoundAddendum,
                    false);

                return;
            }

            DirectoryInfo appRootFolder
                = new DirectoryInfo(pathToApplicationsFolder);

            DirectoryInfo[] appFolders = appRootFolder.GetDirectories();

            foreach (DirectoryInfo appFolder in appFolders)
            {
                if (
                    (!string.Equals(appFolder.Name, "Cynthia-core", StringComparison.InvariantCultureIgnoreCase)) &&
                    (appFolder.Name.ToLower() != ".svn") &&
                    (appFolder.Name.ToLower() != "_svn")
                    )
                {
                    CreateInitialSchema(appFolder.Name);
                    UpgradeSchema(appFolder.Name);
                    SetupFeatures(appFolder.Name);
                }
            }

            #endregion

            WritePageContent(SetupResource.EnsuringFeaturesInAdminSites, true);
            ModuleDefinition.EnsureInstallationInAdminSites();

            SiteSettings siteSettings = CacheHelper.GetCurrentSiteSettings();

            if (siteSettings != null)
            {
                if (PageSettings.GetCountOfPages(siteSettings.SiteId) == 0)
                {
                    WritePageContent(SetupResource.CreatingDefaultContent);
                    //SetupContentPages(siteSettings);
                    CSetup.SetupDefaultContentPages(siteSettings);
                }

                try
                {
                    int userCount = SiteUser.UserCount(siteSettings.SiteId);
                    if (userCount == 0)
                    {
                        CSetup.EnsureRolesAndAdminUser(siteSettings);
                    }
                }
                catch (Exception ex)
                {
                    log.Error("EnsureAdminUserAndRoles", ex);
                }

                CSetup.EnsureSkins(siteSettings.SiteId);
            }

            // in case control type controlsrc, regex or sort changed on the definition
            // update instance properties to match
            ThreadPool.QueueUserWorkItem(new WaitCallback(SyncDefinitions), null);
            //ModuleDefinition.SyncDefinitions();
            SiteSettings.EnsureExpandoSettings();
            CSetup.EnsureAdditionalSiteFolders();
        }