Beispiel #1
0
 private void Application_StartDelayed(object sender, EventArgs e)
 {
     XmlConfigurator.Configure();
     DbRegistry.Configure();
     InitializeDbResources();
     AjaxSecurityChecker.Instance.CheckMethodPermissions += AjaxCheckMethodPermissions;
     try
     {
         AmiPublicDnsSyncService.Synchronize();
     }
     catch { }
     NotifyConfiguration.Configure();
     WebItemManager.Instance.LoadItems();
     SearchHandlerManager.Registry(new StudioSearchHandler());
     (new S3UploadGuard()).DeleteExpiredUploads(TimeSpan.FromDays(1));
     BundleConfig.Configure();
 }
        public void Configure()
        {
            if (!DbRegistry.IsDatabaseRegistered(ProjectApiBase.DbId))
            {
                DbRegistry.RegisterDatabase(ProjectApiBase.DbId, WebConfigurationManager.ConnectionStrings[ProjectApiBase.DbId]);
            }

            if (!DbRegistry.IsDatabaseRegistered(FileConstant.DatabaseId))
            {
                DbRegistry.RegisterDatabase(FileConstant.DatabaseId, WebConfigurationManager.ConnectionStrings[FileConstant.DatabaseId]);
            }

            FilesIntegration.RegisterFileSecurityProvider("projects", "project", new SecurityAdapterProvider());

            //Register prodjects' calendar events
            CalendarManager.Instance.RegistryCalendarProvider(ProjectApi.GetUserCalendars);
        }
Beispiel #3
0
        public static void RemoveFeedItem(string id)
        {
            using (var db = new DbManager(Constants.FeedDbId))
                using (var command = db.Connection.CreateCommand())
                    using (var tx = db.Connection.BeginTransaction(IsolationLevel.ReadUncommitted))
                    {
                        command.Transaction    = tx;
                        command.CommandTimeout = 60 * 60; // a hour

                        var dialect = DbRegistry.GetSqlDialect(Constants.FeedDbId);

                        command.ExecuteNonQuery(new SqlDelete("feed_users").Where("feed_id", id), dialect);
                        command.ExecuteNonQuery(new SqlDelete("feed_aggregate").Where("id", id), dialect);

                        tx.Commit();
                    }
        }
        public DbFeedStorageTest()
        {
            var dbType = DbType.SQLite;

            if (dbType == DbType.MySQL)
            {
                DbRegistry.RegisterDatabase("news", "MySql.Data.MySqlClient", "Server=teamlab;Database=Test;UserID=dev;Pwd=dev");
                //new DbManager("news").ExecuteNonQuery(NewsResource.DbSchema_MySQL);
            }
            if (dbType == DbType.SQLite)
            {
                DbRegistry.RegisterDatabase("news", "System.Data.SQLite", "Data Source=feed.sqlite;Version=3");
                //new DbManager("news").ExecuteNonQuery(NewsResource.DbSchema_SQLite);
            }

            feedStorage = new DbFeedStorage(10);
        }
        public static void Configure()
        {
            XmlConfigurator.Configure();

            DbRegistry.Configure();

            PrepareRedisSessionProvider();

            if (HttpContext.Current != null && HttpContext.Current.Request != null)
            {
                var url = HttpContext.Current.Request.GetUrlRewriter();
                CommonLinkUtility.Initialize(new UriBuilder(url.Scheme, url.Host, url.Port).Uri.ToString());
            }

            ConfigureWebApi();

            if (ConfigurationManager.AppSettings["resources.from-db"] == "true")
            {
                DBResourceManager.PatchAssemblies();
            }

            AjaxSecurityChecker.Instance.CheckMethodPermissions += AjaxCheckMethodPermissions;

            try
            {
                AmiPublicDnsSyncService.Synchronize();
            }
            catch { }

            NotifyConfiguration.Configure();

            WebItemManager.Instance.LoadItems();

            SearchHandlerManager.Registry(new StudioSearchHandler());

            StorageFactory.InitializeHttpHandlers();
            (new S3UploadGuard()).DeleteExpiredUploads(TimeSpan.FromDays(1));

            BundleConfig.Configure();

            if (CoreContext.Configuration.Standalone)
            {
                WarmUp.Instance.Start();
            }
        }
        public void SetAccessToTest()
        {
            if (!DbRegistry.IsDatabaseRegistered(CRMConstants.DatabaseId))
            {
                DbRegistry.RegisterDatabase(CRMConstants.DatabaseId, "Server=teamlab;Database=Test;UserID=dev;Pwd=dev;pooling=True;Character Set=utf8");
            }


            ASC.Core.CoreContext.TenantManager.SetCurrentTenant(0);


            var deal = Global.DaoFactory.GetDealDao().GetByID(17);

            CRMSecurity.SetAccessTo(deal, new List <Guid>()
            {
                ASC.Core.SecurityContext.CurrentAccount.ID
            });
        }
        public override List <UsageSpaceStatItem> GetStatData()
        {
            if (!DbRegistry.IsDatabaseRegistered(PROJECTS_DBID))
            {
                DbRegistry.RegisterDatabase(PROJECTS_DBID, ConfigurationManager.ConnectionStrings[PROJECTS_DBID]);
            }
            if (!DbRegistry.IsDatabaseRegistered(FileConstant.DatabaseId))
            {
                DbRegistry.RegisterDatabase(FileConstant.DatabaseId, ConfigurationManager.ConnectionStrings[FileConstant.DatabaseId]);
            }

            using (var filedb = new DbManager(FileConstant.DatabaseId))
                using (var projdb = new DbManager(PROJECTS_DBID))
                {
                    var q = new SqlQuery("files_file f")
                            .Select("b.right_node")
                            .SelectSum("f.content_length")
                            .InnerJoin("files_folder_tree t", Exp.EqColumns("f.folder_id", "t.folder_id"))
                            .InnerJoin("files_bunch_objects b", Exp.EqColumns("t.parent_id", "b.left_node"))
                            .Where("b.tenant_id", TenantProvider.CurrentTenantID)
                            .Where(Exp.Like("b.right_node", "projects/project/", SqlLike.StartWith))
                            .GroupBy(1);

                    var sizes = filedb.ExecuteList(q)
                                .Select(r => new { ProjectId = Convert.ToInt32(((string)r[0]).Substring(17)), Size = Convert.ToInt64(r[1]) })
                                .GroupBy(r => r.ProjectId)
                                .ToDictionary(g => g.Key, g => g.Sum(a => a.Size));

                    q = new SqlQuery("projects_projects")
                        .Select("id", "title")
                        .Where("tenant_id", TenantProvider.CurrentTenantID)
                        .Where(Exp.In("id", sizes.Keys));

                    return(projdb.ExecuteList(q)
                           .Select(r => new UsageSpaceStatItem
                    {
                        Name = Convert.ToString(r[1]),
                        SpaceUsage = sizes[Convert.ToInt32(r[0])],
                        Url = String.Concat(PathProvider.BaseAbsolutePath, "projects.aspx?prjID=" + Convert.ToInt32(r[0]))
                    })
                           .OrderByDescending(i => i.SpaceUsage)
                           .ToList());
                }
        }
Beispiel #8
0
        public override void Init(ProductContext productContext)
        {
            if (!DbRegistry.IsDatabaseRegistered(Global.DB_ID))
            {
                DbRegistry.RegisterDatabase(Global.DB_ID, WebConfigurationManager.ConnectionStrings[Global.DB_ID]);
            }

            new SearchHandler();

            ConfigurationManager.Configure(ID, PathProvider.BaseVirtualPath, String.Empty, Global.FileStorageModule);

            productContext.ThemesFolderVirtualPath   = String.Concat(PathProvider.BaseVirtualPath, "App_Themes");
            productContext.ImageFolder               = "images";
            productContext.MasterPageFile            = String.Concat(PathProvider.BaseVirtualPath, "Masters/BasicTemplate.Master");
            productContext.DisabledIconFileName      = "product_disabled_logo.png";
            productContext.IconFileName              = "product_logo.png";
            productContext.LargeIconFileName         = "product_logolarge.png";
            productContext.SubscriptionManager       = new ProductSubscriptionManager();
            productContext.UserActivityControlLoader = new ProjectActivity();
            productContext.WhatsNewHandler           = new WhatsNewHandler();
            productContext.UserActivityPublishers    = new List <IUserActivityPublisher>()
            {
                new TimeLinePublisher()
            };
            productContext.DefaultSortOrder                  = 10;
            productContext.SpaceUsageStatManager             = new ProjectsSpaceUsageStatManager();
            productContext.AdminOpportunities                = GetAdminOpportunities;
            productContext.UserOpportunities                 = GetUserOpportunities;
            productContext.HasComplexHierarchyOfAccessRights = true;

            context = productContext;

            NotifyClient.Instance.Client.RegisterSendMethod(SendMsgMilestoneDeadline, TimeSpan.FromDays(1), DateTime.UtcNow.Date.AddHours(7));
            NotifyClient.Instance.Client.RegisterSendMethod(ReportHelper.SendAutoReports, TimeSpan.FromHours(1), DateTime.UtcNow.Date.AddHours(DateTime.UtcNow.Hour));
            NotifyClient.Instance.Client.RegisterSendMethod(TaskHelper.SendAutoReminderAboutTask, TimeSpan.FromHours(1), DateTime.UtcNow.Date.AddHours(DateTime.UtcNow.Hour));

            NotifyClient.Instance.Client.AddInterceptor(InterceptorSecurity);

            UserActivityManager.AddFilter(new WhatsNewHandler());

            FilesIntegration.RegisterFileSecurityProvider("projects", "project", new SecurityAdapterProvider());
            SearchHandlerManager.Registry(new SearchHandler());
        }
Beispiel #9
0
 public MailServiceHelper(
     UserManager userManager,
     AuthContext authContext,
     IConfiguration configuration,
     DbRegistry dbRegistry,
     CoreBaseSettings coreBaseSettings,
     MailServiceHelperStorage mailServiceHelperStorage,
     DbOptionsManager dbOptions)
 {
     UserManager              = userManager;
     AuthContext              = authContext;
     Configuration            = configuration;
     DbRegistry               = dbRegistry;
     CoreBaseSettings         = coreBaseSettings;
     MailServiceHelperStorage = mailServiceHelperStorage;
     DbOptions       = dbOptions;
     Cache           = mailServiceHelperStorage.Cache;
     DefaultDatabase = GetDefaultDatabase();
 }
 protected override Type ResolveConnectionType()
 {
     if (!string.IsNullOrEmpty(ConnectionStringName) && string.IsNullOrEmpty(ConnectionString))
     {
         try
         {
             ConnectionString = DbRegistry.GetConnectionString(ConnectionStringName).ConnectionString;
             using (var connection = DbRegistry.CreateDbConnection(ConnectionStringName))
             {
                 ConnectionType = connection.GetType().AssemblyQualifiedName;
             }
         }
         catch (Exception exception)
         {
             ErrorHandler.Error("Failed to load resolve connection [" + ConnectionStringName + "]", exception);
             throw;
         }
     }
     return(base.ResolveConnectionType());
 }
Beispiel #11
0
        public static void RemoveFeedAggregate(DateTime fromTime)
        {
            using var db           = new DbManager(Constants.FeedDbId);
            using var command      = db.Connection.CreateCommand();
            using var tx           = db.Connection.BeginTransaction(IsolationLevel.ReadUncommitted);
            command.Transaction    = tx;
            command.CommandTimeout = 60 * 60; // a hour
            var dialect = DbRegistry.GetSqlDialect(Constants.FeedDbId);

            if (dialect.SupportMultiTableUpdate)
            {
                command.ExecuteNonQuery("delete from feed_aggregate, feed_users using feed_aggregate, feed_users where id = feed_id and aggregated_date < @date", new { date = fromTime });
            }
            else
            {
                command.ExecuteNonQuery(new SqlDelete("feed_users").Where(Exp.In("feed_id", new SqlQuery("feed_aggregate").Select("id").Where(Exp.Lt("aggregated_date", fromTime)))), dialect);
                command.ExecuteNonQuery(new SqlDelete("feed_aggregate").Where(Exp.Lt("aggregated_date", fromTime)), dialect);
            }
            tx.Commit();
        }
        public void Configure()
        {
            if (!DbRegistry.IsDatabaseRegistered(ProjectApiBase.DbId))
            {
                DbRegistry.RegisterDatabase(ProjectApiBase.DbId, WebConfigurationManager.ConnectionStrings[ProjectApiBase.DbId]);
            }

            if (!DbRegistry.IsDatabaseRegistered(FileConstant.DatabaseId))
            {
                DbRegistry.RegisterDatabase(FileConstant.DatabaseId, WebConfigurationManager.ConnectionStrings[FileConstant.DatabaseId]);
            }

            ConfigurationManager.Configure(ProductEntryPoint.ID, PathProvider.BaseVirtualPath, String.Empty, ProjectApiBase.DbId);
            FilesIntegration.RegisterFileSecurityProvider("projects", "project", new SecurityAdapterProvider());
            //Register user activity
            ProductManager.RegisterUserActivityPublisher(new TimeLinePublisher());//That shit adds themselve in publisher list in constructor

            //Register prodjects' calendar events
            CalendarManager.Instance.RegistryCalendarProvider(ProjectApi.GetUserCalendars);
        }
 protected SqlUpdate GetRecalculateFilesCountUpdate(object folderId)
 {
     if (DbRegistry.GetSqlDialect("default").SupportMultiTableUpdate)
     {
         return(new SqlUpdate("files_folder d, files_folder_tree t")
                .Set(
                    "d.filesCount = (select count(distinct f.id) from files_file f, files_folder_tree t2 where f.tenant_id = d.tenant_id and f.folder_id = t2.folder_id and t2.parent_id = d.id)")
                .Where(Exp.EqColumns("d.id", "t.parent_id") & Exp.Eq("t.folder_id", folderId) &
                       Exp.Eq("d.tenant_id", TenantID)));
     }
     else
     {
         return(new SqlUpdate("files_folder")
                .Set(
                    "filesCount = (select count(distinct f.id) from files_file f, files_folder_tree t2 where f.tenant_id = files_folder.tenant_id and f.folder_id = t2.folder_id and t2.parent_id = files_folder.id)")
                .Where(Exp.Eq("files_folder.tenant_id", TenantID) &
                       Exp.In("files_folder.id",
                              new SqlQuery("files_folder_tree t").Select("t.parent_id").Where("t.folder_id",
                                                                                              folderId))));
     }
 }
Beispiel #14
0
 public MultiRegionHostedSolution(string dbid,
                                  IConfiguration configuraion,
                                  TenantDomainValidator tenantDomainValidator,
                                  TimeZoneConverter timeZoneConverter,
                                  CookieStorage cookieStorage,
                                  DbRegistry dbRegistry,
                                  DbOptionsManager dbOptions,
                                  TariffServiceStorage tariffServiceStorage,
                                  IOptionsMonitor <ILog> options)
 {
     this.dbid             = dbid;
     Configuraion          = configuraion;
     TenantDomainValidator = tenantDomainValidator;
     TimeZoneConverter     = timeZoneConverter;
     CookieStorage         = cookieStorage;
     DbRegistry            = dbRegistry;
     DbOptions             = dbOptions;
     TariffServiceStorage  = tariffServiceStorage;
     Options = options;
     Initialize();
 }
Beispiel #15
0
        protected AbstractDao(int tenantID, String storageKey)
        {
            TenantID  = tenantID;
            DbManager = new DbManager(storageKey);

            if (!DbRegistry.IsDatabaseRegistered(CRMConstants.DatabaseId))
            {
                DbRegistry.RegisterDatabase(CRMConstants.DatabaseId, WebConfigurationManager.ConnectionStrings[CRMConstants.DatabaseId]);
            }

            _supportedEntityType.Add(EntityType.Company);
            _supportedEntityType.Add(EntityType.Person);
            _supportedEntityType.Add(EntityType.Contact);
            _supportedEntityType.Add(EntityType.Opportunity);
            _supportedEntityType.Add(EntityType.Case);

            _contactCacheKey = String.Concat(TenantID, "/contact");
            _dealCacheKey    = String.Concat(TenantID, "/deal");
            _caseCacheKey    = String.Concat(TenantID, "/case");
            _taskCacheKey    = String.Concat(TenantID, "/task");
        }
Beispiel #16
0
        //TODO:fix
        public HostedSolution(
            IConfiguration configuration,
            TenantDomainValidator tenantDomainValidator,
            TimeZoneConverter timeZoneConverter,
            DbRegistry dbRegistry,
            ConnectionStringSettings connectionString,
            TariffServiceStorage tariffServiceStorage,
            IOptionsMonitor <ILog> options,
            string region)
        {
            tenantService = new DbTenantService(null, null, null);
            var baseSettings = new CoreBaseSettings(configuration);

            coreSettings = new CoreSettings(tenantService, baseSettings, configuration);

            userService         = new DbUserService(null);
            quotaService        = new DbQuotaService(null);
            tariffService       = new TariffService(quotaService, tenantService, baseSettings, coreSettings, configuration, null, tariffServiceStorage, options);
            clientTenantManager = new TenantManager(tenantService, quotaService, tariffService, null, baseSettings, coreSettings);
            settingsManager     = new DbSettingsManager(connectionString);
            Region = region ?? string.Empty;
            DbId   = connectionString.Name;
        }
Beispiel #17
0
        private static void ConfigureCoreContextByDefault()
        {
            var cs = DbRegistry.GetConnectionString("core");

            if (cs == null)
            {
                throw new ConfigurationErrorsException("Can not configure CoreContext: connection string with name core not found.");
            }

            var tenantService = new CachedTenantService(new DbTenantService(cs));
            var userService   = new CachedUserService(new DbUserService(cs));
            var azService     = new CachedAzService(new DbAzService(cs));
            var quotaService  = new CachedQuotaService(new DbQuotaService(cs));
            var subService    = new CachedSubscriptionService(new DbSubscriptionService(cs));
            var tariffService = new TariffService(cs, quotaService, tenantService);

            Configuration        = new CoreConfiguration(tenantService);
            TenantManager        = new TenantManager(tenantService, quotaService, tariffService);
            PaymentManager       = new PaymentManager(Configuration, quotaService, tariffService);
            UserManager          = new UserManager(userService);
            Authentication       = new AuthManager(userService);
            AuthorizationManager = new AuthorizationManager(azService);
            SubscriptionManager  = new SubscriptionManager(subService);
        }
Beispiel #18
0
        private static FullTextSearchSettings InitConnectionSettings(TextIndexCfgSectionHandler cfg)
        {
            var connectionString = ConfigurationManager.ConnectionStrings[cfg.ConnectionStringName];

            ConnectionStringName = cfg.ConnectionStringName;

            var settings = CoreContext.Configuration.GetSection <FullTextSearchSettings>(Tenant.DEFAULT_TENANT);

            if (connectionString == null)
            {
                if (settings == null)
                {
                    throw new Exception("connection string can not be empty");
                }

                DbRegistry.RegisterDatabase(ConnectionStringName,
                                            new ConnectionStringSettings
                {
                    Name             = cfg.ConnectionStringName,
                    ConnectionString = settings.ConnectionString,
                    ProviderName     = "MySql.Data.MySqlClient"
                });
            }
            else
            {
                var parsed = ParseConnectionString(connectionString.ConnectionString);
                settings = new FullTextSearchSettings
                {
                    Host = parsed.ContainsKey("Server") ? parsed["Server"] : "localhost",
                    Port = Convert.ToInt32(parsed.ContainsKey("Port") ? parsed["Port"] : "9306")
                };
                CoreContext.Configuration.SaveSection(Tenant.DEFAULT_TENANT, settings);
            }

            return(settings);
        }
        public override void HandleMessage(XmppStream stream, Message message, XmppHandlerContext context)
        {
            if (!message.HasTo || message.To.IsServer)
            {
                context.Sender.SendTo(stream, XmppStanzaError.ToServiceUnavailable(message));
                return;
            }

            var sessions = context.SessionManager.GetBareJidSessions(message.To);

            if (0 < sessions.Count)
            {
                foreach (var s in sessions)
                {
                    try
                    {
                        context.Sender.SendTo(s, message);
                    }
                    catch
                    {
                        context.Sender.SendToAndClose(s.Stream, message);
                    }
                }
            }
            else
            {
                pushStore = new DbPushStore();
                var properties = new Dictionary <string, string>(1);
                properties.Add("connectionStringName", "default");
                pushStore.Configure(properties);

                if (message.HasTag("active"))
                {
                    var fromFullName = message.HasAttribute("username") ?
                                       message.GetAttribute("username") : message.From.ToString();


                    var messageToDomain = message.To.ToString().Split(new char[] { '@' })[1];
                    var tenant          = CoreContext.TenantManager.GetTenant(messageToDomain);
                    var tenantId        = tenant != null ? tenant.TenantId : -1;

                    var userPushList = new List <UserPushInfo>();
                    userPushList = pushStore.GetUserEndpoint(message.To.ToString().Split(new char[] { '@' })[0]);

                    var firebaseAuthorization = "";
                    try
                    {
                        CallContext.SetData(TenantManager.CURRENT_TENANT, new Tenant(tenantId, ""));
                        firebaseAuthorization = FireBase.Instance.Authorization;
                    }
                    catch (Exception exp)
                    {
                        log.DebugFormat("firebaseAuthorizationERROR: {0}", exp);
                    }
                    foreach (var user in userPushList)
                    {
                        try
                        {
                            var           from = message.From.ToString().Split(new char[] { '@' })[0];
                            List <string> userId;
                            string        photoPath = "";
                            using (var db = new DbManager("core"))
                                using (var command = db.Connection.CreateCommand())
                                {
                                    var q = new SqlQuery("core_user").Select("id").Where(Exp.Like("username", from)).Where("tenant", tenantId);

                                    userId = command.ExecuteList(q, DbRegistry.GetSqlDialect(db.DatabaseId))
                                             .ConvertAll(r => Convert.ToString(r[0]))
                                             .ToList();
                                }
                            if (userId.Count != 0)
                            {
                                var guid = new Guid(userId[0]);
                                photoPath = UserPhotoManager.GetBigPhotoURL(guid);
                            }

                            var tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
                            tRequest.Method      = "post";
                            tRequest.ContentType = "application/json";
                            var data = new
                            {
                                to   = user.endpoint,
                                data = new
                                {
                                    msg          = message.Body,
                                    fromFullName = fromFullName,
                                    photoPath    = photoPath
                                }
                            };
                            var serializer = new JavaScriptSerializer();
                            var json       = serializer.Serialize(data);
                            var byteArray  = Encoding.UTF8.GetBytes(json);
                            tRequest.Headers.Add(string.Format("Authorization: key={0}", firebaseAuthorization));
                            tRequest.ContentLength = byteArray.Length;
                            using (var dataStream = tRequest.GetRequestStream())
                            {
                                dataStream.Write(byteArray, 0, byteArray.Length);
                                using (var tResponse = tRequest.GetResponse())
                                {
                                    using (var dataStreamResponse = tResponse.GetResponseStream())
                                    {
                                        using (var tReader = new StreamReader(dataStreamResponse))
                                        {
                                            var sResponseFromServer = tReader.ReadToEnd();
                                            var str = sResponseFromServer;
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            var str = ex.Message;
                            log.DebugFormat("PushRequestERROR: {0}", str);
                        }
                    }
                }
                StoreOffline(message, context.StorageManager.OfflineStorage);
            }
        }
        public List <string> SearchCRMContacts(int tenant_id, string user_id, string search_text)
        {
            var contacts = new List <string>();

            if (!string.IsNullOrEmpty(search_text))
            {
                #region Set up connection to CRM sequrity
                try
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant_id);
                    SecurityContext.AuthenticateMe(CoreContext.Authentication.GetAccountByID(new Guid(user_id)));

                    if (!DbRegistry.IsDatabaseRegistered("crm"))
                    {
                        DbRegistry.RegisterDatabase("crm", ConfigurationManager.ConnectionStrings["crm"]);
                    }
                }
                catch (Exception e)
                {
                    _log.Error("Error connecting to CRM database", e);
                    return(contacts);
                }
                #endregion

                using (var db = new DbManager("crm"))
                {
                    SqlQuery q;
                    if (FullTextSearch.SupportModule(FullTextSearch.CRMEmailsModule))
                    {
                        var ids = FullTextSearch.Search(search_text + "*", FullTextSearch.CRMEmailsModule)
                                  .GetIdentifiers()
                                  .Select(id => int.Parse(id));

                        q = new SqlQuery("crm_contact c")
                            .Select("c.id", "c.is_company", "trim(concat(c.first_name, ' ', c.last_name, ' ', c.company_name))", "i.data")
                            .InnerJoin("crm_contact_info i", Exp.EqColumns("c.tenant_id", "i.tenant_id") & Exp.EqColumns("c.id", "i.contact_id"))
                            .Where(Exp.In("i.id", ids.Take(FULLTEXTSEARCH_IDS_COUNT).ToList()))
                            .Where("i.type", (int)ContactInfoType.Email);
                    }
                    else
                    {
                        search_text = search_text.Replace("\"", "\\\"");
                        q           = new SqlQuery("crm_contact c")
                                      .Select("c.id", "c.is_company", "trim(concat(c.first_name, ' ', c.last_name, ' ', c.company_name))", "i.data")
                                      .InnerJoin("crm_contact_info i", Exp.EqColumns("c.tenant_id", "i.tenant_id") & Exp.EqColumns("c.id", "i.contact_id"))
                                      .Where("c.tenant_id", tenant_id)
                                      .Where("i.type", (int)ContactInfoType.Email)
                                      .Where("(concat(c.display_name, ' ', i.data) like '%" + search_text + "%')");
                    }

                    var result = db.ExecuteList(q)
                                 .ConvertAll(r => new
                    {
                        Id          = Convert.ToInt32(r[0]),
                        Company     = Convert.ToBoolean(r[1]),
                        DisplayName = Convert.ToString(r[2]),
                        Email       = Convert.ToString(r[3])
                    });

                    foreach (var r in result)
                    {
                        var contact = r.Company ? (Contact) new Company() : new Person();
                        contact.ID = r.Id;
                        if (CRMSecurity.CanAccessTo(contact))
                        {
                            contacts.Add("\"" + r.DisplayName + "\" <" + r.Email + ">");
                        }
                    }
                }
            }
            return(contacts);
        }
Beispiel #21
0
        internal static List <BaseCalendar> GetUserCalendars(Guid userId)
        {
            if (!DbRegistry.IsDatabaseRegistered(DbId))
            {
                DbRegistry.RegisterDatabase(DbId, WebConfigurationManager.ConnectionStrings[DbId]);
            }

            var tenantId      = CoreContext.TenantManager.GetCurrentTenant().TenantId;
            var engineFactory = new EngineFactory(DbId, tenantId);

            var cals     = new List <BaseCalendar>();
            var engine   = engineFactory.GetProjectEngine();
            var projects = engine.GetByParticipant(userId);

            if (projects != null)
            {
                var team = engine.GetTeam(projects.Select(r => r.ID).ToList());

                foreach (var p in projects)
                {
                    var sharingOptions = new SharingOptions();
                    foreach (var participant in team.Where(r => r.ProjectID == p.ID))
                    {
                        sharingOptions.PublicItems.Add(new SharingOptions.PublicItem {
                            Id = participant.ID, IsGroup = false
                        });
                    }

                    var index = p.ID % CalendarColors.BaseColors.Count;
                    cals.Add(new ProjectCalendar(engineFactory, userId, p, CalendarColors.BaseColors[index].BackgroudColor, CalendarColors.BaseColors[index].TextColor, sharingOptions, false));
                }
            }

            var folowingProjects = engine.GetFollowing(userId);

            if (folowingProjects != null)
            {
                var team = engine.GetTeam(folowingProjects.Select(r => r.ID).ToList());

                foreach (var p in folowingProjects)
                {
                    if (projects != null && projects.Exists(proj => proj.ID == p.ID))
                    {
                        continue;
                    }

                    var sharingOptions = new SharingOptions();
                    sharingOptions.PublicItems.Add(new SharingOptions.PublicItem {
                        Id = userId, IsGroup = false
                    });

                    foreach (var participant in team.Where(r => r.ProjectID == p.ID))
                    {
                        sharingOptions.PublicItems.Add(new SharingOptions.PublicItem {
                            Id = participant.ID, IsGroup = false
                        });
                    }

                    var index = p.ID % CalendarColors.BaseColors.Count;
                    cals.Add(new ProjectCalendar(engineFactory, userId, p, CalendarColors.BaseColors[index].BackgroudColor, CalendarColors.BaseColors[index].TextColor, sharingOptions, true));
                }
            }

            return(cals);
        }
Beispiel #22
0
        private void Initialize()
        {
            if (!initialized)
            {
                lock (locker)
                {
                    if (!initialized)
                    {
                        initialized = true;


                        if (Convert.ToBoolean(ConfigurationManager.AppSettings["core.multi-hosted.config-only"] ?? "false"))
                        {
                            foreach (ConnectionStringSettings cs in ConfigurationManager.ConnectionStrings)
                            {
                                if (cs.Name.StartsWith(dbid + "."))
                                {
                                    var name = cs.Name.Substring(dbid.Length + 1);
                                    regions[name] = new HostedSolution(cs, name);
                                }
                            }

                            regions[dbid] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]);
                            if (!regions.ContainsKey(string.Empty))
                            {
                                regions[string.Empty] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]);
                            }
                        }
                        else
                        {
                            var find = false;
                            foreach (ConnectionStringSettings cs in ConfigurationManager.ConnectionStrings)
                            {
                                if (cs.Name.StartsWith(dbid + "."))
                                {
                                    var name = cs.Name.Substring(dbid.Length + 1);
                                    regions[name] = new HostedSolution(cs, name);
                                    find          = true;
                                }
                            }
                            if (find)
                            {
                                regions[dbid] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]);
                                if (!regions.ContainsKey(string.Empty))
                                {
                                    regions[string.Empty] = new HostedSolution(ConfigurationManager.ConnectionStrings[dbid]);
                                }
                            }
                            else
                            {
                                try
                                {
                                    using (var db = new DbManager(dbid))
                                    {
                                        var q = new SqlQuery("regions")
                                                .Select("region")
                                                .Select("connection_string")
                                                .Select("provider");
                                        db.ExecuteList(q)
                                        .ForEach(r =>
                                        {
                                            var cs = new ConnectionStringSettings((string)r[0], (string)r[1], (string)r[2]);
                                            if (!DbRegistry.IsDatabaseRegistered(cs.Name))
                                            {
                                                DbRegistry.RegisterDatabase(cs.Name, cs);
                                            }
                                            regions[cs.Name] = new HostedSolution(cs, cs.Name);
                                        });
                                    }
                                }
                                catch (DbException) { }
                            }
                        }
                    }
                }
            }
        }
Beispiel #23
0
 public ConnectionStringSettings GetRegionConnectionString(string region)
 {
     return(DbRegistry.GetConnectionString(GetRegionService(region).DbId));
 }
Beispiel #24
0
        private void Initialize()
        {
            var connectionStrings   = Configuraion.GetConnectionStrings();
            var dbConnectionStrings = Configuraion.GetConnectionStrings(dbid);

            if (Convert.ToBoolean(Configuraion["core.multi-hosted.config-only"] ?? "false"))
            {
                foreach (var cs in Configuraion.GetConnectionStrings())
                {
                    if (cs.Name.StartsWith(dbid + "."))
                    {
                        var name = cs.Name.Substring(dbid.Length + 1);
                        regions[name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, TariffServiceStorage, Options, name);
                    }
                }

                regions[dbid] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings, TariffServiceStorage, Options);
                if (!regions.ContainsKey(string.Empty))
                {
                    regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings, TariffServiceStorage, Options);
                }
            }
            else
            {
                var find = false;
                foreach (var cs in connectionStrings)
                {
                    if (cs.Name.StartsWith(dbid + "."))
                    {
                        var name = cs.Name.Substring(dbid.Length + 1);
                        regions[name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, TariffServiceStorage, Options, name);
                        find          = true;
                    }
                }
                if (find)
                {
                    regions[dbid] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings, TariffServiceStorage, Options);
                    if (!regions.ContainsKey(string.Empty))
                    {
                        regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, dbConnectionStrings, TariffServiceStorage, Options);
                    }
                }
                else
                {
                    foreach (var connectionString in connectionStrings)
                    {
                        try
                        {
                            using var db = DbOptions.Get(connectionString.Name);
                            var q = new SqlQuery("regions")
                                    .Select("region")
                                    .Select("connection_string")
                                    .Select("provider");
                            db.ExecuteList(q)
                            .ForEach(r =>
                            {
                                var cs = new System.Configuration.ConnectionStringSettings((string)r[0], (string)r[1], (string)r[2]);
                                if (!DbRegistry.IsDatabaseRegistered(cs.Name))
                                {
                                    DbRegistry.RegisterDatabase(cs.Name, cs);
                                }

                                if (!regions.ContainsKey(string.Empty))
                                {
                                    regions[string.Empty] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, TariffServiceStorage, Options, cs.Name);
                                }

                                regions[cs.Name] = new HostedSolution(Configuraion, TenantDomainValidator, TimeZoneConverter, DbRegistry, cs, TariffServiceStorage, Options, cs.Name);
                            });
                        }
                        catch (DbException) { }
                    }
                }
            }
        }
Beispiel #25
0
        public void SendBirthdayReminders(DateTime scheduleDate)
        {
            try
            {
                scheduleDate = scheduleDate.AddDays(1);
                List <Tenant> tenants;
                using (var db = new DbManager("core"))
                    using (var command = db.Connection.CreateCommand())
                    {
                        command.CommandTimeout = 30 * 10;
                        var q = new SqlQuery("core_user")
                                .Select("tenant")
                                .Where(!Exp.Eq("bithdate", null))
                                .Where("date_format(bithdate, '%m%d')", scheduleDate.ToString("MMdd"))
                                .Where("removed", 0)
                                .Where("status", EmployeeStatus.Active)
                                .GroupBy(1);
                        tenants = command.ExecuteList(q, DbRegistry.GetSqlDialect(db.DatabaseId))
                                  .ConvertAll(r => Convert.ToInt32(r[0]))
                                  .Select(id => CoreContext.TenantManager.GetTenant(id))
                                  .ToList();
                    }

                foreach (var tenant in tenants)
                {
                    if (tenant == null ||
                        tenant.Status != TenantStatus.Active ||
                        TariffState.NotPaid <= CoreContext.PaymentManager.GetTariff(tenant.TenantId).State)
                    {
                        continue;
                    }

                    CoreContext.TenantManager.SetCurrentTenant(tenant);

                    if (!WebItemSecurity.GetSecurityInfo(WebItemManager.CommunityProductID.ToString()).Enabled ||
                        !WebItemSecurity.GetSecurityInfo(WebItemManager.BirthdaysProductID.ToString()).Enabled)
                    {
                        continue;
                    }

                    var users                = CoreContext.UserManager.GetUsers(EmployeeStatus.Active, EmployeeType.User);
                    var birthdays            = users.Where(u => u.BirthDate.HasValue && u.BirthDate.Value.Month == scheduleDate.Month && u.BirthDate.Value.Day == scheduleDate.Day);
                    var subscriptionProvider = NotifySource.GetSubscriptionProvider();

                    foreach (var user in users)
                    {
                        if (WebItemManager.Instance[WebItemManager.CommunityProductID].IsDisabled(user.ID))
                        {
                            continue;
                        }

                        var allSubscription = subscriptionProvider.IsSubscribed(Event_BirthdayReminder, user, null);
                        foreach (var birthday in birthdays)
                        {
                            if (user.Equals(birthday))
                            {
                                continue;
                            }

                            if ((allSubscription && !subscriptionProvider.IsUnsubscribe(user, Event_BirthdayReminder, birthday.ID.ToString())) ||
                                (!allSubscription && subscriptionProvider.IsSubscribed(Event_BirthdayReminder, user, birthday.ID.ToString())))
                            {
                                client.SendNoticeToAsync(
                                    Event_BirthdayReminder,
                                    birthday.ID.ToString(),
                                    new[] { user },
                                    true,
                                    new TagValue("BirthdayUserName", birthday.DisplayUserName(false)),
                                    new TagValue("BirthdayUserUrl", CommonLinkUtility.GetUserProfile(birthday.ID)),
                                    new TagValue("BirthdayDate", birthday.BirthDate.Value.ToShortDayMonth()),
                                    new TagValue(CommonTags.Priority, 1));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.GetLogger("ASC").Error(ex);
            }
        }
Beispiel #26
0
 public System.Configuration.ConnectionStringSettings GetRegionConnectionString(string region)
 {
     return(DbRegistry.GetConnectionString(GetRegionService(region).DbId));
 }
 public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
 {
     return(DbRegistry.GetConnectionString((string)value));
 }
Beispiel #28
0
        public static void Configure()
        {
            DbRegistry.Configure();

            PrepareRedisSessionProvider();

            if (HttpContext.Current != null && HttpContext.Current.Request != null)
            {
                var url = HttpContext.Current.Request.GetUrlRewriter();
                CommonLinkUtility.Initialize(new UriBuilder(url.Scheme, url.Host, url.Port).Uri.ToString());
            }

            ConfigureWebApi();

            DBResourceManager.PatchAssemblies();
            AjaxSecurityChecker.Instance.CheckMethodPermissions += AjaxCheckMethodPermissions;
            AppDomain.CurrentDomain.AssemblyResolve             += CurrentDomainOnAssemblyResolve;

            //try
            //{
            //    AmiPublicDnsSyncService.Synchronize();
            //}
            //catch { }

            NotifyConfiguration.Configure();

            WebItemManager.Instance.LoadItems();

            SearchHandlerManager.Registry(new StudioSearchHandler());

            StorageFactory.InitializeHttpHandlers();

            BundleConfig.Configure();

            WhiteLabelHelper.ApplyPartnerWhiteLableSettings();

            if (SetupInfo.IsVisibleSettings(nameof(LdapSettings)))
            {
                LdapNotifyHelper.RegisterAll();
            }

            try
            {
                new S3UploadGuard().DeleteExpiredUploadsAsync(TimeSpan.FromDays(1));//todo:
            }
            catch (Exception)
            {
            }

            try
            {
                if (CoreContext.Configuration.Standalone)
                {
                    Core.WarmUp.Instance.Start();
                }
            }
            catch (Exception ex)
            {
                LogManager.GetLogger("ASC").Error("Start Warmup", ex);
            }
        }
Beispiel #29
0
 public void RegistryTest()
 {
     Assert.AreEqual(cs, DbRegistry.GetConnectionString(dbId));
     Assert.IsTrue(DbRegistry.IsDatabaseRegistered(dbId));
     Assert.IsNotNull(DbRegistry.CreateDbConnection(dbId));
 }
Beispiel #30
0
 public DataTest()
 {
     DbRegistry.RegisterDatabase(dbId, new SQLiteFactory(), cs);
 }