public async Task <ActionResult> Edit([Bind(Include = "PostGroupID,ParentId,PostGroupTitle,ImageUrl")] PostGroup postGroup, HttpPostedFileBase ImageUrl) { if (ModelState.IsValid) { if (ImageUrl != null) { var fileName = Path.GetFileName(ImageUrl.FileName); string newFilename = Guid.NewGuid().ToString() .Replace("-", string.Empty) + Path.GetExtension(fileName); newFilename = "/Uploads/PostGroups/" + newFilename; var physicalPath = Server.MapPath(newFilename); ImageUrl.SaveAs(physicalPath); if (System.IO.File.Exists(Server.MapPath("~/" + postGroup.ImageUrl))) { System.IO.File.Delete(Server.MapPath("~/" + postGroup.ImageUrl)); } postGroup.ImageUrl = newFilename; } db.Entry(postGroup).State = EntityState.Modified; await db.SaveChangesAsync(); return(RedirectToAction("Index")); } ViewBag.ParentId = new SelectList(db.PostGroups, "PostGroupID", "PostGroupTitle", postGroup.ParentId); return(View(postGroup)); }
public async Task <ActionResult <Group> > PostGroup(PostGroup data) { var user = await _userManager.GetCurrentUserAsync(HttpContext); var group = new Group() { Name = data.Name, IsPrivate = data.IsPrivate, IsProtected = data.IsProtected, DateCreated = DateTime.UtcNow }; var groupUser = new GroupUser() { GroupId = group.Id, UserId = user.Id, DateCreated = DateTime.UtcNow, DateActive = DateTime.UtcNow }; _context.Groups.Add(group); _context.GroupUsers.Add(groupUser); await _context.SaveChangesAsync(); return(CreatedAtAction("GetGroup", new { id = group.Id }, group)); }
public async Task <ActionResult> DeleteConfirmed(int id) { PostGroup postGroup = await db.PostGroups.FindAsync(id); db.PostGroups.Remove(postGroup); await db.SaveChangesAsync(); return(RedirectToAction("Index")); }
public JsonPostGroup(PostGroup group) { // Set... if (group != null) { Id = group.Id; PostId = group.Post?.Id ?? 0; GroupId = group.GroupId; } }
// GET: AdminPostGroups/Details/5 public async Task <ActionResult> Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } PostGroup postGroup = await db.PostGroups.FindAsync(id); if (postGroup == null) { return(HttpNotFound()); } return(View(postGroup)); }
// GET: AdminPostGroups/Edit/5 public async Task <ActionResult> Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } PostGroup postGroup = await db.PostGroups.FindAsync(id); if (postGroup == null) { return(HttpNotFound()); } ViewBag.ParentId = new SelectList(db.PostGroups, "PostGroupID", "PostGroupTitle", postGroup.ParentId); return(View(postGroup)); }
public async void LoadPosts() { Posts.Clear(); var posts = await _repo.GetPosts(App.CurrentUser.Id); var dates = posts.Select(x => x.PostAdded).Distinct().ToList(); foreach (var date in dates) { var postsByDate = posts.Where(x => x.PostAdded == date).ToList(); var postGroup = new PostGroup(date, postsByDate); Posts.Insert(0, postGroup); } }
private void home_deawer() { // change the layout to the main app Status.Invoke((MethodInvoker) delegate { Status.Visible = false; }); logo.Invoke((MethodInvoker) delegate { logo.Visible = true; }); PostGroup.Invoke((MethodInvoker) delegate { PostGroup.Visible = true; }); Controle.Invoke((MethodInvoker) delegate { Controle.Visible = true; }); }
static void Main(string[] args) { Console.WriteLine("Google Analytics Reports and ADSense revenue analyser"); try { DateTime now = DateTime.Now; int lastDay = DateTime.DaysInMonth(now.Year, now.Month); DateTime startDate = new DateTime(now.Year, now.Month, 01); DateTime endDate = new DateTime(now.Year, now.Month, lastDay); Console.WriteLine("Report from {0} to {1}", startDate, endDate); string gaViewID = "142868091"; //View ID in Google Analytics string jsonAPIFile = Environment.GetEnvironmentVariable(ENV_VAR_JSON_SECRET_FILE); if (string.IsNullOrEmpty(jsonAPIFile)) { Console.WriteLine("Environment variable not found:" + ENV_VAR_JSON_SECRET_FILE); } UriBuilder uri = new UriBuilder(Assembly.GetExecutingAssembly().CodeBase); string startPath = Path.GetDirectoryName(Uri.UnescapeDataString(uri.Path)); string jsonAPIAuth = Path.Combine(startPath, jsonAPIFile); UserCredential credential; using (var stream = new FileStream(jsonAPIAuth, FileMode.Open, FileAccess.Read)) { //в этой подпапке будут сохраняться "подтвержденные" данные авторизации. До тех пор, пока эта вещь живая, спрашивать в браузере не будут //А вот если ее удалить, то запустят браузер и спросят подтверждение через gmail string credPath = Path.Combine(startPath, "creds.json"); credential = GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, _SCOPES, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result; } var init = new BaseClientService.Initializer { ApplicationName = "kawaiimobile-ga2", HttpClientInitializer = credential }; //https://developers.google.com/analytics/devguides/reporting/core/v4/samples?hl=ru#c var service = new Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService(init); bool buildRevenueReport = true; bool buildPagesReport = true; //URL => сведения о показах и доходе с него Dictionary <string, RevenueReportRow> urlToRevenueRow = new Dictionary <string, RevenueReportRow>(); if (buildRevenueReport) { var publisherRevenueReport = new PublisherRevenueReportBuilder(service, gaViewID); var revenueReport = publisherRevenueReport.Build(startDate, endDate); var reportRows = revenueReport.Rows; if (reportRows != null) { Dictionary <string, PostGroup> urlToRows = new Dictionary <string, PostGroup>(); foreach (var item in reportRows) { urlToRevenueRow[item.URL] = item; if (!urlToRows.TryGetValue(item.MainPostURL, out PostGroup postGroup)) { postGroup = new PostGroup(item.MainPostURL); urlToRows[item.MainPostURL] = postGroup; } postGroup.Add(item); } //теперь сгруппируем по доходу var ord = (from x in urlToRows orderby x.Value.TotalRevenue descending select x.Value).ToArray(); string reportFileName = Path.Combine(startPath, "Revenue report full.txt"); _SaveRevenueReport(reportFileName, ord, revenueReport.TotalRevenue, false); //и еще краткий отчет - где исключено все, что мало смысленно string reportFileNameOpt = Path.Combine(startPath, "Revenue report optimized.txt"); _SaveRevenueReport(reportFileNameOpt, ord, revenueReport.TotalRevenue, true); } Console.WriteLine("ADSense revenue report done..."); } if (buildPagesReport) { var pagesReportBuilder = new PagesReport.VisitedPagesReportBuilder(service, gaViewID); var pagesReport = pagesReportBuilder.Build(startDate, endDate); var pagesReportRows = pagesReport.Rows; string reportPagesFileName = Path.Combine(startPath, "Pages report.txt"); _SavePagesReport(reportPagesFileName, pagesReportRows); Console.WriteLine("Visited pages report done..."); //теперь можно найти все страницы с более-менее приличной посещаемостью, но без показов ADSense - это значит у них "проблемы" int minViews = 10; //это минимальный порог просмотров для анализа string badPagesFileReport = Path.Combine(startPath, "Failed pages report.txt"); using (var failedLog = File.CreateText(badPagesFileReport)) { foreach (var row in pagesReportRows) { int views = row.PageViews; if (views < minViews) { continue; } //смотрим по этому же урлу статус отчета ADSense - показов должно быть больше 0. Если 0 - это страница под "баном" string url = row.URL; //в корне сайта нет баннеров if (url == "/") { continue; } //баннеров нет на страницах (1-2-3...) , на тегах, категориях, библиотеке и архиве if (url.StartsWith("/page/") || url.StartsWith("/tag/") || url.StartsWith("/category/") || url.StartsWith("/library/") || url.StartsWith("/anime-by-genres/") || url.StartsWith("/archives/") || url.StartsWith("/?source=pwa") || url.StartsWith("/?s=")) { continue; } string adsViews = "NO ADS"; if (urlToRevenueRow.TryGetValue(url, out RevenueReportRow foundRev)) { if (foundRev.Impressions > 0) { //показы были, но может это единичные вещи - а посещаемость страницы весьма неплохая? //какой процент показов ? float percent = views / 100; float viewsPercent = foundRev.Impressions / percent; if (viewsPercent > 35) //35% от общего числа просмотров страницы считаем плохим показателем { continue; } adsViews = $"Impressions: {foundRev.Impressions} Revenue: {foundRev.Revenue}"; } } failedLog.WriteLine($"{url} - Page views: {row.PageViews} - {adsViews}"); } } //using failedLog } Console.WriteLine("Done"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }