Esempio n. 1
0
        public void GetCodeController()
        {
            CodeController home   = new CodeController();
            string         result = home.GetShowMeTheCode();

            Assert.IsNotNull(result);
        }
        public override void Apply(XmlDocument document, string key)
        {
            CodeController codeController = CodeController.GetInstance("conceptual");

            if (codeController == null)
            {
                return;
            }

            codeController.UnregisterAll();

            try
            {
                ApplyCodes(document, key);

                if (_codeRefEnabled)
                {
                    ApplyCodeRefs(document, key);
                }
            }
            catch (Exception ex)
            {
                this.WriteMessage(MessageLevel.Error, ex);
            }
        }
Esempio n. 3
0
        public ReferenceCodeComponent(BuildAssembler assembler,
                                      XPathNavigator configuration) : base(assembler, configuration, false)
        {
            _codeRefStorage = SnippetStorage.Database; //Default to database storage...

            if (this.Mode == CodeHighlightMode.IndirectIris)
            {
                _codeRefSeparator = "\n...\n\n";
            }
            else
            {
                _codeRefSeparator = "\n...\n";
            }

            try
            {
                this.ParseSources(configuration, false);

                _codeRefSelector = XPathExpression.Compile("//codeReference");
                _codeSelector    = XPathExpression.Compile("//code");

                CodeController.Create("reference", this.Mode);
            }
            catch (Exception ex)
            {
                base.WriteMessage(MessageLevel.Error, ex);
            }
        }
        public ReferencePostTransComponent(BuildAssembler assembler,
                                           XPathNavigator configuration)
            : base(assembler, configuration)
        {
            try
            {
                _rootId = String.Empty;

                CodeController codeController = CodeController.GetInstance("reference");
                if (codeController != null)
                {
                    _codeApply    = true;
                    _codeSelector = XPathExpression.Compile(
                        "//pre/span[@name='SandAssist' and @class='tgtSentence']");
                    _mathSelector = XPathExpression.Compile(
                        "//img/span[@name='SandMath' and @class='tgtSentence']");
                }

                _mediaSelector = XPathExpression.Compile(
                    "//img/span[@name='SandMedia' and @class='tgtSentence']");

                this.ParseRootNamespace(configuration);
            }
            catch (Exception ex)
            {
                this.WriteMessage(MessageLevel.Error, ex);
            }
        }
        public ConceptualCodeComponent(BuildAssembler assembler,
                                       XPathNavigator configuration) : base(assembler, configuration, true)
        {
            _codeRefStorage   = SnippetStorage.Database; //Default to database storage...
            _codeRefSeparator = "\n...\n\n";

            try
            {
                this.ParseSources(configuration, true);

                _codeRefContext = new CustomContext();
                _codeRefContext.AddNamespace("ddue",
                                             "http://ddue.schemas.microsoft.com/authoring/2003/5");
                _codeRefSelector = XPathExpression.Compile("//ddue:codeReference");
                _codeRefSelector.SetContext(_codeRefContext);

                _codeContext = new CustomContext();
                _codeContext.AddNamespace("ddue",
                                          "http://ddue.schemas.microsoft.com/authoring/2003/5");
                _codeSelector = XPathExpression.Compile("//ddue:code");
                _codeSelector.SetContext(_codeContext);

                CodeController.Create("conceptual", this.Mode);
            }
            catch (Exception ex)
            {
                base.WriteMessage(MessageLevel.Error, ex);
            }
        }
Esempio n. 6
0
 private void FormCodeAdd_Load(object sender, EventArgs e)
 {
     cctr = new CodeController();
     LoadCodes();
     LoadWorkCode();
     if (dbobj == null)
     {
         bSave.Enabled = false;
     }
 }
        public ConceptualPostTransComponent(BuildAssembler assembler,
                                            XPathNavigator configuration)
            : base(assembler, configuration)
        {
            try
            {
                MathController mathFormatters = MathController.GetInstance("conceptual");
                if (mathFormatters != null)
                {
                    _mathApply          = true;
                    _mathNumber         = mathFormatters.ShowNumber;
                    _mathNumFormat      = mathFormatters.NumberFormat;
                    _mathNumIncludePage = mathFormatters.NumberIncludesPage;

                    _mathSelector = XPathExpression.Compile(
                        "//artLink[starts-with(@target, 'Equation|')]");

                    if (String.IsNullOrEmpty(_mathNumFormat))
                    {
                        if (_mathNumIncludePage)
                        {
                            _mathNumFormat = "({0}.{1})";
                        }
                        else
                        {
                            _mathNumFormat = "({0})";
                        }
                    }
                }

                CodeController codeController = CodeController.GetInstance("conceptual");
                if (codeController != null)
                {
                    _codeApply = true;

                    // This works for Vs2005...
                    _codeSelector = XPathExpression.Compile(
                        "//pre/span[@name='SandAssist' and @class='tgtSentence']");

                    _spanSelector = XPathExpression.Compile(
                        "span[@name='SandAssist' and @class='tgtSentence']");
                }

                _tokensSelector = XPathExpression.Compile(
                    "//span[@name='SandTokens' and @class='tgtSentence']");
            }
            catch (Exception ex)
            {
                this.WriteMessage(MessageLevel.Error, ex);
            }
        }
Esempio n. 8
0
        public void CodeController_BadModel()
        {
            //Arrange
            var mockService = new Mock <ICodeService>();
            var controller  = new CodeController(mockService.Object);

            controller.ModelState.AddModelError("error", "error");

            //Act
            var result = controller.RedeemCode(vm: null);

            //Assert
            Assert.IsType <BadRequestResult>(result);
        }
Esempio n. 9
0
        public void CodeController_RedeemCode()
        {
            //Arrange
            var vm = new CodeRedeemViewModel {
                UserAccountId = "1",
                Code          = "1"
            };
            var mockService = new Mock <ICodeService>();

            mockService.Setup(serv => serv.RedeemCode(vm))
            .Returns(true);
            var controller = new CodeController(mockService.Object);

            //Act
            var result = controller.RedeemCode(vm: vm);

            //Assert
            Assert.IsType <OkResult>(result);
        }
Esempio n. 10
0
        public async Task <IHttpActionResult> WebHook(Update update)
        {
            long chatId = 0;

            try
            {
                var bot = new BotBrains(Request.Headers.Host);
                Telegram = new TelegramBotClient(bot.BotToken);

                if (update.Type == UpdateType.MessageUpdate)
                {
                    var message = update.Message;
                    chatId = message.Chat.Id;
                    var parser = ParserChoser.GetParser(chatId, bot);

                    if (message.Type == MessageType.TextMessage || message.Type == MessageType.PhotoMessage || message.Type == MessageType.SuccessfulPayment)
                    {
                        var cmd = parser.ParseForCommand(update);

                        switch (cmd)
                        {
                        case CmdTypes.Start:
                        {
                            var greetings = "Здравствуйте, меня зовут ДайнерБот! Я помогу вам сделать заказ. " +
                                            "Для того, чтобы ознакомиться с меню нажмите \"Меню\", чтобы " +
                                            "сделать заказ нажмите \"Заказать\".";

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                bot.GreetingsText ?? greetings,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Greetings:
                        {
                            var responce = bot.Greetings(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Restrunt:
                        {
                            var responce = bot.Restrunt(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.TableNumber:
                        {
                            var responce = bot.AssignTableNumber(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.RequestPayment:
                        {
                            var responce = bot.PaymentRequest(chatId);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.InputSumm:
                        {
                            var response = bot.InputSumm(chatId, message.Text, message.Chat.Username);

                            if (response.InvoiceReady)
                            {
                                var prices = new LabeledPrice[1];
                                prices[0] = new LabeledPrice {
                                    Amount = response.Invoice.SummInCents, Label = "Итого"
                                };

                                await Telegram.SendInvoiceAsync(
                                    chatId, response.Invoice.Title, response.Invoice.Description, response.Invoice.Id.ToString(), bot.PaymentToken, "startP", response.Invoice.Currency, prices);
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                            break;
                        }

                        case CmdTypes.Menu:
                        {
                            var responce = bot.ShowMenuCategories(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : new MenuCategorySessionParser(bot.GetMenuCategoriesByChatId(chatId)).Keyboard);

                            break;
                        }

                        case CmdTypes.RequestFeedback:
                        {
                            var responce = bot.FeedbackRequest(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.LeaveFeedback:
                        {
                            var responce = bot.LeaveFeedback(chatId, message.Chat.Username, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.RequestBooking:
                        {
                            var responce = bot.BookingRequest(chatId);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.LeaveBooking:
                        {
                            var responce = bot.LeaveBooking(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.CancelTable:
                        {
                            var responce = bot.CancelTable(chatId);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Category:
                        {
                            var response = bot.SnowMenuByCategory(chatId, message.Text);

                            if (response.Dishes != null)
                            {
                                await Telegram.SendTextMessageAsync(
                                    chatId,
                                    response.ResponceText,
                                    parseMode : ParseMode.Html,
                                    replyMarkup : InlineKeyBoardManager.MenuKeyBoard(response.Dishes));
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(
                                    chatId,
                                    response.ResponceText,
                                    parseMode : ParseMode.Html,
                                    replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }

                            break;
                        }

                        case CmdTypes.CloseMenu:
                        {
                            var response = bot.CloseMenu(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.SuccessfulPayment:
                        {
                            var payment = message.SuccessfulPayment;

                            var responce = bot.SuccessPayment(chatId, payment.InvoicePayload, payment.TotalAmount, payment.TelegramPaymentChargeId, payment.Currency);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Cart:
                        {
                            var responce = bot.ShowCart(chatId);

                            if (responce.NeedInlineKeeyboard)
                            {
                                var keyboard = InlineKeyBoardManager.GetByCmnd(CmdTypes.Cart);

                                await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                            break;
                        }

                        case CmdTypes.MyOrders:
                        {
                            var responce = bot.ShowAllOrders(chatId);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Remark:
                        {
                            var response = bot.AddRemark(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.CloseTimeArriving:
                        {
                            var response = bot.CloseTimeArriving(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Waiter:
                        {
                            var response = bot.CallWaiter(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Remove:
                        {
                            var response = bot.RemoveFromOrder(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.RemoveByNum:
                        {
                            var response = bot.RemoveFromOrderByNum(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Unknown:
                        {
                            await Telegram.SendTextMessageAsync(
                                chatId,
                                "Извините, не понял вашей просьбы.",
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.QRCode:
                        {
                            var code = "";
                            var file = await Telegram.GetFileAsync(message.Photo.LastOrDefault()?.FileId);

                            var filename = bot.PicturePath + chatId + "." + file.FilePath.Split('.').Last();

                            using (var saveImageStream = System.IO.File.Open(filename, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                            {
                                await file.FileStream.CopyToAsync(saveImageStream);

                                saveImageStream.Position = 0;
                                saveImageStream.Close();
                            }

                            file.FileStream.Position = 0;
                            file.FileStream.Close();

                            code = CodeController.ReadCode(filename);

                            if (System.IO.File.Exists(filename))
                            {
                                System.IO.File.Delete(filename);
                            }

                            if (code != null)
                            {
                                var response = bot.QRCode(chatId, code);

                                await Telegram.SendTextMessageAsync(
                                    chatId,
                                    response.ResponceText,
                                    parseMode : ParseMode.Html,
                                    replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(
                                    chatId,
                                    "Не удалось распознать код! Попробуйте еще раз или выберите ресторан и номер стола через меню!",
                                    parseMode : ParseMode.Html,
                                    replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                            break;
                        }

                        case CmdTypes.Actions:
                        {
                            await Telegram.SendTextMessageAsync(
                                chatId,
                                bot.Actions,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Description:
                        {
                            await Telegram.SendTextMessageAsync(
                                chatId,
                                bot.Description,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Location:
                        {
                            var responce = bot.GetAllRestaurants(chatId);

                            if (responce.IsOk)
                            {
                                foreach (var restaurant in responce.RestaurantsInfo)
                                {
                                    await Telegram.SendTextMessageAsync(chatId, restaurant.Info, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                                    await Telegram.SendLocationAsync(chatId, restaurant.Latitude, restaurant.Longitude, replyMarkup : InlineKeyBoardManager.TaxiKeyboard());
                                }
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }

                            break;
                        }
                        }
                    }
                }
                else if (update.Type == UpdateType.CallbackQueryUpdate)
                {
                    chatId = update.CallbackQuery.Message.Chat.Id;
                    var parser = ParserChoser.GetParser(chatId, bot);

                    var cmd = parser.ParseForCommand(update);

                    switch (cmd)
                    {
                    case CmdTypes.AddToOrder:
                    {
                        var response = bot.OrderMeal(chatId, update.CallbackQuery.Data);

                        if (response.IsOk)
                        {
                            var keyboard = InlineKeyBoardManager.RemarkKeyBoard(response.Modificators);
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.AddMod:
                    {
                        var response = bot.AddModificator(chatId, update.CallbackQuery.Data);

                        if (response.IsOk)
                        {
                            if (response.Modificators.Any())
                            {
                                var keyboard = InlineKeyBoardManager.RemarkKeyBoard(response.Modificators);
                                await Telegram.EditMessageTextAsync(chatId, update.CallbackQuery.Message.MessageId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                            }
                            else
                            {
                                await Telegram.EditMessageTextAsync(chatId, update.CallbackQuery.Message.MessageId, response.ResponceText, parseMode : ParseMode.Html);
                            }
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.BackToMenu:
                    {
                        var response = bot.ShowMenuCategories(chatId);

                        await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : new MenuCategorySessionParser(bot.GetMenuCategoriesByChatId(chatId)).Keyboard);

                        break;
                    }

                    case CmdTypes.DishDetails:
                    {
                        var response = bot.GetMenuItem(chatId, update.CallbackQuery.Data);

                        if (response.NeedInlineKeyboard)
                        {
                            var keyboard = InlineKeyBoardManager.DescriptionKeyBoard(response.DishId);

                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.ArrivingTime:
                    {
                        var response = bot.ArrivingTime(chatId);

                        if (response.OkToChangeTime)
                        {
                            await Telegram.EditMessageTextAsync(chatId, update.CallbackQuery.Message.MessageId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : InlineKeyBoardManager.GetByCmnd(CmdTypes.ArrivingTime));
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.TimeInput:
                    {
                        var timeResp = bot.ChangeArrivingTime(chatId, update.CallbackQuery.Data);

                        if (!timeResp.OkToChangeTime)
                        {
                            await Telegram.SendTextMessageAsync(chatId, timeResp.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        else
                        {
                            var orderResp = bot.ShowCart(chatId);
                            if (orderResp.NeedInlineKeeyboard)
                            {
                                var keyboard = InlineKeyBoardManager.GetByCmnd(CmdTypes.Cart);

                                await Telegram.EditMessageTextAsync(chatId, update.CallbackQuery.Message.MessageId, orderResp.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(chatId, orderResp.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                        }

                        break;
                    }

                    case CmdTypes.CreateInvoice:
                    {
                        var response = bot.CreateInvoice(chatId);

                        if (response.InvoiceReady)
                        {
                            var prices = new LabeledPrice[1];
                            prices[0] = new LabeledPrice {
                                Amount = response.Invoice.SummInCents, Label = "Итого"
                            };

                            await Telegram.SendInvoiceAsync(
                                chatId, response.Invoice.Title, response.Invoice.Description, response.Invoice.Id.ToString(), bot.PaymentToken, "startP", response.Invoice.Currency, prices);
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.PayCash:
                    {
                        var response = bot.PayCash(chatId);

                        await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                        break;
                    }

                    case CmdTypes.Unknown:
                    {
                        await Telegram.SendTextMessageAsync(
                            chatId,
                            "Извините, не понял вашей просьбы.",
                            parseMode : ParseMode.Html,
                            replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                        break;
                    }
                    }
                }
                else if (update.Type == UpdateType.PreCheckoutQueryUpdate)
                {
                    chatId = update.PreCheckoutQuery.From.Id;
                    var preCheck = update.PreCheckoutQuery;

                    var response = bot.PreCheckout(chatId, preCheck.TotalAmount, preCheck.Currency, preCheck.InvoicePayload);

                    if (!response.IsError)
                    {
                        await Telegram.AnswerPreCheckoutQueryAsync(preCheck.Id, true);
                    }
                    else
                    {
                        await Telegram.AnswerPreCheckoutQueryAsync(preCheck.Id, false, errorMessage : response.ResponceText);
                    }
                }
            }
            catch (Exception ex)
            {
                new LogWriter().WriteException(ex.Message);

                if (chatId != 0 && Telegram != null)
                {
                    if (ex.Message.Contains("429"))
                    {
                        var excResponce = Responce.UnknownResponce(chatId);
                        await Telegram.SendTextMessageAsync(
                            chatId,
                            "К сожалению Телеграм не позволяет нам так часто вам отвечать 😔, подождите пару минут пожалуйста.",
                            parseMode : ParseMode.Html);
                    }
                    else
                    {
                        var excResponce = Responce.UnknownResponce(chatId);
                        await Telegram.SendTextMessageAsync(
                            chatId,
                            excResponce.ResponceText,
                            parseMode : ParseMode.Html);
                    }
                }
            }
            return(Ok());
        }
        private void ApplyMultiSnippetInfo(XPathNavigator navigator,
                                           SnippetInfo[] arrayInfo, string input)
        {
            CodeHighlightMode highlightMode  = this.Mode;
            CodeController    codeController = CodeController.GetInstance("conceptual");

            if (codeController == null)
            {
                return;
            }

            IList <SnippetItem> listItems = null;
            int infoCount = arrayInfo.Length;
            Dictionary <string, List <SnippetItem> > dicLangItems =
                new Dictionary <string, List <SnippetItem> >();

            // We group the various snippets by the languages...
            for (int i = 0; i < infoCount; i++)
            {
                SnippetInfo snippetInfo = arrayInfo[i];
                listItems = _codeRefProvider[snippetInfo];
                if (listItems != null)
                {
                    int itemCount = listItems.Count;

                    for (int j = 0; j < itemCount; j++)
                    {
                        SnippetItem        snippet = listItems[j];
                        List <SnippetItem> list;
                        if (!dicLangItems.TryGetValue(snippet.Language, out list))
                        {
                            list = new List <SnippetItem>();
                            dicLangItems.Add(snippet.Language, list);
                        }
                        list.Add(snippet);
                    }
                }
            }

            XmlWriter xmlWriter = navigator.InsertAfter();

            xmlWriter.WriteStartElement("snippets");
            xmlWriter.WriteAttributeString("reference", input);
            foreach (KeyValuePair <string, List <SnippetItem> > pair in dicLangItems)
            {
                listItems = pair.Value;
                int itemCount = listItems.Count;

                xmlWriter.WriteStartElement("snippet");

                string      codeLang    = pair.Key;
                Highlighter highlighter = codeController.ApplyLanguage(
                    xmlWriter, codeLang);

                if (highlightMode == CodeHighlightMode.None)
                {
                    for (int j = 0; j < itemCount; j++)
                    {
                        if (j > 0)
                        {
                            xmlWriter.WriteString(_codeRefSeparator);
                        }
                        xmlWriter.WriteString(listItems[j].Text);
                    }
                }
                else if (highlightMode == CodeHighlightMode.IndirectIris)
                {
                    xmlWriter.WriteStartElement("span");
                    xmlWriter.WriteAttributeString("name", "SandAssist");
                    xmlWriter.WriteAttributeString("class", "tgtSentence");
                    xmlWriter.WriteString(codeLang);
                    xmlWriter.WriteEndElement();

                    for (int j = 0; j < itemCount; j++)
                    {
                        if (j > 0)
                        {
                            xmlWriter.WriteString(_codeRefSeparator);
                        }

                        xmlWriter.WriteStartElement("span");
                        xmlWriter.WriteAttributeString("name", "SandAssist");
                        xmlWriter.WriteAttributeString("class", "srcSentence");
                        xmlWriter.WriteValue(codeController.Count);
                        xmlWriter.WriteEndElement();

                        codeController.Register(listItems[j]);
                    }
                }
                else
                {
                    if (highlighter != null)
                    {
                        xmlWriter.WriteStartElement("markup"); // start - markup

                        for (int j = 0; j < listItems.Count; j++)
                        {
                            if (j > 0)
                            {
                                xmlWriter.WriteString(_codeRefSeparator);
                            }

                            StringReader textReader = new StringReader(listItems[j].Text);
                            highlighter.Highlight(textReader, xmlWriter);
                        }
                        xmlWriter.WriteEndElement();           // end - markup
                    }
                    else
                    {
                        for (int j = 0; j < listItems.Count; j++)
                        {
                            if (j > 0)
                            {
                                xmlWriter.WriteString(_codeRefSeparator);
                            }
                            xmlWriter.WriteString(listItems[j].Text);
                        }
                    }
                }

                xmlWriter.WriteEndElement();
            }

            xmlWriter.WriteEndElement();
            xmlWriter.Close();

            navigator.DeleteSelf();
        }
        private void ApplyCodes(XmlDocument document, string key)
        {
            CodeHighlightMode highlightMode  = this.Mode;
            CodeController    codeController = CodeController.GetInstance("conceptual");

            if (codeController == null)
            {
                return;
            }

            XPathNavigator    docNavigator = document.CreateNavigator();
            XPathNodeIterator iterator     = docNavigator.Select(_codeSelector);
            XPathNavigator    navigator    = null;

            XPathNavigator[] arrNavigator =
                BuildComponentUtilities.ConvertNodeIteratorToArray(iterator);

            if (arrNavigator == null || arrNavigator.Length == 0)
            {
                return;
            }

            int tabSize = this.TabSize;

            int itemCount = arrNavigator.Length;

            for (int i = 0; i < itemCount; i++)
            {
                navigator = arrNavigator[i];
                if (navigator == null) // not likely!
                {
                    continue;
                }

                string codeText = navigator.Value;
                if (String.IsNullOrEmpty(codeText))
                {
                    this.WriteMessage(MessageLevel.Warn,
                                      "CodeHighlightComponent: source code is null/empty.");
                    continue;
                }

                StringBuilder inputText = CodeFormatter.StripLeadingSpaces(
                    codeText, tabSize);
                if (inputText == null || inputText.Length == 0)
                {
                    continue;
                }

                string codeLang = navigator.GetAttribute("language", String.Empty);
                if (String.IsNullOrEmpty(codeLang))
                {
                    navigator.SetValue(inputText.ToString());

                    continue;
                }

                inputText.Replace("<codeFeaturedElement>", String.Empty);
                inputText.Replace("<codeFeaturedElement/>", String.Empty);
                inputText.Replace("<placeholder>", String.Empty);
                inputText.Replace("<placeholder/>", String.Empty);
                inputText.Replace("<comment>", String.Empty);
                inputText.Replace("<comment/>", String.Empty);
                inputText.Replace("<legacyItalic>", String.Empty);
                inputText.Replace("<legacyItalic/>", String.Empty);

                _codeCount++;

                XmlWriter xmlWriter = navigator.InsertAfter();
                xmlWriter.WriteStartElement("snippets");   // start - snippets
                xmlWriter.WriteAttributeString("reference", _codeCount.ToString());

                xmlWriter.WriteStartElement("snippet");    // start - snippet
                Highlighter highlighter = codeController.ApplyLanguage(
                    xmlWriter, codeLang);

                if (highlightMode == CodeHighlightMode.None)
                {
                    xmlWriter.WriteString(inputText.ToString());
                }
                else if (highlightMode == CodeHighlightMode.IndirectIris)
                {
                    xmlWriter.WriteStartElement("span");
                    xmlWriter.WriteAttributeString("name", "SandAssist");
                    xmlWriter.WriteAttributeString("class", "tgtSentence");
                    xmlWriter.WriteString(codeLang);
                    xmlWriter.WriteEndElement();

                    xmlWriter.WriteString(inputText.ToString());
                }
                else
                {
                    if (highlighter != null)
                    {
                        if (highlightMode == CodeHighlightMode.DirectIris)
                        {
                            xmlWriter.WriteStartElement("markup"); // start - markup
                        }

                        StringReader textReader = new StringReader(
                            inputText.ToString());
                        highlighter.Highlight(textReader, xmlWriter);

                        if (highlightMode == CodeHighlightMode.DirectIris)
                        {
                            xmlWriter.WriteEndElement();           // end - markup
                        }
                    }
                    else
                    {
                        xmlWriter.WriteString(inputText.ToString());
                    }
                }

                xmlWriter.WriteEndElement();               // end - snippet
                xmlWriter.WriteEndElement();               // end - snippets

                xmlWriter.Close();

                navigator.DeleteSelf();
            }
        }
Esempio n. 13
0
 private void Awake()
 {
     instance = this;
 }
        private void ApplyCode(XPathNavigator docNavigator)
        {
            CodeController codeController = CodeController.GetInstance("reference");

            if (codeController == null ||
                codeController.Mode != CodeHighlightMode.IndirectIris)
            {
                return;
            }

            XPathNodeIterator iterator = docNavigator.Select(_codeSelector);

            if (iterator == null || iterator.Count == 0)
            {
                return;
            }

            XPathNavigator navigator = null;

            XPathNavigator[] arrNavigator =
                BuildComponentUtilities.ConvertNodeIteratorToArray(iterator);

            int itemCount = arrNavigator.Length;

            for (int i = 0; i < itemCount; i++)
            {
                navigator = arrNavigator[i];
                if (navigator == null)
                {
                    continue;
                }

                string codeLang = navigator.Value;
                if (navigator.MoveToParent() && String.Equals(navigator.Name, "pre"))
                {
                    XPathNavigator placeHolder = navigator.SelectSingleNode(
                        "span[@name='SandAssist' and @class='tgtSentence']");
                    if (placeHolder != null)
                    {
                        placeHolder.DeleteSelf();
                    }

                    Highlighter highlighter = codeController.ApplyLanguage(
                        null, codeLang);

                    XPathNodeIterator snipIterator = navigator.Select(
                        "span[@name='SandAssist' and @class='srcSentence']");

                    XPathNavigator[] arrSnipNavigator =
                        BuildComponentUtilities.ConvertNodeIteratorToArray(snipIterator);

                    if (arrSnipNavigator == null || arrSnipNavigator.Length == 0)
                    {
                        string codeText = navigator.Value;
                        if (String.IsNullOrEmpty(codeText) == false)
                        {
                            if (highlighter != null)
                            {
                                XmlWriter    xmlWriter  = navigator.InsertAfter();
                                StringReader textReader = new StringReader(codeText);
                                highlighter.Highlight(textReader, xmlWriter);

                                // For the two-part or indirect, we add extra line-break
                                // since this process delete the last extra line.
                                xmlWriter.WriteStartElement("br"); // start - br
                                xmlWriter.WriteEndElement();       // end -  br

                                xmlWriter.Close();

                                navigator.DeleteSelf();
                            }
                        }
                    }
                    else
                    {
                        XPathNavigator snipNavigator = null;
                        int            snipCount     = arrSnipNavigator.Length;

                        for (int j = 0; j < snipCount; j++)
                        {
                            snipNavigator = arrSnipNavigator[j];
                            if (snipNavigator == null)
                            {
                                continue;
                            }

                            int         snipIndex = snipNavigator.ValueAsInt;
                            SnippetItem item      = codeController[snipIndex];

                            if (item == null)
                            {
                                this.WriteMessage(MessageLevel.Warn,
                                                  "A code snippet specified could not be found. See next message for details.");

                                snipNavigator.DeleteSelf();
                                continue;
                            }

                            string codeText = item.Text;
                            if (String.IsNullOrEmpty(codeText) == false)
                            {
                                XmlWriter xmlWriter = snipNavigator.InsertAfter();

                                if (highlighter != null)
                                {
                                    StringReader textReader = new StringReader(codeText);
                                    highlighter.Highlight(textReader, xmlWriter);
                                }
                                else
                                {
                                    xmlWriter.WriteString(codeText);
                                }

                                xmlWriter.Close();

                                snipNavigator.DeleteSelf();
                            }
                        }
                    }
                }
            }
        }
Esempio n. 15
0
        public IActionResult SubmitCodeSnippet(int id, int?assignmentId, int?categoryId)
        {
            //we need to grab the code form the text area
            string code = Request.Form["Code"];

            //create instance of codecontroller to reuse code for compiling and running code
            CodeController codeController = new CodeController();
            string         results        = codeController.GetResults(code).Trim(); //we want to trim it from escape characters ex: \n \r, only works if they are @ end or beginning, which works perfectly with what we want

            //grab the specific assignment
            var assignment = _context.CodeSnippets.Where(c => c.CodeSnippetId == assignmentId).First();

            //check if the results is equal to the answer in the specific assignment
            bool isCorrect = false;

            if (assignment.Answer == results)
            {
                isCorrect = true;
            }



            //get userEmail
            string userEmail = User.Identity.Name;

            //create new instance of submission
            CodeSnippetSubmission newSubmission = new CodeSnippetSubmission
            {
                AssignmentId = (int)assignmentId,
                UserEmail    = userEmail,
                UserCode     = code,
                IsCorrect    = isCorrect
            };

            _context.Add(newSubmission);
            _context.SaveChanges();

            //create new submission to be used for report
            Submission newSub = new Submission
            {
                AssignmentId = (int)assignmentId,
                CategoryId   = 2,
                CourseId     = id,
                UserEmail    = User.Identity.Name
            };

            _context.Add(newSub);
            _context.SaveChanges();


            TempData["Success"] = "Assignment Successfully Submitted!";



            return(RedirectToRoute(new
            {
                controller = "Course",
                action = "Show",
                id = id
            }));
        }
        private void ApplyCode(XPathNavigator docNavigator,
                               XPathExpression codeSelector)
        {
            CodeController codeController = CodeController.GetInstance("conceptual");

            if (codeController == null ||
                codeController.Mode != CodeHighlightMode.IndirectIris)
            {
                return;
            }

            XPathNodeIterator iterator = docNavigator.Select(codeSelector);

            if (iterator == null || iterator.Count == 0)
            {
                return;
            }

            XPathNavigator navigator = null;

            XPathNavigator[] arrNavigator =
                BuildComponentUtilities.ConvertNodeIteratorToArray(iterator);

            int    itemCount     = arrNavigator.Length;
            string spanNamespace =
                "http://ddue.schemas.microsoft.com/authoring/2003/5";

            string attrName  = String.Empty;
            string attrClass = String.Empty;

            for (int i = 0; i < itemCount; i++)
            {
                navigator = arrNavigator[i];
                if (navigator == null)
                {
                    continue;
                }

                string            codeLang     = null;
                XPathNodeIterator nodeIterator = navigator.SelectChildren("span",
                                                                          spanNamespace);
                XPathNavigator placeHolder = null;
                if (nodeIterator == null || nodeIterator.Count == 0)
                {
                    continue;
                }
                XPathNavigator[] arrSnipNavigator =
                    BuildComponentUtilities.ConvertNodeIteratorToArray(nodeIterator);

                int nodeCount = arrSnipNavigator.Length;

                XPathNavigator tempHolder = arrSnipNavigator[0];
                attrName  = tempHolder.GetAttribute("name", String.Empty);
                attrClass = tempHolder.GetAttribute("class", String.Empty);
                if (String.Equals(attrName, "SandAssist") &&
                    String.Equals(attrClass, "tgtSentence"))
                {
                    placeHolder = tempHolder;
                }
                if (placeHolder != null)
                {
                    codeLang = placeHolder.Value;
                    placeHolder.DeleteSelf();
                }
                else
                {
                    base.WriteMessage(MessageLevel.Info, "No code language found.");
                    continue;
                }

                Highlighter highlighter = codeController.ApplyLanguage(
                    null, codeLang);

                if (nodeCount == 1)
                {
                    string codeText = navigator.Value;
                    if (!String.IsNullOrEmpty(codeText))
                    {
                        codeText = codeText.Trim();

                        XmlWriter xmlWriter = navigator.InsertAfter();
                        if (highlighter != null)
                        {
                            StringReader textReader = new StringReader(codeText);
                            highlighter.Highlight(textReader, xmlWriter);

                            // For the two-part or indirect, we add extra line-break
                            // since this process delete the last extra line.
                            xmlWriter.WriteStartElement("br"); // start - br
                            xmlWriter.WriteEndElement();       // end -  br
                        }
                        else
                        {
                            xmlWriter.WriteString(codeText);
                        }

                        xmlWriter.Close();

                        navigator.DeleteSelf();
                    }
                }
                else
                {
                    XPathNavigator snipNavigator = null;

                    for (int j = 1; j < nodeCount; j++)
                    {
                        snipNavigator = arrSnipNavigator[j];
                        if (snipNavigator == null)
                        {
                            base.WriteMessage(MessageLevel.Warn, "Null navigator!");
                            continue;
                        }
                        attrName  = snipNavigator.GetAttribute("name", String.Empty);
                        attrClass = snipNavigator.GetAttribute("class", String.Empty);
                        if (String.Equals(attrName, "SandAssist") == false ||
                            String.Equals(attrClass, "srcSentence") == false)
                        {
                            base.WriteMessage(MessageLevel.Warn, attrName);
                            base.WriteMessage(MessageLevel.Warn, attrClass);
                            continue;
                        }

                        int         snipIndex = snipNavigator.ValueAsInt;
                        SnippetItem item      = codeController[snipIndex];

                        string codeText = item.Text;
                        if (!String.IsNullOrEmpty(codeText))
                        {
                            codeText = codeText.Trim();

                            XmlWriter xmlWriter = snipNavigator.InsertAfter();
                            if (highlighter != null)
                            {
                                StringReader textReader = new StringReader(codeText);
                                highlighter.Highlight(textReader, xmlWriter);
                            }
                            else
                            {
                                xmlWriter.WriteString(codeText);
                            }

                            xmlWriter.Close();

                            snipNavigator.DeleteSelf();
                        }
                    }
                }
            }
        }
 public CodeTest()
 {
     _codeController = new CodeController();
 }
        private void ApplySnippetInfo(XPathNavigator navigator,
                                      SnippetInfo snippetInfo, string input)
        {
            CodeHighlightMode highlightMode  = this.Mode;
            CodeController    codeController = CodeController.GetInstance("conceptual");

            if (codeController == null)
            {
                return;
            }

            IList <SnippetItem> listItems = _codeRefProvider[snippetInfo];

            if (listItems != null)
            {
                XmlWriter xmlWriter = navigator.InsertAfter();
                xmlWriter.WriteStartElement("snippets");  // start - snippets
                xmlWriter.WriteAttributeString("reference", input);

                int itemCount = listItems.Count;
                for (int i = 0; i < itemCount; i++)
                {
                    SnippetItem snippet = listItems[i];
                    xmlWriter.WriteStartElement("snippet");      // start - snippet

                    Highlighter highlighter = codeController.ApplyLanguage(
                        xmlWriter, snippet.Language);
                    if (highlightMode == CodeHighlightMode.None)
                    {
                        xmlWriter.WriteString(snippet.Text);
                    }
                    else if (highlightMode == CodeHighlightMode.IndirectIris)
                    {
                        xmlWriter.WriteStartElement("span");
                        xmlWriter.WriteAttributeString("name", "SandAssist");
                        xmlWriter.WriteAttributeString("class", "tgtSentence");
                        xmlWriter.WriteString(snippet.Language);
                        xmlWriter.WriteEndElement();

                        xmlWriter.WriteString(snippet.Text);
                    }
                    else
                    {
                        if (highlighter != null)
                        {
                            xmlWriter.WriteStartElement("markup"); // start - markup

                            StringReader textReader = new StringReader(
                                snippet.Text);
                            highlighter.Highlight(textReader, xmlWriter);

                            xmlWriter.WriteEndElement();           // end - markup
                        }
                        else
                        {
                            xmlWriter.WriteString(snippet.Text);
                        }
                    }

                    xmlWriter.WriteEndElement();                 // end - snippet
                }

                xmlWriter.WriteEndElement();              // end - snippets
                xmlWriter.Close();

                navigator.DeleteSelf();
            }
            else
            {
                base.WriteMessage(MessageLevel.Warn, String.Format(
                                      "The snippet with identifier '{0}' is was found.", snippetInfo));
            }
        }
Esempio n. 19
0
 public CodeControllerTests()
 {
     _mockLogger  = new Mock <ILogger <CodeController> >(MockBehavior.Loose);
     _mockServico = new Mock <IServicoCodigo>(MockBehavior.Strict);
     _controller  = new CodeController(_mockLogger.Object, _mockServico.Object);
 }
Esempio n. 20
0
        private void ApplySnippetInfo(XPathNavigator navigator,
                                      SnippetInfo snippetInfo, string input)
        {
            CodeHighlightMode highlightMode  = this.Mode;
            CodeController    codeController = CodeController.GetInstance("reference");

            if (codeController == null)
            {
                return;
            }

            IList <SnippetItem> listItems = _codeRefProvider[snippetInfo];

            if (listItems != null)
            {
                XmlWriter xmlWriter = navigator.InsertAfter();

                int itemCount = listItems.Count;
                for (int i = 0; i < itemCount; i++)
                {
                    SnippetItem snippet  = listItems[i];
                    string      codeLang = snippet.Language;

                    if (highlightMode == CodeHighlightMode.None)
                    {
                        xmlWriter.WriteStartElement("code");      // start - code
                        xmlWriter.WriteAttributeString("language",
                                                       CodeController.GetCodeAttribute(codeLang));

                        xmlWriter.WriteString(snippet.Text);

                        xmlWriter.WriteEndElement();              // end - code
                    }
                    else if (highlightMode == CodeHighlightMode.DirectIris)
                    {
                        Highlighter highlighter = codeController.ApplyLanguage(
                            null, codeLang);

                        codeController.BeginDirect(xmlWriter, codeLang);

                        if (highlighter != null)
                        {
                            StringReader textReader = new StringReader(snippet.Text);
                            highlighter.Highlight(textReader, xmlWriter);
                        }
                        else
                        {
                            xmlWriter.WriteString(snippet.Text);
                        }

                        codeController.EndDirect(xmlWriter, codeLang);
                    }
                    else if (highlightMode == CodeHighlightMode.IndirectIris)
                    {
                        xmlWriter.WriteStartElement("code");      // start - code
                        xmlWriter.WriteAttributeString("language",
                                                       CodeController.GetCodeAttribute(codeLang));

                        // <xsl:when test="@class='tgtSentence' or @class='srcSentence'">
                        xmlWriter.WriteStartElement("span");
                        xmlWriter.WriteAttributeString("name", "SandAssist");
                        xmlWriter.WriteAttributeString("class", "tgtSentence");
                        xmlWriter.WriteString(snippet.Language);
                        xmlWriter.WriteEndElement();

                        xmlWriter.WriteString(snippet.Text);

                        xmlWriter.WriteEndElement();              // end - code
                    }
                    else
                    {
                        Highlighter highlighter = codeController.ApplyLanguage(
                            xmlWriter, snippet.Language);
                        if (highlighter != null)
                        {
                            StringReader textReader = new StringReader(
                                snippet.Text);
                            highlighter.Highlight(textReader, xmlWriter);
                        }
                        else
                        {
                            xmlWriter.WriteString(snippet.Text);
                        }
                    }
                }

                xmlWriter.Close();

                navigator.DeleteSelf();
            }
            else
            {
                base.WriteMessage(MessageLevel.Warn, String.Format(
                                      "The snippet with identifier '{0}' is was found.", snippetInfo));
            }
        }