Changeset 3231549
- Timestamp:
- 01/29/2025 08:16:00 PM (13 months ago)
- Location:
- news-parser
- Files:
-
- 642 added
- 25 edited
-
tags/2.3.0 (added)
-
tags/2.3.0/autoload.php (added)
-
tags/2.3.0/autoload.php:Zone.Identifier (added)
-
tags/2.3.0/bootstrap.php (added)
-
tags/2.3.0/inc (added)
-
tags/2.3.0/inc/Api (added)
-
tags/2.3.0/inc/Api/Ajax (added)
-
tags/2.3.0/inc/Api/Ajax/AjaxApiController.php (added)
-
tags/2.3.0/inc/Api/Ajax/AjaxApiController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Api/Ajax/AjaxApiEndpoint.php (added)
-
tags/2.3.0/inc/Api/Rest (added)
-
tags/2.3.0/inc/Api/Rest/AIApiEndpoint.php (added)
-
tags/2.3.0/inc/Api/Rest/AIApiEndpoint.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Api/Rest/AIOptionsApiEndpoint.php (added)
-
tags/2.3.0/inc/Api/Rest/AIOptionsApiEndpoint.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Api/Rest/CronApiEndpoint.php (added)
-
tags/2.3.0/inc/Api/Rest/PostApiEndpoint.php (added)
-
tags/2.3.0/inc/Api/Rest/PostApiEndpoint.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Api/Rest/RestApiController.php (added)
-
tags/2.3.0/inc/Api/Rest/RestApiController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Api/Rest/TemplateApiEndpoint.php (added)
-
tags/2.3.0/inc/CLI (added)
-
tags/2.3.0/inc/CLI/InvokeAutopilot.php (added)
-
tags/2.3.0/inc/CLI/InvokeParse.php (added)
-
tags/2.3.0/inc/CLI/options.json (added)
-
tags/2.3.0/inc/CLI/posts.json (added)
-
tags/2.3.0/inc/CLI/template.json (added)
-
tags/2.3.0/inc/Config (added)
-
tags/2.3.0/inc/Config/di-config.php (added)
-
tags/2.3.0/inc/Config/docs-urls.php (added)
-
tags/2.3.0/inc/Config/global-variables-config-dev.php (added)
-
tags/2.3.0/inc/Config/global-variables-config.php (added)
-
tags/2.3.0/inc/Config/menu-config.php (added)
-
tags/2.3.0/inc/Config/scripts-config-dev.php (added)
-
tags/2.3.0/inc/Config/scripts-config.php (added)
-
tags/2.3.0/inc/Config/scripts-translation-config.php (added)
-
tags/2.3.0/inc/Config/styles-config-dev.php (added)
-
tags/2.3.0/inc/Config/styles-config.php (added)
-
tags/2.3.0/inc/Controller (added)
-
tags/2.3.0/inc/Controller/AIController.php (added)
-
tags/2.3.0/inc/Controller/AIController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Controller/AIOptionsController.php (added)
-
tags/2.3.0/inc/Controller/AIOptionsController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Controller/CronController.php (added)
-
tags/2.3.0/inc/Controller/CronController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Controller/CronTaskController.php (added)
-
tags/2.3.0/inc/Controller/CronTaskControllerWithLogger.php (added)
-
tags/2.3.0/inc/Controller/EventController.php (added)
-
tags/2.3.0/inc/Controller/EventController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Controller/ListController.php (added)
-
tags/2.3.0/inc/Controller/ListController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Controller/MediaController.php (added)
-
tags/2.3.0/inc/Controller/MediaController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Controller/MiddlewareController.php (added)
-
tags/2.3.0/inc/Controller/MiddlewareController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Controller/PostController.php (added)
-
tags/2.3.0/inc/Controller/TemplateController.php (added)
-
tags/2.3.0/inc/Controller/TestSettingsController.php (added)
-
tags/2.3.0/inc/Controller/VisualConstructorController.php (added)
-
tags/2.3.0/inc/Controller/VisualConstructorController.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Core (added)
-
tags/2.3.0/inc/Core/App.php (added)
-
tags/2.3.0/inc/Core/ScriptLoadingManager.php (added)
-
tags/2.3.0/inc/Core/ScriptLoadingManager.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Entities (added)
-
tags/2.3.0/inc/Entities/CronData.php (added)
-
tags/2.3.0/inc/Entities/Factory (added)
-
tags/2.3.0/inc/Entities/Factory/CronDataFactory.php (added)
-
tags/2.3.0/inc/Entities/Factory/CronDataFactory.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Entities/Factory/PostFactory.php (added)
-
tags/2.3.0/inc/Entities/Factory/PostFactory.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Entities/Post.php (added)
-
tags/2.3.0/inc/Exception (added)
-
tags/2.3.0/inc/Exception/MyException.php (added)
-
tags/2.3.0/inc/Interfaces (added)
-
tags/2.3.0/inc/Interfaces/AdapterInterface.php (added)
-
tags/2.3.0/inc/Interfaces/AdapterInterface.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Interfaces/EventControllerInterface.php (added)
-
tags/2.3.0/inc/Interfaces/EventControllerInterface.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Interfaces/MenuPageInterface.php (added)
-
tags/2.3.0/inc/Interfaces/MenuPageInterface.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Interfaces/MiddlewareInterface.php (added)
-
tags/2.3.0/inc/Interfaces/MiddlewareInterface.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Interfaces/ModelInterface.php (added)
-
tags/2.3.0/inc/Interfaces/ModelInterface.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Interfaces/PostControllerInterface.php (added)
-
tags/2.3.0/inc/Interfaces/PostControllerInterface.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Interfaces/ResponseFormatterInterface.php (added)
-
tags/2.3.0/inc/Interfaces/ResponseFormatterInterface.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Menu (added)
-
tags/2.3.0/inc/Menu/Admin (added)
-
tags/2.3.0/inc/Menu/Admin/MenuPage.php (added)
-
tags/2.3.0/inc/Menu/Admin/MenuPage.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Message (added)
-
tags/2.3.0/inc/Message/Errors.php (added)
-
tags/2.3.0/inc/Message/Errors.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Message/Success.php (added)
-
tags/2.3.0/inc/Message/Success.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Models (added)
-
tags/2.3.0/inc/Models/AIOptionsModel.php (added)
-
tags/2.3.0/inc/Models/CronDataModel.php (added)
-
tags/2.3.0/inc/Models/CronDataModel.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Models/PostCacheModel.php (added)
-
tags/2.3.0/inc/Models/PostCacheModel.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Models/PostModel.php (added)
-
tags/2.3.0/inc/Models/PostModel.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Models/TemplateModel.php (added)
-
tags/2.3.0/inc/Models/TemplateModel.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Modifiers (added)
-
tags/2.3.0/inc/Modifiers/ImagePrepare.php (added)
-
tags/2.3.0/inc/Modifiers/ImagePrepare.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Modifiers/RemoveLineBreaks.php (added)
-
tags/2.3.0/inc/Modifiers/RemoveLineBreaks.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Modifiers/RemoveScriptTags.php (added)
-
tags/2.3.0/inc/Modifiers/RemoveStyleTags.php (added)
-
tags/2.3.0/inc/Modifiers/ReplaceRelativePathWithAbsolute.php (added)
-
tags/2.3.0/inc/Modifiers/ReplaceRelativePathWithAbsolute.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Modifiers/ReplaceYoutubeFrames.php (added)
-
tags/2.3.0/inc/Parser (added)
-
tags/2.3.0/inc/Parser/Abstracts (added)
-
tags/2.3.0/inc/Parser/Abstracts/AbstractParseContent.php (added)
-
tags/2.3.0/inc/Parser/Abstracts/AbstractParseContent.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Parser/HTMLParser.php (added)
-
tags/2.3.0/inc/Parser/HTMLPatternParser.php (added)
-
tags/2.3.0/inc/Parser/HTMLRaw.php (added)
-
tags/2.3.0/inc/Parser/Modifiers (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/AddImageSizesModifier.php (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/AddImageSizesModifier.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/AddSourceModifier.php (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/GenerateImageWithAI.php (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/GeneratePostBodyWithAI.php (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/GenerateTitleWithAI.php (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/GroupPicturesModifier.php (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/GroupPicturesModifier.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/RemoveDublicatedPicturesModifier.php (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/RemoveDublicatedPicturesModifier.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/RemoveSrcSetAndSizesModifier.php (added)
-
tags/2.3.0/inc/Parser/Modifiers/AdapterModifiers/Before/RemoveSrcSetAndSizesModifier.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Parser/Modifiers/PostModifiers (added)
-
tags/2.3.0/inc/Parser/Modifiers/PostModifiers/AddPostThumbnailModifier.php (added)
-
tags/2.3.0/inc/Parser/ParserSyntaxExtenders (added)
-
tags/2.3.0/inc/Parser/ParserSyntaxExtenders/TextContent.php (added)
-
tags/2.3.0/inc/Parser/XMLParser.php (added)
-
tags/2.3.0/inc/Parser/XMLParser.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Service (added)
-
tags/2.3.0/inc/Service/AI (added)
-
tags/2.3.0/inc/Service/AI/Custom1AIServiceProvider.php (added)
-
tags/2.3.0/inc/Service/AI/Custom1AIServiceProvider.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Service/AI/GeminiAIServiceProvider.php (added)
-
tags/2.3.0/inc/Service/AI/OpenAIServiceProvider.php (added)
-
tags/2.3.0/inc/Traits (added)
-
tags/2.3.0/inc/Traits/FunctionAutoloadTrait.php (added)
-
tags/2.3.0/inc/Traits/FunctionAutoloadTrait.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Traits/MonologLoggerTrait.php (added)
-
tags/2.3.0/inc/Traits/RestApiTrait.php (added)
-
tags/2.3.0/inc/Traits/RestApiTrait.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Traits/SanitizeDataTrait.php (added)
-
tags/2.3.0/inc/Traits/SyslogLoggerTrait.php (added)
-
tags/2.3.0/inc/Traits/ValidateDataTrait.php (added)
-
tags/2.3.0/inc/Utils (added)
-
tags/2.3.0/inc/Utils/AdapterGuttenberg.php (added)
-
tags/2.3.0/inc/Utils/Chain.php (added)
-
tags/2.3.0/inc/Utils/Chain.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Utils/MenuConfig.php (added)
-
tags/2.3.0/inc/Utils/MenuConfig.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Utils/Pipe.php (added)
-
tags/2.3.0/inc/Utils/Pipe.php:Zone.Identifier (added)
-
tags/2.3.0/inc/Utils/ResponseFormatter.php (added)
-
tags/2.3.0/inc/Utils/ResponseFormatterStatic.php (added)
-
tags/2.3.0/inc/Utils/ResponseFormatterStatic.php:Zone.Identifier (added)
-
tags/2.3.0/inc/View (added)
-
tags/2.3.0/inc/View/TemplateCallbackRender.php (added)
-
tags/2.3.0/inc/View/TemplateCallbackRender.php:Zone.Identifier (added)
-
tags/2.3.0/inc/View/TemplateRender.php (added)
-
tags/2.3.0/inc/View/TemplateRender.php:Zone.Identifier (added)
-
tags/2.3.0/news-parser.php (added)
-
tags/2.3.0/public (added)
-
tags/2.3.0/public/css (added)
-
tags/2.3.0/public/css/277-2.3.0.css (added)
-
tags/2.3.0/public/css/admin-menu-icon.css (added)
-
tags/2.3.0/public/css/autopilot-2.3.0.css (added)
-
tags/2.3.0/public/css/dev (added)
-
tags/2.3.0/public/css/dev/dev-styles.css (added)
-
tags/2.3.0/public/css/font.css (added)
-
tags/2.3.0/public/css/frame-style.css (added)
-
tags/2.3.0/public/css/media-views.css (added)
-
tags/2.3.0/public/css/seo_integration-2.3.0.css (added)
-
tags/2.3.0/public/font (added)
-
tags/2.3.0/public/font/config.json (added)
-
tags/2.3.0/public/font/fontello.eot (added)
-
tags/2.3.0/public/font/fontello.svg (added)
-
tags/2.3.0/public/font/fontello.ttf (added)
-
tags/2.3.0/public/font/fontello.woff (added)
-
tags/2.3.0/public/font/fontello.woff2 (added)
-
tags/2.3.0/public/images (added)
-
tags/2.3.0/public/images/Grey-Gradient.png (added)
-
tags/2.3.0/public/images/Screen-rotation-01.png (added)
-
tags/2.3.0/public/images/banner-1280x360.png (added)
-
tags/2.3.0/public/images/clipart1375168.png (added)
-
tags/2.3.0/public/images/clipart1375168_d6sh2a.png (added)
-
tags/2.3.0/public/images/discord-icon-43742.png (added)
-
tags/2.3.0/public/images/discord-icon-43742_qoe0fc.png (added)
-
tags/2.3.0/public/images/loading.gif (added)
-
tags/2.3.0/public/images/youtube-video.jpeg (added)
-
tags/2.3.0/public/js (added)
-
tags/2.3.0/public/js/277-2.3.0.bundle.js (added)
-
tags/2.3.0/public/js/479-2.3.0.bundle.js (added)
-
tags/2.3.0/public/js/618-2.3.0.bundle.js (added)
-
tags/2.3.0/public/js/618-2.3.0.bundle.js.LICENSE.txt (added)
-
tags/2.3.0/public/js/707-2.3.0.bundle.js (added)
-
tags/2.3.0/public/js/707-2.3.0.bundle.js.LICENSE.txt (added)
-
tags/2.3.0/public/js/autopilot-2.3.0.bundle.js (added)
-
tags/2.3.0/public/js/parser_page-2.3.0.bundle.js (added)
-
tags/2.3.0/public/js/parser_rss-2.3.0.bundle.js (added)
-
tags/2.3.0/public/js/seo_integration-2.3.0.bundle.js (added)
-
tags/2.3.0/readme.txt (added)
-
tags/2.3.0/tear-down.php (added)
-
tags/2.3.0/template (added)
-
tags/2.3.0/template/menu (added)
-
tags/2.3.0/template/menu/about-gitbook-menu.php (added)
-
tags/2.3.0/template/menu/about-menu.php (added)
-
tags/2.3.0/template/menu/autopilot-page-menu.php (added)
-
tags/2.3.0/template/menu/main-menu.php (added)
-
tags/2.3.0/template/menu/parsing-page-menu.php (added)
-
tags/2.3.0/template/menu/parsing-rss-menu.php (added)
-
tags/2.3.0/template/menu/seo-integration-menu.php (added)
-
tags/2.3.0/upgrade.php (added)
-
tags/2.3.0/vendor (added)
-
tags/2.3.0/vendor/autoload.php (added)
-
tags/2.3.0/vendor/bin (added)
-
tags/2.3.0/vendor/caophihung94 (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/.gitignore (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/CONTRIBUTING.md (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/LICENSE (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/README.md (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/composer.json (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/src (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/src/HungCP (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/src/HungCP/PhpSimpleHtmlDom (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/src/HungCP/PhpSimpleHtmlDom/HtmlDomParser.php (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/src/HungCP/PhpSimpleHtmlDom/lib (added)
-
tags/2.3.0/vendor/caophihung94/php-simple-html-dom-parser/src/HungCP/PhpSimpleHtmlDom/lib/simple_html_dom.php (added)
-
tags/2.3.0/vendor/composer (added)
-
tags/2.3.0/vendor/composer/ClassLoader.php (added)
-
tags/2.3.0/vendor/composer/InstalledVersions.php (added)
-
tags/2.3.0/vendor/composer/LICENSE (added)
-
tags/2.3.0/vendor/composer/autoload_classmap.php (added)
-
tags/2.3.0/vendor/composer/autoload_files.php (added)
-
tags/2.3.0/vendor/composer/autoload_namespaces.php (added)
-
tags/2.3.0/vendor/composer/autoload_psr4.php (added)
-
tags/2.3.0/vendor/composer/autoload_real.php (added)
-
tags/2.3.0/vendor/composer/autoload_static.php (added)
-
tags/2.3.0/vendor/composer/installed.json (added)
-
tags/2.3.0/vendor/composer/installed.php (added)
-
tags/2.3.0/vendor/composer/platform_check.php (added)
-
tags/2.3.0/vendor/google-gemini-php (added)
-
tags/2.3.0/vendor/google-gemini-php/client (added)
-
tags/2.3.0/vendor/google-gemini-php/client/.github (added)
-
tags/2.3.0/vendor/google-gemini-php/client/.github/workflows (added)
-
tags/2.3.0/vendor/google-gemini-php/client/.github/workflows/code-quality.yml (added)
-
tags/2.3.0/vendor/google-gemini-php/client/.github/workflows/tests.yml (added)
-
tags/2.3.0/vendor/google-gemini-php/client/.gitignore (added)
-
tags/2.3.0/vendor/google-gemini-php/client/CONTRIBUTING.md (added)
-
tags/2.3.0/vendor/google-gemini-php/client/LICENSE.md (added)
-
tags/2.3.0/vendor/google-gemini-php/client/README.md (added)
-
tags/2.3.0/vendor/google-gemini-php/client/art (added)
-
tags/2.3.0/vendor/google-gemini-php/client/art/example.png (added)
-
tags/2.3.0/vendor/google-gemini-php/client/composer.json (added)
-
tags/2.3.0/vendor/google-gemini-php/client/phpstan.neon.dist (added)
-
tags/2.3.0/vendor/google-gemini-php/client/phpunit.xml (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Client.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Concerns (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Concerns/HasContents.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Concerns/HasModel.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/Arrayable.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/ClientContract.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/Resources (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/Resources/ChatSessionContract.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/Resources/EmbeddingModalContract.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/Resources/GenerativeModelContract.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/Resources/ModelContract.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/ResponseContract.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Contracts/TransporterContract.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/Blob.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/Candidate.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/CitationMetadata.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/CitationSource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/Content.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/ContentEmbedding.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/GenerationConfig.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/Model.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/Part.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/PromptFeedback.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/SafetyRating.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/SafetySetting.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Data/UsageMetadata.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/BlockReason.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/FinishReason.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/HarmBlockThreshold.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/HarmCategory.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/HarmProbability.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/Method.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/MimeType.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/ModelType.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/ModelVariation.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/Role.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Enums/TaskType.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Exceptions (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Exceptions/ErrorException.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Exceptions/TransporterException.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Exceptions/UnserializableResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Factory.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Foundation (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Foundation/Request.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Gemini.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/Concerns (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/Concerns/HasJsonBody.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/GenerativeModel (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/GenerativeModel/BatchEmbedContentRequest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/GenerativeModel/CountTokensRequest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/GenerativeModel/EmbedContentRequest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/GenerativeModel/GenerateContentRequest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/GenerativeModel/StreamGenerateContentRequest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/Model (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/Model/ListModelRequest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Requests/Model/RetrieveModelRequest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Resources (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Resources/ChatSession.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Resources/EmbeddingModel.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Resources/GenerativeModel.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Resources/Models.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/GenerativeModel (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/GenerativeModel/BatchEmbedContentsResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/GenerativeModel/CountTokensResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/GenerativeModel/EmbedContentResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/GenerativeModel/GenerateContentResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/Models (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/Models/ListModelResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/Models/RetrieveModelResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Responses/StreamResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/ClientFake.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Requests (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Requests/TestRequest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Resources (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Resources/ChatSessionTestResource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Resources/Concerns (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Resources/Concerns/Testable.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Resources/EmbeddingModelTestResource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Resources/GenerativeModelTestResource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Resources/ModelTestResource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Concerns (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Concerns/Fakeable.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Concerns/FakeableForStreamedResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/GenerativeModel (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/GenerativeModel/BatchEmbedContentsResponseFixture.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/GenerativeModel/CountTokensResponseFixture.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/GenerativeModel/EmbedContentResponseFixture.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/GenerativeModel/GenerateContentResponseFixture.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/GenerativeModel/GenerateContentResponseFixture.txt (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/Models (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/Models/ListModelResponseFixture.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Testing/Responses/Fixtures/Models/RetrieveModelResponseFixture.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Transporters (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Transporters/DTOs (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Transporters/DTOs/ResponseDTO.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/src/Transporters/HttpTransporter.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Arch.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Client.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Enums (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Enums/ModelType.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Gemini.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Pest.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Resources (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Resources/ChatSession.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Resources/EmbeddingModel.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Resources/GenerativeModel.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Resources/Models.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses/GenerativeModel (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses/GenerativeModel/BatchEmbedContentsResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses/GenerativeModel/CountTokensResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses/GenerativeModel/EmbedContentResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses/GenerativeModel/GenerateContentResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses/Models (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses/Models/ListModelResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Responses/Models/RetrieveModelResponse.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Testing (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Testing/ClientFake.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Testing/Resources (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Testing/Resources/ChatSessionTestResource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Testing/Resources/EmbeddingModelTestResource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Testing/Resources/GenerativeModelTestResource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Testing/Resources/ModelTestResource.php (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Transporters (added)
-
tags/2.3.0/vendor/google-gemini-php/client/tests/Transporters/HttpTransporter.php (added)
-
tags/2.3.0/vendor/guzzlehttp (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/CHANGELOG.md (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/LICENSE (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/README.md (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/UPGRADING.md (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/composer.json (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/BodySummarizer.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Client.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/ClientInterface.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/ClientTrait.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Cookie (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/HandlerStack.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/MessageFormatter.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Middleware.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Pool.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/RequestOptions.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/TransferStats.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/Utils.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/functions.php (added)
-
tags/2.3.0/vendor/guzzlehttp/guzzle/src/functions_include.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/CHANGELOG.md (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/LICENSE (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/README.md (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/composer.json (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/AggregateException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/CancellationException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/Coroutine.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/Create.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/Each.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/EachPromise.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/FulfilledPromise.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/Is.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/Promise.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/PromiseInterface.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/PromisorInterface.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/RejectedPromise.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/RejectionException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/TaskQueue.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/TaskQueueInterface.php (added)
-
tags/2.3.0/vendor/guzzlehttp/promises/src/Utils.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7 (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/CHANGELOG.md (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/LICENSE (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/README.md (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/composer.json (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/AppendStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/BufferStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/CachingStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/DroppingStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Exception (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/FnStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Header.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/HttpFactory.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/InflateStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/LazyOpenStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/LimitStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Message.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/MessageTrait.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/MimeType.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/MultipartStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/NoSeekStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/PumpStream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Query.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Request.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Response.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Rfc7230.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/ServerRequest.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Stream.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/StreamWrapper.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/UploadedFile.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Uri.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/UriComparator.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/UriNormalizer.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/UriResolver.php (added)
-
tags/2.3.0/vendor/guzzlehttp/psr7/src/Utils.php (added)
-
tags/2.3.0/vendor/orhanerday (added)
-
tags/2.3.0/vendor/orhanerday/open-ai (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/CHANGELOG.md (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/LICENSE.md (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/README.md (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/composer.json (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/files (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/files/assistant-file.txt (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/files/en-marvel-endgame.m4a (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/files/sample_file_1.jsonl (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/files/tr-baris-ozcan-youtuber.m4a (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/legal.md (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/openai-elephpant.svg (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/src (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/src/OpenAi.php (added)
-
tags/2.3.0/vendor/orhanerday/open-ai/src/Url.php (added)
-
tags/2.3.0/vendor/php-http (added)
-
tags/2.3.0/vendor/php-http/discovery (added)
-
tags/2.3.0/vendor/php-http/discovery/.php-cs-fixer.php (added)
-
tags/2.3.0/vendor/php-http/discovery/CHANGELOG.md (added)
-
tags/2.3.0/vendor/php-http/discovery/LICENSE (added)
-
tags/2.3.0/vendor/php-http/discovery/README.md (added)
-
tags/2.3.0/vendor/php-http/discovery/composer.json (added)
-
tags/2.3.0/vendor/php-http/discovery/src (added)
-
tags/2.3.0/vendor/php-http/discovery/src/ClassDiscovery.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Composer (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Composer/Plugin.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Exception (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Exception.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Exception/ClassInstantiationFailedException.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Exception/DiscoveryFailedException.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Exception/NoCandidateFoundException.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Exception/NotFoundException.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Exception/PuliUnavailableException.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Exception/StrategyUnavailableException.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/HttpAsyncClientDiscovery.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/HttpClientDiscovery.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/MessageFactoryDiscovery.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/NotFoundException.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Psr17Factory.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Psr17FactoryDiscovery.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Psr18Client.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Psr18ClientDiscovery.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Strategy (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Strategy/CommonClassesStrategy.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Strategy/CommonPsr17ClassesStrategy.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Strategy/DiscoveryStrategy.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Strategy/MockClientStrategy.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/Strategy/PuliBetaStrategy.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/StreamFactoryDiscovery.php (added)
-
tags/2.3.0/vendor/php-http/discovery/src/UriFactoryDiscovery.php (added)
-
tags/2.3.0/vendor/psr (added)
-
tags/2.3.0/vendor/psr/http-client (added)
-
tags/2.3.0/vendor/psr/http-client/CHANGELOG.md (added)
-
tags/2.3.0/vendor/psr/http-client/LICENSE (added)
-
tags/2.3.0/vendor/psr/http-client/README.md (added)
-
tags/2.3.0/vendor/psr/http-client/composer.json (added)
-
tags/2.3.0/vendor/psr/http-client/src (added)
-
tags/2.3.0/vendor/psr/http-client/src/ClientExceptionInterface.php (added)
-
tags/2.3.0/vendor/psr/http-client/src/ClientInterface.php (added)
-
tags/2.3.0/vendor/psr/http-client/src/NetworkExceptionInterface.php (added)
-
tags/2.3.0/vendor/psr/http-client/src/RequestExceptionInterface.php (added)
-
tags/2.3.0/vendor/psr/http-factory (added)
-
tags/2.3.0/vendor/psr/http-factory/LICENSE (added)
-
tags/2.3.0/vendor/psr/http-factory/README.md (added)
-
tags/2.3.0/vendor/psr/http-factory/composer.json (added)
-
tags/2.3.0/vendor/psr/http-factory/src (added)
-
tags/2.3.0/vendor/psr/http-factory/src/RequestFactoryInterface.php (added)
-
tags/2.3.0/vendor/psr/http-factory/src/ResponseFactoryInterface.php (added)
-
tags/2.3.0/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php (added)
-
tags/2.3.0/vendor/psr/http-factory/src/StreamFactoryInterface.php (added)
-
tags/2.3.0/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php (added)
-
tags/2.3.0/vendor/psr/http-factory/src/UriFactoryInterface.php (added)
-
tags/2.3.0/vendor/psr/http-message (added)
-
tags/2.3.0/vendor/psr/http-message/CHANGELOG.md (added)
-
tags/2.3.0/vendor/psr/http-message/LICENSE (added)
-
tags/2.3.0/vendor/psr/http-message/README.md (added)
-
tags/2.3.0/vendor/psr/http-message/composer.json (added)
-
tags/2.3.0/vendor/psr/http-message/docs (added)
-
tags/2.3.0/vendor/psr/http-message/docs/PSR7-Interfaces.md (added)
-
tags/2.3.0/vendor/psr/http-message/docs/PSR7-Usage.md (added)
-
tags/2.3.0/vendor/psr/http-message/src (added)
-
tags/2.3.0/vendor/psr/http-message/src/MessageInterface.php (added)
-
tags/2.3.0/vendor/psr/http-message/src/RequestInterface.php (added)
-
tags/2.3.0/vendor/psr/http-message/src/ResponseInterface.php (added)
-
tags/2.3.0/vendor/psr/http-message/src/ServerRequestInterface.php (added)
-
tags/2.3.0/vendor/psr/http-message/src/StreamInterface.php (added)
-
tags/2.3.0/vendor/psr/http-message/src/UploadedFileInterface.php (added)
-
tags/2.3.0/vendor/psr/http-message/src/UriInterface.php (added)
-
tags/2.3.0/vendor/ralouphie (added)
-
tags/2.3.0/vendor/ralouphie/getallheaders (added)
-
tags/2.3.0/vendor/ralouphie/getallheaders/LICENSE (added)
-
tags/2.3.0/vendor/ralouphie/getallheaders/README.md (added)
-
tags/2.3.0/vendor/ralouphie/getallheaders/composer.json (added)
-
tags/2.3.0/vendor/ralouphie/getallheaders/src (added)
-
tags/2.3.0/vendor/ralouphie/getallheaders/src/getallheaders.php (added)
-
tags/2.3.0/vendor/symfony (added)
-
tags/2.3.0/vendor/symfony/deprecation-contracts (added)
-
tags/2.3.0/vendor/symfony/deprecation-contracts/CHANGELOG.md (added)
-
tags/2.3.0/vendor/symfony/deprecation-contracts/LICENSE (added)
-
tags/2.3.0/vendor/symfony/deprecation-contracts/README.md (added)
-
tags/2.3.0/vendor/symfony/deprecation-contracts/composer.json (added)
-
tags/2.3.0/vendor/symfony/deprecation-contracts/function.php (added)
-
tags/2.3.0/vendor/zalevsk1y (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/.gitattributes (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/README.md (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/composer.json (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/phpunit.xml (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/src (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/src/DI.php (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/src/Exception (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/src/Exception/MyException.php (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/src/Interfaces (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/src/Interfaces/ContainerInterface.php (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/src/Message (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/src/Message/Errors.php (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/tests (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/tests/DI (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/tests/DI/DITest.php (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/tests/mock (added)
-
tags/2.3.0/vendor/zalevsk1y/container-builder/tests/mock/di-config.php (added)
-
trunk/bootstrap.php (modified) (2 diffs)
-
trunk/inc/Api/Ajax/AjaxApiEndpoint.php (modified) (11 diffs)
-
trunk/inc/Config/di-config.php (modified) (3 diffs)
-
trunk/inc/Config/global-variables-config-dev.php (modified) (2 diffs)
-
trunk/inc/Config/global-variables-config.php (modified) (2 diffs)
-
trunk/inc/Config/menu-config.php (modified) (1 diff)
-
trunk/inc/Config/scripts-config-dev.php (modified) (1 diff)
-
trunk/inc/Config/scripts-config.php (modified) (3 diffs)
-
trunk/inc/Config/scripts-translation-config.php (modified) (1 diff)
-
trunk/inc/Config/styles-config-dev.php (modified) (1 diff)
-
trunk/inc/Config/styles-config.php (modified) (1 diff)
-
trunk/inc/Controller/PostController.php (modified) (10 diffs)
-
trunk/inc/Controller/TemplateController.php (modified) (1 diff)
-
trunk/inc/Models/AIOptionsModel.php (modified) (3 diffs)
-
trunk/inc/Parser/HTMLParser.php (modified) (2 diffs)
-
trunk/inc/Parser/HTMLPatternParser.php (modified) (7 diffs)
-
trunk/inc/Parser/HTMLRaw.php (modified) (1 diff)
-
trunk/inc/Parser/Modifiers/AdapterModifiers/Before/GeneratePostBodyWithAI.php (modified) (9 diffs)
-
trunk/inc/Service/AI/GeminiAIServiceProvider.php (modified) (3 diffs)
-
trunk/inc/Service/AI/OpenAIServiceProvider.php (modified) (4 diffs)
-
trunk/inc/Traits/SanitizeDataTrait.php (modified) (1 diff)
-
trunk/inc/Utils/AdapterGuttenberg.php (modified) (2 diffs)
-
trunk/inc/Utils/ResponseFormatter.php (modified) (1 diff)
-
trunk/news-parser.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
news-parser/trunk/bootstrap.php
r3205095 r3231549 46 46 47 47 $app->middleware->add('NewsParserPlugin\Parser\HTMLRaw:parse:parse',array( 48 $app->DI_container->get(Modifiers\RemoveLineBreaks::class),49 48 $app->DI_container->get(Modifiers\ReplaceRelativePathWithAbsolute::class), 50 $app->DI_container->get(Modifiers\ImagePrepare::class) 49 $app->DI_container->get(Modifiers\ImagePrepare::class), 50 $app->DI_container->get(Modifiers\ReplaceYoutubeFrames::class), 51 $app->DI_container->get(Modifiers\RemoveLineBreaks::class) 51 52 )); 52 53 … … 86 87 $app->event->on('posts:data',array(Controller\PostController::class,'getPostsData')); 87 88 $app->event->on('posts:update',array(Controller\PostController::class,'update')); 89 $app->event->on('posts:delete',array(Controller\PostController::class,'delete')); 90 $app->event->on('template:test',array(Controller\TestSettingsController::class,'testTemplate')); 88 91 89 92 -
news-parser/trunk/inc/Api/Ajax/AjaxApiEndpoint.php
r3049937 r3231549 2 2 namespace NewsParserPlugin\Api\Ajax; 3 3 4 use NewsParserPlugin\Traits\ValidateDataTrait;5 use NewsParserPlugin\Traits\SanitizeDataTrait;6 4 use NewsParserPlugin\Ajax\Ajax; 5 use NewsParserPlugin\Exception\MyException; 7 6 use NewsParserPlugin\Interfaces\EventControllerInterface; 8 7 use NewsParserPlugin\Message\Errors; 9 8 use NewsParserPlugin\Message\Success; 10 use NewsParserPlugin\Exception\MyException; 9 use NewsParserPlugin\Traits\SanitizeDataTrait; 10 use NewsParserPlugin\Traits\ValidateDataTrait; 11 11 12 12 /** … … 58 58 protected function __construct(EventControllerInterface $event) 59 59 { 60 $this->event =$event;60 $this->event = $event; 61 61 $this->init(); 62 $this->formatter =$this->getFormatter();62 $this->formatter = $this->getFormatter(); 63 63 } 64 64 /** … … 70 70 public static function create(EventControllerInterface $event) 71 71 { 72 72 73 73 if (static::$instance) { 74 74 return static::$instance; … … 86 86 protected function init() 87 87 { 88 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_list', array($this, 'parsingListApi')); 89 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_html', array($this, 'parsingHTMLApi')); 90 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_page', array($this, 'parsingPageApi')); 88 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API . '_list', array($this, 'parsingListApi')); 89 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API . '_html', array($this, 'parsingHTMLApi')); 90 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API . '_test_template', array($this, 'testTemplateApi')); 91 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API . '_page', array($this, 'parsingPageApi')); 91 92 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_MEDIA_API, array($this, 'mediaApi')); 92 93 \add_action('wp_ajax_' . NEWS_PARSER_PLUGIN_AJAX_TEMPLATE_API, array($this, 'templateApi')); 93 94 } 94 95 95 96 /** 96 97 * Check if user have relevant rights and check nonce. … … 105 106 return new \WP_Error('ajax_forbidden', Errors::text('NO_RIGHTS_TO_PUBLISH')); 106 107 } 107 if (!\wp_verify_nonce($request_args['_wpnonce'], $action) ||!\is_admin()) {108 if (!\wp_verify_nonce($request_args['_wpnonce'], $action) || !\is_admin()) { 108 109 return new \WP_Error('ajax_forbidden', Errors::text('NO_RIGHTS_TO_PUBLISH')); 109 110 } 110 111 return true; 111 112 } 112 protected function sendErrorResponse(MyException $e){ 113 $error_data=$this->formatter->error($e->getCode())->message('error', $e->getMessage())->get('array'); 114 $error_code=$e->getCode()?$e->getCode():500; 115 $this->sendError($error_data,$error_code); 113 protected function sendErrorResponse(MyException $e) 114 { 115 $error_data = $this->formatter->error($e->getCode())->message('error', $e->getMessage())->get('array'); 116 $error_code = $e->getCode() ? $e->getCode() : 500; 117 $this->sendError($error_data, $error_code); 116 118 } 117 119 /** … … 130 132 $json_post = $this->getJsonFromInput(); 131 133 $this->checkPermission('parsing_news_api', $json_post); 132 $request =$this->prepareArgs($json_post, array(133 'url'=>array(134 'description'=>'Featured image url.',135 'type'=>'string',136 'validate_callback'=>array($this,'validateImageUrl'),137 'sanitize_callback'=>function ($input_url) {138 return esc_url_raw($input_url);139 }140 ),141 'options'=>array(142 'description'=>'Featured image options.',143 'type'=>'array',144 'validate_callback'=>array($this,'validateMediaOptions'),145 'sanitize_callback'=>array($this,'sanitizeMediaOptions')146 )147 )); 148 try { 149 $media_id =$this->event->trigger('media:create', array($request['url'],$request['options']['post_id'],$request['options']['alt']));134 $request = $this->prepareArgs($json_post, array( 135 'url' => array( 136 'description' => 'Featured image url.', 137 'type' => 'string', 138 'validate_callback' => array($this, 'validateImageUrl'), 139 'sanitize_callback' => function ($input_url) { 140 return esc_url_raw($input_url); 141 }, 142 ), 143 'options' => array( 144 'description' => 'Featured image options.', 145 'type' => 'array', 146 'validate_callback' => array($this, 'validateMediaOptions'), 147 'sanitize_callback' => array($this, 'sanitizeMediaOptions'), 148 ), 149 )); 150 try { 151 $media_id = $this->event->trigger('media:create', array($request['url'], $request['options']['post_id'], $request['options']['alt'])); 150 152 $this->sendResponse($this->formatter->media($media_id)->message('success', Success::text('FEATURED_IMAGE_SAVED'))->get('array')); 151 153 } catch (MyException $e) { … … 153 155 } 154 156 } 155 157 156 158 /** 157 159 * Callback that handles parsing list of posts from RSS api requests. … … 166 168 $this->checkPermission('parsing_news_api', $json_post); 167 169 //ToDo:Make redirect to main page when parameter is missing. 168 169 $request=$this->prepareArgs($json_post, array( 170 'url'=>array( 171 'description'=>'Parsing RSS XML list url', 172 'type'=>'string', 173 'validate_callback'=>function ($url) { 174 return wp_http_validate_url($url); 175 }, 176 'sanitize_callback'=>function ($input_url) { 177 return esc_url_raw($input_url); 178 } 179 ) 180 )); 181 182 183 try{ 170 171 $request = $this->prepareArgs($json_post, array( 172 'url' => array( 173 'description' => 'Parsing RSS XML list url', 174 'type' => 'string', 175 'validate_callback' => function ($url) { 176 return wp_http_validate_url($url); 177 }, 178 'sanitize_callback' => function ($input_url) { 179 return esc_url_raw($input_url); 180 }, 181 ), 182 )); 183 184 try { 184 185 $response = $this->event->trigger('list:get', array($request['url'])); 185 186 $this->sendResponse($this->formatter->rss($response)->message('success', Success::text('RSS_LIST_PARSED'))->get('array')); 186 } catch (MyException $e){187 $this->sendErrorResponse($e); 188 } 189 } 190 191 /**187 } catch (MyException $e) { 188 $this->sendErrorResponse($e); 189 } 190 } 191 192 /** 192 193 * Callback that handles parsing single page api requests and returns HTML of the page. 193 194 * … … 201 202 $this->checkPermission('parsing_news_api', $json_post); 202 203 //ToDo:Make redirect to main page when parameter is missing. 203 204 $request =$this->prepareArgs($json_post, array(205 'url' =>array(206 'description' =>'Parsing page url',207 'type' =>'string',208 'validate_callback' =>function ($url) {209 return wp_http_validate_url($url); 210 }, 211 'sanitize_callback' =>function ($input_url) {212 return esc_url_raw($input_url); 213 } 214 ) 215 )); 216 $request_url =$request['url'];217 try {204 205 $request = $this->prepareArgs($json_post, array( 206 'url' => array( 207 'description' => 'Parsing page url', 208 'type' => 'string', 209 'validate_callback' => function ($url) { 210 return wp_http_validate_url($url); 211 }, 212 'sanitize_callback' => function ($input_url) { 213 return esc_url_raw($input_url); 214 }, 215 ), 216 )); 217 $request_url = $request['url']; 218 try { 218 219 $html = $this->event->trigger('html:get', array($request_url)); 219 $response =array(220 'html' =>$html,221 'url' =>$request_url220 $response = array( 221 'html' => $html, 222 'url' => $request_url, 222 223 ); 223 224 $this->sendResponse($this->formatter->rawHTML($response)->get('array')); 224 }catch (MyException $e){ 225 $this->sendErrorResponse($e); 226 } 227 228 } 229 /** 225 } catch (MyException $e) { 226 $this->sendErrorResponse($e); 227 } 228 229 } 230 /** 231 * Callback that handles parsing single page to test template settings. 232 * 233 * @uses EventController::trigger() 234 * @return void 235 */ 236 public function testTemplateApi() 237 { 238 //Get application\json encode data 239 $json_post = $this->getJsonFromInput(); 240 $this->checkPermission('parsing_news_api', $json_post); 241 //ToDo:Make redirect to main page when parameter is missing. 242 243 $request = $this->prepareArgs($json_post, array( 244 'url' => array( 245 'description' => 'Parsing page url', 246 'type' => 'string', 247 'validate_callback' => function ($url) { 248 return wp_http_validate_url($url); 249 }, 250 'sanitize_callback' => function ($input_url) { 251 return esc_url_raw($input_url); 252 }, 253 ), 254 'template' => array( 255 'description' => 'Parsing page template', 256 'type' => 'array', 257 'validate_callback' => function ($template) { 258 return $template; 259 }, 260 'sanitize_callback' => function ($template) { 261 return $template; 262 }, 263 ), 264 )); 265 $request_url = $request['url']; 266 $template = $request['template']; 267 try { 268 $post = $this->event->trigger('template:test', array($request_url, $template)); 269 $response = array( 270 'title' => $post['title'], 271 'image' => $post['image'], 272 'body' => $post['body'] 273 ); 274 $this->sendResponse($this->formatter->postTest($response)->get('array')); 275 } catch (MyException $e) { 276 $this->sendErrorResponse($e); 277 } 278 279 } 280 /** 230 281 * Callback that handles parsing single page api requests and create WP post draft using saved parsing templates. 231 282 * If there is no template for that domain name returns error. … … 240 291 $this->checkPermission('parsing_news_api', $json_post); 241 292 //ToDo:Make redirect to main page when parameter is missing. 242 243 $request =$this->prepareArgs($json_post, array(244 'url' =>array(245 'description' =>'Parsing page url',246 'type' =>'string',247 'validate_callback' =>function ($url) {248 return wp_http_validate_url($url); 249 }, 250 'sanitize_callback' =>function ($input_url) {251 return esc_url_raw($input_url); 252 } 253 ), 254 '_id' =>array(255 'description' =>'Front end requested page index',256 'type' =>'integer',257 'validate_callback' =>function ($_id) {293 294 $request = $this->prepareArgs($json_post, array( 295 'url' => array( 296 'description' => 'Parsing page url', 297 'type' => 'string', 298 'validate_callback' => function ($url) { 299 return wp_http_validate_url($url); 300 }, 301 'sanitize_callback' => function ($input_url) { 302 return esc_url_raw($input_url); 303 }, 304 ), 305 '_id' => array( 306 'description' => 'Front end requested page index', 307 'type' => 'integer', 308 'validate_callback' => function ($_id) { 258 309 preg_match('/[^0-9]/i', $_id, $matches); 259 310 if (empty($matches)) { … … 263 314 } 264 315 }, 265 'sanitize_callback' =>function ($_id) {316 'sanitize_callback' => function ($_id) { 266 317 return preg_replace('/[^0-9]/i', '', $_id); 267 } 268 ), 269 'templateUrl' =>array(270 'description' =>'Url that identifies template',271 'type' =>'string',272 'validate_callback' =>function ($url) {273 return wp_http_validate_url($url); 274 }, 275 'sanitize_callback' =>function ($input_url) {276 return esc_url_raw($input_url); 277 } 278 ), 279 )); 280 try {281 $response =$this->event->trigger('post:create', array($request['url'],$request['_id'],$request['templateUrl']));318 }, 319 ), 320 'templateUrl' => array( 321 'description' => 'Url that identifies template', 322 'type' => 'string', 323 'validate_callback' => function ($url) { 324 return wp_http_validate_url($url); 325 }, 326 'sanitize_callback' => function ($input_url) { 327 return esc_url_raw($input_url); 328 }, 329 ), 330 )); 331 try { 332 $response = $this->event->trigger('post:create', array($request['url'], $request['_id'], $request['templateUrl'])); 282 333 $this->sendResponse($this->formatter->post($response)->message('success', sprintf(Success::text('POST_SAVED'), $response['title']))->addCustomData('_id', $request['_id'])->get('array')); 283 334 } catch (MyException $e) { -
news-parser/trunk/inc/Config/di-config.php
r3205095 r3231549 12 12 Parser\XMLParser::class=>[], 13 13 Parser\HTMLRaw::class=>[], 14 Parser\HTMLPatternParser::class=>[ ],14 Parser\HTMLPatternParser::class=>[[new Parser\ParserSyntaxExtenders\TextContent()]], 15 15 Models\TemplateModel::class=>[], 16 16 Models\AIOptionsModel::class=>[], … … 39 39 Modifiers\ReplaceRelativePathWithAbsolute::class=>[], 40 40 Modifiers\ImagePrepare::class=>[], 41 Modifiers\ReplaceYoutubeFrames::class=>[], 41 42 Parser\Modifiers\PostModifiers\AddPostThumbnailModifier::class=>[], 42 43 Controller\PostController::class=>[Parser\HTMLPatternParser::class,Utils\AdapterGuttenberg::class,Models\TemplateModel::class,Models\PostModel::class], … … 44 45 Controller\VisualConstructorController::class=>[Parser\HTMLRaw::class], 45 46 Controller\MediaController::class=>[Models\PostModel::class], 47 Controller\TestSettingsController::class=>[Parser\HTMLPatternParser::class,Utils\AdapterGuttenberg::class] 46 48 ); -
news-parser/trunk/inc/Config/global-variables-config-dev.php
r3201219 r3231549 23 23 'list'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_list')), 24 24 'rawHTML'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_html')), 25 'templateTest'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_test_template')), 25 26 NEWS_PARSER_PLUGIN_PARSER_RSS.'.page'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_page')), 26 27 NEWS_PARSER_PLUGIN_VISUAL_CONSTRUCTOR.'.template'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_TEMPLATE_API)), … … 70 71 ) 71 72 ), 73 /* 74 $menu_config->menu->subs[3]->menu_slug=>array( 75 array( 76 'script_name'=>'main-parser-edit-template-bundle', 77 'position'=>'before', 78 'data'=>"window.newsParserSettings=".json_encode($nonce) 79 ), 80 array( 81 'script_name'=>'main-parser-edit-template-bundle', 82 'position'=>'before', 83 'data'=>"window.newsParserApiEndpoints=".json_encode($rest_api_endpoints) 84 ) 85 ), 86 */ 72 87 $menu_config->menu->subs[3]->menu_slug=>array( 73 88 -
news-parser/trunk/inc/Config/global-variables-config.php
r3201219 r3231549 23 23 'list'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_list')), 24 24 'rawHTML'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_html')), 25 'templateTest'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_test_template')), 25 26 NEWS_PARSER_PLUGIN_PARSER_RSS.'.page'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_PARSING_API.'_page')), 26 27 NEWS_PARSER_PLUGIN_VISUAL_CONSTRUCTOR.'.template'=>esc_url_raw(admin_url('admin-ajax.php?action=' . NEWS_PARSER_PLUGIN_AJAX_TEMPLATE_API)), … … 82 83 ) 83 84 ), 85 /* 86 $menu_config->menu->subs[3]->menu_slug=>array( 87 array( 88 'script_name'=>'main-parser-edit-template-bundle', 89 'position'=>'before', 90 'data'=>"window.newsParserSettings=".json_encode($nonce) 91 ), 92 array( 93 'script_name'=>'main-parser-edit-template-bundle', 94 'position'=>'before', 95 'data'=>"window.newsParserApiEndpoints=".json_encode($rest_api_endpoints) 96 ) 97 ), 98 */ 84 99 $menu_config->menu->subs[3]->menu_slug=>array( 85 100 -
news-parser/trunk/inc/Config/menu-config.php
r3201219 r3231549 40 40 'template' => NEWS_PARSER_PLUGIN_DIR . '/template/menu/autopilot-page-menu.php', 41 41 ), 42 /* 42 43 array( 44 'page_title' => 'SEO Integration', 45 'parent_slug' => NEWS_PARSER_PLUGIN_SLUG . '-main-menu', 46 'menu_title' => __('SEO Integration', 'news-parser'), 47 'capability' => 'manage_options', 48 'menu_slug' => NEWS_PARSER_PLUGIN_SLUG . '-menu-seo-integration', 49 'template' => NEWS_PARSER_PLUGIN_DIR . '/template/menu/seo-integration-menu.php', 50 ), 51 */ 52 array( 43 53 'page_title' => 'About News Parser', 44 54 'parent_slug' => NEWS_PARSER_PLUGIN_SLUG . '-main-menu', -
news-parser/trunk/inc/Config/scripts-config-dev.php
r3201219 r3231549 30 30 ) 31 31 ), 32 /* 33 $menu_config->menu->subs[3]->menu_slug=>array( 34 'main-parser-edit-template-bundle'=>array( 35 'path'=>NEWS_PARSER_PLUGIN_URL.'/public/js/seo_integration-'.NEWS_PARSER_PLUGIN_VERSION.'.bundle.js', 36 'depends_on'=>array('wp-i18n') 37 ) 38 ), 39 */ 32 40 $menu_config->menu->subs[3]->menu_slug=>array( 33 41 -
news-parser/trunk/inc/Config/scripts-config.php
r3205095 r3231549 10 10 'global'=>array(), 11 11 'shared'=> array( 12 NEWS_PARSER_PLUGIN_SLUG . '-179-chunk'=>array( 13 'path'=>NEWS_PARSER_PLUGIN_URL . '/public/js/179-'.NEWS_PARSER_PLUGIN_VERSION.'.bundle.js', 12 NEWS_PARSER_PLUGIN_SLUG . '-277-chunk'=>array( 13 'path'=>NEWS_PARSER_PLUGIN_URL . '/public/js/277-'.NEWS_PARSER_PLUGIN_VERSION.'.bundle.js', 14 'depends_on'=>array() 15 ), 16 NEWS_PARSER_PLUGIN_SLUG . '-479-chunk'=>array( 17 'path'=>NEWS_PARSER_PLUGIN_URL . '/public/js/479-'.NEWS_PARSER_PLUGIN_VERSION.'.bundle.js', 14 18 'depends_on'=>array() 15 19 ), … … 18 22 'depends_on'=>array() 19 23 ), 20 NEWS_PARSER_PLUGIN_SLUG . '-675-chunk'=>array( 21 'path'=>NEWS_PARSER_PLUGIN_URL . '/public/js/675-'.NEWS_PARSER_PLUGIN_VERSION.'.bundle.js', 22 'depends_on'=>array() 23 ), 24 NEWS_PARSER_PLUGIN_SLUG . '-931-chunk'=>array( 25 'path'=>NEWS_PARSER_PLUGIN_URL . '/public/js/931-'.NEWS_PARSER_PLUGIN_VERSION.'.bundle.js', 24 NEWS_PARSER_PLUGIN_SLUG . '-707-chunk'=>array( 25 'path'=>NEWS_PARSER_PLUGIN_URL . '/public/js/707-'.NEWS_PARSER_PLUGIN_VERSION.'.bundle.js', 26 26 'depends_on'=>array() 27 27 ), … … 49 49 ) 50 50 ), 51 /* 52 $menu_config->menu->subs[3]->menu_slug=>array( 53 'main-parser-edit-template-bundle'=>array( 54 'path'=>NEWS_PARSER_PLUGIN_URL . '/public/js/seo_integration-'.NEWS_PARSER_PLUGIN_VERSION.'.bundle.js', 55 'depends_on'=>array('wp-i18n') 56 ) 57 ), 58 */ 51 59 $menu_config->menu->subs[3]->menu_slug=>array( 52 60 -
news-parser/trunk/inc/Config/scripts-translation-config.php
r3201219 r3231549 13 13 'main-parser-autopilot-bundle'=>NEWS_PARSER_PLUGIN_SLUG 14 14 ), 15 /* 16 $menu_config->menu->subs[3]->menu_slug=>array( 17 'main-parser-seo-integration-bundle'=>NEWS_PARSER_PLUGIN_SLUG 18 ), 19 */ 15 20 $menu_config->menu->subs[3]->menu_slug=>array( 16 21 ) -
news-parser/trunk/inc/Config/styles-config-dev.php
r3201219 r3231549 26 26 NEWS_PARSER_PLUGIN_SLUG . '-autopilot'=>NEWS_PARSER_PLUGIN_URL.'/public/css/autopilot-'.NEWS_PARSER_PLUGIN_VERSION.'.css' 27 27 ), 28 /* 29 $menu_config->menu->subs[3]->menu_slug=>array( 30 NEWS_PARSER_PLUGIN_SLUG . '-seo_integration'=>NEWS_PARSER_PLUGIN_URL.'/public/css/seo_integration-'.NEWS_PARSER_PLUGIN_VERSION.'.css' 31 ), 32 */ 28 33 $menu_config->menu->subs[3]->menu_slug=>array( 29 34 NEWS_PARSER_PLUGIN_SLUG . '-style-about'=>NEWS_PARSER_PLUGIN_URL . '/public/css/about-news-parser.css' -
news-parser/trunk/inc/Config/styles-config.php
r3201219 r3231549 15 15 NEWS_PARSER_PLUGIN_SLUG . '-bootstrap'=>'https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css', 16 16 NEWS_PARSER_PLUGIN_SLUG . '-bootstrap-icons'=> 'https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css', 17 NEWS_PARSER_PLUGIN_SLUG . '-media_views'=>NEWS_PARSER_PLUGIN_URL . '/public/css/media-views.css' 17 NEWS_PARSER_PLUGIN_SLUG . '-media_views'=>NEWS_PARSER_PLUGIN_URL . '/public/css/media-views.css', 18 NEWS_PARSER_PLUGIN_SLUG . '-277-'=>NEWS_PARSER_PLUGIN_URL . '/public/css/277-'.NEWS_PARSER_PLUGIN_VERSION.'.css', 18 19 ), 19 20 $menu_config->menu->subs[0]->menu_slug=>array( 20 NEWS_PARSER_PLUGIN_SLUG . '-parser-rss'=> NEWS_PARSER_PLUGIN_URL.'/public/css/parser_rss-'.NEWS_PARSER_PLUGIN_VERSION.'.css'21 // NEWS_PARSER_PLUGIN_SLUG . '-parser-rss'=> NEWS_PARSER_PLUGIN_URL.'/public/css/parser_rss-'.NEWS_PARSER_PLUGIN_VERSION.'.css' 21 22 ), 22 23 $menu_config->menu->subs[1]->menu_slug=>array( 23 NEWS_PARSER_PLUGIN_SLUG . '-parser-page'=>NEWS_PARSER_PLUGIN_URL.'/public/css/parser_rss-'.NEWS_PARSER_PLUGIN_VERSION.'.css'24 // NEWS_PARSER_PLUGIN_SLUG . '-parser-page'=>NEWS_PARSER_PLUGIN_URL.'/public/css/parser_rss-'.NEWS_PARSER_PLUGIN_VERSION.'.css' 24 25 ), 25 26 $menu_config->menu->subs[2]->menu_slug=>array( 26 27 NEWS_PARSER_PLUGIN_SLUG . '-autopilot'=>NEWS_PARSER_PLUGIN_URL.'/public/css/parser_rss-'.NEWS_PARSER_PLUGIN_VERSION.'.css' 27 28 ), 29 /* 30 $menu_config->menu->subs[3]->menu_slug=>array( 31 NEWS_PARSER_PLUGIN_SLUG . '-seo_integration'=>NEWS_PARSER_PLUGIN_URL.'/public/css/parser_rss-'.NEWS_PARSER_PLUGIN_VERSION.'.css' 32 ), 33 */ 28 34 $menu_config->menu->subs[3]->menu_slug=>array( 29 35 NEWS_PARSER_PLUGIN_SLUG . '-style-about'=>NEWS_PARSER_PLUGIN_URL . '/public/css/about-news-parser.css' -
news-parser/trunk/inc/Controller/PostController.php
r3205095 r3231549 8 8 use NewsParserPlugin\Interfaces\ModelInterface; 9 9 use NewsParserPlugin\Message\Errors; 10 use NewsParserPlugin\Models\PostCacheModel;11 10 use NewsParserPlugin\Models\PostModel; 12 11 use NewsParserPlugin\Models\TemplateModel; … … 41 40 protected $adapter; 42 41 43 44 42 public function __construct(AbstractParseContent $parser, AdapterInterface $adapter, ModelInterface $template_model, PostModel $post_model) 45 43 { … … 48 46 $this->templateModel = $template_model; 49 47 $this->postModel = $post_model; 50 48 51 49 } 52 50 /** 53 51 * Method that handels post parsing request. 54 * 52 * 55 53 * @param string $url The url of the post. 56 54 * @param string $_id Frontend id of the post. … … 78 76 /** 79 77 * Method that handels post parsing request from CronController. 80 * 78 * 81 79 * @param string $url The url of the post. 82 80 * @param string $template_url The url of the template. … … 99 97 /** 100 98 * Method create post form given parsed data. 101 * 99 * 102 100 * @param string $url The url of the post. 103 101 * @param string $_id Frontend id of the post. … … 124 122 /** 125 123 * Handle posts in progerss requests. 126 * 124 * 127 125 * @param string $template_url The url of the template. 128 126 * @param string $post_url The url of the post. … … 182 180 $this->formatPostMeta([ 183 181 'status' => self::PARSING_STATUS_PARSED, 184 'image' => isset($post_update['image']) ?$post_update['image']:null,182 'image' => isset($post_update['image']) ? $post_update['image'] : null, 185 183 ]) 186 184 )); … … 199 197 ]); 200 198 } 201 199 /** 200 * Delete post 201 */ 202 public function delete($post_id) 203 { 204 $this->postModel->delete($post_id); 205 } 202 206 /** 203 207 * Apply body adapter to parsed data … … 323 327 if (isset($post_options['postDate'])) { 324 328 $time_format = 'Y-m-d H:i:s'; 325 $timestamp =strtotime($post_options['postDate']);329 $timestamp = strtotime($post_options['postDate']); 326 330 $formated_post_options['post_date'] = wp_date($time_format, $timestamp); 327 331 $formated_post_options['post_modified'] = wp_date($time_format, $timestamp); … … 329 333 return $formated_post_options; 330 334 } 335 331 336 } -
news-parser/trunk/inc/Controller/TemplateController.php
r3049937 r3231549 55 55 public function get($url) 56 56 { 57 57 58 $template_data=$this->templateModel->findByID($url); 58 59 if(is_array($template_data)){ -
news-parser/trunk/inc/Models/AIOptionsModel.php
r3205095 r3231549 13 13 */ 14 14 protected const AI_OPTIONS_TABLE_NAME = NEWS_PURSER_PLUGIN_AI_OPTIONS_TABLE_NAME; 15 15 protected const AI_OPTIONS_TTL=3600; 16 16 public function __construct() 17 17 { … … 35 35 $ai_providers_options=$this->getAll(); 36 36 $ai_providers_options[$ai_provider_name]=$ai_provider_options_array; 37 return update_option(self::AI_OPTIONS_TABLE_NAME, $ai_providers_options );37 return update_option(self::AI_OPTIONS_TABLE_NAME, $ai_providers_options, self::AI_OPTIONS_TTL); 38 38 } 39 39 … … 45 45 unset($ai_providers_options[$ai_provider_name]); 46 46 } 47 return update_option(self::AI_OPTIONS_TABLE_NAME, $ai_providers_options );47 return update_option(self::AI_OPTIONS_TABLE_NAME, $ai_providers_options, self::AI_OPTIONS_TTL); 48 48 } 49 49 -
news-parser/trunk/inc/Parser/HTMLParser.php
r3049937 r3231549 62 62 public function initParser($data) 63 63 { 64 /* 64 65 $clean_html=$this->pipe($data) 65 66 ->removeScriptTags() 66 67 ->removeStyleTags() 67 68 ->get(); 69 */ 70 $clean_html=apply_filters('NewsParserPlugin\Parser\HTMLParser:parse',$data); 68 71 $this->dom = $this->createDOM($clean_html); 69 72 $this->rawHTML = $clean_html; … … 208 211 public function find($query) 209 212 { 213 210 214 $result = $this->dom->find($query); 211 215 return !empty($result) ? $result : false; 212 216 } 217 218 /** 219 * Method exclude from the result of the search query those elements that are in the exclude query. 220 * 221 * @param string $query Search query. 222 * @param string $exclude Search query. 223 * 224 * @return false|array of HtmlDomParser objects if found. 225 */ 226 public function exclude($query, $exclude) 227 { 228 $result = $this->dom->find($query); 229 if (empty($result)||!is_array($result)) { 230 return false; 231 } 232 $excluded=this->find($exclude); 233 if (empty($excluded)||!is_array($excluded)) { 234 return $result; 235 } 236 return array_filter($result, function ($item) use ($excluded) { 237 return !in_array($item, $excluded); 238 }); 239 } 213 240 /** 214 241 * Remove HTML tags from the text. -
news-parser/trunk/inc/Parser/HTMLPatternParser.php
r3205095 r3231549 14 14 { 15 15 16 16 protected $query_extenders = []; 17 17 /** 18 18 * HTMLPatternParser constructor. … … 20 20 * @param int $cache_expiration Cache expiration time in seconds. 21 21 */ 22 public function __construct($cache_expiration = 3600) 23 { 22 public function __construct($query_extenders = [], $cache_expiration = 3600) 23 { 24 $this->query_extenders = $query_extenders; 24 25 parent::__construct($cache_expiration); 25 26 } … … 34 35 public function postBody() 35 36 { 36 $search_template = ''; 37 if (!isset($this->options['template'])) { 38 throw new \Exception('Parsing template patterns should be set.'); 39 } 40 $template = $this->options['template']; 41 foreach ($template['children'] as $child_element) { 42 // Create search template for Sunra\HtmlDomParser::find method 43 // https://simplehtmldom.sourceforge.io/docs/1.9/manual/finding-html-elements/ How to find HTML elements? section. 44 $search_template .= $child_element['searchTemplate'] . ','; 45 } 46 $search_template = substr($search_template, 0, -1); 47 $container = $this->find($template['searchTemplate']); 37 $search_template = $this->createBodyElementsSearchTemplate($this->options['template']); 38 39 $exclude_template = $this->createBodyElementsExcludeTemplate($this->options['template']); 40 41 $container_search_template = $this->getContainerSearchTemplate($this->options['template']); 42 43 $container = $this->find($container_search_template); 48 44 49 45 if (empty($container)) { 50 46 return ''; 51 47 } 52 if(count($container)>1){ 53 $elements=[]; 54 foreach ($container as $container_element){ 55 $elements=array_merge($elements,$container_element->find($search_template)); 56 } 57 }else{ 58 $elements = $container[0]->find($search_template); 59 } 60 48 49 $elements = []; 50 foreach ($container as $container_element) { 51 $elements = array_merge($elements, $this->find($search_template, $container_element)); 52 } 53 54 $elements = $exclude_template ? $this->excludeElements($container, $elements, $exclude_template) : $elements; 55 61 56 $body = $this->parseContainer($elements); 62 return $body ? $body : '';57 return $body ? $body : ''; 63 58 } 64 59 … … 89 84 // If the lazy load attribute data-src exists, take that as the source of the image. If none, take the src attribute. 90 85 'src' => $image_srcset !== false ? $this->srcSetSplit($image_srcset) : ((is_array($el->attr) && array_key_exists('data-src', $el->attr)) ? $this->srcSetSplit($el->attr['data-src']) : $el->src), 91 'srcSet' => $image_srcset !==false ? $image_srcset : '',92 'sizes' =>''86 'srcSet' => $image_srcset !== false ? $image_srcset : '', 87 'sizes' => '', 93 88 ); 94 89 break; … … 110 105 } 111 106 break; 112 case ' iframe':107 case 'video': 113 108 // Find the YouTube video ID. 114 preg_match('/youtube\.com\/embed\/([a-zA-Z0-9\_]*)/i', $el->src, $match);109 $video_hash=$el->getAttribute('data-hash'); 115 110 // Remove any symbols except those that are allowed. 116 $el_data['content'] = array_key_exists(1, $match) ? $match[1] : false;111 $el_data['content'] = $video_hash; 117 112 break; 118 113 default: 119 $el_data['tagName'] ='p';114 $el_data['tagName'] = 'p'; 120 115 $el_data['content'] = $this->removeTags(trim($el->innertext)); 121 116 } … … 127 122 return $body; 128 123 } 129 124 protected function getContainerSearchTemplate($template) 125 { 126 if (!$template) { 127 throw new \Exception('Template is not set.'); 128 } 129 return $template['searchTemplate']; 130 } 131 /** 132 * Exclude elements from container by template. 133 * 134 * @param array $container Array of HtmlDomParser element objects. 135 * @param array $elements Array of HtmlDomParser element objects. 136 * 137 * @return array 138 */ 139 protected function excludeElements($containter, $elements, $exclude_template) 140 { 141 $exclude_templates=explode(',',$exclude_template); 142 if (!count($exclude_templates)) { 143 return $elements; 144 } 145 $elements_to_exclude = []; 146 foreach ($containter as $container_element) { 147 $elements_to_exclude_in_container = [ ...array_map(function ($exclude_template) use ($container_element) { 148 return $this->find($exclude_template, $container_element); 149 }, $exclude_templates)]; 150 $elements_to_exclude = array_merge($elements_to_exclude, ...$elements_to_exclude_in_container); 151 } 152 $elements_to_exclude_id = array_map(function ($element) { 153 return $element->tag_start; 154 }, $elements_to_exclude); 155 return array_filter($elements, function ($element) use ($elements_to_exclude_id) { 156 return !in_array($element->tag_start, $elements_to_exclude_id); 157 }); 158 159 } 160 /** 161 * Create search for post body children elements template for Sunra\HtmlDomParser::find method 162 * 163 * @param array $template Parsing template 164 * 165 * @return string 166 */ 167 protected function createBodyElementsSearchTemplate($template) 168 { 169 if ($template['elementsTemplate']) { 170 return $template['elementsTemplate']; 171 } 172 $search_template = ''; 173 if (!$template) { 174 throw new \Exception('Parsing template patterns should be set.'); 175 } 176 foreach ($template['children'] as $child_element) { 177 // Create search template for Sunra\HtmlDomParser::find method 178 // https://simplehtmldom.sourceforge.io/docs/1.9/manual/finding-html-elements/ How to find HTML elements? section. 179 $search_template .= $child_element['searchTemplate'] . ','; 180 } 181 return substr($search_template, 0, -1); 182 } 183 /** 184 * Create exclude elements template for Sunra\HtmlDomParser::find method 185 * 186 * @param array $template Parsing template 187 * 188 * @return string 189 * 190 */ 191 protected function createBodyElementsExcludeTemplate($template) 192 { 193 return !$template ? [] : $template['excludeTemplate']; 194 } 130 195 /** 131 196 * Parse the source image tag. … … 177 242 return end($array); 178 243 } 244 /** 245 * Provide finding elements with extended syntax. 246 * 247 * @param string $query The query string. 248 * @return array The array of elements. 249 */ 250 public function find($query, $container_element = null) 251 { 252 if ($this->hasExtededSyntax($query)) { 253 return $this->findWithExtendedSyntax($query, $container_element); 254 } 255 return $container_element ? $container_element->find($query) : parent::find($query); 256 } 257 /** 258 * Check if the query has extended syntax. 259 * 260 * @param string $query The query string. 261 */ 262 protected function hasExtededSyntax($query) 263 { 264 if (!count($this->query_extenders)) { 265 return false; 266 } 267 foreach ($this->query_extenders as $extender) { 268 if ($extender->checkSyntax($query)) { 269 return true; 270 } 271 } 272 } 273 /** 274 * Remove extended syntax from the query. 275 * 276 * @param string $query The query string. 277 */ 278 protected function removeExtendedSyntax($query) 279 { 280 return array_reduce($this->query_extenders, function ($carry, $extender) use ($query) { 281 return $extender->removeExtendedSyntax($query, $carry); 282 }, $query); 283 } 284 /** 285 * Find elements with extended syntax. 286 * 287 * @param string $query The query string. 288 * 289 * @return array The array of elements. 290 */ 291 protected function findWithExtendedSyntax($query, $container_element) 292 { 293 $initElements = $this->find($this->removeExtendedSyntax($query), $container_element); 294 return array_reduce($this->query_extenders, function ($carry, $extender) use ($query) { 295 return $extender->find($query, $carry); 296 }, $initElements); 297 } 179 298 180 299 /** -
news-parser/trunk/inc/Parser/HTMLRaw.php
r3049937 r3231549 34 34 protected function parse($html) 35 35 { 36 36 37 37 $html=apply_filters('NewsParserPlugin\Parser\HTMLRaw:parse:parse',$html,$this->url); 38 38 39 39 if (is_array($this->options)&&array_key_exists('remove_scripts', $this->options)&&$this->options['remove_scripts']) { 40 40 return $this->removeScriptTags($html); -
news-parser/trunk/inc/Parser/Modifiers/AdapterModifiers/Before/GeneratePostBodyWithAI.php
r3206548 r3231549 8 8 public $aiServeceProviders; 9 9 public $aiServeceProvider; 10 const IMG_SYMBOL = '[image]';11 const HEADER_SYMBOL = '***';10 const HEADER_SYMBOL = '**'; 11 const OUTPUT_FORMAT_PROMPT='I need that you provide your answer in a proper JSON format. Where tagName is html tag name and content is html tag text content.'; 12 12 public function __construct($ai_service_providers) 13 13 { … … 36 36 } 37 37 38 $parsed_data['body'] = $ save_post_structure ? $response : $this->replaceOriginalContent($response, $parsed_data['body']);38 $parsed_data['body'] = $response; 39 39 return $parsed_data; 40 40 } … … 52 52 private function preparePostBody($body, $savePostStructure) 53 53 { 54 return $savePostStructure ? $this-> mergeParagraphs($body) : $this->encodeBody($body);54 return $savePostStructure ? $this->encodeBodyWithStructure($body) : $this->encodeBody($body); 55 55 } 56 56 … … 58 58 private function processPipelines($model, $pipelines, $post_body, $title) 59 59 { 60 returnarray_reduce($pipelines, function ($body, $current_prompt) use ($model,$title) {60 $result= array_reduce($pipelines, function ($body, $current_prompt) use ($model,$title) { 61 61 $ai_request_options = $this->getAIRequestOptions($model); 62 63 if (is_array($body)) { 64 return $this->processBodyArray($ai_request_options, $current_prompt, $body, $title); 65 } else { 66 return $this->processBodyString($ai_request_options, $current_prompt, $body, $title); 67 } 62 return $this->processBodyArray($ai_request_options, $current_prompt, $body, $title); 63 68 64 }, $post_body); 65 return $this->decodeBody($this->unwrapBody($result)); 69 66 } 70 67 protected function getAIRequestOptions($model) … … 74 71 'messages' => [ 75 72 [ 73 76 74 'role' => 'user', 77 75 'content' => '', … … 86 84 $ai_request_options['messages'][0]['content'] = $this->preparePrompt($prompt, $body, $title); 87 85 $ai_response = $this->aiServeceProvider->chat($ai_request_options); 88 return $this-> decodeBody($ai_response);86 return $this->$this->decodeBody($ai_response); 89 87 } 90 88 protected function processBodyArray($ai_request_options, $prompt, $body, $title) 91 89 { 92 90 $result = []; 93 foreach ($body as $element) { 94 if ($element['tagName'] === 'p' || $element['tagName'] === 'div') { 95 $ai_request_options['messages'][0]['content'] = $this->preparePrompt($prompt, $element['content'], $title); 96 $result = array_merge($result, $this->decodeParagraph($this->aiServeceProvider->chat($ai_request_options))); 97 } elseif (in_array($element['tagName'], ['h2', 'h3', 'h4'])) { 98 $ai_request_options['messages'][0]['content'] = $this->preparePrompt($prompt, $element['content'], $title); 99 $element['content']=$this->aiServeceProvider->chat($ai_request_options); 100 $result[] = $element; 101 } else { 102 $result[] = $element; 91 foreach ($body as $block) { 92 if ($block['ai']) { 93 $ai_request_options['messages'][0]['content'] = $this->preparePrompt($prompt, $block['content'], $title); 94 $result[] = [ 95 'ai' => true, 96 'content'=>$this->aiServeceProvider->chat($ai_request_options) 97 ]; 98 } else { 99 $result[] = $block; 103 100 } 104 101 } … … 117 114 { 118 115 $full_prompt = str_replace('${post}', $post_body, $prompt); 119 $full_prompt = str_replace('${title}', $post_ body, $full_prompt);116 $full_prompt = str_replace('${title}', $post_title, $full_prompt); 120 117 //$full_prompt = str_replace('${headers}', $this->extractHeadins($parsed_data['body']), $full_prompt); 121 118 //$full_prompt = str_replace('${paragraphs}', $this->countParagraphs($parsed_data['body']), $full_prompt); … … 124 121 protected function decodeBody($body) 125 122 { 126 $result_body_array = []; 127 $body_array = explode(PHP_EOL, $body); 128 foreach ($body_array as $el) { 129 if ($el == '') { 123 $header_patter='/\*\*(.+?)\*\*/i'; 124 $result=[]; 125 126 127 foreach ($body as $el){ 128 if (is_array($el)){ 129 $result[]=$el; 130 130 continue; 131 131 } 132 133 if (strpos($el, self::HEADER_SYMBOL) !== false) { 134 $result_body_array[] = array( 135 'tagName' => 'h3', 136 'content' => str_replace(self::HEADER_SYMBOL, '', $el), 132 $el_array = explode(PHP_EOL, $el); 133 $sub_result_array = []; 134 foreach ($el_array as $el_part) { 135 if ($el_part == '') { 136 continue; 137 } 138 139 if (preg_match($header_patter, $el_part, $matches)!==0) { 140 $sub_result_array[] = array( 141 'tagName' => 'h2', 142 'content' => $matches[1], 143 ); 144 continue; 145 } 146 147 $sub_result_array[] = array( 148 'tagName' => 'p', 149 'content' => $el_part, 137 150 ); 151 } 152 $result = array_merge($result, $sub_result_array); 153 } 154 return $result; 155 } 156 protected function unwrapBody($body){ 157 return array_map(function ($el) { 158 return $el['content']; 159 }, $body); 160 } 161 protected function encodeBody($body) 162 { 163 $mergedBody = []; 164 $contentBlock=''; 165 foreach ($body as $element) { 166 if ($element['tagName'] === 'p'||$element['tagName'] === 'span') { 167 $contentBlock.=PHP_EOL.$element['content']; 168 } else if ($element['tagName'] === 'h1' || $element['tagName'] === 'h2' || $element['tagName'] === 'h3' || $element['tagName'] === 'h4') { 169 $contentBlock.=PHP_EOL.self::HEADER_SYMBOL.$element['content'].self::HEADER_SYMBOL.PHP_EOL; 170 } else { 171 if ($contentBlock!=='') { 172 $mergedBody[] =[ 173 'ai'=>true, 174 'content'=>$contentBlock 175 ]; 176 } 177 $mergedBody[] =['ai'=>false, 178 'content'=>$element 179 ]; 180 } 181 } 182 if ($contentBlock!=='') { 183 $mergedBody[] =[ 184 'ai'=>true, 185 'content'=>$contentBlock 186 ]; 187 } 188 return $mergedBody; 189 } 190 protected function encodeBodyWithStructure($body) 191 { 192 $mergedBody = []; 193 $contentBlock=''; 194 foreach ($body as $element) { 195 if ($element['tagName'] === 'p'||$element['tagName'] === 'span') { 196 $contentBlock=$element['content']; 197 } else if ($element['tagName'] === 'h1' || $element['tagName'] === 'h2' || $element['tagName'] === 'h3' || $element['tagName'] === 'h4') { 198 $contentBlock=self::HEADER_SYMBOL.$element['content'].self::HEADER_SYMBOL.PHP_EOL; 199 } else { 200 $mergedBody[] =['ai'=>false, 201 'content'=>$element 202 ]; 138 203 continue; 139 204 } 140 if (strpos($el, self::IMG_SYMBOL) !== false) { 141 $result_body_array[] = array( 142 'tagName' => 'img', 143 'content' => '', 144 ); 145 continue; 146 } 147 $result_body_array[] = array( 148 'tagName' => 'p', 149 'content' => $el, 150 ); 151 } 152 return $result_body_array; 153 } 154 protected function encodeBody($body) 155 { 156 $body_string = ''; 157 foreach ($body as $el) { 158 switch ($el['tagName']) { 159 case 'h1': 160 case 'h2': 161 case 'h3': 162 case 'span': 163 case 'p': 164 $body_string .= $el['content'] . PHP_EOL; 165 break; 166 case 'img': 167 $body_string .= self::IMG_SYMBOL; 168 } 169 170 } 171 return $body_string; 205 $mergedBody[] =['ai'=>true, 206 'content'=>$contentBlock 207 ]; 208 } 209 return $mergedBody; 172 210 } 173 211 protected function replaceOriginalContent($body, $original_content) 174 212 { 175 $result = []; 213 if (is_array($body)) { 214 return $this->replaceOriginalContentArray($body, $original_content); 215 } else { 216 return $this->replaceOriginalContentString($body, $original_content); 217 } 218 } 219 protected function replaceOriginalContentString($body, $original_content) 220 { 176 221 $images = array_filter($original_content, function ($el) { 177 222 return $el['tagName'] == 'img'; 178 223 }); 179 foreach ($body as $el) { 180 if ($el['tagName'] == 'img') { 181 $el=array_shift($images); 182 if($el===null) continue; 183 } 184 $result[] = $el; 185 } 186 return array_merge($result, $images); 224 $result = [[ 225 'tagName' => 'p', 226 'content' => $body 227 ]]; 228 $result = array_merge($result, $images); 229 return $result; 230 } 231 protected function replaceOriginalContentArray($body, $original_content) 232 { 233 $result = []; 234 foreach ($original_content as $index=>$el) { 235 if ($el['tagName'] !== 'p'||$el['tagName'] !== 'span'||$el['tagName'] !== 'h1'||$el['tagName'] !== 'h2'||$el['tagName'] !== 'h3'||$el['tagName'] !== 'h4') { 236 $result[] = $body[$index]; 237 } else { 238 $result[] = $original_content[$index]; 239 } 240 241 } 242 return $result; 187 243 } 188 244 protected function extractHeadins($body) … … 203 259 return $body_string; 204 260 } 205 protected function mergeParagraphs($body) 206 { 207 $mergedBody = []; 208 $previousElement = null; 209 210 foreach ($body as $element) { 211 if ($element['tagName'] === 'p') { 212 if ($previousElement !== null && $previousElement['tagName'] == 'p') { 213 $previousElement['content'] .= ' ' . $element['content'] . PHP_EOL; 214 } else { 215 $previousElement = $element; 216 } 217 } else { 218 if ($previousElement !== null) { 219 $mergedBody[] = $previousElement; 220 } 221 222 $mergedBody[] = $element; 223 $previousElement = null; 224 } 225 } 226 if ($previousElement !== null) { 227 $mergedBody[] = $previousElement; 228 } 229 230 return $mergedBody; 261 262 public function encondeParagraph($paragraph) 263 { 264 265 return json_encode($paragraph); 231 266 } 232 267 public function decodeParagraph($paragraph) 233 268 { 234 $result = []; 235 $paragraphArray = explode(PHP_EOL, $paragraph); 236 foreach ($paragraphArray as $el) { 237 if ($el == '') { 238 continue; 239 } 240 241 $result[] = array( 242 'tagName' => 'p', 243 'content' => $el, 244 ); 245 } 246 return $result; 269 $clean_json=str_replace('```json', '', $paragraph); 270 return json_decode($clean_json, true); 247 271 } 248 272 protected function countParagraphs($body) -
news-parser/trunk/inc/Service/AI/GeminiAIServiceProvider.php
r3206548 r3231549 36 36 return false; 37 37 } 38 39 $options=$this->fetchOptions(); 40 41 38 42 return [ 39 43 'featuredImage'=>false, 40 44 'postTitle' => [ 41 'models' => ['gemini-pro'],45 'models' => $options, 42 46 ], 43 47 'postBody' => [ 44 'models' => ['gemini-pro']48 'models' => $options 45 49 ] 46 50 ]; … … 58 62 ); 59 63 return $responce->text(); 60 } catch (\Exception $e) {64 } catch (\Exception |\ValueError $e) { 61 65 if ($attempts == $max_attempts) { 62 66 throw new MyException($e->getMessage(), $e->getCode()); … … 68 72 } 69 73 } 74 75 protected function fetchOptions(){ 76 try{ 77 $response = $this->geminiClient->models()->list(pageSize: 3); 78 }catch(\Exception $e){ 79 throw new MyException($e->getMessage(), $e->getCode()); 80 } 81 $models=$response->models; 82 return array_map(fn ($model)=>$model->name,$models); 83 } 70 84 public function isAPIKeyDefined() 71 85 { -
news-parser/trunk/inc/Service/AI/OpenAIServiceProvider.php
r3206548 r3231549 47 47 'featuredImage' => [ 48 48 'models' => ['dall-e-2', 'dall-e-3'], 49 'sizes' => ['1024x1024', '1024x1792', '1792x1024']49 'sizes' => ['1024x1024', '1024x1792', '1792x1024'], 50 50 ], 51 51 'postTitle' => [ … … 65 65 $max_attempts = self::RETRY_COUNT; 66 66 while ($attempts <= $max_attempts) { 67 $responce = json_decode($this->openAIClient->chat($chat_options_array)); 67 try { 68 $responce = json_decode($this->openAIClient->chat($chat_options_array)); 69 } catch (\Exception |\ValueError $e) { 70 throw new MyException($e->getMessage(), $e->getCode()); 71 } 68 72 if (property_exists($responce, 'error')) { 69 73 if ($responce->error->code == 'rate_limit_exceeded') { … … 72 76 } 73 77 $attempts++; 74 sleep(($this->lockDuration +rand(1,5))*(1+$attempts/5));78 sleep(($this->lockDuration + rand(1, 5)) * (1 + $attempts / 5)); 75 79 } else { 76 80 throw new MyException($responce->error->message, $responce->error->code); … … 96 100 } 97 101 $counter++; 98 sleep(($this->lockDuration +rand(1,5))*(1+$counter/5));102 sleep(($this->lockDuration + rand(1, 5)) * (1 + $counter / 5)); 99 103 } else { 100 104 throw new MyException($responce->error->message, $responce->error->code); -
news-parser/trunk/inc/Traits/SanitizeDataTrait.php
r3049937 r3231549 124 124 break; 125 125 case 'searchTemplate': 126 $clean_data[$key]=preg_replace('/[^a-zA-Z0-9\=\s\_\-\.\]\[]/i', '', $param); 126 case 'excludeTemplate': 127 case 'elementsTemplate': 128 $clean_data[$key]=preg_replace('/[^a-zA-Z0-9\=\s\_\-\.\,\]\[\p{L}\*\^\$\!]/u', '', $param); 127 129 break; 128 130 case 'position': -
news-parser/trunk/inc/Utils/AdapterGuttenberg.php
r3201219 r3231549 51 51 $post_content.=$this->listBlock($el); 52 52 break; 53 case ' iframe':53 case 'video': 54 54 $post_content.=$this->youtubeVideo($el); 55 55 break; … … 72 72 { 73 73 $hash=$element['content']; 74 /* 74 75 $video='<!-- wp:core-embed/youtube {"url":"https://youtu.be/%1$s","type":"video","providerNameSlug":"youtube","className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"} -->'. 75 76 '<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">'. 76 77 'https://youtu.be/%1$s</div></figure><!-- /wp:core-embed/youtube -->'; 78 */ 79 $video='<!-- wp:embed {"url":"https://youtu.be/%1$s","type":"video","providerNameSlug":"youtube","className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"} --><figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper"><iframe src="https://www.youtube.com/embed/%1$s" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe></div></figure><!-- /wp:core-embed/youtube -->'; 77 80 return sprintf( 78 81 $video, -
news-parser/trunk/inc/Utils/ResponseFormatter.php
r3049937 r3231549 164 164 { 165 165 return $this->data['code']; 166 167 } 168 /** 169 * Return answer data in array|object|json format 170 * 171 * @param array $data 172 */ 173 public function postTest($data) 174 { 175 $this->data=$data; 176 return $this; 166 177 } 167 178 /** -
news-parser/trunk/news-parser.php
r3206548 r3231549 4 4 Plugin URI: https://www.news-parser.com 5 5 Description: Parse full text news from RSS Feed 6 Version: 2. 2.36 Version: 2.3.0 7 7 Author: Evgeny S.Zalevskiy <[email protected]> 8 8 Author URI: https://github.com/zalevsk1y/ … … 15 15 16 16 17 define('NEWS_PARSER_PLUGIN_VERSION', '2. 2.3');17 define('NEWS_PARSER_PLUGIN_VERSION', '2.3.0'); 18 18 define ("NEWS_PARSER_PLUGIN_MODE","production"); 19 19 -
news-parser/trunk/readme.txt
r3206548 r3231549 4 4 Author: Evgeniy Zalevskiy 5 5 Tags: scraper,rss,news,autopilot,ai 6 Requires PHP: 8. 26 Requires PHP: 8.1 7 7 Requires at least: 5.2.0 8 8 Tested up to: 6.7.1 9 Stable tag: 2. 2.39 Stable tag: 2.3.0 10 10 License: MIT 11 11 License URI: https://opensource.org/licenses/MIT … … 115 115 New Features: 116 116 117 * Autopilot Logging: You can now enable logging to monitor Autopilot activity. To activate logging, add the following line to your `wp-config.php` file: `define('NEWS_PARSER_CRON_LOGGER', true);`. Log files will be stored in `wp-content/plugins/news-parser/logs/cron_log.txt`.118 117 * Unlimited Autopilot Runs and Posts: The previous limitations on the number of Autopilot runs and parsed posts have been removed. You can now parse as many posts as needed. 119 118 * Posts Per Run: Control the number of posts parsed per Autopilot run. This setting is configurable in the Autopilot settings page. This helps manage server resources and prevents timeouts for feeds with a large number of posts. … … 172 171 == Changelog == 173 172 173 = 2.3.0 - 09-12-24 = 174 175 * Added: Visual Constructor shows saved template data. 176 * Fix: some bugs. 174 177 175 178 = 2.2.3 - 09-12-24 = … … 178 181 179 182 = 2.2.2 - 09-12-24 = 180 181 * Fix: some bugs.182 183 = 2.2.1 - 09-12-24 =184 183 185 184 * Fix: some bugs.
Note: See TracChangeset
for help on using the changeset viewer.