Exemple #1
0
    protected override object GetDataFromSource()
    {
        DataTable usersAds;
        var       cache = new AdminIdCache();
        string    query;

        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            if (TitanFeatures.IsClickmyad)
            {
                query = string.Format(@"SELECT DISTINCT Id, Status, TargetUrl, ConstantImagePath, NormalImagePath, 
                                                                            CreatorUserId, Title, Description, 
																			StartPageDate, Priority
                                                                            FROM AdPacksAdverts WHERE Status = {0};", (int)AdvertStatus.Active);
            }
            else
            {
                query = string.Format(@"SELECT DISTINCT apa.Id, apa.Status, apa.TargetUrl, apa.ConstantImagePath, apa.NormalImagePath, 
                                                                            apa.CreatorUserId, apa.Title, apa.Description, 
																			apa.StartPageDate, apa.Priority
                                                                            FROM AdPacksAdverts apa 
                                                                            JOIN AdPacks ap ON apa.Id = ap.AdPacksAdvertId 
                                                                            WHERE ap.TotalClicks < ap.ClicksBought 
                                                                            AND (apa.CreatorUserId != {0} OR (apa.CreatorUserId = {0} AND apa.Priority != 0))
                                                                            AND apa.Status = {1}               
                                                                            ;", (int)cache.Get(), (int)AdvertStatus.Active);
            }

            usersAds = bridge.Instance.ExecuteRawCommandToDataTable(query);
        }

        return(usersAds);
    }
Exemple #2
0
    public static int GetAdDisplayTime(AdPacksAdvert ad)
    {
        var cache = new AdminIdCache();

        if (ad.CreatorUserId == (int)cache.Get())
        {
            return(AppSettings.RevShare.AdPack.AdminsAdvertDisplayTime);
        }

        string query = string.Format(@"SELECT TOP 1 DisplayTime 
                                       FROM AdPacks                                      
                                       WHERE AdPacksAdvertId = {0}
                                       AND TotalClicks < ClicksBought
                                       ORDER BY PurchaseDate", ad.Id);

        return((int)TableHelper.SelectScalar(query));
    }
Exemple #3
0
    public static List <AdPacksAdvert> GetAdPacksAdvertsForUsers(int dailyRequiredClicks)
    {
        var cache        = new AdPackAdvertsForUsersCache();
        var adminIdCache = new AdminIdCache();

        DataTable usersAds = (DataTable)cache.Get();

        var usersAdsList          = TableHelper.GetListFromDataTable <AdPacksAdvert>(usersAds, dailyRequiredClicks, true);
        var distinctAdPacks       = new List <AdPacksAdvert>();
        var lowPriorityAdPacks    = new List <AdPacksAdvert>();
        var highPriorityAdPacks   = new List <AdPacksAdvert>();
        var normalPriorityAdPacks = new List <AdPacksAdvert>();

        AdPacksAdvert startPage = null;

        for (int i = 0; i < usersAdsList.Count; i++)
        {
            var item = usersAdsList[i];
            if (item.StartPageDate.HasValue && item.StartPageDate.Value.Date == DateTime.Now.Date)
            {
                startPage = item;
            }
            else if (item.Priority == 0)
            {
                normalPriorityAdPacks.Add(item);
            }
            else if (item.Priority > 0)
            {
                highPriorityAdPacks.Add(item);
            }
            else if (item.Priority < 0)
            {
                lowPriorityAdPacks.Add(item);
            }
        }

        highPriorityAdPacks.Sort((x, y) => x.Priority.CompareTo(y.Priority));
        lowPriorityAdPacks.Sort((x, y) => y.Priority.CompareTo(x.Priority));
        normalPriorityAdPacks.Shuffle();

        var adsCountToAdd = dailyRequiredClicks - highPriorityAdPacks.Count - lowPriorityAdPacks.Count;

        if (startPage != null)
        {
            adsCountToAdd--;
        }

        if (adsCountToAdd > 0 && normalPriorityAdPacks.Count > 0)
        {
            for (int i = 0; i < normalPriorityAdPacks.Count && i < adsCountToAdd; i++)
            {
                distinctAdPacks.Add(normalPriorityAdPacks[i]);
            }
        }

        if (distinctAdPacks.Count < adsCountToAdd)
        {
            var adminsAdsCount = adsCountToAdd - distinctAdPacks.Count;
            using (var bridge = ParserPool.Acquire(Database.Client))
            {
                var adminsAds = bridge.Instance.ExecuteRawCommandToDataTable(string.Format(@"SELECT DISTINCT TOP {0} apa.Id, apa.Status, apa.TargetUrl, apa.ConstantImagePath, apa.NormalImagePath, apa.CreatorUserId, apa.Title, apa.Description, apa.Priority
                                                                            FROM AdPacksAdverts apa 
                                                                            WHERE apa.CreatorUserId = {1} AND apa.Priority = 0 AND apa.Status = {2}",
                                                                                           adminsAdsCount, (int)adminIdCache.Get(), (int)AdvertStatus.Active));

                var adminsAdsList = TableHelper.GetListFromDataTable <AdPacksAdvert>(adminsAds, adminsAdsCount, false);

                distinctAdPacks.AddRange(adminsAdsList);
            }
        }

        if (startPage != null)
        {
            distinctAdPacks.Insert(0, startPage);
        }

        for (int i = 0; i < highPriorityAdPacks.Count; i++)
        {
            distinctAdPacks.Insert(startPage != null ? 1 : 0, highPriorityAdPacks[i]);
        }

        distinctAdPacks.AddRange(lowPriorityAdPacks);
        return(distinctAdPacks);
    }