/// <summary>
        /// Shows the readonly details.
        /// </summary>
        /// <param name="mediaAccount">The media account.</param>
        private void ShowReadonlyDetails(MediaAccount mediaAccount)
        {
            SetEditMode(false);

            lActionTitle.Text     = mediaAccount.Name.FormatAsHtmlTitle();
            hlInactive.Visible    = !mediaAccount.IsActive;
            hlLastRefresh.Visible = mediaAccount.LastRefreshDateTime.HasValue;
            if (mediaAccount.LastRefreshDateTime.HasValue)
            {
                var refreshTimeSpan = RockDateTime.Now - mediaAccount.LastRefreshDateTime.Value;

                hlLastRefresh.Text = "Last Refreshed: " + refreshTimeSpan.Humanize();
            }

            var mediaAccountComponent = mediaAccount.GetMediaAccountComponent();
            var descriptionList       = new DescriptionList();

            if (mediaAccountComponent != null)
            {
                descriptionList.Add("Type", mediaAccountComponent.EntityType.FriendlyName);
            }

            lDescription.Text = descriptionList.Html;
            lMetricData.Text  = mediaAccountComponent?.GetAccountHtmlSummary(mediaAccount);
        }
        /// <summary>
        /// Shows the edit details.
        /// </summary>
        /// <param name="mediaAccount">The media account.</param>
        private void ShowEditDetails(MediaAccount mediaAccount)
        {
            if (mediaAccount.Id == 0)
            {
                lActionTitle.Text = ActionTitle.Add(MediaAccount.FriendlyTypeName).FormatAsHtmlTitle();
            }
            else
            {
                lActionTitle.Text = mediaAccount.Name.FormatAsHtmlTitle();
            }

            hlInactive.Visible = !mediaAccount.IsActive;

            SetEditMode(true);

            tbName.Text      = mediaAccount.Name;
            cbActive.Checked = mediaAccount.IsActive;

            if (mediaAccount.ComponentEntityType != null)
            {
                cpMediaAccountComponent.SetValue(mediaAccount.ComponentEntityType.Guid.ToString().ToUpper());
            }
            else
            {
                cpMediaAccountComponent.SetValue(mediaAccount.ComponentEntityType != null ? mediaAccount.ComponentEntityType.Guid.ToString().ToUpper() : string.Empty);
            }

            RenderComponentAttributeControls(mediaAccount, true);
        }
        /// <summary>
        /// Handles the Click event of the btnSave control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
            {
                return;
            }

            var rockContext         = new RockContext();
            var mediaAccount        = GetMediaAccount(rockContext);
            var mediaAccountService = new MediaAccountService(rockContext);
            var isNew = mediaAccount == null;

            if (isNew)
            {
                mediaAccount = new MediaAccount();
                mediaAccountService.Add(mediaAccount);
            }

            mediaAccount.Name     = tbName.Text;
            mediaAccount.IsActive = cbActive.Checked;
            mediaAccount.ComponentEntityTypeId = cpMediaAccountComponent.SelectedEntityTypeId ?? 0;
            rockContext.SaveChanges();

            mediaAccount.LoadAttributes(rockContext);
            avcComponentAttributes.GetEditValues(mediaAccount);
            mediaAccount.SaveAttributeValues(rockContext);
            rockContext.SaveChanges();

            var pageReference = RockPage.PageReference;

            pageReference.Parameters.AddOrReplace(PageParameterKey.MediaAccountId, mediaAccount.Id.ToString());
            Response.Redirect(pageReference.BuildUrl(), false);
        }
        /// <summary>
        /// Gets the media account component.
        /// </summary>
        /// <param name="mediaAccount">The media account.</param>
        /// <returns></returns>
        private MediaAccountComponent GetMediaAccountComponent(MediaAccount mediaAccount)
        {
            var componentEntityTypeId = mediaAccount != null ? mediaAccount.ComponentEntityTypeId : ( int? )null;

            if (componentEntityTypeId.HasValue)
            {
                var componentEntityType = EntityTypeCache.Get(componentEntityTypeId.Value);
                return(componentEntityType == null ? null : MediaAccountContainer.GetComponent(componentEntityType.Name));
            }

            return(null);
        }
        /// <summary>
        /// Shows the detail.
        /// </summary>
        /// <param name="mediaAccountId">The media account identifier.</param>
        public void ShowDetail(int mediaAccountId)
        {
            MediaAccount mediaAccount = null;

            if (!mediaAccountId.Equals(0))
            {
                mediaAccount = GetMediaAccount();
            }

            if (mediaAccount == null)
            {
                mediaAccount = new MediaAccount {
                    Id = 0, IsActive = true
                };
            }

            hfMediaAccountId.Value = mediaAccount.Id.ToString();

            bool readOnly = false;

            nbEditModeMessage.Text = string.Empty;
            if (!IsUserAuthorized(Authorization.EDIT))
            {
                readOnly = true;
                nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(MediaAccount.FriendlyTypeName);
            }

            if (readOnly)
            {
                btnEdit.Visible             = false;
                btnDelete.Visible           = false;
                btnSyncWithProvider.Visible = false;

                ShowReadonlyDetails(mediaAccount);
            }
            else
            {
                btnEdit.Visible   = true;
                btnDelete.Visible = true;

                if (mediaAccount.Id > 0)
                {
                    btnSyncWithProvider.Visible = !(mediaAccount.GetMediaAccountComponent()?.AllowsManualEntry ?? true);
                    ShowReadonlyDetails(mediaAccount);
                }
                else
                {
                    btnSyncWithProvider.Visible = false;
                    ShowEditDetails(mediaAccount);
                }
            }
        }
Beispiel #6
0
        private void btnSignup_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtUsername.Text))
            {
                MessageBox.Show("Username is empty", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (string.IsNullOrEmpty(txtPassword.Text))
            {
                MessageBox.Show("Password is empty", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (string.IsNullOrEmpty(txtEmail.Text))
            {
                MessageBox.Show("Email is empty", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string username = txtUsername.Text;
            string password = txtPassword.Text;
            string email = txtEmail.Text;

            MediaAccount account = new MediaAccount()
            {
                Username = username,
                Password = password,
                Email = email
            };

            if (!DatabaseManager.InsertItem(account))
            {
                MessageBox.Show("Could not create user. Please try again with a different username", "Error",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Account created!", "Succes", MessageBoxButtons.OK, MessageBoxIcon.Information);
                account = DatabaseManager.ContainsItem(new MediaAccount()
                {
                    Username = username,
                    Password = password,
                    Email = email
                }, new [] {"Username", "Password"});
                Globals.Account = account;
                DialogResult = DialogResult.OK;
                Close();
            }
        }
        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event.
        /// </summary>
        /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            _mediaAccount = GetMediaAccount();
            if (_mediaAccount != null)
            {
                var mediaAccountComponent = GetMediaAccountComponent();

                // Block Security and special attributes (RockPage takes care of View)
                bool canAddEditDelete = IsUserAuthorized(Authorization.EDIT);

                gFolderList.DataKeyNames            = new string[] { "Id" };
                gFolderList.Actions.ShowAdd         = canAddEditDelete && mediaAccountComponent != null && mediaAccountComponent.AllowsManualEntry;
                gFolderList.IsDeleteEnabled         = canAddEditDelete;
                gFolderList.Actions.AddClick       += gFolderList_AddClick;
                gFolderList.GridRebind             += gFolderList_GridRebind;
                gFolderList.EntityTypeId            = EntityTypeCache.Get <MediaFolder>().Id;
                gFolderList.ShowConfirmDeleteDialog = false;

                gfFilter.ApplyFilterClick   += gfFilter_ApplyFilterClick;
                gfFilter.DisplayFilterValue += gfFilter_DisplayFilterValue;
                gfFilter.ClearFilterClick   += gfFilter_ClearFilterClick;

                lTitle.Text = (_mediaAccount.Name + " Folders").FormatAsHtmlTitle();
            }

            // this event gets fired after block settings are updated. it's nice to repaint the screen if these settings would alter it
            this.BlockUpdated += Block_BlockUpdated;
            this.AddConfigurationUpdateTrigger(upnlContent);

            string deleteScript = @"
    $('table.js-grid-folders a.grid-delete-button').on('click', function( e ){
        var $btn = $(this);
        var folderName = $btn.closest('tr').find('.js-name-folder').text();
        e.preventDefault();
        Rock.dialogs.confirm('Are you sure you wish to delete the '+ folderName +' folder. This will delete all related media files from Rock.', function (result) {
            if (result) {
                window.location = e.target.href ? e.target.href : e.target.parentElement.href;
            }
        });
    });
";

            ScriptManager.RegisterStartupScript(gFolderList, gFolderList.GetType(), "deleteRequestScript", deleteScript, true);
        }
Beispiel #8
0
        /// <summary>
        /// Processes one account and return the result of the operation.
        /// </summary>
        /// <param name="mediaAccount">The media account.</param>
        /// <param name="limitFullSync"><c>true</c> if a full-sync should only be performed once per day.</param>
        /// <returns>The result of the operation.</returns>
        private async Task <OperationResult> ProcessOneAccount(MediaAccount mediaAccount, bool limitFullSync)
        {
            var sw     = System.Diagnostics.Stopwatch.StartNew();
            var errors = new List <string>();

            if (mediaAccount.GetMediaAccountComponent() == null)
            {
                return(new OperationResult($"Skipped account {mediaAccount.Name}.", new[] { $"{mediaAccount.Name}: Media Account component was not found." }));
            }

            // Determine if this is a full sync or a partial refresh.
            var currentDateTime = RockDateTime.Now;
            var lastFullSync    = mediaAccount.LastRefreshDateTime;
            var haveSyncedToday = lastFullSync.HasValue && lastFullSync.Value.Date == currentDateTime.Date;
            var refreshOnly     = limitFullSync && haveSyncedToday;

            if (refreshOnly)
            {
                // Quick refresh media and folders only.
                var result = await MediaAccountService.RefreshMediaInAccountAsync(mediaAccount.Id);

                errors.AddRange(result.Errors);
            }
            else
            {
                // First sync all the media and folders.
                var result = await MediaAccountService.SyncMediaInAccountAsync(mediaAccount.Id);

                errors.AddRange(result.Errors);

                // Next sync all the analytics.
                result = await MediaAccountService.SyncAnalyticsInAccountAsync(mediaAccount.Id);

                errors.AddRange(result.Errors);
            }

            sw.Stop();
            var seconds = ( int )sw.Elapsed.TotalSeconds;

            var message = $"{( refreshOnly ? "Refreshed" : "Synchronized" )} account {mediaAccount.Name} in {seconds}s.";

            // Since we will be aggregating errors include the
            // account name if there were any errors.
            return(new OperationResult(message, errors.Select(a => $"{mediaAccount.Name}: {a}")));
        }
Beispiel #9
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            MediaAccount account = new MediaAccount()
            {
                ID = Globals.Account.ID,
                Username = txtUsername.Text,
                Password = txtPassword.Text,
                Email = txtEmail.Text,
                Picture = picProfile.ImageLocation
            };

            if (!DatabaseManager.UpdateItem(account))
            {
                MessageBox.Show("Something went wrong saving your information", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return;
            }
            Globals.Account = account;
            Close();
        }
Beispiel #10
0
        public MessageControl(MessageInstance message)
        {
            InitializeComponent();

            this.Message = message;
            user = new MediaAccount() {ID = message.MediaAccount};
            category = new CategoryInstance() {ID = message.Category};

            if (Message.Media != null)
            {
                Media media = new Media() {ID = Message.Media.Value};
                media = DatabaseManager.ContainsItem(media, new [] {"ID"});
                picMedia.ImageLocation = media.Url;
                hasMedia = true;
            }
            else
            {
                flowLayoutPanel1.Controls.Remove(panelMedia);
                Controls.Remove(flowLayoutPanel1);
            }
            user = DatabaseManager.ContainsItem(user, new[] {"ID"});
            category = DatabaseManager.ContainsItem(category, new[] {"ID"});
            Likes =
                int.Parse(
                    DatabaseManager.QueryFirst("SELECT COUNT(*) FROM Likes WHERE message=" + message.ID)["Column1"]
                        .ToString());
            DidLike =
                DatabaseManager.ContainsItem(new Likes() {Message = message.ID, MediaAccount = Globals.Account.ID},
                    new[] {"Message", "MediaAccount"}) !=
                null;

            picUser.ImageLocation = user.Picture;
            lblUsername.Text = user.Username;
            lblDate.Text = message.Datum.ToShortDateString();
            lblMessage.Text = message.Report;

            lblTitle.Text = string.IsNullOrEmpty(message.Title) ? category.Name : $"{message.Title} - {category.Name}";
            IsWriting = false;
            if (Globals.Account.ID != message.MediaAccount)
                Controls.Remove(lblRemove);
        }
        /// <summary>
        /// Shows the detail.
        /// </summary>
        /// <param name="mediaFolderId">The media folder identifier.</param>
        /// <param name="mediaAccountId">The media account identifier.</param>
        private void ShowDetail(int mediaFolderId, int?mediaAccountId)
        {
            var         rockContext        = new RockContext();
            var         mediaFolderService = new MediaFolderService(rockContext);
            MediaFolder mediaFolder        = null;

            if (!mediaAccountId.Equals(0))
            {
                mediaFolder = mediaFolderService.Get(mediaFolderId);
            }

            if (mediaFolder == null)
            {
                MediaAccount mediaAccount = null;
                if (mediaAccountId.HasValue)
                {
                    mediaAccount = new MediaAccountService(rockContext).Get(mediaAccountId.Value);
                }

                if (mediaAccount != null)
                {
                    mediaFolder = new MediaFolder {
                        Id = 0, MediaAccountId = mediaAccount.Id
                    };
                }
                else
                {
                    pnlView.Visible = false;
                    return;
                }
            }

            hfId.SetValue(mediaFolder.Id);
            hfMediaAccountId.SetValue(mediaFolder.MediaAccountId);
            pnlView.Visible = true;

            bool readOnly = false;

            nbEditModeMessage.Text = string.Empty;
            if (!IsUserAuthorized(Authorization.EDIT))
            {
                readOnly = true;
                nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(MediaFolder.FriendlyTypeName);
            }

            if (readOnly)
            {
                btnEdit.Visible = false;
                btnSyncContentChannelItems.Visible = false;

                ShowReadonlyDetails(mediaFolder);
            }
            else
            {
                btnEdit.Visible = true;

                if (mediaFolder.Id > 0)
                {
                    btnSyncContentChannelItems.Visible = !(mediaFolder.MediaAccount.GetMediaAccountComponent()?.AllowsManualEntry ?? true);
                    ShowReadonlyDetails(mediaFolder);
                }
                else
                {
                    btnSyncContentChannelItems.Visible = false;
                    ShowEditDetails(mediaFolder);
                }
            }
        }
Beispiel #12
0
        public void Reload()
        {
            user = new MediaAccount() {ID = Message.MediaAccount};
            category = new CategoryInstance() {ID = Message.Category};

            user = DatabaseManager.ContainsItem(user, new[] {"ID"});
            category = DatabaseManager.ContainsItem(category, new[] {"ID"});

            picUser.ImageLocation = user.Picture;
            lblUsername.Text = user.Username;
            lblDate.Text = Message.Datum.ToShortDateString();
            lblMessage.Text = Message.Report;

            lblTitle.Text = string.IsNullOrEmpty(Message.Title) ? category.Name : $"{Message.Title} - {category.Name}";
            IsWriting = false;
            if (Globals.Account.ID != Message.MediaAccount)
                Controls.Remove(lblRemove);
        }
Beispiel #13
0
 /// <summary>
 /// Performs a full synchronization of folders and media content for the account.
 /// </summary>
 /// <param name="mediaAccount">The media account to be synchronized.</param>
 /// <param name="cancellationToken">Indicator that the operation should be stopped.</param>
 /// <returns>
 /// A <see cref="SyncOperationResult" /> object with the result of the operation.
 /// </returns>
 /// <remarks>
 /// The <see cref="MediaAccount.LastRefreshDateTime" /> is updated when
 /// <see cref="SyncOperationResult.IsSuccess" /> is <c>true</c>.
 /// </remarks>
 public override Task <SyncOperationResult> SyncMediaAsync(MediaAccount mediaAccount, CancellationToken cancellationToken)
 {
     return(Task.FromResult(new SyncOperationResult()));
 }
Beispiel #14
0
 /// <summary>
 /// Gets the HTML to display on media account detail page.
 /// </summary>
 /// <param name="mediaAccount">The media account.</param>
 /// <returns>
 /// A string of HTML content.
 /// </returns>
 public override string GetAccountHtmlSummary(MediaAccount mediaAccount)
 {
     return(string.Empty);
 }
 /// <summary>
 /// Renders the component attribute controls.
 /// </summary>
 private void RenderComponentAttributeControls(MediaAccount mediaAccount, bool setValues)
 {
     mediaAccount.LoadAttributes();
     avcComponentAttributes.ExcludedAttributes = mediaAccount.Attributes.Values.Where(a => a.Key == "Order" || a.Key == "Active").ToArray();
     avcComponentAttributes.AddEditControls(mediaAccount, setValues);
 }