From e9316b87b73a55bbe80ee3bf5c30f0f18376452b Mon Sep 17 00:00:00 2001 From: Beat Date: Mon, 20 Oct 2014 16:52:31 +0200 Subject: [PATCH 001/104] Fixed JLog class to accept event handler callables objects containing closures --- libraries/joomla/log/log.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/libraries/joomla/log/log.php b/libraries/joomla/log/log.php index fe7e4f5491d57..7e880bdfe6269 100644 --- a/libraries/joomla/log/log.php +++ b/libraries/joomla/log/log.php @@ -183,10 +183,18 @@ public static function addLogger(array $options, $priorities = self::ALL, $categ // Special case - if a Closure object is sent as the callback (in case of JLogLoggerCallback) // Closure objects are not serializable so swap it out for a unique id first then back again later - if (isset($options['callback']) && is_a($options['callback'], 'closure')) + if (isset($options['callback'])) { - $callback = $options['callback']; - $options['callback'] = spl_object_hash($options['callback']); + if (is_a($options['callback'], 'closure')) + { + $callback = $options['callback']; + $options['callback'] = spl_object_hash($options['callback']); + } + elseif (is_array($options['callback']) && count($options['callback']) == 2 && is_object($options['callback'][0])) + { + $callback = $options['callback']; + $options['callback'] = spl_object_hash($options['callback'][0]) . '::' . $options['callback'][1]; + } } // Generate a unique signature for the JLog instance based on its options. From c44a24b885032012afc2eece887cb3dc458f2304 Mon Sep 17 00:00:00 2001 From: "P.Alex" Date: Wed, 13 Aug 2014 16:28:46 +0300 Subject: [PATCH 002/104] Update all Types and Properties in the types.json file --- libraries/joomla/microdata/types.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/joomla/microdata/types.json b/libraries/joomla/microdata/types.json index 836d4af7b582c..690de54eb001b 100644 --- a/libraries/joomla/microdata/types.json +++ b/libraries/joomla/microdata/types.json @@ -1 +1 @@ -{"DataType":{"extends":"","properties":[]},"Boolean":{"extends":"DataType","properties":[]},"Date":{"extends":"DataType","properties":[]},"DateTime":{"extends":"DataType","properties":[]},"Number":{"extends":"DataType","properties":[]},"Float":{"extends":"Number","properties":[]},"Integer":{"extends":"Number","properties":[]},"Text":{"extends":"DataType","properties":[]},"URL":{"extends":"Text","properties":[]},"Time":{"extends":"DataType","properties":[]},"Thing":{"extends":"","properties":{"additionalType":{"expectedTypes":["URL"]},"alternateName":{"expectedTypes":["Text"]},"description":{"expectedTypes":["Text"]},"image":{"expectedTypes":["URL"]},"name":{"expectedTypes":["Text"]},"sameAs":{"expectedTypes":["URL"]},"url":{"expectedTypes":["URL"]}}},"Action":{"extends":"Thing","properties":{"agent":{"expectedTypes":["Organization","Person"]},"endTime":{"expectedTypes":["DateTime"]},"instrument":{"expectedTypes":["Thing"]},"location":{"expectedTypes":["Place","PostalAddress"]},"object":{"expectedTypes":["Thing"]},"participant":{"expectedTypes":["Organization","Person"]},"result":{"expectedTypes":["Thing"]},"startTime":{"expectedTypes":["DateTime"]}}},"AchieveAction":{"extends":"Action","properties":[]},"LoseAction":{"extends":"AchieveAction","properties":{"winner":{"expectedTypes":["Person"]}}},"TieAction":{"extends":"AchieveAction","properties":[]},"WinAction":{"extends":"AchieveAction","properties":{"loser":{"expectedTypes":["Person"]}}},"AssessAction":{"extends":"Action","properties":[]},"ChooseAction":{"extends":"AssessAction","properties":{"option":{"expectedTypes":["Text","Thing"]}}},"VoteAction":{"extends":"ChooseAction","properties":{"candidate":{"expectedTypes":["Person"]}}},"IgnoreAction":{"extends":"AssessAction","properties":[]},"ReactAction":{"extends":"AssessAction","properties":[]},"AgreeAction":{"extends":"ReactAction","properties":[]},"DisagreeAction":{"extends":"ReactAction","properties":[]},"DislikeAction":{"extends":"ReactAction","properties":[]},"EndorseAction":{"extends":"ReactAction","properties":{"endorsee":{"expectedTypes":["Organization","Person"]}}},"LikeAction":{"extends":"ReactAction","properties":[]},"WantAction":{"extends":"ReactAction","properties":[]},"ReviewAction":{"extends":"AssessAction","properties":{"resultReview":{"expectedTypes":["Review"]}}},"ConsumeAction":{"extends":"Action","properties":[]},"DrinkAction":{"extends":"ConsumeAction","properties":[]},"EatAction":{"extends":"ConsumeAction","properties":[]},"InstallAction":{"extends":"ConsumeAction","properties":[]},"ListenAction":{"extends":"ConsumeAction","properties":[]},"ReadAction":{"extends":"ConsumeAction","properties":[]},"UseAction":{"extends":"ConsumeAction","properties":[]},"WearAction":{"extends":"UseAction","properties":[]},"ViewAction":{"extends":"ConsumeAction","properties":[]},"WatchAction":{"extends":"ConsumeAction","properties":[]},"CreateAction":{"extends":"Action","properties":[]},"CookAction":{"extends":"CreateAction","properties":{"foodEstablishment":{"expectedTypes":["FoodEstablishment","Place"]},"foodEvent":{"expectedTypes":["FoodEvent"]},"recipe":{"expectedTypes":["Recipe"]}}},"DrawAction":{"extends":"CreateAction","properties":[]},"FilmAction":{"extends":"CreateAction","properties":[]},"PaintAction":{"extends":"CreateAction","properties":[]},"PhotographAction":{"extends":"CreateAction","properties":[]},"WriteAction":{"extends":"CreateAction","properties":{"language":{"expectedTypes":["Language"]}}},"FindAction":{"extends":"Action","properties":[]},"CheckAction":{"extends":"FindAction","properties":[]},"DiscoverAction":{"extends":"FindAction","properties":[]},"TrackAction":{"extends":"FindAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"InteractAction":{"extends":"Action","properties":[]},"BefriendAction":{"extends":"InteractAction","properties":[]},"CommunicateAction":{"extends":"InteractAction","properties":{"about":{"expectedTypes":["Thing"]},"language":{"expectedTypes":["Language"]},"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"AskAction":{"extends":"CommunicateAction","properties":{"question":{"expectedTypes":["Text"]}}},"CheckInAction":{"extends":"CommunicateAction","properties":[]},"CheckOutAction":{"extends":"CommunicateAction","properties":[]},"CommentAction":{"extends":"CommunicateAction","properties":[]},"InformAction":{"extends":"CommunicateAction","properties":{"event":{"expectedTypes":["Event"]}}},"ConfirmAction":{"extends":"InformAction","properties":[]},"RsvpAction":{"extends":"InformAction","properties":[]},"InviteAction":{"extends":"CommunicateAction","properties":{"event":{"expectedTypes":["Event"]}}},"ReplyAction":{"extends":"CommunicateAction","properties":[]},"ShareAction":{"extends":"CommunicateAction","properties":[]},"FollowAction":{"extends":"InteractAction","properties":{"followee":{"expectedTypes":["Organization","Person"]}}},"JoinAction":{"extends":"InteractAction","properties":{"event":{"expectedTypes":["Event"]}}},"LeaveAction":{"extends":"InteractAction","properties":{"event":{"expectedTypes":["Event"]}}},"MarryAction":{"extends":"InteractAction","properties":[]},"RegisterAction":{"extends":"InteractAction","properties":[]},"SubscribeAction":{"extends":"InteractAction","properties":[]},"UnRegisterAction":{"extends":"InteractAction","properties":[]},"MoveAction":{"extends":"Action","properties":{"fromLocation":{"expectedTypes":["Number","Place"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"ArriveAction":{"extends":"MoveAction","properties":[]},"DepartAction":{"extends":"MoveAction","properties":[]},"TravelAction":{"extends":"MoveAction","properties":{"distance":{"expectedTypes":["Distance"]}}},"OrganizeAction":{"extends":"Action","properties":[]},"AllocateAction":{"extends":"OrganizeAction","properties":{"purpose":{"expectedTypes":["MedicalDevicePurpose","Thing"]}}},"AcceptAction":{"extends":"AllocateAction","properties":[]},"AssignAction":{"extends":"AllocateAction","properties":[]},"AuthorizeAction":{"extends":"AllocateAction","properties":{"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"RejectAction":{"extends":"AllocateAction","properties":[]},"ApplyAction":{"extends":"OrganizeAction","properties":[]},"BookmarkAction":{"extends":"OrganizeAction","properties":[]},"PlanAction":{"extends":"OrganizeAction","properties":{"scheduledTime":{"expectedTypes":["DateTime"]}}},"CancelAction":{"extends":"PlanAction","properties":[]},"ReserveAction":{"extends":"PlanAction","properties":[]},"ScheduleAction":{"extends":"PlanAction","properties":[]},"PlayAction":{"extends":"Action","properties":{"audience":{"expectedTypes":["Audience"]},"event":{"expectedTypes":["Event"]}}},"ExerciseAction":{"extends":"PlayAction","properties":{"course":{"expectedTypes":["Place"]},"diet":{"expectedTypes":["Diet"]},"distance":{"expectedTypes":["Distance"]},"exercisePlan":{"expectedTypes":["ExercisePlan"]},"exerciseType":{"expectedTypes":["Text"]},"fromLocation":{"expectedTypes":["Number","Place"]},"oponent":{"expectedTypes":["Person"]},"sportsActivityLocation":{"expectedTypes":["SportsActivityLocation"]},"sportsEvent":{"expectedTypes":["SportsEvent"]},"sportsTeam":{"expectedTypes":["SportsTeam"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"PerformAction":{"extends":"PlayAction","properties":{"entertainmentBusiness":{"expectedTypes":["EntertainmentBusiness"]}}},"SearchAction":{"extends":"Action","properties":{"query":{"expectedTypes":["Class","Text"]}}},"TradeAction":{"extends":"Action","properties":{"price":{"expectedTypes":["Number","Text"]}}},"BuyAction":{"extends":"TradeAction","properties":{"vendor":{"expectedTypes":["Organization","Person"]},"warrantyPromise":{"expectedTypes":["WarrantyPromise"]}}},"DonateAction":{"extends":"TradeAction","properties":{"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"OrderAction":{"extends":"TradeAction","properties":[]},"PayAction":{"extends":"TradeAction","properties":{"purpose":{"expectedTypes":["MedicalDevicePurpose","Thing"]},"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"QuoteAction":{"extends":"TradeAction","properties":[]},"RentAction":{"extends":"TradeAction","properties":{"landlord":{"expectedTypes":["Organization","Person"]},"realEstateAgent":{"expectedTypes":["RealEstateAgent"]}}},"SellAction":{"extends":"TradeAction","properties":{"buyer":{"expectedTypes":["Person"]},"warrantyPromise":{"expectedTypes":["WarrantyPromise"]}}},"TipAction":{"extends":"TradeAction","properties":{"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"TransferAction":{"extends":"Action","properties":{"fromLocation":{"expectedTypes":["Number","Place"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"BorrowAction":{"extends":"TransferAction","properties":{"lender":{"expectedTypes":["Person"]}}},"DownloadAction":{"extends":"TransferAction","properties":[]},"GiveAction":{"extends":"TransferAction","properties":{"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"LendAction":{"extends":"TransferAction","properties":{"borrower":{"expectedTypes":["Person"]}}},"ReceiveAction":{"extends":"TransferAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]},"sender":{"expectedTypes":["Audience","Organization","Person"]}}},"ReturnAction":{"extends":"TransferAction","properties":{"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"SendAction":{"extends":"TransferAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]},"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"TakeAction":{"extends":"TransferAction","properties":[]},"UpdateAction":{"extends":"Action","properties":{"collection":{"expectedTypes":["Thing"]}}},"AddAction":{"extends":"UpdateAction","properties":[]},"InsertAction":{"extends":"AddAction","properties":{"toLocation":{"expectedTypes":["Number","Place"]}}},"AppendAction":{"extends":"InsertAction","properties":[]},"PrependAction":{"extends":"InsertAction","properties":[]},"DeleteAction":{"extends":"UpdateAction","properties":[]},"ReplaceAction":{"extends":"UpdateAction","properties":{"replacee":{"expectedTypes":["Thing"]},"replacer":{"expectedTypes":["Thing"]}}},"BroadcastService":{"extends":"Thing","properties":{"area":{"expectedTypes":["Place"]},"broadcaster":{"expectedTypes":["Organization"]},"parentService":{"expectedTypes":["BroadcastService"]}}},"Class":{"extends":"Thing","properties":[]},"CreativeWork":{"extends":"Thing","properties":{"about":{"expectedTypes":["Thing"]},"accessibilityAPI":{"expectedTypes":["Text"]},"accessibilityControl":{"expectedTypes":["Text"]},"accessibilityFeature":{"expectedTypes":["Text"]},"accessibilityHazard":{"expectedTypes":["Text"]},"accountablePerson":{"expectedTypes":["Person"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"alternativeHeadline":{"expectedTypes":["Text"]},"associatedMedia":{"expectedTypes":["MediaObject"]},"audience":{"expectedTypes":["Audience"]},"audio":{"expectedTypes":["AudioObject"]},"author":{"expectedTypes":["Organization","Person"]},"award":{"expectedTypes":["Text"]},"awards":{"expectedTypes":["Text"]},"citation":{"expectedTypes":["CreativeWork","Text"]},"comment":{"expectedTypes":["UserComments"]},"contentLocation":{"expectedTypes":["Place"]},"contentRating":{"expectedTypes":["Text"]},"contributor":{"expectedTypes":["Organization","Person"]},"copyrightHolder":{"expectedTypes":["Organization","Person"]},"copyrightYear":{"expectedTypes":["Number"]},"creator":{"expectedTypes":["Organization","Person"]},"dateCreated":{"expectedTypes":["Date"]},"dateModified":{"expectedTypes":["Date"]},"datePublished":{"expectedTypes":["Date"]},"discussionUrl":{"expectedTypes":["URL"]},"editor":{"expectedTypes":["Person"]},"educationalAlignment":{"expectedTypes":["AlignmentObject"]},"educationalUse":{"expectedTypes":["Text"]},"encoding":{"expectedTypes":["MediaObject"]},"encodings":{"expectedTypes":["MediaObject"]},"genre":{"expectedTypes":["Text"]},"headline":{"expectedTypes":["Text"]},"inLanguage":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"interactivityType":{"expectedTypes":["Text"]},"isBasedOnUrl":{"expectedTypes":["URL"]},"isFamilyFriendly":{"expectedTypes":["Boolean"]},"keywords":{"expectedTypes":["Text"]},"learningResourceType":{"expectedTypes":["Text"]},"mentions":{"expectedTypes":["Thing"]},"offers":{"expectedTypes":["Offer"]},"provider":{"expectedTypes":["Organization","Person"]},"publisher":{"expectedTypes":["Organization"]},"publishingPrinciples":{"expectedTypes":["URL"]},"review":{"expectedTypes":["Review"]},"reviews":{"expectedTypes":["Review"]},"sourceOrganization":{"expectedTypes":["Organization"]},"text":{"expectedTypes":["Text"]},"thumbnailUrl":{"expectedTypes":["URL"]},"timeRequired":{"expectedTypes":["Duration"]},"typicalAgeRange":{"expectedTypes":["Text"]},"version":{"expectedTypes":["Number"]},"video":{"expectedTypes":["VideoObject"]}}},"Article":{"extends":"CreativeWork","properties":{"articleBody":{"expectedTypes":["Text"]},"articleSection":{"expectedTypes":["Text"]},"wordCount":{"expectedTypes":["Integer"]}}},"BlogPosting":{"extends":"Article","properties":[]},"NewsArticle":{"extends":"Article","properties":{"dateline":{"expectedTypes":["Text"]},"printColumn":{"expectedTypes":["Text"]},"printEdition":{"expectedTypes":["Text"]},"printPage":{"expectedTypes":["Text"]},"printSection":{"expectedTypes":["Text"]}}},"ScholarlyArticle":{"extends":"Article","properties":[]},"MedicalScholarlyArticle":{"extends":"ScholarlyArticle","properties":{"publicationType":{"expectedTypes":["Text"]}}},"TechArticle":{"extends":"Article","properties":{"dependencies":{"expectedTypes":["Text"]},"proficiencyLevel":{"expectedTypes":["Text"]}}},"APIReference":{"extends":"TechArticle","properties":{"assembly":{"expectedTypes":["Text"]},"assemblyVersion":{"expectedTypes":["Text"]},"programmingModel":{"expectedTypes":["Text"]},"targetPlatform":{"expectedTypes":["Text"]}}},"Blog":{"extends":"CreativeWork","properties":{"blogPost":{"expectedTypes":["BlogPosting"]},"blogPosts":{"expectedTypes":["BlogPosting"]}}},"Book":{"extends":"CreativeWork","properties":{"bookEdition":{"expectedTypes":["Text"]},"bookFormat":{"expectedTypes":["BookFormatType"]},"illustrator":{"expectedTypes":["Person"]},"isbn":{"expectedTypes":["Text"]},"numberOfPages":{"expectedTypes":["Integer"]}}},"Clip":{"extends":"CreativeWork","properties":{"clipNumber":{"expectedTypes":["Integer"]},"partOfEpisode":{"expectedTypes":["Episode"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"publication":{"expectedTypes":["PublicationEvent"]}}},"RadioClip":{"extends":"Clip","properties":[]},"TVClip":{"extends":"Clip","properties":{"partOfTVSeries":{"expectedTypes":["TVSeries"]}}},"Code":{"extends":"CreativeWork","properties":{"codeRepository":{"expectedTypes":["URL"]},"programmingLanguage":{"expectedTypes":["Thing"]},"runtime":{"expectedTypes":["Text"]},"sampleType":{"expectedTypes":["Text"]},"targetProduct":{"expectedTypes":["SoftwareApplication"]}}},"Comment":{"extends":"CreativeWork","properties":[]},"DataCatalog":{"extends":"CreativeWork","properties":{"dataset":{"expectedTypes":["Dataset"]}}},"Dataset":{"extends":"CreativeWork","properties":{"catalog":{"expectedTypes":["DataCatalog"]},"distribution":{"expectedTypes":["DataDownload"]},"spatial":{"expectedTypes":["Place"]},"temporal":{"expectedTypes":["DateTime"]}}},"Diet":{"extends":"CreativeWork","properties":{"dietFeatures":{"expectedTypes":["Text"]},"endorsers":{"expectedTypes":["Organization","Person"]},"expertConsiderations":{"expectedTypes":["Text"]},"overview":{"expectedTypes":["Text"]},"physiologicalBenefits":{"expectedTypes":["Text"]},"proprietaryName":{"expectedTypes":["Text"]},"risks":{"expectedTypes":["Text"]}}},"Episode":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"actors":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"directors":{"expectedTypes":["Person"]},"episodeNumber":{"expectedTypes":["Integer"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"publication":{"expectedTypes":["PublicationEvent"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioEpisode":{"extends":"Episode","properties":[]},"TVEpisode":{"extends":"Episode","properties":{"partOfTVSeries":{"expectedTypes":["TVSeries"]}}},"ExercisePlan":{"extends":"CreativeWork","properties":{"activityDuration":{"expectedTypes":["Duration"]},"activityFrequency":{"expectedTypes":["Text"]},"additionalVariable":{"expectedTypes":["Text"]},"exerciseType":{"expectedTypes":["Text"]},"intensity":{"expectedTypes":["Text"]},"repetitions":{"expectedTypes":["Number"]},"restPeriods":{"expectedTypes":["Text"]},"workload":{"expectedTypes":["Energy"]}}},"ItemList":{"extends":"CreativeWork","properties":{"itemListElement":{"expectedTypes":["Text"]},"itemListOrder":{"expectedTypes":["Text"]}}},"Map":{"extends":"CreativeWork","properties":[]},"MediaObject":{"extends":"CreativeWork","properties":{"associatedArticle":{"expectedTypes":["NewsArticle"]},"bitrate":{"expectedTypes":["Text"]},"contentSize":{"expectedTypes":["Text"]},"contentUrl":{"expectedTypes":["URL"]},"duration":{"expectedTypes":["Duration"]},"embedUrl":{"expectedTypes":["URL"]},"encodesCreativeWork":{"expectedTypes":["CreativeWork"]},"encodingFormat":{"expectedTypes":["Text"]},"expires":{"expectedTypes":["Date"]},"height":{"expectedTypes":["Distance","QuantitativeValue"]},"playerType":{"expectedTypes":["Text"]},"productionCompany":{"expectedTypes":["Organization"]},"publication":{"expectedTypes":["PublicationEvent"]},"regionsAllowed":{"expectedTypes":["Place"]},"requiresSubscription":{"expectedTypes":["Boolean"]},"uploadDate":{"expectedTypes":["Date"]},"width":{"expectedTypes":["Distance","QuantitativeValue"]}}},"AudioObject":{"extends":"MediaObject","properties":{"transcript":{"expectedTypes":["Text"]}}},"DataDownload":{"extends":"MediaObject","properties":[]},"ImageObject":{"extends":"MediaObject","properties":{"caption":{"expectedTypes":["Text"]},"exifData":{"expectedTypes":["Text"]},"representativeOfPage":{"expectedTypes":["Boolean"]},"thumbnail":{"expectedTypes":["ImageObject"]}}},"MusicVideoObject":{"extends":"MediaObject","properties":[]},"VideoObject":{"extends":"MediaObject","properties":{"caption":{"expectedTypes":["Text"]},"thumbnail":{"expectedTypes":["ImageObject"]},"transcript":{"expectedTypes":["Text"]},"videoFrameSize":{"expectedTypes":["Text"]},"videoQuality":{"expectedTypes":["Text"]}}},"Movie":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"actors":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"directors":{"expectedTypes":["Person"]},"duration":{"expectedTypes":["Duration"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"MusicPlaylist":{"extends":"CreativeWork","properties":{"numTracks":{"expectedTypes":["Integer"]},"track":{"expectedTypes":["MusicRecording"]},"tracks":{"expectedTypes":["MusicRecording"]}}},"MusicAlbum":{"extends":"MusicPlaylist","properties":{"byArtist":{"expectedTypes":["MusicGroup"]}}},"MusicRecording":{"extends":"CreativeWork","properties":{"byArtist":{"expectedTypes":["MusicGroup"]},"duration":{"expectedTypes":["Duration"]},"inAlbum":{"expectedTypes":["MusicAlbum"]},"inPlaylist":{"expectedTypes":["MusicPlaylist"]}}},"Painting":{"extends":"CreativeWork","properties":[]},"Photograph":{"extends":"CreativeWork","properties":[]},"Recipe":{"extends":"CreativeWork","properties":{"cookingMethod":{"expectedTypes":["Text"]},"cookTime":{"expectedTypes":["Duration"]},"ingredients":{"expectedTypes":["Text"]},"nutrition":{"expectedTypes":["NutritionInformation"]},"prepTime":{"expectedTypes":["Duration"]},"recipeCategory":{"expectedTypes":["Text"]},"recipeCuisine":{"expectedTypes":["Text"]},"recipeInstructions":{"expectedTypes":["Text"]},"recipeYield":{"expectedTypes":["Text"]},"totalTime":{"expectedTypes":["Duration"]}}},"Review":{"extends":"CreativeWork","properties":{"itemReviewed":{"expectedTypes":["Thing"]},"reviewBody":{"expectedTypes":["Text"]},"reviewRating":{"expectedTypes":["Rating"]}}},"Sculpture":{"extends":"CreativeWork","properties":[]},"Season":{"extends":"CreativeWork","properties":{"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"episodes":{"expectedTypes":["Episode"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"seasonNumber":{"expectedTypes":["Integer"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioSeason":{"extends":"Season","properties":[]},"TVSeason":{"extends":"CreativeWork","properties":{"partOfTVSeries":{"expectedTypes":["TVSeries"]}}},"Series":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"actors":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"directors":{"expectedTypes":["Person"]},"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"episodes":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"numberOfSeasons":{"expectedTypes":["Number"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"seasons":{"expectedTypes":["Season"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioSeries":{"extends":"Series","properties":[]},"TVSeries":{"extends":"CreativeWork","properties":[]},"SoftwareApplication":{"extends":"CreativeWork","properties":{"applicationCategory":{"expectedTypes":["Text","URL"]},"applicationSubCategory":{"expectedTypes":["Text","URL"]},"applicationSuite":{"expectedTypes":["Text"]},"countriesNotSupported":{"expectedTypes":["Text"]},"countriesSupported":{"expectedTypes":["Text"]},"device":{"expectedTypes":["Text"]},"downloadUrl":{"expectedTypes":["URL"]},"featureList":{"expectedTypes":["Text","URL"]},"fileFormat":{"expectedTypes":["Text"]},"fileSize":{"expectedTypes":["Integer"]},"installUrl":{"expectedTypes":["URL"]},"memoryRequirements":{"expectedTypes":["Text","URL"]},"operatingSystem":{"expectedTypes":["Text"]},"permissions":{"expectedTypes":["Text"]},"processorRequirements":{"expectedTypes":["Text"]},"releaseNotes":{"expectedTypes":["Text","URL"]},"requirements":{"expectedTypes":["Text","URL"]},"screenshot":{"expectedTypes":["ImageObject","URL"]},"softwareVersion":{"expectedTypes":["Text"]},"storageRequirements":{"expectedTypes":["Text","URL"]}}},"MobileApplication":{"extends":"SoftwareApplication","properties":{"carrierRequirements":{"expectedTypes":["Text"]}}},"WebApplication":{"extends":"SoftwareApplication","properties":{"browserRequirements":{"expectedTypes":["Text"]}}},"WebPage":{"extends":"CreativeWork","properties":{"breadcrumb":{"expectedTypes":["Text"]},"isPartOf":{"expectedTypes":["CollectionPage"]},"lastReviewed":{"expectedTypes":["Date"]},"mainContentOfPage":{"expectedTypes":["WebPageElement"]},"primaryImageOfPage":{"expectedTypes":["ImageObject"]},"relatedLink":{"expectedTypes":["URL"]},"reviewedBy":{"expectedTypes":["Organization","Person"]},"significantLink":{"expectedTypes":["URL"]},"significantLinks":{"expectedTypes":["URL"]},"specialty":{"expectedTypes":["Specialty"]}}},"AboutPage":{"extends":"WebPage","properties":[]},"CheckoutPage":{"extends":"WebPage","properties":[]},"CollectionPage":{"extends":"WebPage","properties":[]},"ImageGallery":{"extends":"CollectionPage","properties":[]},"VideoGallery":{"extends":"CollectionPage","properties":[]},"ContactPage":{"extends":"WebPage","properties":[]},"ItemPage":{"extends":"WebPage","properties":[]},"MedicalWebPage":{"extends":"WebPage","properties":{"aspect":{"expectedTypes":["Text"]}}},"ProfilePage":{"extends":"WebPage","properties":[]},"SearchResultsPage":{"extends":"WebPage","properties":[]},"WebPageElement":{"extends":"CreativeWork","properties":[]},"SiteNavigationElement":{"extends":"WebPageElement","properties":[]},"Table":{"extends":"WebPageElement","properties":[]},"WPAdBlock":{"extends":"WebPageElement","properties":[]},"WPFooter":{"extends":"WebPageElement","properties":[]},"WPHeader":{"extends":"WebPageElement","properties":[]},"WPSideBar":{"extends":"WebPageElement","properties":[]},"Event":{"extends":"Thing","properties":{"attendee":{"expectedTypes":["Organization","Person"]},"attendees":{"expectedTypes":["Organization","Person"]},"doorTime":{"expectedTypes":["DateTime"]},"duration":{"expectedTypes":["Duration"]},"endDate":{"expectedTypes":["Date"]},"eventStatus":{"expectedTypes":["EventStatusType"]},"location":{"expectedTypes":["Place","PostalAddress"]},"offers":{"expectedTypes":["Offer"]},"performer":{"expectedTypes":["Organization","Person"]},"performers":{"expectedTypes":["Organization","Person"]},"previousStartDate":{"expectedTypes":["Date"]},"startDate":{"expectedTypes":["Date"]},"subEvent":{"expectedTypes":["Event"]},"subEvents":{"expectedTypes":["Event"]},"superEvent":{"expectedTypes":["Event"]},"typicalAgeRange":{"expectedTypes":["Text"]}}},"BusinessEvent":{"extends":"Event","properties":[]},"ChildrensEvent":{"extends":"Event","properties":[]},"ComedyEvent":{"extends":"Event","properties":[]},"DanceEvent":{"extends":"Event","properties":[]},"DeliveryEvent":{"extends":"Event","properties":{"accessCode":{"expectedTypes":["Text"]},"availableFrom":{"expectedTypes":["DateTime"]},"availableThrough":{"expectedTypes":["DateTime"]},"hasDeliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"EducationEvent":{"extends":"Event","properties":[]},"Festival":{"extends":"Event","properties":[]},"FoodEvent":{"extends":"Event","properties":[]},"LiteraryEvent":{"extends":"Event","properties":[]},"MusicEvent":{"extends":"Event","properties":[]},"PublicationEvent":{"extends":"Event","properties":{"free":{"expectedTypes":["Boolean"]},"publishedOn":{"expectedTypes":["BroadcastService"]}}},"BroadcastEvent":{"extends":"PublicationEvent","properties":[]},"OnDemandEvent":{"extends":"PublicationEvent","properties":[]},"SaleEvent":{"extends":"Event","properties":[]},"SocialEvent":{"extends":"Event","properties":[]},"SportsEvent":{"extends":"Event","properties":[]},"TheaterEvent":{"extends":"Event","properties":[]},"UserInteraction":{"extends":"Event","properties":[]},"UserBlocks":{"extends":"UserInteraction","properties":[]},"UserCheckins":{"extends":"UserInteraction","properties":[]},"UserComments":{"extends":"UserInteraction","properties":{"commentText":{"expectedTypes":["Text"]},"commentTime":{"expectedTypes":["Date"]},"creator":{"expectedTypes":["Organization","Person"]},"discusses":{"expectedTypes":["CreativeWork"]},"replyToUrl":{"expectedTypes":["URL"]}}},"UserDownloads":{"extends":"UserInteraction","properties":[]},"UserLikes":{"extends":"UserInteraction","properties":[]},"UserPageVisits":{"extends":"UserInteraction","properties":[]},"UserPlays":{"extends":"UserInteraction","properties":[]},"UserPlusOnes":{"extends":"UserInteraction","properties":[]},"UserTweets":{"extends":"UserInteraction","properties":[]},"VisualArtsEvent":{"extends":"Event","properties":[]},"Intangible":{"extends":"Thing","properties":[]},"AlignmentObject":{"extends":"Intangible","properties":{"alignmentType":{"expectedTypes":["Text"]},"educationalFramework":{"expectedTypes":["Text"]},"targetDescription":{"expectedTypes":["Text"]},"targetName":{"expectedTypes":["Text"]},"targetUrl":{"expectedTypes":["URL"]}}},"Audience":{"extends":"Intangible","properties":{"audienceType":{"expectedTypes":["Text"]},"geographicArea":{"expectedTypes":["AdministrativeArea"]}}},"BusinessAudience":{"extends":"Audience","properties":{"numberofEmployees":{"expectedTypes":["QuantitativeValue"]},"yearlyRevenue":{"expectedTypes":["QuantitativeValue"]},"yearsInOperation":{"expectedTypes":["QuantitativeValue"]}}},"EducationalAudience":{"extends":"Audience","properties":{"educationalRole":{"expectedTypes":["Text"]}}},"MedicalAudience":{"extends":"Audience","properties":[]},"PeopleAudience":{"extends":"Audience","properties":{"healthCondition":{"expectedTypes":["MedicalCondition"]},"requiredGender":{"expectedTypes":["Text"]},"requiredMaxAge":{"expectedTypes":["Integer"]},"requiredMinAge":{"expectedTypes":["Integer"]},"suggestedGender":{"expectedTypes":["Text"]},"suggestedMaxAge":{"expectedTypes":["Number"]},"suggestedMinAge":{"expectedTypes":["Number"]}}},"ParentAudience":{"extends":"PeopleAudience","properties":{"childMaxAge":{"expectedTypes":["Number"]},"childMinAge":{"expectedTypes":["Number"]}}},"Brand":{"extends":"Intangible","properties":{"logo":{"expectedTypes":["ImageObject","URL"]}}},"Demand":{"extends":"Intangible","properties":{"acceptedPaymentMethod":{"expectedTypes":["PaymentMethod"]},"advanceBookingRequirement":{"expectedTypes":["QuantitativeValue"]},"availability":{"expectedTypes":["ItemAvailability"]},"availabilityEnds":{"expectedTypes":["DateTime"]},"availabilityStarts":{"expectedTypes":["DateTime"]},"availableAtOrFrom":{"expectedTypes":["Place"]},"availableDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"deliveryLeadTime":{"expectedTypes":["QuantitativeValue"]},"eligibleCustomerType":{"expectedTypes":["BusinessEntityType"]},"eligibleDuration":{"expectedTypes":["QuantitativeValue"]},"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleRegion":{"expectedTypes":["GeoShape","Text"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"includesObject":{"expectedTypes":["TypeAndQuantityNode"]},"inventoryLevel":{"expectedTypes":["QuantitativeValue"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"itemOffered":{"expectedTypes":["Product"]},"mpn":{"expectedTypes":["Text"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]},"seller":{"expectedTypes":["Organization","Person"]},"serialNumber":{"expectedTypes":["Text"]},"sku":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"warranty":{"expectedTypes":["WarrantyPromise"]}}},"Enumeration":{"extends":"Intangible","properties":[]},"BookFormatType":{"extends":"Enumeration","properties":[]},"BusinessEntityType":{"extends":"Enumeration","properties":[]},"BusinessFunction":{"extends":"Enumeration","properties":[]},"ContactPointOption":{"extends":"Enumeration","properties":[]},"DayOfWeek":{"extends":"Enumeration","properties":[]},"DeliveryMethod":{"extends":"Enumeration","properties":[]},"LockerDelivery":{"extends":"DeliveryMethod","properties":[]},"OnSitePickup":{"extends":"DeliveryMethod","properties":[]},"ParcelService":{"extends":"DeliveryMethod","properties":[]},"EventStatusType":{"extends":"Enumeration","properties":[]},"ItemAvailability":{"extends":"Enumeration","properties":[]},"OfferItemCondition":{"extends":"Enumeration","properties":[]},"OrderStatus":{"extends":"Enumeration","properties":[]},"PaymentMethod":{"extends":"Enumeration","properties":[]},"CreditCard":{"extends":"PaymentMethod","properties":[]},"QualitativeValue":{"extends":"Enumeration","properties":{"equal":{"expectedTypes":["QualitativeValue"]},"greater":{"expectedTypes":["QualitativeValue"]},"greaterOrEqual":{"expectedTypes":["QualitativeValue"]},"lesser":{"expectedTypes":["QualitativeValue"]},"lesserOrEqual":{"expectedTypes":["QualitativeValue"]},"nonEqual":{"expectedTypes":["QualitativeValue"]},"valueReference":{"expectedTypes":["Enumeration","StructuredValue"]}}},"Specialty":{"extends":"Enumeration","properties":[]},"MedicalSpecialty":{"extends":"MedicalEnumeration","properties":[]},"WarrantyScope":{"extends":"Enumeration","properties":[]},"JobPosting":{"extends":"Intangible","properties":{"baseSalary":{"expectedTypes":["Number"]},"benefits":{"expectedTypes":["Text"]},"datePosted":{"expectedTypes":["Date"]},"educationRequirements":{"expectedTypes":["Text"]},"employmentType":{"expectedTypes":["Text"]},"experienceRequirements":{"expectedTypes":["Text"]},"hiringOrganization":{"expectedTypes":["Organization"]},"incentives":{"expectedTypes":["Text"]},"industry":{"expectedTypes":["Text"]},"jobLocation":{"expectedTypes":["Place"]},"occupationalCategory":{"expectedTypes":["Text"]},"qualifications":{"expectedTypes":["Text"]},"responsibilities":{"expectedTypes":["Text"]},"salaryCurrency":{"expectedTypes":["Text"]},"skills":{"expectedTypes":["Text"]},"specialCommitments":{"expectedTypes":["Text"]},"title":{"expectedTypes":["Text"]},"workHours":{"expectedTypes":["Text"]}}},"Language":{"extends":"Intangible","properties":[]},"Offer":{"extends":"Intangible","properties":{"acceptedPaymentMethod":{"expectedTypes":["PaymentMethod"]},"addOn":{"expectedTypes":["Offer"]},"advanceBookingRequirement":{"expectedTypes":["QuantitativeValue"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"availability":{"expectedTypes":["ItemAvailability"]},"availabilityEnds":{"expectedTypes":["DateTime"]},"availabilityStarts":{"expectedTypes":["DateTime"]},"availableAtOrFrom":{"expectedTypes":["Place"]},"availableDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"category":{"expectedTypes":["PhysicalActivityCategory","Text","Thing"]},"deliveryLeadTime":{"expectedTypes":["QuantitativeValue"]},"eligibleCustomerType":{"expectedTypes":["BusinessEntityType"]},"eligibleDuration":{"expectedTypes":["QuantitativeValue"]},"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleRegion":{"expectedTypes":["GeoShape","Text"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"includesObject":{"expectedTypes":["TypeAndQuantityNode"]},"inventoryLevel":{"expectedTypes":["QuantitativeValue"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"itemOffered":{"expectedTypes":["Product"]},"mpn":{"expectedTypes":["Text"]},"price":{"expectedTypes":["Number","Text"]},"priceCurrency":{"expectedTypes":["Text"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]},"priceValidUntil":{"expectedTypes":["Date"]},"review":{"expectedTypes":["Review"]},"reviews":{"expectedTypes":["Review"]},"seller":{"expectedTypes":["Organization","Person"]},"serialNumber":{"expectedTypes":["Text"]},"sku":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"warranty":{"expectedTypes":["WarrantyPromise"]}}},"AggregateOffer":{"extends":"Offer","properties":{"highPrice":{"expectedTypes":["Number","Text"]},"lowPrice":{"expectedTypes":["Number","Text"]},"offerCount":{"expectedTypes":["Integer"]}}},"Order":{"extends":"Intangible","properties":{"acceptedOffer":{"expectedTypes":["Offer"]},"billingAddress":{"expectedTypes":["PostalAddress"]},"confirmationNumber":{"expectedTypes":["Text"]},"customer":{"expectedTypes":["Organization","Person"]},"discount":{"expectedTypes":["Number","Text"]},"discountCode":{"expectedTypes":["Text"]},"discountCurrency":{"expectedTypes":["Text"]},"isGift":{"expectedTypes":["Boolean"]},"merchant":{"expectedTypes":["Organization","Person"]},"orderDate":{"expectedTypes":["DateTime"]},"orderedItem":{"expectedTypes":["Product"]},"orderNumber":{"expectedTypes":["Text"]},"orderStatus":{"expectedTypes":["OrderStatus"]},"paymentDue":{"expectedTypes":["DateTime"]},"paymentMethod":{"expectedTypes":["PaymentMethod"]},"paymentMethodId":{"expectedTypes":["Text"]},"paymentUrl":{"expectedTypes":["URL"]}}},"ParcelDelivery":{"extends":"Intangible","properties":{"carrier":{"expectedTypes":["Organization"]},"deliveryAddress":{"expectedTypes":["PostalAddress"]},"deliveryStatus":{"expectedTypes":["DeliveryEvent"]},"expectedArrivalFrom":{"expectedTypes":["DateTime"]},"expectedArrivalUntil":{"expectedTypes":["DateTime"]},"hasDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"itemShipped":{"expectedTypes":["Product"]},"originAddress":{"expectedTypes":["PostalAddress"]},"partOfOrder":{"expectedTypes":["Order"]},"trackingNumber":{"expectedTypes":["Text"]},"trackingUrl":{"expectedTypes":["URL"]}}},"Permit":{"extends":"Intangible","properties":{"issuedBy":{"expectedTypes":["Organization"]},"issuedThrough":{"expectedTypes":["Service"]},"permitAudience":{"expectedTypes":["Audience"]},"validFor":{"expectedTypes":["Duration"]},"validFrom":{"expectedTypes":["DateTime"]},"validIn":{"expectedTypes":["AdministrativeArea"]},"validUntil":{"expectedTypes":["Date"]}}},"GovernmentPermit":{"extends":"Permit","properties":[]},"Quantity":{"extends":"Intangible","properties":[]},"Distance":{"extends":"Quantity","properties":[]},"Duration":{"extends":"Quantity","properties":[]},"Energy":{"extends":"Quantity","properties":[]},"Mass":{"extends":"Quantity","properties":[]},"Rating":{"extends":"Intangible","properties":{"bestRating":{"expectedTypes":["Number","Text"]},"ratingValue":{"expectedTypes":["Text"]},"worstRating":{"expectedTypes":["Number","Text"]}}},"AggregateRating":{"extends":"Rating","properties":{"itemReviewed":{"expectedTypes":["Thing"]},"ratingCount":{"expectedTypes":["Number"]},"reviewCount":{"expectedTypes":["Number"]}}},"Service":{"extends":"Intangible","properties":{"availableChannel":{"expectedTypes":["ServiceChannel"]},"produces":{"expectedTypes":["Thing"]},"provider":{"expectedTypes":["Organization","Person"]},"serviceArea":{"expectedTypes":["AdministrativeArea"]},"serviceAudience":{"expectedTypes":["Audience"]},"serviceType":{"expectedTypes":["Text"]}}},"GovernmentService":{"extends":"Service","properties":{"serviceOperator":{"expectedTypes":["Organization"]}}},"ServiceChannel":{"extends":"Intangible","properties":{"availableLanguage":{"expectedTypes":["Language"]},"processingTime":{"expectedTypes":["Duration"]},"providesService":{"expectedTypes":["Service"]},"serviceLocation":{"expectedTypes":["Place"]},"servicePhone":{"expectedTypes":["ContactPoint"]},"servicePostalAddress":{"expectedTypes":["PostalAddress"]},"serviceSmsNumber":{"expectedTypes":["ContactPoint"]},"serviceUrl":{"expectedTypes":["URL"]}}},"StructuredValue":{"extends":"Intangible","properties":[]},"ContactPoint":{"extends":"StructuredValue","properties":{"areaServed":{"expectedTypes":["AdministrativeArea"]},"availableLanguage":{"expectedTypes":["Language"]},"contactOption":{"expectedTypes":["ContactPointOption"]},"contactType":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"faxNumber":{"expectedTypes":["Text"]},"hoursAvailable":{"expectedTypes":["OpeningHoursSpecification"]},"productSupported":{"expectedTypes":["Product","Text"]},"telephone":{"expectedTypes":["Text"]}}},"PostalAddress":{"extends":"ContactPoint","properties":{"addressCountry":{"expectedTypes":["Country"]},"addressLocality":{"expectedTypes":["Text"]},"addressRegion":{"expectedTypes":["Text"]},"postalCode":{"expectedTypes":["Text"]},"postOfficeBoxNumber":{"expectedTypes":["Text"]},"streetAddress":{"expectedTypes":["Text"]}}},"GeoCoordinates":{"extends":"StructuredValue","properties":{"elevation":{"expectedTypes":["Number","Text"]},"latitude":{"expectedTypes":["Number","Text"]},"longitude":{"expectedTypes":["Number","Text"]}}},"GeoShape":{"extends":"StructuredValue","properties":{"box":{"expectedTypes":["Text"]},"circle":{"expectedTypes":["Text"]},"elevation":{"expectedTypes":["Number","Text"]},"line":{"expectedTypes":["Text"]},"polygon":{"expectedTypes":["Text"]}}},"NutritionInformation":{"extends":"StructuredValue","properties":{"calories":{"expectedTypes":["Energy"]},"carbohydrateContent":{"expectedTypes":["Mass"]},"cholesterolContent":{"expectedTypes":["Mass"]},"fatContent":{"expectedTypes":["Mass"]},"fiberContent":{"expectedTypes":["Mass"]},"proteinContent":{"expectedTypes":["Mass"]},"saturatedFatContent":{"expectedTypes":["Mass"]},"servingSize":{"expectedTypes":["Text"]},"sodiumContent":{"expectedTypes":["Mass"]},"sugarContent":{"expectedTypes":["Mass"]},"transFatContent":{"expectedTypes":["Mass"]},"unsaturatedFatContent":{"expectedTypes":["Mass"]}}},"OpeningHoursSpecification":{"extends":"StructuredValue","properties":{"closes":{"expectedTypes":["Time"]},"dayOfWeek":{"expectedTypes":["DayOfWeek"]},"opens":{"expectedTypes":["Time"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]}}},"OwnershipInfo":{"extends":"StructuredValue","properties":{"acquiredFrom":{"expectedTypes":["Organization","Person"]},"ownedFrom":{"expectedTypes":["DateTime"]},"ownedThrough":{"expectedTypes":["DateTime"]},"typeOfGood":{"expectedTypes":["Product"]}}},"PriceSpecification":{"extends":"StructuredValue","properties":{"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"maxPrice":{"expectedTypes":["Number"]},"minPrice":{"expectedTypes":["Number"]},"price":{"expectedTypes":["Number","Text"]},"priceCurrency":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"valueAddedTaxIncluded":{"expectedTypes":["Boolean"]}}},"DeliveryChargeSpecification":{"extends":"PriceSpecification","properties":{"appliesToDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"eligibleRegion":{"expectedTypes":["GeoShape","Text"]}}},"PaymentChargeSpecification":{"extends":"PriceSpecification","properties":{"appliesToDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"appliesToPaymentMethod":{"expectedTypes":["PaymentMethod"]}}},"UnitPriceSpecification":{"extends":"PriceSpecification","properties":{"billingIncrement":{"expectedTypes":["Number"]},"priceType":{"expectedTypes":["Text"]},"unitCode":{"expectedTypes":["Text"]}}},"QuantitativeValue":{"extends":"StructuredValue","properties":{"maxValue":{"expectedTypes":["Number"]},"minValue":{"expectedTypes":["Number"]},"unitCode":{"expectedTypes":["Text"]},"value":{"expectedTypes":["Number"]},"valueReference":{"expectedTypes":["Enumeration","StructuredValue"]}}},"TypeAndQuantityNode":{"extends":"StructuredValue","properties":{"amountOfThisGood":{"expectedTypes":["Number"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"typeOfGood":{"expectedTypes":["Product"]},"unitCode":{"expectedTypes":["Text"]}}},"WarrantyPromise":{"extends":"StructuredValue","properties":{"durationOfWarranty":{"expectedTypes":["QuantitativeValue"]},"warrantyScope":{"expectedTypes":["WarrantyScope"]}}},"MedicalEntity":{"extends":"Thing","properties":{"code":{"expectedTypes":["MedicalCode"]},"guideline":{"expectedTypes":["MedicalGuideline"]},"medicineSystem":{"expectedTypes":["MedicineSystem"]},"recognizingAuthority":{"expectedTypes":["Organization"]},"relevantSpecialty":{"expectedTypes":["MedicalSpecialty"]},"study":{"expectedTypes":["MedicalStudy"]}}},"AnatomicalStructure":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"bodyLocation":{"expectedTypes":["Text"]},"connectedTo":{"expectedTypes":["AnatomicalStructure"]},"diagram":{"expectedTypes":["ImageObject"]},"function":{"expectedTypes":["Text"]},"partOfSystem":{"expectedTypes":["AnatomicalSystem"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]},"subStructure":{"expectedTypes":["AnatomicalStructure"]}}},"Bone":{"extends":"AnatomicalStructure","properties":[]},"BrainStructure":{"extends":"AnatomicalStructure","properties":[]},"Joint":{"extends":"AnatomicalStructure","properties":{"biomechnicalClass":{"expectedTypes":["Text"]},"functionalClass":{"expectedTypes":["Text"]},"structuralClass":{"expectedTypes":["Text"]}}},"Ligament":{"extends":"AnatomicalStructure","properties":[]},"Muscle":{"extends":"AnatomicalStructure","properties":{"action":{"expectedTypes":["Text"]},"antagonist":{"expectedTypes":["Muscle"]},"bloodSupply":{"expectedTypes":["Vessel"]},"insertion":{"expectedTypes":["AnatomicalStructure"]},"nerve":{"expectedTypes":["Nerve"]},"origin":{"expectedTypes":["AnatomicalStructure"]}}},"Nerve":{"extends":"AnatomicalStructure","properties":{"branch":{"expectedTypes":["AnatomicalStructure","Nerve"]},"nerveMotor":{"expectedTypes":["Muscle"]},"sensoryUnit":{"expectedTypes":["AnatomicalStructure","SuperficialAnatomy"]},"sourcedFrom":{"expectedTypes":["BrainStructure"]}}},"Vessel":{"extends":"AnatomicalStructure","properties":[]},"Artery":{"extends":"Vessel","properties":{"arterialBranch":{"expectedTypes":["AnatomicalStructure"]},"source":{"expectedTypes":["AnatomicalStructure"]},"supplyTo":{"expectedTypes":["AnatomicalStructure"]}}},"LymphaticVessel":{"extends":"Vessel","properties":{"originatesFrom":{"expectedTypes":["Vessel"]},"regionDrained":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem"]},"runsTo":{"expectedTypes":["Vessel"]}}},"Vein":{"extends":"Vessel","properties":{"drainsTo":{"expectedTypes":["Vessel"]},"regionDrained":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem"]},"tributary":{"expectedTypes":["AnatomicalStructure"]}}},"AnatomicalSystem":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"comprisedOf":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedStructure":{"expectedTypes":["AnatomicalStructure"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]}}},"MedicalCause":{"extends":"MedicalEntity","properties":{"causeOf":{"expectedTypes":["MedicalEntity"]}}},"MedicalCondition":{"extends":"MedicalEntity","properties":{"associatedAnatomy":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem","SuperficialAnatomy"]},"cause":{"expectedTypes":["MedicalCause"]},"differentialDiagnosis":{"expectedTypes":["DDxElement"]},"epidemiology":{"expectedTypes":["Text"]},"expectedPrognosis":{"expectedTypes":["Text"]},"naturalProgression":{"expectedTypes":["Text"]},"pathophysiology":{"expectedTypes":["Text"]},"possibleComplication":{"expectedTypes":["Text"]},"possibleTreatment":{"expectedTypes":["MedicalTherapy"]},"primaryPrevention":{"expectedTypes":["MedicalTherapy"]},"riskFactor":{"expectedTypes":["MedicalRiskFactor"]},"secondaryPrevention":{"expectedTypes":["MedicalTherapy"]},"signOrSymptom":{"expectedTypes":["MedicalSignOrSymptom"]},"stage":{"expectedTypes":["MedicalConditionStage"]},"subtype":{"expectedTypes":["Text"]},"typicalTest":{"expectedTypes":["MedicalTest"]}}},"InfectiousDisease":{"extends":"MedicalCondition","properties":{"infectiousAgent":{"expectedTypes":["Text"]},"infectiousAgentClass":{"expectedTypes":["InfectiousAgentClass"]},"transmissionMethod":{"expectedTypes":["Text"]}}},"MedicalContraindication":{"extends":"MedicalEntity","properties":[]},"MedicalDevice":{"extends":"MedicalEntity","properties":{"adverseOutcome":{"expectedTypes":["MedicalEntity"]},"contraindication":{"expectedTypes":["MedicalContraindication"]},"indication":{"expectedTypes":["MedicalIndication"]},"postOp":{"expectedTypes":["Text"]},"preOp":{"expectedTypes":["Text"]},"procedure":{"expectedTypes":["Text"]},"purpose":{"expectedTypes":["MedicalDevicePurpose","Thing"]},"seriousAdverseOutcome":{"expectedTypes":["MedicalEntity"]}}},"MedicalGuideline":{"extends":"MedicalEntity","properties":{"evidenceLevel":{"expectedTypes":["MedicalEvidenceLevel"]},"evidenceOrigin":{"expectedTypes":["Text"]},"guidelineDate":{"expectedTypes":["Date"]},"guidelineSubject":{"expectedTypes":["MedicalEntity"]}}},"MedicalGuidelineContraindication":{"extends":"MedicalGuideline","properties":[]},"MedicalGuidelineRecommendation":{"extends":"MedicalGuideline","properties":{"recommendationStrength":{"expectedTypes":["Text"]}}},"MedicalIndication":{"extends":"MedicalEntity","properties":[]},"ApprovedIndication":{"extends":"MedicalIndication","properties":[]},"PreventionIndication":{"extends":"MedicalIndication","properties":[]},"TreatmentIndication":{"extends":"MedicalIndication","properties":[]},"MedicalIntangible":{"extends":"MedicalEntity","properties":[]},"DDxElement":{"extends":"MedicalIntangible","properties":{"diagnosis":{"expectedTypes":["MedicalCondition"]},"distinguishingSign":{"expectedTypes":["MedicalSignOrSymptom"]}}},"DoseSchedule":{"extends":"MedicalIntangible","properties":{"doseUnit":{"expectedTypes":["Text"]},"doseValue":{"expectedTypes":["Number"]},"frequency":{"expectedTypes":["Text"]},"targetPopulation":{"expectedTypes":["Text"]}}},"MaximumDoseSchedule":{"extends":"DoseSchedule","properties":[]},"RecommendedDoseSchedule":{"extends":"DoseSchedule","properties":[]},"ReportedDoseSchedule":{"extends":"DoseSchedule","properties":[]},"DrugCost":{"extends":"MedicalIntangible","properties":{"applicableLocation":{"expectedTypes":["AdministrativeArea"]},"costCategory":{"expectedTypes":["DrugCostCategory"]},"costCurrency":{"expectedTypes":["Text"]},"costOrigin":{"expectedTypes":["Text"]},"costPerUnit":{"expectedTypes":["Number","Text"]},"drugUnit":{"expectedTypes":["Text"]}}},"DrugLegalStatus":{"extends":"MedicalIntangible","properties":{"applicableLocation":{"expectedTypes":["AdministrativeArea"]}}},"DrugStrength":{"extends":"MedicalIntangible","properties":{"activeIngredient":{"expectedTypes":["Text"]},"availableIn":{"expectedTypes":["AdministrativeArea"]},"strengthUnit":{"expectedTypes":["Text"]},"strengthValue":{"expectedTypes":["Number"]}}},"MedicalCode":{"extends":"MedicalIntangible","properties":{"codeValue":{"expectedTypes":["Text"]},"codingSystem":{"expectedTypes":["Text"]}}},"MedicalConditionStage":{"extends":"MedicalIntangible","properties":{"stageAsNumber":{"expectedTypes":["Number"]},"subStageSuffix":{"expectedTypes":["Text"]}}},"MedicalEnumeration":{"extends":"MedicalIntangible","properties":[]},"DrugCostCategory":{"extends":"MedicalEnumeration","properties":[]},"DrugPregnancyCategory":{"extends":"MedicalEnumeration","properties":[]},"DrugPrescriptionStatus":{"extends":"MedicalEnumeration","properties":[]},"InfectiousAgentClass":{"extends":"MedicalEnumeration","properties":[]},"MedicalDevicePurpose":{"extends":"MedicalEnumeration","properties":[]},"MedicalEvidenceLevel":{"extends":"MedicalEnumeration","properties":[]},"MedicalImagingTechnique":{"extends":"MedicalEnumeration","properties":[]},"MedicalObservationalStudyDesign":{"extends":"MedicalEnumeration","properties":[]},"MedicalProcedureType":{"extends":"MedicalEnumeration","properties":[]},"MedicalStudyStatus":{"extends":"MedicalEnumeration","properties":[]},"MedicalTrialDesign":{"extends":"MedicalEnumeration","properties":[]},"MedicineSystem":{"extends":"MedicalEnumeration","properties":[]},"PhysicalActivityCategory":{"extends":"MedicalEnumeration","properties":[]},"PhysicalExam":{"extends":"MedicalEnumeration","properties":[]},"MedicalProcedure":{"extends":"MedicalEntity","properties":{"followup":{"expectedTypes":["Text"]},"howPerformed":{"expectedTypes":["Text"]},"preparation":{"expectedTypes":["Text"]},"procedureType":{"expectedTypes":["MedicalProcedureType"]}}},"DiagnosticProcedure":{"extends":"MedicalProcedure","properties":[]},"PalliativeProcedure":{"extends":"MedicalProcedure","properties":[]},"TherapeuticProcedure":{"extends":"MedicalProcedure","properties":[]},"MedicalRiskEstimator":{"extends":"MedicalEntity","properties":{"estimatesRiskOf":{"expectedTypes":["MedicalEntity"]},"includedRiskFactor":{"expectedTypes":["MedicalRiskFactor"]}}},"MedicalRiskCalculator":{"extends":"MedicalRiskEstimator","properties":[]},"MedicalRiskScore":{"extends":"MedicalRiskEstimator","properties":{"algorithm":{"expectedTypes":["Text"]}}},"MedicalRiskFactor":{"extends":"MedicalEntity","properties":{"increasesRiskOf":{"expectedTypes":["MedicalEntity"]}}},"MedicalSignOrSymptom":{"extends":"MedicalEntity","properties":{"cause":{"expectedTypes":["MedicalCause"]},"possibleTreatment":{"expectedTypes":["MedicalTherapy"]}}},"MedicalSign":{"extends":"MedicalSignOrSymptom","properties":{"identifyingExam":{"expectedTypes":["PhysicalExam"]},"identifyingTest":{"expectedTypes":["MedicalTest"]}}},"MedicalSymptom":{"extends":"MedicalSignOrSymptom","properties":[]},"MedicalStudy":{"extends":"MedicalEntity","properties":{"outcome":{"expectedTypes":["Text"]},"population":{"expectedTypes":["Text"]},"sponsor":{"expectedTypes":["Organization"]},"status":{"expectedTypes":["MedicalStudyStatus"]},"studyLocation":{"expectedTypes":["AdministrativeArea"]},"studySubject":{"expectedTypes":["MedicalEntity"]}}},"MedicalObservationalStudy":{"extends":"MedicalStudy","properties":{"studyDesign":{"expectedTypes":["MedicalObservationalStudyDesign"]}}},"MedicalTrial":{"extends":"MedicalStudy","properties":{"phase":{"expectedTypes":["Text"]},"trialDesign":{"expectedTypes":["MedicalTrialDesign"]}}},"MedicalTest":{"extends":"MedicalEntity","properties":{"affectedBy":{"expectedTypes":["Drug"]},"normalRange":{"expectedTypes":["Text"]},"signDetected":{"expectedTypes":["MedicalSign"]},"usedToDiagnose":{"expectedTypes":["MedicalCondition"]},"usesDevice":{"expectedTypes":["MedicalDevice"]}}},"BloodTest":{"extends":"MedicalTest","properties":[]},"ImagingTest":{"extends":"MedicalTest","properties":{"imagingTechnique":{"expectedTypes":["MedicalImagingTechnique"]}}},"MedicalTestPanel":{"extends":"MedicalTest","properties":{"subTest":{"expectedTypes":["MedicalTest"]}}},"PathologyTest":{"extends":"MedicalTest","properties":{"tissueSample":{"expectedTypes":["Text"]}}},"MedicalTherapy":{"extends":"MedicalEntity","properties":{"adverseOutcome":{"expectedTypes":["MedicalEntity"]},"contraindication":{"expectedTypes":["MedicalContraindication"]},"duplicateTherapy":{"expectedTypes":["MedicalTherapy"]},"indication":{"expectedTypes":["MedicalIndication"]},"seriousAdverseOutcome":{"expectedTypes":["MedicalEntity"]}}},"DietarySupplement":{"extends":"MedicalTherapy","properties":{"activeIngredient":{"expectedTypes":["Text"]},"background":{"expectedTypes":["Text"]},"dosageForm":{"expectedTypes":["Text"]},"isProprietary":{"expectedTypes":["Boolean"]},"legalStatus":{"expectedTypes":["DrugLegalStatus"]},"manufacturer":{"expectedTypes":["Organization"]},"maximumIntake":{"expectedTypes":["MaximumDoseSchedule"]},"mechanismOfAction":{"expectedTypes":["Text"]},"nonProprietaryName":{"expectedTypes":["Text"]},"recommendedIntake":{"expectedTypes":["RecommendedDoseSchedule"]},"safetyConsideration":{"expectedTypes":["Text"]},"targetPopulation":{"expectedTypes":["Text"]}}},"Drug":{"extends":"MedicalTherapy","properties":{"activeIngredient":{"expectedTypes":["Text"]},"administrationRoute":{"expectedTypes":["Text"]},"alcoholWarning":{"expectedTypes":["Text"]},"availableStrength":{"expectedTypes":["DrugStrength"]},"breastfeedingWarning":{"expectedTypes":["Text"]},"clincalPharmacology":{"expectedTypes":["Text"]},"cost":{"expectedTypes":["DrugCost"]},"dosageForm":{"expectedTypes":["Text"]},"doseSchedule":{"expectedTypes":["DoseSchedule"]},"drugClass":{"expectedTypes":["DrugClass"]},"foodWarning":{"expectedTypes":["Text"]},"interactingDrug":{"expectedTypes":["Drug"]},"isAvailableGenerically":{"expectedTypes":["Boolean"]},"isProprietary":{"expectedTypes":["Boolean"]},"labelDetails":{"expectedTypes":["URL"]},"legalStatus":{"expectedTypes":["DrugLegalStatus"]},"manufacturer":{"expectedTypes":["Organization"]},"mechanismOfAction":{"expectedTypes":["Text"]},"nonProprietaryName":{"expectedTypes":["Text"]},"overdosage":{"expectedTypes":["Text"]},"pregnancyCategory":{"expectedTypes":["DrugPregnancyCategory"]},"pregnancyWarning":{"expectedTypes":["Text"]},"prescribingInfo":{"expectedTypes":["URL"]},"prescriptionStatus":{"expectedTypes":["DrugPrescriptionStatus"]},"relatedDrug":{"expectedTypes":["Drug"]},"warning":{"expectedTypes":["Text","URL"]}}},"DrugClass":{"extends":"MedicalTherapy","properties":{"drug":{"expectedTypes":["Drug"]}}},"LifestyleModification":{"extends":"MedicalTherapy","properties":[]},"PhysicalActivity":{"extends":"LifestyleModification","properties":{"associatedAnatomy":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem","SuperficialAnatomy"]},"category":{"expectedTypes":["PhysicalActivityCategory","Text","Thing"]},"epidemiology":{"expectedTypes":["Text"]},"pathophysiology":{"expectedTypes":["Text"]}}},"PhysicalTherapy":{"extends":"MedicalTherapy","properties":[]},"PsychologicalTreatment":{"extends":"MedicalTherapy","properties":[]},"RadiationTherapy":{"extends":"MedicalTherapy","properties":[]},"SuperficialAnatomy":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"relatedAnatomy":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]},"significance":{"expectedTypes":["Text"]}}},"Organization":{"extends":"Thing","properties":{"address":{"expectedTypes":["PostalAddress"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"brand":{"expectedTypes":["Brand","Organization"]},"contactPoint":{"expectedTypes":["ContactPoint"]},"contactPoints":{"expectedTypes":["ContactPoint"]},"department":{"expectedTypes":["Organization"]},"duns":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"employee":{"expectedTypes":["Person"]},"employees":{"expectedTypes":["Person"]},"event":{"expectedTypes":["Event"]},"events":{"expectedTypes":["Event"]},"faxNumber":{"expectedTypes":["Text"]},"founder":{"expectedTypes":["Person"]},"founders":{"expectedTypes":["Person"]},"foundingDate":{"expectedTypes":["Date"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasPOS":{"expectedTypes":["Place"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"legalName":{"expectedTypes":["Text"]},"location":{"expectedTypes":["Place","PostalAddress"]},"logo":{"expectedTypes":["ImageObject","URL"]},"makesOffer":{"expectedTypes":["Offer"]},"member":{"expectedTypes":["Organization","Person"]},"members":{"expectedTypes":["Organization","Person"]},"naics":{"expectedTypes":["Text"]},"owns":{"expectedTypes":["OwnershipInfo","Product"]},"review":{"expectedTypes":["Review"]},"reviews":{"expectedTypes":["Review"]},"seeks":{"expectedTypes":["Demand"]},"subOrganization":{"expectedTypes":["Organization"]},"taxID":{"expectedTypes":["Text"]},"telephone":{"expectedTypes":["Text"]},"vatID":{"expectedTypes":["Text"]}}},"Corporation":{"extends":"Organization","properties":{"tickerSymbol":{"expectedTypes":["Text"]}}},"EducationalOrganization":{"extends":"Organization","properties":{"alumni":{"expectedTypes":["Person"]}}},"CollegeOrUniversity":{"extends":"EducationalOrganization","properties":[]},"ElementarySchool":{"extends":"EducationalOrganization","properties":[]},"HighSchool":{"extends":"EducationalOrganization","properties":[]},"MiddleSchool":{"extends":"EducationalOrganization","properties":[]},"Preschool":{"extends":"EducationalOrganization","properties":[]},"School":{"extends":"EducationalOrganization","properties":[]},"GovernmentOrganization":{"extends":"Organization","properties":[]},"LocalBusiness":{"extends":"Organization","properties":{"branchOf":{"expectedTypes":["Organization"]},"currenciesAccepted":{"expectedTypes":["Text"]},"openingHours":{"expectedTypes":["Duration"]},"paymentAccepted":{"expectedTypes":["Text"]},"priceRange":{"expectedTypes":["Text"]}}},"AnimalShelter":{"extends":"LocalBusiness","properties":[]},"AutomotiveBusiness":{"extends":"LocalBusiness","properties":[]},"AutoBodyShop":{"extends":"AutomotiveBusiness","properties":[]},"AutoDealer":{"extends":"AutomotiveBusiness","properties":[]},"AutoPartsStore":{"extends":"AutomotiveBusiness","properties":[]},"AutoRental":{"extends":"AutomotiveBusiness","properties":[]},"AutoRepair":{"extends":"AutomotiveBusiness","properties":[]},"AutoWash":{"extends":"AutomotiveBusiness","properties":[]},"GasStation":{"extends":"AutomotiveBusiness","properties":[]},"MotorcycleDealer":{"extends":"AutomotiveBusiness","properties":[]},"MotorcycleRepair":{"extends":"AutomotiveBusiness","properties":[]},"ChildCare":{"extends":"LocalBusiness","properties":[]},"DryCleaningOrLaundry":{"extends":"LocalBusiness","properties":[]},"EmergencyService":{"extends":"LocalBusiness","properties":[]},"FireStation":{"extends":"CivicStructure","properties":[]},"Hospital":{"extends":"CivicStructure","properties":{"availableService":{"expectedTypes":["MedicalProcedure","MedicalTest","MedicalTherapy"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"PoliceStation":{"extends":"CivicStructure","properties":[]},"EmploymentAgency":{"extends":"LocalBusiness","properties":[]},"EntertainmentBusiness":{"extends":"LocalBusiness","properties":[]},"AdultEntertainment":{"extends":"EntertainmentBusiness","properties":[]},"AmusementPark":{"extends":"EntertainmentBusiness","properties":[]},"ArtGallery":{"extends":"EntertainmentBusiness","properties":[]},"Casino":{"extends":"EntertainmentBusiness","properties":[]},"ComedyClub":{"extends":"EntertainmentBusiness","properties":[]},"MovieTheater":{"extends":"CivicStructure","properties":[]},"NightClub":{"extends":"EntertainmentBusiness","properties":[]},"FinancialService":{"extends":"LocalBusiness","properties":[]},"AccountingService":{"extends":"FinancialService","properties":[]},"AutomatedTeller":{"extends":"FinancialService","properties":[]},"BankOrCreditUnion":{"extends":"FinancialService","properties":[]},"InsuranceAgency":{"extends":"FinancialService","properties":[]},"FoodEstablishment":{"extends":"LocalBusiness","properties":{"acceptsReservations":{"expectedTypes":["Text","URL"]},"menu":{"expectedTypes":["Text","URL"]},"servesCuisine":{"expectedTypes":["Text"]}}},"Bakery":{"extends":"FoodEstablishment","properties":[]},"BarOrPub":{"extends":"FoodEstablishment","properties":[]},"Brewery":{"extends":"FoodEstablishment","properties":[]},"CafeOrCoffeeShop":{"extends":"FoodEstablishment","properties":[]},"FastFoodRestaurant":{"extends":"FoodEstablishment","properties":[]},"IceCreamShop":{"extends":"FoodEstablishment","properties":[]},"Restaurant":{"extends":"FoodEstablishment","properties":[]},"Winery":{"extends":"FoodEstablishment","properties":[]},"GovernmentOffice":{"extends":"LocalBusiness","properties":[]},"PostOffice":{"extends":"GovernmentOffice","properties":[]},"HealthAndBeautyBusiness":{"extends":"LocalBusiness","properties":[]},"BeautySalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"DaySpa":{"extends":"HealthAndBeautyBusiness","properties":[]},"HairSalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"HealthClub":{"extends":"HealthAndBeautyBusiness","properties":[]},"NailSalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"TattooParlor":{"extends":"HealthAndBeautyBusiness","properties":[]},"HomeAndConstructionBusiness":{"extends":"LocalBusiness","properties":[]},"Electrician":{"extends":"HomeAndConstructionBusiness","properties":[]},"GeneralContractor":{"extends":"HomeAndConstructionBusiness","properties":[]},"HVACBusiness":{"extends":"HomeAndConstructionBusiness","properties":[]},"HousePainter":{"extends":"HomeAndConstructionBusiness","properties":[]},"Locksmith":{"extends":"HomeAndConstructionBusiness","properties":[]},"MovingCompany":{"extends":"HomeAndConstructionBusiness","properties":[]},"Plumber":{"extends":"HomeAndConstructionBusiness","properties":[]},"RoofingContractor":{"extends":"HomeAndConstructionBusiness","properties":[]},"InternetCafe":{"extends":"LocalBusiness","properties":[]},"Library":{"extends":"LocalBusiness","properties":[]},"LodgingBusiness":{"extends":"LocalBusiness","properties":[]},"BedAndBreakfast":{"extends":"LodgingBusiness","properties":[]},"Hostel":{"extends":"LodgingBusiness","properties":[]},"Hotel":{"extends":"LodgingBusiness","properties":[]},"Motel":{"extends":"LodgingBusiness","properties":[]},"MedicalOrganization":{"extends":"LocalBusiness","properties":[]},"Dentist":{"extends":"MedicalOrganization","properties":[]},"DiagnosticLab":{"extends":"MedicalOrganization","properties":{"availableTest":{"expectedTypes":["MedicalTest"]}}},"MedicalClinic":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalProcedure","MedicalTest","MedicalTherapy"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"Optician":{"extends":"MedicalOrganization","properties":[]},"Pharmacy":{"extends":"MedicalOrganization","properties":[]},"Physician":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalProcedure","MedicalTest","MedicalTherapy"]},"hospitalAffiliation":{"expectedTypes":["Hospital"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"VeterinaryCare":{"extends":"MedicalOrganization","properties":[]},"ProfessionalService":{"extends":"LocalBusiness","properties":[]},"Attorney":{"extends":"ProfessionalService","properties":[]},"Notary":{"extends":"ProfessionalService","properties":[]},"RadioStation":{"extends":"LocalBusiness","properties":[]},"RealEstateAgent":{"extends":"LocalBusiness","properties":[]},"RecyclingCenter":{"extends":"LocalBusiness","properties":[]},"SelfStorage":{"extends":"LocalBusiness","properties":[]},"ShoppingCenter":{"extends":"LocalBusiness","properties":[]},"SportsActivityLocation":{"extends":"LocalBusiness","properties":[]},"BowlingAlley":{"extends":"SportsActivityLocation","properties":[]},"ExerciseGym":{"extends":"SportsActivityLocation","properties":[]},"GolfCourse":{"extends":"SportsActivityLocation","properties":[]},"PublicSwimmingPool":{"extends":"SportsActivityLocation","properties":[]},"SkiResort":{"extends":"SportsActivityLocation","properties":[]},"SportsClub":{"extends":"SportsActivityLocation","properties":[]},"StadiumOrArena":{"extends":"CivicStructure","properties":[]},"TennisComplex":{"extends":"SportsActivityLocation","properties":[]},"Store":{"extends":"LocalBusiness","properties":[]},"BikeStore":{"extends":"Store","properties":[]},"BookStore":{"extends":"Store","properties":[]},"ClothingStore":{"extends":"Store","properties":[]},"ComputerStore":{"extends":"Store","properties":[]},"ConvenienceStore":{"extends":"Store","properties":[]},"DepartmentStore":{"extends":"Store","properties":[]},"ElectronicsStore":{"extends":"Store","properties":[]},"Florist":{"extends":"Store","properties":[]},"FurnitureStore":{"extends":"Store","properties":[]},"GardenStore":{"extends":"Store","properties":[]},"GroceryStore":{"extends":"Store","properties":[]},"HardwareStore":{"extends":"Store","properties":[]},"HobbyShop":{"extends":"Store","properties":[]},"HomeGoodsStore":{"extends":"Store","properties":[]},"JewelryStore":{"extends":"Store","properties":[]},"LiquorStore":{"extends":"Store","properties":[]},"MensClothingStore":{"extends":"Store","properties":[]},"MobilePhoneStore":{"extends":"Store","properties":[]},"MovieRentalStore":{"extends":"Store","properties":[]},"MusicStore":{"extends":"Store","properties":[]},"OfficeEquipmentStore":{"extends":"Store","properties":[]},"OutletStore":{"extends":"Store","properties":[]},"PawnShop":{"extends":"Store","properties":[]},"PetStore":{"extends":"Store","properties":[]},"ShoeStore":{"extends":"Store","properties":[]},"SportingGoodsStore":{"extends":"Store","properties":[]},"TireShop":{"extends":"Store","properties":[]},"ToyStore":{"extends":"Store","properties":[]},"WholesaleStore":{"extends":"Store","properties":[]},"TelevisionStation":{"extends":"LocalBusiness","properties":[]},"TouristInformationCenter":{"extends":"LocalBusiness","properties":[]},"TravelAgency":{"extends":"LocalBusiness","properties":[]},"NGO":{"extends":"Organization","properties":[]},"PerformingGroup":{"extends":"Organization","properties":[]},"DanceGroup":{"extends":"PerformingGroup","properties":[]},"MusicGroup":{"extends":"PerformingGroup","properties":{"album":{"expectedTypes":["MusicAlbum"]},"albums":{"expectedTypes":["MusicAlbum"]},"musicGroupMember":{"expectedTypes":["Person"]},"track":{"expectedTypes":["MusicRecording"]},"tracks":{"expectedTypes":["MusicRecording"]}}},"TheaterGroup":{"extends":"PerformingGroup","properties":[]},"SportsTeam":{"extends":"Organization","properties":[]},"Person":{"extends":"Thing","properties":{"additionalName":{"expectedTypes":["Text"]},"address":{"expectedTypes":["PostalAddress"]},"affiliation":{"expectedTypes":["Organization"]},"alumniOf":{"expectedTypes":["EducationalOrganization"]},"award":{"expectedTypes":["Text"]},"awards":{"expectedTypes":["Text"]},"birthDate":{"expectedTypes":["Date"]},"brand":{"expectedTypes":["Brand","Organization"]},"children":{"expectedTypes":["Person"]},"colleague":{"expectedTypes":["Person"]},"colleagues":{"expectedTypes":["Person"]},"contactPoint":{"expectedTypes":["ContactPoint"]},"contactPoints":{"expectedTypes":["ContactPoint"]},"deathDate":{"expectedTypes":["Date"]},"duns":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"familyName":{"expectedTypes":["Text"]},"faxNumber":{"expectedTypes":["Text"]},"follows":{"expectedTypes":["Person"]},"gender":{"expectedTypes":["Text"]},"givenName":{"expectedTypes":["Text"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasPOS":{"expectedTypes":["Place"]},"homeLocation":{"expectedTypes":["ContactPoint","Place"]},"honorificPrefix":{"expectedTypes":["Text"]},"honorificSuffix":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"jobTitle":{"expectedTypes":["Text"]},"knows":{"expectedTypes":["Person"]},"makesOffer":{"expectedTypes":["Offer"]},"memberOf":{"expectedTypes":["Organization"]},"naics":{"expectedTypes":["Text"]},"nationality":{"expectedTypes":["Country"]},"owns":{"expectedTypes":["OwnershipInfo","Product"]},"parent":{"expectedTypes":["Person"]},"parents":{"expectedTypes":["Person"]},"performerIn":{"expectedTypes":["Event"]},"relatedTo":{"expectedTypes":["Person"]},"seeks":{"expectedTypes":["Demand"]},"sibling":{"expectedTypes":["Person"]},"siblings":{"expectedTypes":["Person"]},"spouse":{"expectedTypes":["Person"]},"taxID":{"expectedTypes":["Text"]},"telephone":{"expectedTypes":["Text"]},"vatID":{"expectedTypes":["Text"]},"workLocation":{"expectedTypes":["ContactPoint","Place"]},"worksFor":{"expectedTypes":["Organization"]}}},"Place":{"extends":"Thing","properties":{"address":{"expectedTypes":["PostalAddress"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"containedIn":{"expectedTypes":["Place"]},"event":{"expectedTypes":["Event"]},"events":{"expectedTypes":["Event"]},"faxNumber":{"expectedTypes":["Text"]},"geo":{"expectedTypes":["GeoCoordinates","GeoShape"]},"globalLocationNumber":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"logo":{"expectedTypes":["ImageObject","URL"]},"map":{"expectedTypes":["URL"]},"maps":{"expectedTypes":["URL"]},"openingHoursSpecification":{"expectedTypes":["OpeningHoursSpecification"]},"photo":{"expectedTypes":["ImageObject","Photograph"]},"photos":{"expectedTypes":["ImageObject","Photograph"]},"review":{"expectedTypes":["Review"]},"reviews":{"expectedTypes":["Review"]},"telephone":{"expectedTypes":["Text"]}}},"AdministrativeArea":{"extends":"Place","properties":[]},"City":{"extends":"AdministrativeArea","properties":[]},"Country":{"extends":"AdministrativeArea","properties":[]},"State":{"extends":"AdministrativeArea","properties":[]},"CivicStructure":{"extends":"Place","properties":{"openingHours":{"expectedTypes":["Duration"]}}},"Airport":{"extends":"CivicStructure","properties":[]},"Aquarium":{"extends":"CivicStructure","properties":[]},"Beach":{"extends":"CivicStructure","properties":[]},"BusStation":{"extends":"CivicStructure","properties":[]},"BusStop":{"extends":"CivicStructure","properties":[]},"Campground":{"extends":"CivicStructure","properties":[]},"Cemetery":{"extends":"CivicStructure","properties":[]},"Crematorium":{"extends":"CivicStructure","properties":[]},"EventVenue":{"extends":"CivicStructure","properties":[]},"GovernmentBuilding":{"extends":"CivicStructure","properties":[]},"CityHall":{"extends":"GovernmentBuilding","properties":[]},"Courthouse":{"extends":"GovernmentBuilding","properties":[]},"DefenceEstablishment":{"extends":"GovernmentBuilding","properties":[]},"Embassy":{"extends":"GovernmentBuilding","properties":[]},"LegislativeBuilding":{"extends":"GovernmentBuilding","properties":[]},"Museum":{"extends":"CivicStructure","properties":[]},"MusicVenue":{"extends":"CivicStructure","properties":[]},"Park":{"extends":"CivicStructure","properties":[]},"ParkingFacility":{"extends":"CivicStructure","properties":[]},"PerformingArtsTheater":{"extends":"CivicStructure","properties":[]},"PlaceOfWorship":{"extends":"CivicStructure","properties":[]},"BuddhistTemple":{"extends":"PlaceOfWorship","properties":[]},"CatholicChurch":{"extends":"PlaceOfWorship","properties":[]},"Church":{"extends":"PlaceOfWorship","properties":[]},"HinduTemple":{"extends":"PlaceOfWorship","properties":[]},"Mosque":{"extends":"PlaceOfWorship","properties":[]},"Synagogue":{"extends":"PlaceOfWorship","properties":[]},"Playground":{"extends":"CivicStructure","properties":[]},"RVPark":{"extends":"CivicStructure","properties":[]},"SubwayStation":{"extends":"CivicStructure","properties":[]},"TaxiStand":{"extends":"CivicStructure","properties":[]},"TrainStation":{"extends":"CivicStructure","properties":[]},"Zoo":{"extends":"CivicStructure","properties":[]},"Landform":{"extends":"Place","properties":[]},"BodyOfWater":{"extends":"Landform","properties":[]},"Canal":{"extends":"BodyOfWater","properties":[]},"LakeBodyOfWater":{"extends":"BodyOfWater","properties":[]},"OceanBodyOfWater":{"extends":"BodyOfWater","properties":[]},"Pond":{"extends":"BodyOfWater","properties":[]},"Reservoir":{"extends":"BodyOfWater","properties":[]},"RiverBodyOfWater":{"extends":"BodyOfWater","properties":[]},"SeaBodyOfWater":{"extends":"BodyOfWater","properties":[]},"Waterfall":{"extends":"BodyOfWater","properties":[]},"Continent":{"extends":"Landform","properties":[]},"Mountain":{"extends":"Landform","properties":[]},"Volcano":{"extends":"Landform","properties":[]},"LandmarksOrHistoricalBuildings":{"extends":"Place","properties":[]},"Residence":{"extends":"Place","properties":[]},"ApartmentComplex":{"extends":"Residence","properties":[]},"GatedResidenceCommunity":{"extends":"Residence","properties":[]},"SingleFamilyResidence":{"extends":"Residence","properties":[]},"TouristAttraction":{"extends":"Place","properties":[]},"Product":{"extends":"Thing","properties":{"aggregateRating":{"expectedTypes":["AggregateRating"]},"audience":{"expectedTypes":["Audience"]},"brand":{"expectedTypes":["Brand","Organization"]},"color":{"expectedTypes":["Text"]},"depth":{"expectedTypes":["Distance","QuantitativeValue"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"height":{"expectedTypes":["Distance","QuantitativeValue"]},"isAccessoryOrSparePartFor":{"expectedTypes":["Product"]},"isConsumableFor":{"expectedTypes":["Product"]},"isRelatedTo":{"expectedTypes":["Product"]},"isSimilarTo":{"expectedTypes":["Product"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"logo":{"expectedTypes":["ImageObject","URL"]},"manufacturer":{"expectedTypes":["Organization"]},"model":{"expectedTypes":["ProductModel","Text"]},"mpn":{"expectedTypes":["Text"]},"offers":{"expectedTypes":["Offer"]},"productID":{"expectedTypes":["Text"]},"releaseDate":{"expectedTypes":["Date"]},"review":{"expectedTypes":["Review"]},"reviews":{"expectedTypes":["Review"]},"sku":{"expectedTypes":["Text"]},"weight":{"expectedTypes":["QuantitativeValue"]},"width":{"expectedTypes":["Distance","QuantitativeValue"]}}},"IndividualProduct":{"extends":"Product","properties":{"serialNumber":{"expectedTypes":["Text"]}}},"ProductModel":{"extends":"Product","properties":{"isVariantOf":{"expectedTypes":["ProductModel"]},"predecessorOf":{"expectedTypes":["ProductModel"]},"successorOf":{"expectedTypes":["ProductModel"]}}},"SomeProducts":{"extends":"Product","properties":{"inventoryLevel":{"expectedTypes":["QuantitativeValue"]}}},"Property":{"extends":"Thing","properties":{"domainIncludes":{"expectedTypes":["Class"]},"rangeIncludes":{"expectedTypes":["Class"]}}}} \ No newline at end of file +{"DataType":{"extends":"","properties":[]},"Boolean":{"extends":"DataType","properties":[]},"Date":{"extends":"DataType","properties":[]},"DateTime":{"extends":"DataType","properties":[]},"Number":{"extends":"DataType","properties":[]},"Float":{"extends":"Number","properties":[]},"Integer":{"extends":"Number","properties":[]},"Text":{"extends":"DataType","properties":[]},"URL":{"extends":"Text","properties":[]},"Time":{"extends":"DataType","properties":[]},"Thing":{"extends":"","properties":{"additionalType":{"expectedTypes":["URL"]},"alternateName":{"expectedTypes":["Text"]},"description":{"expectedTypes":["Text"]},"image":{"expectedTypes":["ImageObject","URL"]},"name":{"expectedTypes":["Text"]},"potentialAction":{"expectedTypes":["Action"]},"sameAs":{"expectedTypes":["URL"]},"url":{"expectedTypes":["URL"]}}},"Action":{"extends":"Thing","properties":{"actionStatus":{"expectedTypes":["ActionStatusType"]},"agent":{"expectedTypes":["Organization","Person"]},"endTime":{"expectedTypes":["DateTime"]},"instrument":{"expectedTypes":["Thing"]},"location":{"expectedTypes":["Place","PostalAddress"]},"object":{"expectedTypes":["Thing"]},"participant":{"expectedTypes":["Organization","Person"]},"result":{"expectedTypes":["Thing"]},"startTime":{"expectedTypes":["DateTime"]},"target":{"expectedTypes":["EntryPoint"]}}},"AchieveAction":{"extends":"Action","properties":[]},"LoseAction":{"extends":"AchieveAction","properties":{"winner":{"expectedTypes":["Person"]}}},"TieAction":{"extends":"AchieveAction","properties":[]},"WinAction":{"extends":"AchieveAction","properties":{"loser":{"expectedTypes":["Person"]}}},"AssessAction":{"extends":"Action","properties":[]},"ChooseAction":{"extends":"AssessAction","properties":{"option":{"expectedTypes":["Text","Thing"]}}},"VoteAction":{"extends":"ChooseAction","properties":{"candidate":{"expectedTypes":["Person"]}}},"IgnoreAction":{"extends":"AssessAction","properties":[]},"ReactAction":{"extends":"AssessAction","properties":[]},"AgreeAction":{"extends":"ReactAction","properties":[]},"DisagreeAction":{"extends":"ReactAction","properties":[]},"DislikeAction":{"extends":"ReactAction","properties":[]},"EndorseAction":{"extends":"ReactAction","properties":{"endorsee":{"expectedTypes":["Organization","Person"]}}},"LikeAction":{"extends":"ReactAction","properties":[]},"WantAction":{"extends":"ReactAction","properties":[]},"ReviewAction":{"extends":"AssessAction","properties":{"resultReview":{"expectedTypes":["Review"]}}},"ConsumeAction":{"extends":"Action","properties":[]},"DrinkAction":{"extends":"ConsumeAction","properties":[]},"EatAction":{"extends":"ConsumeAction","properties":[]},"InstallAction":{"extends":"ConsumeAction","properties":[]},"ListenAction":{"extends":"ConsumeAction","properties":[]},"ReadAction":{"extends":"ConsumeAction","properties":[]},"UseAction":{"extends":"ConsumeAction","properties":[]},"WearAction":{"extends":"UseAction","properties":[]},"ViewAction":{"extends":"ConsumeAction","properties":[]},"WatchAction":{"extends":"ConsumeAction","properties":[]},"CreateAction":{"extends":"Action","properties":[]},"CookAction":{"extends":"CreateAction","properties":{"foodEstablishment":{"expectedTypes":["FoodEstablishment","Place"]},"foodEvent":{"expectedTypes":["FoodEvent"]},"recipe":{"expectedTypes":["Recipe"]}}},"DrawAction":{"extends":"CreateAction","properties":[]},"FilmAction":{"extends":"CreateAction","properties":[]},"PaintAction":{"extends":"CreateAction","properties":[]},"PhotographAction":{"extends":"CreateAction","properties":[]},"WriteAction":{"extends":"CreateAction","properties":{"language":{"expectedTypes":["Language"]}}},"FindAction":{"extends":"Action","properties":[]},"CheckAction":{"extends":"FindAction","properties":[]},"DiscoverAction":{"extends":"FindAction","properties":[]},"TrackAction":{"extends":"FindAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"InteractAction":{"extends":"Action","properties":[]},"BefriendAction":{"extends":"InteractAction","properties":[]},"CommunicateAction":{"extends":"InteractAction","properties":{"about":{"expectedTypes":["Thing"]},"language":{"expectedTypes":["Language"]},"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"AskAction":{"extends":"CommunicateAction","properties":{"question":{"expectedTypes":["Text"]}}},"CheckInAction":{"extends":"CommunicateAction","properties":[]},"CheckOutAction":{"extends":"CommunicateAction","properties":[]},"CommentAction":{"extends":"CommunicateAction","properties":[]},"InformAction":{"extends":"CommunicateAction","properties":{"event":{"expectedTypes":["Event"]}}},"ConfirmAction":{"extends":"InformAction","properties":[]},"RsvpAction":{"extends":"InformAction","properties":[]},"InviteAction":{"extends":"CommunicateAction","properties":{"event":{"expectedTypes":["Event"]}}},"ReplyAction":{"extends":"CommunicateAction","properties":[]},"ShareAction":{"extends":"CommunicateAction","properties":[]},"FollowAction":{"extends":"InteractAction","properties":{"followee":{"expectedTypes":["Organization","Person"]}}},"JoinAction":{"extends":"InteractAction","properties":{"event":{"expectedTypes":["Event"]}}},"LeaveAction":{"extends":"InteractAction","properties":{"event":{"expectedTypes":["Event"]}}},"MarryAction":{"extends":"InteractAction","properties":[]},"RegisterAction":{"extends":"InteractAction","properties":[]},"SubscribeAction":{"extends":"InteractAction","properties":[]},"UnRegisterAction":{"extends":"InteractAction","properties":[]},"MoveAction":{"extends":"Action","properties":{"fromLocation":{"expectedTypes":["Number","Place"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"ArriveAction":{"extends":"MoveAction","properties":[]},"DepartAction":{"extends":"MoveAction","properties":[]},"TravelAction":{"extends":"MoveAction","properties":{"distance":{"expectedTypes":["Distance"]}}},"OrganizeAction":{"extends":"Action","properties":[]},"AllocateAction":{"extends":"OrganizeAction","properties":{"purpose":{"expectedTypes":["MedicalDevicePurpose","Thing"]}}},"AcceptAction":{"extends":"AllocateAction","properties":[]},"AssignAction":{"extends":"AllocateAction","properties":[]},"AuthorizeAction":{"extends":"AllocateAction","properties":{"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"RejectAction":{"extends":"AllocateAction","properties":[]},"ApplyAction":{"extends":"OrganizeAction","properties":[]},"BookmarkAction":{"extends":"OrganizeAction","properties":[]},"PlanAction":{"extends":"OrganizeAction","properties":{"scheduledTime":{"expectedTypes":["DateTime"]}}},"CancelAction":{"extends":"PlanAction","properties":[]},"ReserveAction":{"extends":"PlanAction","properties":{"scheduledTime":{"expectedTypes":["DateTime"]}}},"ScheduleAction":{"extends":"PlanAction","properties":[]},"PlayAction":{"extends":"Action","properties":{"audience":{"expectedTypes":["Audience"]},"event":{"expectedTypes":["Event"]}}},"ExerciseAction":{"extends":"PlayAction","properties":{"course":{"expectedTypes":["Place"]},"diet":{"expectedTypes":["Diet"]},"distance":{"expectedTypes":["Distance"]},"exercisePlan":{"expectedTypes":["ExercisePlan"]},"exerciseType":{"expectedTypes":["Text"]},"fromLocation":{"expectedTypes":["Number","Place"]},"opponent":{"expectedTypes":["Person"]},"sportsActivityLocation":{"expectedTypes":["SportsActivityLocation"]},"sportsEvent":{"expectedTypes":["SportsEvent"]},"sportsTeam":{"expectedTypes":["SportsTeam"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"PerformAction":{"extends":"PlayAction","properties":{"entertainmentBusiness":{"expectedTypes":["EntertainmentBusiness"]}}},"SearchAction":{"extends":"Action","properties":{"query":{"expectedTypes":["Text","Class"]}}},"TradeAction":{"extends":"Action","properties":{"price":{"expectedTypes":["Text","Number"]}}},"BuyAction":{"extends":"TradeAction","properties":{"vendor":{"expectedTypes":["Organization","Person"]},"warrantyPromise":{"expectedTypes":["WarrantyPromise"]}}},"DonateAction":{"extends":"TradeAction","properties":{"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"OrderAction":{"extends":"TradeAction","properties":[]},"PayAction":{"extends":"TradeAction","properties":{"purpose":{"expectedTypes":["Thing","MedicalDevicePurpose"]},"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"QuoteAction":{"extends":"TradeAction","properties":[]},"RentAction":{"extends":"TradeAction","properties":{"landlord":{"expectedTypes":["Organization","Person"]},"realEstateAgent":{"expectedTypes":["RealEstateAgent"]}}},"SellAction":{"extends":"TradeAction","properties":{"buyer":{"expectedTypes":["Person"]},"warrantyPromise":{"expectedTypes":["WarrantyPromise"]}}},"TipAction":{"extends":"TradeAction","properties":{"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"TransferAction":{"extends":"Action","properties":{"fromLocation":{"expectedTypes":["Number","Place"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"BorrowAction":{"extends":"TransferAction","properties":{"lender":{"expectedTypes":["Person"]}}},"DownloadAction":{"extends":"TransferAction","properties":[]},"GiveAction":{"extends":"TransferAction","properties":{"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"LendAction":{"extends":"TransferAction","properties":{"borrower":{"expectedTypes":["Person"]}}},"ReceiveAction":{"extends":"TransferAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]},"sender":{"expectedTypes":["Organization","Audience","Person"]}}},"ReturnAction":{"extends":"TransferAction","properties":{"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"SendAction":{"extends":"TransferAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]},"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"TakeAction":{"extends":"TransferAction","properties":[]},"UpdateAction":{"extends":"Action","properties":{"collection":{"expectedTypes":["Thing"]}}},"AddAction":{"extends":"UpdateAction","properties":[]},"InsertAction":{"extends":"AddAction","properties":{"toLocation":{"expectedTypes":["Number","Place"]}}},"AppendAction":{"extends":"InsertAction","properties":[]},"PrependAction":{"extends":"InsertAction","properties":[]},"DeleteAction":{"extends":"UpdateAction","properties":[]},"ReplaceAction":{"extends":"UpdateAction","properties":{"replacee":{"expectedTypes":["Thing"]},"replacer":{"expectedTypes":["Thing"]}}},"BroadcastService":{"extends":"Thing","properties":{"area":{"expectedTypes":["Place"]},"broadcaster":{"expectedTypes":["Organization"]},"parentService":{"expectedTypes":["BroadcastService"]}}},"Class":{"extends":"Intangible","properties":[]},"CreativeWork":{"extends":"Thing","properties":{"about":{"expectedTypes":["Thing"]},"accessibilityAPI":{"expectedTypes":["Text"]},"accessibilityControl":{"expectedTypes":["Text"]},"accessibilityFeature":{"expectedTypes":["Text"]},"accessibilityHazard":{"expectedTypes":["Text"]},"accountablePerson":{"expectedTypes":["Person"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"alternativeHeadline":{"expectedTypes":["Text"]},"associatedMedia":{"expectedTypes":["MediaObject"]},"audience":{"expectedTypes":["Audience"]},"audio":{"expectedTypes":["AudioObject"]},"author":{"expectedTypes":["Organization","Person"]},"award":{"expectedTypes":["Text"]},"citation":{"expectedTypes":["Text","CreativeWork"]},"comment":{"expectedTypes":["Comment","UserComments"]},"commentCount":{"expectedTypes":["Integer"]},"contentLocation":{"expectedTypes":["Place"]},"contentRating":{"expectedTypes":["Text"]},"contributor":{"expectedTypes":["Organization","Person"]},"copyrightHolder":{"expectedTypes":["Organization","Person"]},"copyrightYear":{"expectedTypes":["Number"]},"creator":{"expectedTypes":["Organization","Person"]},"dateCreated":{"expectedTypes":["Date"]},"dateModified":{"expectedTypes":["Date"]},"datePublished":{"expectedTypes":["Date"]},"discussionUrl":{"expectedTypes":["URL"]},"editor":{"expectedTypes":["Person"]},"educationalAlignment":{"expectedTypes":["AlignmentObject"]},"educationalUse":{"expectedTypes":["Text"]},"encoding":{"expectedTypes":["MediaObject"]},"genre":{"expectedTypes":["Text"]},"headline":{"expectedTypes":["Text"]},"inLanguage":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"interactivityType":{"expectedTypes":["Text"]},"isBasedOnUrl":{"expectedTypes":["URL"]},"isFamilyFriendly":{"expectedTypes":["Boolean"]},"keywords":{"expectedTypes":["Text"]},"learningResourceType":{"expectedTypes":["Text"]},"license":{"expectedTypes":["CreativeWork","URL"]},"mentions":{"expectedTypes":["Thing"]},"offers":{"expectedTypes":["Offer"]},"provider":{"expectedTypes":["Organization","Person"]},"publisher":{"expectedTypes":["Organization"]},"publishingPrinciples":{"expectedTypes":["URL"]},"review":{"expectedTypes":["Review"]},"sourceOrganization":{"expectedTypes":["Organization"]},"text":{"expectedTypes":["Text"]},"thumbnailUrl":{"expectedTypes":["URL"]},"timeRequired":{"expectedTypes":["Duration"]},"typicalAgeRange":{"expectedTypes":["Text"]},"version":{"expectedTypes":["Number"]},"video":{"expectedTypes":["VideoObject"]}}},"Answer":{"extends":"CreativeWork","properties":{"downvoteCount":{"expectedTypes":["Integer"]},"parentItem":{"expectedTypes":["Question"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"Article":{"extends":"CreativeWork","properties":{"articleBody":{"expectedTypes":["Text"]},"articleSection":{"expectedTypes":["Text"]},"wordCount":{"expectedTypes":["Integer"]}}},"BlogPosting":{"extends":"Article","properties":[]},"NewsArticle":{"extends":"Article","properties":{"dateline":{"expectedTypes":["Text"]},"printColumn":{"expectedTypes":["Text"]},"printEdition":{"expectedTypes":["Text"]},"printPage":{"expectedTypes":["Text"]},"printSection":{"expectedTypes":["Text"]}}},"ScholarlyArticle":{"extends":"Article","properties":[]},"MedicalScholarlyArticle":{"extends":"ScholarlyArticle","properties":{"publicationType":{"expectedTypes":["Text"]}}},"TechArticle":{"extends":"Article","properties":{"dependencies":{"expectedTypes":["Text"]},"proficiencyLevel":{"expectedTypes":["Text"]}}},"APIReference":{"extends":"TechArticle","properties":{"assembly":{"expectedTypes":["Text"]},"assemblyVersion":{"expectedTypes":["Text"]},"programmingModel":{"expectedTypes":["Text"]},"targetPlatform":{"expectedTypes":["Text"]}}},"Blog":{"extends":"CreativeWork","properties":{"blogPost":{"expectedTypes":["BlogPosting"]}}},"Book":{"extends":"CreativeWork","properties":{"bookEdition":{"expectedTypes":["Text"]},"bookFormat":{"expectedTypes":["BookFormatType"]},"illustrator":{"expectedTypes":["Person"]},"isbn":{"expectedTypes":["Text"]},"numberOfPages":{"expectedTypes":["Integer"]}}},"Clip":{"extends":"CreativeWork","properties":{"clipNumber":{"expectedTypes":["Integer"]},"partOfEpisode":{"expectedTypes":["Episode"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"publication":{"expectedTypes":["PublicationEvent"]}}},"RadioClip":{"extends":"Clip","properties":{"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]}}},"TVClip":{"extends":"Clip","properties":{"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]}}},"Code":{"extends":"CreativeWork","properties":{"codeRepository":{"expectedTypes":["URL"]},"programmingLanguage":{"expectedTypes":["Thing"]},"runtime":{"expectedTypes":["Text"]},"sampleType":{"expectedTypes":["Text"]},"targetProduct":{"expectedTypes":["SoftwareApplication"]}}},"Comment":{"extends":"CreativeWork","properties":{"downvoteCount":{"expectedTypes":["Integer"]},"parentItem":{"expectedTypes":["Question"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"DataCatalog":{"extends":"CreativeWork","properties":{"dataset":{"expectedTypes":["Dataset"]}}},"Dataset":{"extends":"CreativeWork","properties":{"catalog":{"expectedTypes":["DataCatalog"]},"distribution":{"expectedTypes":["DataDownload"]},"spatial":{"expectedTypes":["Place"]},"temporal":{"expectedTypes":["DateTime"]}}},"Diet":{"extends":"CreativeWork","properties":{"dietFeatures":{"expectedTypes":["Text"]},"endorsers":{"expectedTypes":["Organization","Person"]},"expertConsiderations":{"expectedTypes":["Text"]},"overview":{"expectedTypes":["Text"]},"physiologicalBenefits":{"expectedTypes":["Text"]},"proprietaryName":{"expectedTypes":["Text"]},"risks":{"expectedTypes":["Text"]}}},"EmailMessage":{"extends":"CreativeWork","properties":[]},"Episode":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"episodeNumber":{"expectedTypes":["Integer"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"publication":{"expectedTypes":["PublicationEvent"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioEpisode":{"extends":"Episode","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"TVEpisode":{"extends":"Episode","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"ExercisePlan":{"extends":"PhysicalActivity","properties":{"activityDuration":{"expectedTypes":["Duration"]},"activityFrequency":{"expectedTypes":["Text"]},"additionalVariable":{"expectedTypes":["Text"]},"exerciseType":{"expectedTypes":["Text"]},"intensity":{"expectedTypes":["Text"]},"repetitions":{"expectedTypes":["Number"]},"restPeriods":{"expectedTypes":["Text"]},"workload":{"expectedTypes":["Energy"]}}},"ItemList":{"extends":"CreativeWork","properties":{"itemListElement":{"expectedTypes":["Text"]},"itemListOrder":{"expectedTypes":["Text"]}}},"Map":{"extends":"CreativeWork","properties":{"mapType":{"expectedTypes":["MapCategoryType"]}}},"MediaObject":{"extends":"CreativeWork","properties":{"associatedArticle":{"expectedTypes":["NewsArticle"]},"bitrate":{"expectedTypes":["Text"]},"contentSize":{"expectedTypes":["Text"]},"contentUrl":{"expectedTypes":["URL"]},"duration":{"expectedTypes":["Duration"]},"embedUrl":{"expectedTypes":["URL"]},"encodesCreativeWork":{"expectedTypes":["CreativeWork"]},"encodingFormat":{"expectedTypes":["Text"]},"expires":{"expectedTypes":["Date"]},"height":{"expectedTypes":["QuantitativeValue","Distance"]},"interactionCount":{"expectedTypes":["Text"]},"offers":{"expectedTypes":["Offer"]},"playerType":{"expectedTypes":["Text"]},"productionCompany":{"expectedTypes":["Organization"]},"publication":{"expectedTypes":["PublicationEvent"]},"regionsAllowed":{"expectedTypes":["Place"]},"requiresSubscription":{"expectedTypes":["Boolean"]},"uploadDate":{"expectedTypes":["Date"]},"width":{"expectedTypes":["QuantitativeValue","Distance"]}}},"AudioObject":{"extends":"MediaObject","properties":{"transcript":{"expectedTypes":["Text"]}}},"DataDownload":{"extends":"MediaObject","properties":[]},"ImageObject":{"extends":"MediaObject","properties":{"caption":{"expectedTypes":["Text"]},"exifData":{"expectedTypes":["Text"]},"representativeOfPage":{"expectedTypes":["Boolean"]},"thumbnail":{"expectedTypes":["ImageObject"]}}},"MusicVideoObject":{"extends":"MediaObject","properties":[]},"VideoObject":{"extends":"MediaObject","properties":{"caption":{"expectedTypes":["Text"]},"productionCompany":{"expectedTypes":["Organization"]},"thumbnail":{"expectedTypes":["ImageObject"]},"transcript":{"expectedTypes":["Text"]},"videoFrameSize":{"expectedTypes":["Text"]},"videoQuality":{"expectedTypes":["Text"]}}},"Movie":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"duration":{"expectedTypes":["Duration"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"MusicPlaylist":{"extends":"CreativeWork","properties":{"numTracks":{"expectedTypes":["Integer"]},"track":{"expectedTypes":["MusicRecording"]}}},"MusicAlbum":{"extends":"MusicPlaylist","properties":{"byArtist":{"expectedTypes":["MusicGroup"]}}},"MusicRecording":{"extends":"CreativeWork","properties":{"byArtist":{"expectedTypes":["MusicGroup"]},"duration":{"expectedTypes":["Duration"]},"inAlbum":{"expectedTypes":["MusicAlbum"]},"inPlaylist":{"expectedTypes":["MusicPlaylist"]}}},"Painting":{"extends":"CreativeWork","properties":[]},"Photograph":{"extends":"CreativeWork","properties":[]},"Question":{"extends":"CreativeWork","properties":{"acceptedAnswer":{"expectedTypes":["Answer"]},"answerCount":{"expectedTypes":["Integer"]},"downvoteCount":{"expectedTypes":["Integer"]},"suggestedAnswer":{"expectedTypes":["Answer"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"Recipe":{"extends":"CreativeWork","properties":{"cookTime":{"expectedTypes":["Duration"]},"cookingMethod":{"expectedTypes":["Text"]},"ingredients":{"expectedTypes":["Text"]},"nutrition":{"expectedTypes":["NutritionInformation"]},"prepTime":{"expectedTypes":["Duration"]},"recipeCategory":{"expectedTypes":["Text"]},"recipeCuisine":{"expectedTypes":["Text"]},"recipeInstructions":{"expectedTypes":["Text"]},"recipeYield":{"expectedTypes":["Text"]},"totalTime":{"expectedTypes":["Duration"]}}},"Review":{"extends":"CreativeWork","properties":{"itemReviewed":{"expectedTypes":["Thing"]},"reviewBody":{"expectedTypes":["Text"]},"reviewRating":{"expectedTypes":["Rating"]}}},"Sculpture":{"extends":"CreativeWork","properties":[]},"Season":{"extends":"CreativeWork","properties":{"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"seasonNumber":{"expectedTypes":["Integer"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioSeason":{"extends":"Season","properties":{"episode":{"expectedTypes":["Episode"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"partOfSeries":{"expectedTypes":["Series"]},"trailer":{"expectedTypes":["VideoObject"]}}},"TVSeason":{"extends":"Season","properties":{"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"partOfSeries":{"expectedTypes":["Series"]},"seasonNumber":{"expectedTypes":["Integer"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"Series":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"numberOfSeasons":{"expectedTypes":["Number"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioSeries":{"extends":"Series","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"episode":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"trailer":{"expectedTypes":["VideoObject"]}}},"TVSeries":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"SoftwareApplication":{"extends":"CreativeWork","properties":{"applicationCategory":{"expectedTypes":["Text","URL"]},"applicationSubCategory":{"expectedTypes":["Text","URL"]},"applicationSuite":{"expectedTypes":["Text"]},"countriesNotSupported":{"expectedTypes":["Text"]},"countriesSupported":{"expectedTypes":["Text"]},"device":{"expectedTypes":["Text"]},"downloadUrl":{"expectedTypes":["URL"]},"featureList":{"expectedTypes":["Text","URL"]},"fileFormat":{"expectedTypes":["Text"]},"fileSize":{"expectedTypes":["Integer"]},"installUrl":{"expectedTypes":["URL"]},"memoryRequirements":{"expectedTypes":["Text","URL"]},"operatingSystem":{"expectedTypes":["Text"]},"permissions":{"expectedTypes":["Text"]},"processorRequirements":{"expectedTypes":["Text"]},"releaseNotes":{"expectedTypes":["Text","URL"]},"requirements":{"expectedTypes":["Text","URL"]},"screenshot":{"expectedTypes":["URL","ImageObject"]},"softwareVersion":{"expectedTypes":["Text"]},"storageRequirements":{"expectedTypes":["Text","URL"]}}},"MobileApplication":{"extends":"SoftwareApplication","properties":{"carrierRequirements":{"expectedTypes":["Text"]}}},"WebApplication":{"extends":"SoftwareApplication","properties":{"browserRequirements":{"expectedTypes":["Text"]}}},"WebPage":{"extends":"CreativeWork","properties":{"breadcrumb":{"expectedTypes":["Text"]},"isPartOf":{"expectedTypes":["CollectionPage"]},"lastReviewed":{"expectedTypes":["Date"]},"mainContentOfPage":{"expectedTypes":["WebPageElement"]},"primaryImageOfPage":{"expectedTypes":["ImageObject"]},"relatedLink":{"expectedTypes":["URL"]},"reviewedBy":{"expectedTypes":["Organization","Person"]},"significantLink":{"expectedTypes":["URL"]},"specialty":{"expectedTypes":["Specialty"]}}},"AboutPage":{"extends":"WebPage","properties":[]},"CheckoutPage":{"extends":"WebPage","properties":[]},"CollectionPage":{"extends":"WebPage","properties":[]},"ImageGallery":{"extends":"CollectionPage","properties":[]},"VideoGallery":{"extends":"CollectionPage","properties":[]},"ContactPage":{"extends":"WebPage","properties":[]},"ItemPage":{"extends":"WebPage","properties":[]},"MedicalWebPage":{"extends":"WebPage","properties":{"aspect":{"expectedTypes":["Text"]}}},"ProfilePage":{"extends":"WebPage","properties":[]},"QAPage":{"extends":"WebPage","properties":[]},"SearchResultsPage":{"extends":"WebPage","properties":[]},"WebPageElement":{"extends":"CreativeWork","properties":[]},"SiteNavigationElement":{"extends":"WebPageElement","properties":[]},"Table":{"extends":"WebPageElement","properties":[]},"WPAdBlock":{"extends":"WebPageElement","properties":[]},"WPFooter":{"extends":"WebPageElement","properties":[]},"WPHeader":{"extends":"WebPageElement","properties":[]},"WPSideBar":{"extends":"WebPageElement","properties":[]},"Event":{"extends":"Thing","properties":{"attendee":{"expectedTypes":["Organization","Person"]},"doorTime":{"expectedTypes":["DateTime"]},"duration":{"expectedTypes":["Duration"]},"endDate":{"expectedTypes":["Date"]},"eventStatus":{"expectedTypes":["EventStatusType"]},"location":{"expectedTypes":["Place","PostalAddress"]},"offers":{"expectedTypes":["Offer"]},"organizer":{"expectedTypes":["Organization","Person"]},"performer":{"expectedTypes":["Organization","Person"]},"previousStartDate":{"expectedTypes":["Date"]},"startDate":{"expectedTypes":["Date"]},"subEvent":{"expectedTypes":["Event"]},"superEvent":{"expectedTypes":["Event"]},"typicalAgeRange":{"expectedTypes":["Text"]},"workPerformed":{"expectedTypes":["CreativeWork"]}}},"BusinessEvent":{"extends":"Event","properties":[]},"ChildrensEvent":{"extends":"Event","properties":[]},"ComedyEvent":{"extends":"Event","properties":[]},"DanceEvent":{"extends":"Event","properties":[]},"DeliveryEvent":{"extends":"Event","properties":{"accessCode":{"expectedTypes":["Text"]},"availableFrom":{"expectedTypes":["DateTime"]},"availableThrough":{"expectedTypes":["DateTime"]},"hasDeliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"EducationEvent":{"extends":"Event","properties":[]},"Festival":{"extends":"Event","properties":[]},"FoodEvent":{"extends":"Event","properties":[]},"LiteraryEvent":{"extends":"Event","properties":[]},"MusicEvent":{"extends":"Event","properties":[]},"PublicationEvent":{"extends":"Event","properties":{"free":{"expectedTypes":["Boolean"]},"publishedOn":{"expectedTypes":["BroadcastService"]}}},"BroadcastEvent":{"extends":"PublicationEvent","properties":[]},"OnDemandEvent":{"extends":"PublicationEvent","properties":[]},"SaleEvent":{"extends":"Event","properties":[]},"SocialEvent":{"extends":"Event","properties":[]},"SportsEvent":{"extends":"Event","properties":[]},"TheaterEvent":{"extends":"Event","properties":[]},"UserInteraction":{"extends":"Event","properties":[]},"UserBlocks":{"extends":"UserInteraction","properties":[]},"UserCheckins":{"extends":"UserInteraction","properties":[]},"UserComments":{"extends":"UserInteraction","properties":{"commentText":{"expectedTypes":["Text"]},"commentTime":{"expectedTypes":["Date"]},"creator":{"expectedTypes":["Person","Organization"]},"discusses":{"expectedTypes":["CreativeWork"]},"replyToUrl":{"expectedTypes":["URL"]}}},"UserDownloads":{"extends":"UserInteraction","properties":[]},"UserLikes":{"extends":"UserInteraction","properties":[]},"UserPageVisits":{"extends":"UserInteraction","properties":[]},"UserPlays":{"extends":"UserInteraction","properties":[]},"UserPlusOnes":{"extends":"UserInteraction","properties":[]},"UserTweets":{"extends":"UserInteraction","properties":[]},"VisualArtsEvent":{"extends":"Event","properties":[]},"Intangible":{"extends":"Thing","properties":[]},"AlignmentObject":{"extends":"Intangible","properties":{"alignmentType":{"expectedTypes":["Text"]},"educationalFramework":{"expectedTypes":["Text"]},"targetDescription":{"expectedTypes":["Text"]},"targetName":{"expectedTypes":["Text"]},"targetUrl":{"expectedTypes":["URL"]}}},"Audience":{"extends":"Intangible","properties":{"audienceType":{"expectedTypes":["Text"]},"geographicArea":{"expectedTypes":["AdministrativeArea"]}}},"BusinessAudience":{"extends":"Audience","properties":{"numberofEmployees":{"expectedTypes":["QuantitativeValue"]},"yearlyRevenue":{"expectedTypes":["QuantitativeValue"]},"yearsInOperation":{"expectedTypes":["QuantitativeValue"]}}},"EducationalAudience":{"extends":"Audience","properties":{"educationalRole":{"expectedTypes":["Text"]}}},"MedicalAudience":{"extends":"Audience","properties":[]},"PeopleAudience":{"extends":"Audience","properties":{"healthCondition":{"expectedTypes":["MedicalCondition"]},"requiredGender":{"expectedTypes":["Text"]},"requiredMaxAge":{"expectedTypes":["Integer"]},"requiredMinAge":{"expectedTypes":["Integer"]},"suggestedGender":{"expectedTypes":["Text"]},"suggestedMaxAge":{"expectedTypes":["Number"]},"suggestedMinAge":{"expectedTypes":["Number"]}}},"ParentAudience":{"extends":"PeopleAudience","properties":{"childMaxAge":{"expectedTypes":["Number"]},"childMinAge":{"expectedTypes":["Number"]}}},"Brand":{"extends":"Intangible","properties":{"logo":{"expectedTypes":["ImageObject","URL"]}}},"BusTrip":{"extends":"Intangible","properties":{"arrivalBusStop":{"expectedTypes":["BusStop","BusStation"]},"arrivalTime":{"expectedTypes":["DateTime"]},"busName":{"expectedTypes":["Text"]},"busNumber":{"expectedTypes":["Text"]},"departureBusStop":{"expectedTypes":["BusStop","BusStation"]},"departureTime":{"expectedTypes":["DateTime"]},"provider":{"expectedTypes":["Organization","Person"]}}},"Demand":{"extends":"Intangible","properties":{"acceptedPaymentMethod":{"expectedTypes":["PaymentMethod"]},"advanceBookingRequirement":{"expectedTypes":["QuantitativeValue"]},"availability":{"expectedTypes":["ItemAvailability"]},"availabilityEnds":{"expectedTypes":["DateTime"]},"availabilityStarts":{"expectedTypes":["DateTime"]},"availableAtOrFrom":{"expectedTypes":["Place"]},"availableDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"deliveryLeadTime":{"expectedTypes":["QuantitativeValue"]},"eligibleCustomerType":{"expectedTypes":["BusinessEntityType"]},"eligibleDuration":{"expectedTypes":["QuantitativeValue"]},"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleRegion":{"expectedTypes":["Text","GeoShape"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"includesObject":{"expectedTypes":["TypeAndQuantityNode"]},"inventoryLevel":{"expectedTypes":["QuantitativeValue"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"itemOffered":{"expectedTypes":["Product"]},"mpn":{"expectedTypes":["Text"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]},"seller":{"expectedTypes":["Organization","Person"]},"serialNumber":{"expectedTypes":["Text"]},"sku":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"warranty":{"expectedTypes":["WarrantyPromise"]}}},"Enumeration":{"extends":"Intangible","properties":[]},"BookFormatType":{"extends":"Enumeration","properties":[]},"BusinessEntityType":{"extends":"Enumeration","properties":[]},"BusinessFunction":{"extends":"Enumeration","properties":[]},"ContactPointOption":{"extends":"Enumeration","properties":[]},"DayOfWeek":{"extends":"Enumeration","properties":[]},"DeliveryMethod":{"extends":"Enumeration","properties":[]},"LockerDelivery":{"extends":"DeliveryMethod","properties":[]},"OnSitePickup":{"extends":"Enumeration","properties":[]},"ParcelService":{"extends":"DeliveryMethod","properties":[]},"EventStatusType":{"extends":"Enumeration","properties":[]},"ItemAvailability":{"extends":"Enumeration","properties":[]},"OfferItemCondition":{"extends":"Enumeration","properties":[]},"OrderStatus":{"extends":"Enumeration","properties":[]},"PaymentMethod":{"extends":"Enumeration","properties":[]},"CreditCard":{"extends":"PaymentMethod","properties":[]},"QualitativeValue":{"extends":"Enumeration","properties":{"equal":{"expectedTypes":["QualitativeValue"]},"greater":{"expectedTypes":["QualitativeValue"]},"greaterOrEqual":{"expectedTypes":["QualitativeValue"]},"lesser":{"expectedTypes":["QualitativeValue"]},"lesserOrEqual":{"expectedTypes":["QualitativeValue"]},"nonEqual":{"expectedTypes":["QualitativeValue"]},"valueReference":{"expectedTypes":["StructuredValue","Enumeration"]}}},"ReservationStatusType":{"extends":"Enumeration","properties":[]},"Specialty":{"extends":"Enumeration","properties":[]},"MedicalSpecialty":{"extends":"MedicalEnumeration","properties":[]},"WarrantyScope":{"extends":"Enumeration","properties":[]},"Flight":{"extends":"Intangible","properties":{"aircraft":{"expectedTypes":["Text","Vehicle"]},"arrivalAirport":{"expectedTypes":["Airport"]},"arrivalGate":{"expectedTypes":["Text"]},"arrivalTerminal":{"expectedTypes":["Text"]},"arrivalTime":{"expectedTypes":["DateTime"]},"carrier":{"expectedTypes":["Organization"]},"departureAirport":{"expectedTypes":["Airport"]},"departureGate":{"expectedTypes":["Text"]},"departureTerminal":{"expectedTypes":["Text"]},"departureTime":{"expectedTypes":["DateTime"]},"estimatedFlightDuration":{"expectedTypes":["Text","Duration"]},"flightDistance":{"expectedTypes":["Text","Distance"]},"flightNumber":{"expectedTypes":["Text"]},"mealService":{"expectedTypes":["Text"]},"provider":{"expectedTypes":["Organization","Person"]},"webCheckinTime":{"expectedTypes":["DateTime"]}}},"JobPosting":{"extends":"Intangible","properties":{"baseSalary":{"expectedTypes":["Number"]},"benefits":{"expectedTypes":["Text"]},"datePosted":{"expectedTypes":["Date"]},"educationRequirements":{"expectedTypes":["Text"]},"employmentType":{"expectedTypes":["Text"]},"experienceRequirements":{"expectedTypes":["Text"]},"hiringOrganization":{"expectedTypes":["Organization"]},"incentives":{"expectedTypes":["Text"]},"industry":{"expectedTypes":["Text"]},"jobLocation":{"expectedTypes":["Place"]},"occupationalCategory":{"expectedTypes":["Text"]},"qualifications":{"expectedTypes":["Text"]},"responsibilities":{"expectedTypes":["Text"]},"salaryCurrency":{"expectedTypes":["Text"]},"skills":{"expectedTypes":["Text"]},"specialCommitments":{"expectedTypes":["Text"]},"title":{"expectedTypes":["Text"]},"workHours":{"expectedTypes":["Text"]}}},"Language":{"extends":"Intangible","properties":[]},"Offer":{"extends":"Intangible","properties":{"acceptedPaymentMethod":{"expectedTypes":["PaymentMethod"]},"addOn":{"expectedTypes":["Offer"]},"advanceBookingRequirement":{"expectedTypes":["QuantitativeValue"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"availability":{"expectedTypes":["ItemAvailability"]},"availabilityEnds":{"expectedTypes":["DateTime"]},"availabilityStarts":{"expectedTypes":["DateTime"]},"availableAtOrFrom":{"expectedTypes":["Place"]},"availableDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"category":{"expectedTypes":["Text","Thing","PhysicalActivityCategory"]},"deliveryLeadTime":{"expectedTypes":["QuantitativeValue"]},"eligibleCustomerType":{"expectedTypes":["BusinessEntityType"]},"eligibleDuration":{"expectedTypes":["QuantitativeValue"]},"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleRegion":{"expectedTypes":["Text","GeoShape"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"includesObject":{"expectedTypes":["TypeAndQuantityNode"]},"inventoryLevel":{"expectedTypes":["QuantitativeValue"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"itemOffered":{"expectedTypes":["Product"]},"mpn":{"expectedTypes":["Text"]},"price":{"expectedTypes":["Text","Number"]},"priceCurrency":{"expectedTypes":["Text"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]},"priceValidUntil":{"expectedTypes":["Date"]},"review":{"expectedTypes":["Review"]},"seller":{"expectedTypes":["Organization","Person"]},"serialNumber":{"expectedTypes":["Text"]},"sku":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"warranty":{"expectedTypes":["WarrantyPromise"]}}},"AggregateOffer":{"extends":"Offer","properties":{"highPrice":{"expectedTypes":["Text","Number"]},"lowPrice":{"expectedTypes":["Text","Number"]},"offerCount":{"expectedTypes":["Integer"]}}},"Order":{"extends":"Intangible","properties":{"acceptedOffer":{"expectedTypes":["Offer"]},"billingAddress":{"expectedTypes":["PostalAddress"]},"confirmationNumber":{"expectedTypes":["Text"]},"customer":{"expectedTypes":["Organization","Person"]},"discount":{"expectedTypes":["Text","Number"]},"discountCode":{"expectedTypes":["Text"]},"discountCurrency":{"expectedTypes":["Text"]},"isGift":{"expectedTypes":["Boolean"]},"merchant":{"expectedTypes":["Organization","Person"]},"orderDate":{"expectedTypes":["DateTime"]},"orderNumber":{"expectedTypes":["Text"]},"orderStatus":{"expectedTypes":["OrderStatus"]},"orderedItem":{"expectedTypes":["Product"]},"paymentDue":{"expectedTypes":["DateTime"]},"paymentMethod":{"expectedTypes":["PaymentMethod"]},"paymentMethodId":{"expectedTypes":["Text"]},"paymentUrl":{"expectedTypes":["URL"]}}},"ParcelDelivery":{"extends":"Intangible","properties":{"carrier":{"expectedTypes":["Organization"]},"deliveryAddress":{"expectedTypes":["PostalAddress"]},"deliveryStatus":{"expectedTypes":["DeliveryEvent"]},"expectedArrivalFrom":{"expectedTypes":["DateTime"]},"expectedArrivalUntil":{"expectedTypes":["DateTime"]},"hasDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"itemShipped":{"expectedTypes":["Product"]},"originAddress":{"expectedTypes":["PostalAddress"]},"partOfOrder":{"expectedTypes":["Order"]},"trackingNumber":{"expectedTypes":["Text"]},"trackingUrl":{"expectedTypes":["URL"]}}},"Permit":{"extends":"Intangible","properties":{"issuedBy":{"expectedTypes":["Organization"]},"issuedThrough":{"expectedTypes":["Service"]},"permitAudience":{"expectedTypes":["Audience"]},"validFor":{"expectedTypes":["Duration"]},"validFrom":{"expectedTypes":["DateTime"]},"validIn":{"expectedTypes":["AdministrativeArea"]},"validUntil":{"expectedTypes":["Date"]}}},"GovernmentPermit":{"extends":"Permit","properties":[]},"ProgramMembership":{"extends":"Intangible","properties":{"hostingOrganization":{"expectedTypes":["Organization"]},"member":{"expectedTypes":["Organization","Person"]},"membershipNumber":{"expectedTypes":["Text"]},"programName":{"expectedTypes":["Text"]}}},"Quantity":{"extends":"Intangible","properties":[]},"Distance":{"extends":"Quantity","properties":[]},"Duration":{"extends":"Quantity","properties":[]},"Energy":{"extends":"Quantity","properties":[]},"Mass":{"extends":"Quantity","properties":[]},"Rating":{"extends":"Intangible","properties":{"bestRating":{"expectedTypes":["Text","Number"]},"ratingValue":{"expectedTypes":["Text"]},"worstRating":{"expectedTypes":["Text","Number"]}}},"AggregateRating":{"extends":"Rating","properties":{"itemReviewed":{"expectedTypes":["Thing"]},"ratingCount":{"expectedTypes":["Number"]},"reviewCount":{"expectedTypes":["Number"]}}},"Reservation":{"extends":"Intangible","properties":{"bookingAgent":{"expectedTypes":["Organization","Person"]},"bookingTime":{"expectedTypes":["DateTime"]},"modifiedTime":{"expectedTypes":["DateTime"]},"priceCurrency":{"expectedTypes":["Text"]},"programMembershipUsed":{"expectedTypes":["ProgramMembership"]},"provider":{"expectedTypes":["Organization","Person"]},"reservationFor":{"expectedTypes":["Thing"]},"reservationId":{"expectedTypes":["Text"]},"reservationStatus":{"expectedTypes":["ReservationStatusType"]},"reservedTicket":{"expectedTypes":["Ticket"]},"totalPrice":{"expectedTypes":["Text","Number","PriceSpecification"]},"underName":{"expectedTypes":["Organization","Person"]}}},"BusReservation":{"extends":"Reservation","properties":[]},"EventReservation":{"extends":"Reservation","properties":[]},"FlightReservation":{"extends":"Reservation","properties":{"boardingGroup":{"expectedTypes":["Text"]}}},"FoodEstablishmentReservation":{"extends":"Reservation","properties":{"endTime":{"expectedTypes":["DateTime"]},"partySize":{"expectedTypes":["Number","QuantitativeValue"]},"startTime":{"expectedTypes":["DateTime"]}}},"LodgingReservation":{"extends":"Reservation","properties":{"checkinTime":{"expectedTypes":["DateTime"]},"checkoutTime":{"expectedTypes":["DateTime"]},"lodgingUnitDescription":{"expectedTypes":["Text"]},"lodgingUnitType":{"expectedTypes":["Text","QualitativeValue"]},"numAdults":{"expectedTypes":["Number","QuantitativeValue"]},"numChildren":{"expectedTypes":["Number","QuantitativeValue"]}}},"RentalCarReservation":{"extends":"Reservation","properties":{"dropoffLocation":{"expectedTypes":["Place"]},"dropoffTime":{"expectedTypes":["DateTime"]},"pickupLocation":{"expectedTypes":["Place"]},"pickupTime":{"expectedTypes":["DateTime"]}}},"ReservationPackage":{"extends":"Reservation","properties":{"subReservation":{"expectedTypes":["Reservation"]}}},"TaxiReservation":{"extends":"Reservation","properties":{"partySize":{"expectedTypes":["Number","QuantitativeValue"]},"pickupLocation":{"expectedTypes":["Place"]},"pickupTime":{"expectedTypes":["DateTime"]}}},"TrainReservation":{"extends":"Reservation","properties":[]},"Seat":{"extends":"Intangible","properties":{"seatNumber":{"expectedTypes":["Text"]},"seatRow":{"expectedTypes":["Text"]},"seatSection":{"expectedTypes":["Text"]},"seatingType":{"expectedTypes":["Text","QualitativeValue"]}}},"Service":{"extends":"Intangible","properties":{"availableChannel":{"expectedTypes":["ServiceChannel"]},"produces":{"expectedTypes":["Thing"]},"provider":{"expectedTypes":["Organization","Person"]},"serviceArea":{"expectedTypes":["AdministrativeArea"]},"serviceAudience":{"expectedTypes":["Audience"]},"serviceType":{"expectedTypes":["Text"]}}},"GovernmentService":{"extends":"Service","properties":{"serviceOperator":{"expectedTypes":["Organization"]}}},"Taxi":{"extends":"Service","properties":[]},"ServiceChannel":{"extends":"Intangible","properties":{"availableLanguage":{"expectedTypes":["Language"]},"processingTime":{"expectedTypes":["Duration"]},"providesService":{"expectedTypes":["Service"]},"serviceLocation":{"expectedTypes":["Place"]},"servicePhone":{"expectedTypes":["ContactPoint"]},"servicePostalAddress":{"expectedTypes":["PostalAddress"]},"serviceSmsNumber":{"expectedTypes":["ContactPoint"]},"serviceUrl":{"expectedTypes":["URL"]}}},"StructuredValue":{"extends":"Intangible","properties":[]},"ContactPoint":{"extends":"StructuredValue","properties":{"areaServed":{"expectedTypes":["AdministrativeArea"]},"availableLanguage":{"expectedTypes":["Language"]},"contactOption":{"expectedTypes":["ContactPointOption"]},"contactType":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"faxNumber":{"expectedTypes":["Text"]},"hoursAvailable":{"expectedTypes":["OpeningHoursSpecification"]},"productSupported":{"expectedTypes":["Text","Product"]},"telephone":{"expectedTypes":["Text"]}}},"PostalAddress":{"extends":"ContactPoint","properties":{"addressCountry":{"expectedTypes":["Country"]},"addressLocality":{"expectedTypes":["Text"]},"addressRegion":{"expectedTypes":["Text"]},"postOfficeBoxNumber":{"expectedTypes":["Text"]},"postalCode":{"expectedTypes":["Text"]},"streetAddress":{"expectedTypes":["Text"]}}},"GeoCoordinates":{"extends":"StructuredValue","properties":{"elevation":{"expectedTypes":["Text","Number"]},"latitude":{"expectedTypes":["Text","Number"]},"longitude":{"expectedTypes":["Text","Number"]}}},"GeoShape":{"extends":"StructuredValue","properties":{"box":{"expectedTypes":["Text"]},"circle":{"expectedTypes":["Text"]},"elevation":{"expectedTypes":["Text","Number"]},"line":{"expectedTypes":["Text"]},"polygon":{"expectedTypes":["Text"]}}},"NutritionInformation":{"extends":"StructuredValue","properties":{"calories":{"expectedTypes":["Energy"]},"carbohydrateContent":{"expectedTypes":["Mass"]},"cholesterolContent":{"expectedTypes":["Mass"]},"fatContent":{"expectedTypes":["Mass"]},"fiberContent":{"expectedTypes":["Mass"]},"proteinContent":{"expectedTypes":["Mass"]},"saturatedFatContent":{"expectedTypes":["Mass"]},"servingSize":{"expectedTypes":["Text"]},"sodiumContent":{"expectedTypes":["Mass"]},"sugarContent":{"expectedTypes":["Mass"]},"transFatContent":{"expectedTypes":["Mass"]},"unsaturatedFatContent":{"expectedTypes":["Mass"]}}},"OpeningHoursSpecification":{"extends":"StructuredValue","properties":{"closes":{"expectedTypes":["Time"]},"dayOfWeek":{"expectedTypes":["DayOfWeek"]},"opens":{"expectedTypes":["Time"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]}}},"OwnershipInfo":{"extends":"StructuredValue","properties":{"acquiredFrom":{"expectedTypes":["Organization","Person"]},"ownedFrom":{"expectedTypes":["DateTime"]},"ownedThrough":{"expectedTypes":["DateTime"]},"typeOfGood":{"expectedTypes":["Product"]}}},"PriceSpecification":{"extends":"StructuredValue","properties":{"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"maxPrice":{"expectedTypes":["Number"]},"minPrice":{"expectedTypes":["Number"]},"price":{"expectedTypes":["Text","Number"]},"priceCurrency":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"valueAddedTaxIncluded":{"expectedTypes":["Boolean"]}}},"DeliveryChargeSpecification":{"extends":"PriceSpecification","properties":{"appliesToDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"eligibleRegion":{"expectedTypes":["Text","GeoShape"]}}},"PaymentChargeSpecification":{"extends":"PriceSpecification","properties":{"appliesToDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"appliesToPaymentMethod":{"expectedTypes":["PaymentMethod"]}}},"UnitPriceSpecification":{"extends":"PriceSpecification","properties":{"billingIncrement":{"expectedTypes":["Number"]},"priceType":{"expectedTypes":["Text"]},"unitCode":{"expectedTypes":["Text"]}}},"QuantitativeValue":{"extends":"StructuredValue","properties":{"maxValue":{"expectedTypes":["Number"]},"minValue":{"expectedTypes":["Number"]},"unitCode":{"expectedTypes":["Text"]},"value":{"expectedTypes":["Number"]},"valueReference":{"expectedTypes":["StructuredValue","Enumeration"]}}},"TypeAndQuantityNode":{"extends":"StructuredValue","properties":{"amountOfThisGood":{"expectedTypes":["Number"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"typeOfGood":{"expectedTypes":["Product"]},"unitCode":{"expectedTypes":["Text"]}}},"WarrantyPromise":{"extends":"StructuredValue","properties":{"durationOfWarranty":{"expectedTypes":["QuantitativeValue"]},"warrantyScope":{"expectedTypes":["WarrantyScope"]}}},"Ticket":{"extends":"Intangible","properties":{"dateIssued":{"expectedTypes":["DateTime"]},"issuedBy":{"expectedTypes":["Organization"]},"priceCurrency":{"expectedTypes":["Text"]},"ticketNumber":{"expectedTypes":["Text"]},"ticketToken":{"expectedTypes":["Text","URL"]},"ticketedSeat":{"expectedTypes":["Seat"]},"totalPrice":{"expectedTypes":["Text","Number","PriceSpecification"]},"underName":{"expectedTypes":["Person","Organization"]}}},"TrainTrip":{"extends":"Intangible","properties":{"arrivalPlatform":{"expectedTypes":["Text"]},"arrivalStation":{"expectedTypes":["TrainStation"]},"arrivalTime":{"expectedTypes":["DateTime"]},"departurePlatform":{"expectedTypes":["Text"]},"departureStation":{"expectedTypes":["TrainStation"]},"departureTime":{"expectedTypes":["DateTime"]},"provider":{"expectedTypes":["Organization","Person"]},"trainName":{"expectedTypes":["Text"]},"trainNumber":{"expectedTypes":["Text"]}}},"MedicalEntity":{"extends":"Thing","properties":{"alternateName":{"expectedTypes":["Text"]},"code":{"expectedTypes":["MedicalCode"]},"guideline":{"expectedTypes":["MedicalGuideline"]},"medicineSystem":{"expectedTypes":["MedicineSystem"]},"recognizingAuthority":{"expectedTypes":["Organization"]},"relevantSpecialty":{"expectedTypes":["MedicalSpecialty"]},"study":{"expectedTypes":["MedicalStudy"]}}},"AnatomicalStructure":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"bodyLocation":{"expectedTypes":["Text"]},"connectedTo":{"expectedTypes":["AnatomicalStructure"]},"diagram":{"expectedTypes":["ImageObject"]},"function":{"expectedTypes":["Text"]},"partOfSystem":{"expectedTypes":["AnatomicalSystem"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]},"subStructure":{"expectedTypes":["AnatomicalStructure"]}}},"Bone":{"extends":"AnatomicalStructure","properties":[]},"BrainStructure":{"extends":"AnatomicalStructure","properties":[]},"Joint":{"extends":"AnatomicalStructure","properties":{"biomechnicalClass":{"expectedTypes":["Text"]},"functionalClass":{"expectedTypes":["Text"]},"structuralClass":{"expectedTypes":["Text"]}}},"Ligament":{"extends":"AnatomicalStructure","properties":[]},"Muscle":{"extends":"AnatomicalStructure","properties":{"antagonist":{"expectedTypes":["Muscle"]},"bloodSupply":{"expectedTypes":["Vessel"]},"insertion":{"expectedTypes":["AnatomicalStructure"]},"muscleAction":{"expectedTypes":["Text"]},"nerve":{"expectedTypes":["Nerve"]},"origin":{"expectedTypes":["AnatomicalStructure"]}}},"Nerve":{"extends":"AnatomicalStructure","properties":{"branch":{"expectedTypes":["Nerve","AnatomicalStructure"]},"nerveMotor":{"expectedTypes":["Muscle"]},"sensoryUnit":{"expectedTypes":["SuperficialAnatomy","AnatomicalStructure"]},"sourcedFrom":{"expectedTypes":["BrainStructure"]}}},"Vessel":{"extends":"AnatomicalStructure","properties":[]},"Artery":{"extends":"Vessel","properties":{"arterialBranch":{"expectedTypes":["AnatomicalStructure"]},"source":{"expectedTypes":["AnatomicalStructure"]},"supplyTo":{"expectedTypes":["AnatomicalStructure"]}}},"LymphaticVessel":{"extends":"Vessel","properties":{"originatesFrom":{"expectedTypes":["Vessel"]},"regionDrained":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"runsTo":{"expectedTypes":["Vessel"]}}},"Vein":{"extends":"Vessel","properties":{"drainsTo":{"expectedTypes":["Vessel"]},"regionDrained":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"tributary":{"expectedTypes":["AnatomicalStructure"]}}},"AnatomicalSystem":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"comprisedOf":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedStructure":{"expectedTypes":["AnatomicalStructure"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]}}},"MedicalCause":{"extends":"MedicalEntity","properties":{"causeOf":{"expectedTypes":["MedicalEntity"]}}},"MedicalCondition":{"extends":"MedicalEntity","properties":{"associatedAnatomy":{"expectedTypes":["SuperficialAnatomy","AnatomicalSystem","AnatomicalStructure"]},"cause":{"expectedTypes":["MedicalCause"]},"differentialDiagnosis":{"expectedTypes":["DDxElement"]},"epidemiology":{"expectedTypes":["Text"]},"expectedPrognosis":{"expectedTypes":["Text"]},"naturalProgression":{"expectedTypes":["Text"]},"pathophysiology":{"expectedTypes":["Text"]},"possibleComplication":{"expectedTypes":["Text"]},"possibleTreatment":{"expectedTypes":["MedicalTherapy"]},"primaryPrevention":{"expectedTypes":["MedicalTherapy"]},"riskFactor":{"expectedTypes":["MedicalRiskFactor"]},"secondaryPrevention":{"expectedTypes":["MedicalTherapy"]},"signOrSymptom":{"expectedTypes":["MedicalSignOrSymptom"]},"stage":{"expectedTypes":["MedicalConditionStage"]},"subtype":{"expectedTypes":["Text"]},"typicalTest":{"expectedTypes":["MedicalTest"]}}},"InfectiousDisease":{"extends":"MedicalCondition","properties":{"infectiousAgent":{"expectedTypes":["Text"]},"infectiousAgentClass":{"expectedTypes":["InfectiousAgentClass"]},"transmissionMethod":{"expectedTypes":["Text"]}}},"MedicalContraindication":{"extends":"MedicalEntity","properties":[]},"MedicalDevice":{"extends":"MedicalEntity","properties":{"adverseOutcome":{"expectedTypes":["MedicalEntity"]},"contraindication":{"expectedTypes":["MedicalContraindication"]},"indication":{"expectedTypes":["MedicalIndication"]},"postOp":{"expectedTypes":["Text"]},"preOp":{"expectedTypes":["Text"]},"procedure":{"expectedTypes":["Text"]},"purpose":{"expectedTypes":["Thing","MedicalDevicePurpose"]},"seriousAdverseOutcome":{"expectedTypes":["MedicalEntity"]}}},"MedicalGuideline":{"extends":"MedicalEntity","properties":{"evidenceLevel":{"expectedTypes":["MedicalEvidenceLevel"]},"evidenceOrigin":{"expectedTypes":["Text"]},"guidelineDate":{"expectedTypes":["Date"]},"guidelineSubject":{"expectedTypes":["MedicalEntity"]}}},"MedicalGuidelineContraindication":{"extends":"MedicalGuideline","properties":[]},"MedicalGuidelineRecommendation":{"extends":"MedicalGuideline","properties":{"recommendationStrength":{"expectedTypes":["Text"]}}},"MedicalIndication":{"extends":"MedicalEntity","properties":[]},"ApprovedIndication":{"extends":"MedicalIndication","properties":[]},"PreventionIndication":{"extends":"MedicalIndication","properties":[]},"TreatmentIndication":{"extends":"MedicalIndication","properties":[]},"MedicalIntangible":{"extends":"MedicalEntity","properties":[]},"DDxElement":{"extends":"MedicalIntangible","properties":{"diagnosis":{"expectedTypes":["MedicalCondition"]},"distinguishingSign":{"expectedTypes":["MedicalSignOrSymptom"]}}},"DoseSchedule":{"extends":"MedicalIntangible","properties":{"doseUnit":{"expectedTypes":["Text"]},"doseValue":{"expectedTypes":["Number"]},"frequency":{"expectedTypes":["Text"]},"targetPopulation":{"expectedTypes":["Text"]}}},"MaximumDoseSchedule":{"extends":"DoseSchedule","properties":[]},"RecommendedDoseSchedule":{"extends":"DoseSchedule","properties":[]},"ReportedDoseSchedule":{"extends":"DoseSchedule","properties":[]},"DrugCost":{"extends":"MedicalIntangible","properties":{"applicableLocation":{"expectedTypes":["AdministrativeArea"]},"costCategory":{"expectedTypes":["DrugCostCategory"]},"costCurrency":{"expectedTypes":["Text"]},"costOrigin":{"expectedTypes":["Text"]},"costPerUnit":{"expectedTypes":["Text","Number"]},"drugUnit":{"expectedTypes":["Text"]}}},"DrugLegalStatus":{"extends":"MedicalIntangible","properties":{"applicableLocation":{"expectedTypes":["AdministrativeArea"]}}},"DrugStrength":{"extends":"MedicalIntangible","properties":{"activeIngredient":{"expectedTypes":["Text"]},"availableIn":{"expectedTypes":["AdministrativeArea"]},"strengthUnit":{"expectedTypes":["Text"]},"strengthValue":{"expectedTypes":["Number"]}}},"MedicalCode":{"extends":"MedicalIntangible","properties":{"codeValue":{"expectedTypes":["Text"]},"codingSystem":{"expectedTypes":["Text"]}}},"MedicalConditionStage":{"extends":"MedicalIntangible","properties":{"stageAsNumber":{"expectedTypes":["Number"]},"subStageSuffix":{"expectedTypes":["Text"]}}},"MedicalEnumeration":{"extends":"MedicalIntangible","properties":[]},"DrugCostCategory":{"extends":"MedicalEnumeration","properties":[]},"DrugPregnancyCategory":{"extends":"MedicalEnumeration","properties":[]},"DrugPrescriptionStatus":{"extends":"MedicalEnumeration","properties":[]},"InfectiousAgentClass":{"extends":"MedicalEnumeration","properties":[]},"MedicalDevicePurpose":{"extends":"MedicalEnumeration","properties":[]},"MedicalEvidenceLevel":{"extends":"MedicalEnumeration","properties":[]},"MedicalImagingTechnique":{"extends":"MedicalEnumeration","properties":[]},"MedicalObservationalStudyDesign":{"extends":"MedicalEnumeration","properties":[]},"MedicalProcedureType":{"extends":"MedicalEnumeration","properties":[]},"MedicalStudyStatus":{"extends":"MedicalEnumeration","properties":[]},"MedicalTrialDesign":{"extends":"MedicalEnumeration","properties":[]},"MedicineSystem":{"extends":"MedicalEnumeration","properties":[]},"PhysicalActivityCategory":{"extends":"MedicalEnumeration","properties":[]},"PhysicalExam":{"extends":"MedicalEnumeration","properties":[]},"MedicalProcedure":{"extends":"MedicalEntity","properties":{"followup":{"expectedTypes":["Text"]},"howPerformed":{"expectedTypes":["Text"]},"preparation":{"expectedTypes":["Text"]},"procedureType":{"expectedTypes":["MedicalProcedureType"]}}},"DiagnosticProcedure":{"extends":"MedicalProcedure","properties":[]},"PalliativeProcedure":{"extends":"MedicalTherapy","properties":[]},"TherapeuticProcedure":{"extends":"MedicalTherapy","properties":[]},"MedicalRiskEstimator":{"extends":"MedicalEntity","properties":{"estimatesRiskOf":{"expectedTypes":["MedicalEntity"]},"includedRiskFactor":{"expectedTypes":["MedicalRiskFactor"]}}},"MedicalRiskCalculator":{"extends":"MedicalRiskEstimator","properties":[]},"MedicalRiskScore":{"extends":"MedicalRiskEstimator","properties":{"algorithm":{"expectedTypes":["Text"]}}},"MedicalRiskFactor":{"extends":"MedicalEntity","properties":{"increasesRiskOf":{"expectedTypes":["MedicalEntity"]}}},"MedicalSignOrSymptom":{"extends":"MedicalEntity","properties":{"cause":{"expectedTypes":["MedicalCause"]},"possibleTreatment":{"expectedTypes":["MedicalTherapy"]}}},"MedicalSign":{"extends":"MedicalSignOrSymptom","properties":{"identifyingExam":{"expectedTypes":["PhysicalExam"]},"identifyingTest":{"expectedTypes":["MedicalTest"]}}},"MedicalSymptom":{"extends":"MedicalSignOrSymptom","properties":[]},"MedicalStudy":{"extends":"MedicalEntity","properties":{"outcome":{"expectedTypes":["Text"]},"population":{"expectedTypes":["Text"]},"sponsor":{"expectedTypes":["Organization"]},"status":{"expectedTypes":["MedicalStudyStatus"]},"studyLocation":{"expectedTypes":["AdministrativeArea"]},"studySubject":{"expectedTypes":["MedicalEntity"]}}},"MedicalObservationalStudy":{"extends":"MedicalStudy","properties":{"studyDesign":{"expectedTypes":["MedicalObservationalStudyDesign"]}}},"MedicalTrial":{"extends":"MedicalStudy","properties":{"phase":{"expectedTypes":["Text"]},"trialDesign":{"expectedTypes":["MedicalTrialDesign"]}}},"MedicalTest":{"extends":"MedicalEntity","properties":{"affectedBy":{"expectedTypes":["Drug"]},"normalRange":{"expectedTypes":["Text"]},"signDetected":{"expectedTypes":["MedicalSign"]},"usedToDiagnose":{"expectedTypes":["MedicalCondition"]},"usesDevice":{"expectedTypes":["MedicalDevice"]}}},"BloodTest":{"extends":"MedicalTest","properties":[]},"ImagingTest":{"extends":"MedicalTest","properties":{"imagingTechnique":{"expectedTypes":["MedicalImagingTechnique"]}}},"MedicalTestPanel":{"extends":"MedicalTest","properties":{"subTest":{"expectedTypes":["MedicalTest"]}}},"PathologyTest":{"extends":"MedicalTest","properties":{"tissueSample":{"expectedTypes":["Text"]}}},"MedicalTherapy":{"extends":"MedicalEntity","properties":{"adverseOutcome":{"expectedTypes":["MedicalEntity"]},"contraindication":{"expectedTypes":["MedicalContraindication"]},"duplicateTherapy":{"expectedTypes":["MedicalTherapy"]},"indication":{"expectedTypes":["MedicalIndication"]},"seriousAdverseOutcome":{"expectedTypes":["MedicalEntity"]}}},"DietarySupplement":{"extends":"MedicalTherapy","properties":{"activeIngredient":{"expectedTypes":["Text"]},"background":{"expectedTypes":["Text"]},"dosageForm":{"expectedTypes":["Text"]},"isProprietary":{"expectedTypes":["Boolean"]},"legalStatus":{"expectedTypes":["DrugLegalStatus"]},"manufacturer":{"expectedTypes":["Organization"]},"maximumIntake":{"expectedTypes":["MaximumDoseSchedule"]},"mechanismOfAction":{"expectedTypes":["Text"]},"nonProprietaryName":{"expectedTypes":["Text"]},"recommendedIntake":{"expectedTypes":["RecommendedDoseSchedule"]},"safetyConsideration":{"expectedTypes":["Text"]},"targetPopulation":{"expectedTypes":["Text"]}}},"Drug":{"extends":"MedicalTherapy","properties":{"activeIngredient":{"expectedTypes":["Text"]},"administrationRoute":{"expectedTypes":["Text"]},"alcoholWarning":{"expectedTypes":["Text"]},"availableStrength":{"expectedTypes":["DrugStrength"]},"breastfeedingWarning":{"expectedTypes":["Text"]},"clincalPharmacology":{"expectedTypes":["Text"]},"cost":{"expectedTypes":["DrugCost"]},"dosageForm":{"expectedTypes":["Text"]},"doseSchedule":{"expectedTypes":["DoseSchedule"]},"drugClass":{"expectedTypes":["DrugClass"]},"foodWarning":{"expectedTypes":["Text"]},"interactingDrug":{"expectedTypes":["Drug"]},"isAvailableGenerically":{"expectedTypes":["Boolean"]},"isProprietary":{"expectedTypes":["Boolean"]},"labelDetails":{"expectedTypes":["URL"]},"legalStatus":{"expectedTypes":["DrugLegalStatus"]},"manufacturer":{"expectedTypes":["Organization"]},"mechanismOfAction":{"expectedTypes":["Text"]},"nonProprietaryName":{"expectedTypes":["Text"]},"overdosage":{"expectedTypes":["Text"]},"pregnancyCategory":{"expectedTypes":["DrugPregnancyCategory"]},"pregnancyWarning":{"expectedTypes":["Text"]},"prescribingInfo":{"expectedTypes":["URL"]},"prescriptionStatus":{"expectedTypes":["DrugPrescriptionStatus"]},"relatedDrug":{"expectedTypes":["Drug"]},"warning":{"expectedTypes":["Text","URL"]}}},"DrugClass":{"extends":"MedicalTherapy","properties":{"drug":{"expectedTypes":["Drug"]}}},"LifestyleModification":{"extends":"MedicalTherapy","properties":[]},"PhysicalActivity":{"extends":"LifestyleModification","properties":{"associatedAnatomy":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem","SuperficialAnatomy"]},"category":{"expectedTypes":["PhysicalActivityCategory","Text","Thing"]},"epidemiology":{"expectedTypes":["Text"]},"pathophysiology":{"expectedTypes":["Text"]}}},"PhysicalTherapy":{"extends":"MedicalTherapy","properties":[]},"PsychologicalTreatment":{"extends":"MedicalTherapy","properties":[]},"RadiationTherapy":{"extends":"MedicalTherapy","properties":[]},"SuperficialAnatomy":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"relatedAnatomy":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]},"significance":{"expectedTypes":["Text"]}}},"Organization":{"extends":"Thing","properties":{"address":{"expectedTypes":["PostalAddress"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"brand":{"expectedTypes":["Brand","Organization"]},"contactPoint":{"expectedTypes":["ContactPoint"]},"department":{"expectedTypes":["Organization"]},"dissolutionDate":{"expectedTypes":["Date"]},"duns":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"employee":{"expectedTypes":["Person"]},"event":{"expectedTypes":["Event"]},"faxNumber":{"expectedTypes":["Text"]},"founder":{"expectedTypes":["Person"]},"foundingDate":{"expectedTypes":["Date"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasPOS":{"expectedTypes":["Place"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"legalName":{"expectedTypes":["Text"]},"location":{"expectedTypes":["Place","PostalAddress"]},"logo":{"expectedTypes":["URL","ImageObject"]},"makesOffer":{"expectedTypes":["Offer"]},"member":{"expectedTypes":["Person","Organization"]},"memberOf":{"expectedTypes":["Organization","ProgramMembership"]},"naics":{"expectedTypes":["Text"]},"owns":{"expectedTypes":["OwnershipInfo","Product"]},"review":{"expectedTypes":["Review"]},"seeks":{"expectedTypes":["Demand"]},"subOrganization":{"expectedTypes":["Organization"]},"taxID":{"expectedTypes":["Text"]},"telephone":{"expectedTypes":["Text"]},"vatID":{"expectedTypes":["Text"]}}},"Airline":{"extends":"Organization","properties":{"iataCode":{"expectedTypes":["Text"]}}},"Corporation":{"extends":"Organization","properties":{"tickerSymbol":{"expectedTypes":["Text"]}}},"EducationalOrganization":{"extends":"Organization","properties":{"alumni":{"expectedTypes":["Person"]}}},"CollegeOrUniversity":{"extends":"EducationalOrganization","properties":[]},"ElementarySchool":{"extends":"EducationalOrganization","properties":[]},"HighSchool":{"extends":"EducationalOrganization","properties":[]},"MiddleSchool":{"extends":"EducationalOrganization","properties":[]},"Preschool":{"extends":"EducationalOrganization","properties":[]},"School":{"extends":"EducationalOrganization","properties":[]},"GovernmentOrganization":{"extends":"Organization","properties":[]},"LocalBusiness":{"extends":"Organization","properties":{"branchOf":{"expectedTypes":["Organization"]},"currenciesAccepted":{"expectedTypes":["Text"]},"openingHours":{"expectedTypes":["Duration"]},"paymentAccepted":{"expectedTypes":["Text"]},"priceRange":{"expectedTypes":["Text"]}}},"AnimalShelter":{"extends":"LocalBusiness","properties":[]},"AutomotiveBusiness":{"extends":"LocalBusiness","properties":[]},"AutoBodyShop":{"extends":"AutomotiveBusiness","properties":[]},"AutoDealer":{"extends":"AutomotiveBusiness","properties":[]},"AutoPartsStore":{"extends":"AutomotiveBusiness","properties":[]},"AutoRental":{"extends":"AutomotiveBusiness","properties":[]},"AutoRepair":{"extends":"AutomotiveBusiness","properties":[]},"AutoWash":{"extends":"AutomotiveBusiness","properties":[]},"GasStation":{"extends":"AutomotiveBusiness","properties":[]},"MotorcycleDealer":{"extends":"AutomotiveBusiness","properties":[]},"MotorcycleRepair":{"extends":"AutomotiveBusiness","properties":[]},"ChildCare":{"extends":"LocalBusiness","properties":[]},"DryCleaningOrLaundry":{"extends":"LocalBusiness","properties":[]},"EmergencyService":{"extends":"LocalBusiness","properties":[]},"FireStation":{"extends":"EmergencyService","properties":[]},"Hospital":{"extends":"EmergencyService","properties":{"availableService":{"expectedTypes":["MedicalTherapy","MedicalProcedure","MedicalTest"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"PoliceStation":{"extends":"EmergencyService","properties":[]},"EmploymentAgency":{"extends":"LocalBusiness","properties":[]},"EntertainmentBusiness":{"extends":"LocalBusiness","properties":[]},"AdultEntertainment":{"extends":"EntertainmentBusiness","properties":[]},"AmusementPark":{"extends":"EntertainmentBusiness","properties":[]},"ArtGallery":{"extends":"EntertainmentBusiness","properties":[]},"Casino":{"extends":"EntertainmentBusiness","properties":[]},"ComedyClub":{"extends":"EntertainmentBusiness","properties":[]},"MovieTheater":{"extends":"EntertainmentBusiness","properties":[]},"NightClub":{"extends":"EntertainmentBusiness","properties":[]},"FinancialService":{"extends":"LocalBusiness","properties":[]},"AccountingService":{"extends":"ProfessionalService","properties":[]},"AutomatedTeller":{"extends":"FinancialService","properties":[]},"BankOrCreditUnion":{"extends":"FinancialService","properties":[]},"InsuranceAgency":{"extends":"FinancialService","properties":[]},"FoodEstablishment":{"extends":"LocalBusiness","properties":{"acceptsReservations":{"expectedTypes":["Boolean","URL","Text"]},"menu":{"expectedTypes":["URL","Text"]},"servesCuisine":{"expectedTypes":["Text"]}}},"Bakery":{"extends":"FoodEstablishment","properties":[]},"BarOrPub":{"extends":"FoodEstablishment","properties":[]},"Brewery":{"extends":"FoodEstablishment","properties":[]},"CafeOrCoffeeShop":{"extends":"FoodEstablishment","properties":[]},"FastFoodRestaurant":{"extends":"FoodEstablishment","properties":[]},"IceCreamShop":{"extends":"FoodEstablishment","properties":[]},"Restaurant":{"extends":"FoodEstablishment","properties":[]},"Winery":{"extends":"FoodEstablishment","properties":[]},"GovernmentOffice":{"extends":"LocalBusiness","properties":[]},"PostOffice":{"extends":"GovernmentOffice","properties":[]},"HealthAndBeautyBusiness":{"extends":"LocalBusiness","properties":[]},"BeautySalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"DaySpa":{"extends":"HealthAndBeautyBusiness","properties":[]},"HairSalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"HealthClub":{"extends":"HealthAndBeautyBusiness","properties":[]},"NailSalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"TattooParlor":{"extends":"HealthAndBeautyBusiness","properties":[]},"HomeAndConstructionBusiness":{"extends":"LocalBusiness","properties":[]},"Electrician":{"extends":"ProfessionalService","properties":[]},"GeneralContractor":{"extends":"ProfessionalService","properties":[]},"HVACBusiness":{"extends":"HomeAndConstructionBusiness","properties":[]},"HousePainter":{"extends":"ProfessionalService","properties":[]},"Locksmith":{"extends":"ProfessionalService","properties":[]},"MovingCompany":{"extends":"HomeAndConstructionBusiness","properties":[]},"Plumber":{"extends":"ProfessionalService","properties":[]},"RoofingContractor":{"extends":"ProfessionalService","properties":[]},"InternetCafe":{"extends":"LocalBusiness","properties":[]},"Library":{"extends":"LocalBusiness","properties":[]},"LodgingBusiness":{"extends":"LocalBusiness","properties":[]},"BedAndBreakfast":{"extends":"LodgingBusiness","properties":[]},"Hostel":{"extends":"LodgingBusiness","properties":[]},"Hotel":{"extends":"LodgingBusiness","properties":[]},"Motel":{"extends":"LodgingBusiness","properties":[]},"MedicalOrganization":{"extends":"LocalBusiness","properties":[]},"Dentist":{"extends":"ProfessionalService","properties":[]},"DiagnosticLab":{"extends":"MedicalOrganization","properties":{"availableTest":{"expectedTypes":["MedicalTest"]}}},"MedicalClinic":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalTherapy","MedicalProcedure","MedicalTest"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"Optician":{"extends":"MedicalOrganization","properties":[]},"Pharmacy":{"extends":"MedicalOrganization","properties":[]},"Physician":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalTherapy","MedicalProcedure","MedicalTest"]},"hospitalAffiliation":{"expectedTypes":["Hospital"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"VeterinaryCare":{"extends":"MedicalOrganization","properties":[]},"ProfessionalService":{"extends":"LocalBusiness","properties":[]},"Attorney":{"extends":"ProfessionalService","properties":[]},"Notary":{"extends":"ProfessionalService","properties":[]},"RadioStation":{"extends":"LocalBusiness","properties":[]},"RealEstateAgent":{"extends":"LocalBusiness","properties":[]},"RecyclingCenter":{"extends":"LocalBusiness","properties":[]},"SelfStorage":{"extends":"LocalBusiness","properties":[]},"ShoppingCenter":{"extends":"LocalBusiness","properties":[]},"SportsActivityLocation":{"extends":"LocalBusiness","properties":[]},"BowlingAlley":{"extends":"SportsActivityLocation","properties":[]},"ExerciseGym":{"extends":"SportsActivityLocation","properties":[]},"GolfCourse":{"extends":"SportsActivityLocation","properties":[]},"PublicSwimmingPool":{"extends":"SportsActivityLocation","properties":[]},"SkiResort":{"extends":"SportsActivityLocation","properties":[]},"SportsClub":{"extends":"SportsActivityLocation","properties":[]},"StadiumOrArena":{"extends":"CivicStructure","properties":[]},"TennisComplex":{"extends":"SportsActivityLocation","properties":[]},"Store":{"extends":"LocalBusiness","properties":[]},"BikeStore":{"extends":"Store","properties":[]},"BookStore":{"extends":"Store","properties":[]},"ClothingStore":{"extends":"Store","properties":[]},"ComputerStore":{"extends":"Store","properties":[]},"ConvenienceStore":{"extends":"Store","properties":[]},"DepartmentStore":{"extends":"Store","properties":[]},"ElectronicsStore":{"extends":"Store","properties":[]},"Florist":{"extends":"Store","properties":[]},"FurnitureStore":{"extends":"Store","properties":[]},"GardenStore":{"extends":"Store","properties":[]},"GroceryStore":{"extends":"Store","properties":[]},"HardwareStore":{"extends":"Store","properties":[]},"HobbyShop":{"extends":"Store","properties":[]},"HomeGoodsStore":{"extends":"Store","properties":[]},"JewelryStore":{"extends":"Store","properties":[]},"LiquorStore":{"extends":"Store","properties":[]},"MensClothingStore":{"extends":"Store","properties":[]},"MobilePhoneStore":{"extends":"Store","properties":[]},"MovieRentalStore":{"extends":"Store","properties":[]},"MusicStore":{"extends":"Store","properties":[]},"OfficeEquipmentStore":{"extends":"Store","properties":[]},"OutletStore":{"extends":"Store","properties":[]},"PawnShop":{"extends":"Store","properties":[]},"PetStore":{"extends":"Store","properties":[]},"ShoeStore":{"extends":"Store","properties":[]},"SportingGoodsStore":{"extends":"Store","properties":[]},"TireShop":{"extends":"Store","properties":[]},"ToyStore":{"extends":"Store","properties":[]},"WholesaleStore":{"extends":"Store","properties":[]},"TelevisionStation":{"extends":"LocalBusiness","properties":[]},"TouristInformationCenter":{"extends":"LocalBusiness","properties":[]},"TravelAgency":{"extends":"LocalBusiness","properties":[]},"NGO":{"extends":"Organization","properties":[]},"PerformingGroup":{"extends":"Organization","properties":[]},"DanceGroup":{"extends":"PerformingGroup","properties":[]},"MusicGroup":{"extends":"PerformingGroup","properties":{"album":{"expectedTypes":["MusicAlbum"]},"track":{"expectedTypes":["MusicRecording"]}}},"TheaterGroup":{"extends":"PerformingGroup","properties":[]},"SportsTeam":{"extends":"Organization","properties":[]},"Person":{"extends":"Thing","properties":{"additionalName":{"expectedTypes":["Text"]},"address":{"expectedTypes":["PostalAddress"]},"affiliation":{"expectedTypes":["Organization"]},"alumniOf":{"expectedTypes":["EducationalOrganization"]},"award":{"expectedTypes":["Text"]},"birthDate":{"expectedTypes":["Date"]},"brand":{"expectedTypes":["Brand","Organization"]},"children":{"expectedTypes":["Person"]},"colleague":{"expectedTypes":["Person"]},"contactPoint":{"expectedTypes":["ContactPoint"]},"deathDate":{"expectedTypes":["Date"]},"duns":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"familyName":{"expectedTypes":["Text"]},"faxNumber":{"expectedTypes":["Text"]},"follows":{"expectedTypes":["Person"]},"gender":{"expectedTypes":["Text"]},"givenName":{"expectedTypes":["Text"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasPOS":{"expectedTypes":["Place"]},"homeLocation":{"expectedTypes":["ContactPoint","Place"]},"honorificPrefix":{"expectedTypes":["Text"]},"honorificSuffix":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"jobTitle":{"expectedTypes":["Text"]},"knows":{"expectedTypes":["Person"]},"makesOffer":{"expectedTypes":["Offer"]},"memberOf":{"expectedTypes":["Organization","ProgramMembership"]},"naics":{"expectedTypes":["Text"]},"nationality":{"expectedTypes":["Country"]},"owns":{"expectedTypes":["OwnershipInfo","Product"]},"parent":{"expectedTypes":["Person"]},"performerIn":{"expectedTypes":["Event"]},"relatedTo":{"expectedTypes":["Person"]},"seeks":{"expectedTypes":["Demand"]},"sibling":{"expectedTypes":["Person"]},"spouse":{"expectedTypes":["Person"]},"taxID":{"expectedTypes":["Text"]},"telephone":{"expectedTypes":["Text"]},"vatID":{"expectedTypes":["Text"]},"workLocation":{"expectedTypes":["ContactPoint","Place"]},"worksFor":{"expectedTypes":["Organization"]}}},"Place":{"extends":"Thing","properties":{"address":{"expectedTypes":["PostalAddress"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"containedIn":{"expectedTypes":["Place"]},"event":{"expectedTypes":["Event"]},"faxNumber":{"expectedTypes":["Text"]},"geo":{"expectedTypes":["GeoCoordinates","GeoShape"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasMap":{"expectedTypes":["Map","URL"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"logo":{"expectedTypes":["URL","ImageObject"]},"openingHoursSpecification":{"expectedTypes":["OpeningHoursSpecification"]},"photo":{"expectedTypes":["ImageObject","Photograph"]},"review":{"expectedTypes":["Review"]},"telephone":{"expectedTypes":["Text"]}}},"AdministrativeArea":{"extends":"Place","properties":[]},"City":{"extends":"AdministrativeArea","properties":[]},"Country":{"extends":"AdministrativeArea","properties":[]},"State":{"extends":"AdministrativeArea","properties":[]},"CivicStructure":{"extends":"Place","properties":{"openingHours":{"expectedTypes":["Duration"]}}},"Airport":{"extends":"CivicStructure","properties":{"iataCode":{"expectedTypes":["Text"]},"icaoCode":{"expectedTypes":["Text"]}}},"Aquarium":{"extends":"CivicStructure","properties":[]},"Beach":{"extends":"CivicStructure","properties":[]},"BusStation":{"extends":"CivicStructure","properties":[]},"BusStop":{"extends":"CivicStructure","properties":[]},"Campground":{"extends":"CivicStructure","properties":[]},"Cemetery":{"extends":"CivicStructure","properties":[]},"Crematorium":{"extends":"CivicStructure","properties":[]},"EventVenue":{"extends":"CivicStructure","properties":[]},"GovernmentBuilding":{"extends":"CivicStructure","properties":[]},"CityHall":{"extends":"GovernmentBuilding","properties":[]},"Courthouse":{"extends":"GovernmentBuilding","properties":[]},"DefenceEstablishment":{"extends":"GovernmentBuilding","properties":[]},"Embassy":{"extends":"GovernmentBuilding","properties":[]},"LegislativeBuilding":{"extends":"GovernmentBuilding","properties":[]},"Museum":{"extends":"CivicStructure","properties":[]},"MusicVenue":{"extends":"CivicStructure","properties":[]},"Park":{"extends":"CivicStructure","properties":[]},"ParkingFacility":{"extends":"CivicStructure","properties":[]},"PerformingArtsTheater":{"extends":"CivicStructure","properties":[]},"PlaceOfWorship":{"extends":"CivicStructure","properties":[]},"BuddhistTemple":{"extends":"PlaceOfWorship","properties":[]},"CatholicChurch":{"extends":"PlaceOfWorship","properties":[]},"Church":{"extends":"PlaceOfWorship","properties":[]},"HinduTemple":{"extends":"PlaceOfWorship","properties":[]},"Mosque":{"extends":"PlaceOfWorship","properties":[]},"Synagogue":{"extends":"PlaceOfWorship","properties":[]},"Playground":{"extends":"CivicStructure","properties":[]},"RVPark":{"extends":"CivicStructure","properties":[]},"SubwayStation":{"extends":"CivicStructure","properties":[]},"TaxiStand":{"extends":"CivicStructure","properties":[]},"TrainStation":{"extends":"CivicStructure","properties":[]},"Zoo":{"extends":"CivicStructure","properties":[]},"Landform":{"extends":"Place","properties":[]},"BodyOfWater":{"extends":"Landform","properties":[]},"Canal":{"extends":"BodyOfWater","properties":[]},"LakeBodyOfWater":{"extends":"BodyOfWater","properties":[]},"OceanBodyOfWater":{"extends":"BodyOfWater","properties":[]},"Pond":{"extends":"BodyOfWater","properties":[]},"Reservoir":{"extends":"BodyOfWater","properties":[]},"RiverBodyOfWater":{"extends":"BodyOfWater","properties":[]},"SeaBodyOfWater":{"extends":"BodyOfWater","properties":[]},"Waterfall":{"extends":"BodyOfWater","properties":[]},"Continent":{"extends":"Landform","properties":[]},"Mountain":{"extends":"Landform","properties":[]},"Volcano":{"extends":"Landform","properties":[]},"LandmarksOrHistoricalBuildings":{"extends":"Place","properties":[]},"Residence":{"extends":"Place","properties":[]},"ApartmentComplex":{"extends":"Residence","properties":[]},"GatedResidenceCommunity":{"extends":"Residence","properties":[]},"SingleFamilyResidence":{"extends":"Residence","properties":[]},"TouristAttraction":{"extends":"Place","properties":[]},"Product":{"extends":"Thing","properties":{"aggregateRating":{"expectedTypes":["AggregateRating"]},"audience":{"expectedTypes":["Audience"]},"brand":{"expectedTypes":["Brand","Organization"]},"color":{"expectedTypes":["Text"]},"depth":{"expectedTypes":["QuantitativeValue","Distance"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"height":{"expectedTypes":["QuantitativeValue","Distance"]},"isAccessoryOrSparePartFor":{"expectedTypes":["Product"]},"isConsumableFor":{"expectedTypes":["Product"]},"isRelatedTo":{"expectedTypes":["Product"]},"isSimilarTo":{"expectedTypes":["Product"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"logo":{"expectedTypes":["URL","ImageObject"]},"manufacturer":{"expectedTypes":["Organization"]},"model":{"expectedTypes":["ProductModel","Text"]},"mpn":{"expectedTypes":["Text"]},"offers":{"expectedTypes":["Offer"]},"productID":{"expectedTypes":["Text"]},"releaseDate":{"expectedTypes":["Date"]},"review":{"expectedTypes":["Review"]},"sku":{"expectedTypes":["Text"]},"weight":{"expectedTypes":["QuantitativeValue"]},"width":{"expectedTypes":["QuantitativeValue","Distance"]}}},"IndividualProduct":{"extends":"Product","properties":{"serialNumber":{"expectedTypes":["Text"]}}},"ProductModel":{"extends":"Product","properties":{"isVariantOf":{"expectedTypes":["ProductModel"]},"predecessorOf":{"expectedTypes":["ProductModel"]},"successorOf":{"expectedTypes":["ProductModel"]}}},"SomeProducts":{"extends":"Product","properties":{"inventoryLevel":{"expectedTypes":["QuantitativeValue"]}}},"Vehicle":{"extends":"Product","properties":[]},"Car":{"extends":"Vehicle","properties":[]},"Property":{"extends":"Intangible","properties":{"domainIncludes":{"expectedTypes":["Class"]},"inverseOf":{"expectedTypes":["Property"]},"rangeIncludes":{"expectedTypes":["Class"]},"supercededBy":{"expectedTypes":["Property"]}}}} \ No newline at end of file From 3391171661fc66d3523615233ef3eca6a9bcc7e1 Mon Sep 17 00:00:00 2001 From: "P.Alex" Date: Wed, 13 Aug 2014 18:29:25 +0300 Subject: [PATCH 003/104] Update the JMicrodata library --- libraries/joomla/microdata/microdata.php | 293 ++++++++---------- libraries/joomla/microdata/types.json | 2 +- .../joomla/microdata/JMicrodataTest.php | 251 ++++++++------- 3 files changed, 268 insertions(+), 278 deletions(-) diff --git a/libraries/joomla/microdata/microdata.php b/libraries/joomla/microdata/microdata.php index 2ac6f75750d99..610a5590e0e8a 100644 --- a/libraries/joomla/microdata/microdata.php +++ b/libraries/joomla/microdata/microdata.php @@ -17,7 +17,7 @@ class JMicrodata { /** - * Array with all available Types and Properties + * Array with all available Types and Properties from the http://schema.org vocabulary * * @var array * @since 3.2 @@ -25,7 +25,7 @@ class JMicrodata protected static $types = null; /** - * The Schema.org Type + * The Type * * @var string * @since 3.2 @@ -41,7 +41,7 @@ class JMicrodata protected $property = null; /** - * The Human value or Machine value + * The Human content * * @var string * @since 3.2 @@ -49,7 +49,7 @@ class JMicrodata protected $content = null; /** - * The Machine value + * The Machine content * * @var string * @since 3.2 @@ -57,7 +57,7 @@ class JMicrodata protected $machineContent = null; /** - * Fallback Type + * The Fallback Type * * @var string * @since 3.2 @@ -65,7 +65,7 @@ class JMicrodata protected $fallbackType = null; /** - * Fallback Property + * The Fallback Property * * @var string * @since 3.2 @@ -73,15 +73,7 @@ class JMicrodata protected $fallbackProperty = null; /** - * Used to check if a Fallback must be used - * - * @var string - * @since 3.2 - */ - protected $fallback = false; - - /** - * Used to check if the Microdata semantics output are enabled or disabled + * Used for checking if the library output is enabled or disabled * * @var boolean * @since 3.2 @@ -89,10 +81,10 @@ class JMicrodata protected $enabled = true; /** - * Initialize the class and setup the default Type + * Initialize the class and setup the default $Type * - * @param string $type Optional, Fallback to Thing Type - * @param boolean $flag Enable or disable microdata output + * @param string $type Optional, fallback to 'Thing' Type + * @param boolean $flag Enable or disable the library output * * @since 3.2 */ @@ -100,7 +92,7 @@ public function __construct($type = '', $flag = true) { if ($this->enabled = (boolean) $flag) { - // Fallback to Thing Type + // Fallback to 'Thing' Type if (!$type) { $type = 'Thing'; @@ -111,7 +103,7 @@ public function __construct($type = '', $flag = true) } /** - * Load all Types and Properties from the types.json file + * Load all available Types and Properties from the http://schema.org vocabulary contained in the types.json file * * @return void * @@ -141,13 +133,12 @@ protected function resetParams() $this->property = null; $this->fallbackProperty = null; $this->fallbackType = null; - $this->fallback = false; } /** - * Enable or Disable Microdata semantics output + * Enable or Disable the library output * - * @param boolean $flag Enable or disable microdata output + * @param boolean $flag Enable or disable the library output * * @return JMicrodata Instance of $this * @@ -161,7 +152,7 @@ public function enable($flag = true) } /** - * Return true if Microdata semantics output are enabled + * Return 'true' if the library output is enabled * * @return boolean * @@ -173,9 +164,9 @@ public function isEnabled() } /** - * Set a new Schema.org Type + * Set a new http://schema.org Type * - * @param string $type The Type to be setup + * @param string $type The $Type to be setup * * @return JMicrodata Instance of $this * @@ -191,7 +182,7 @@ public function setType($type) // Sanitize the Type $this->type = static::sanitizeType($type); - // If the given Type isn't available, fallback to Thing + // If the given $Type isn't available, fallback to 'Thing' Type if (!static::isTypeAvailable($this->type)) { $this->type = 'Thing'; @@ -201,7 +192,7 @@ public function setType($type) } /** - * Return the current Type name + * Return the current $Type name * * @return string * @@ -213,7 +204,7 @@ public function getType() } /** - * Setup a Property + * Setup a $Property * * @param string $property The Property * @@ -228,24 +219,20 @@ public function property($property) return $this; } - // Sanitize the Property + // Sanitize the $Property $property = static::sanitizeProperty($property); - // Control if the Property exist in the given Type and setup it, if not leave NULL + // Control if the $Property exists in the given $Type and setup it, otherwise leave it 'NULL' if (static::isPropertyInType($this->type, $property)) { $this->property = $property; } - else - { - $this->fallback = true; - } return $this; } /** - * Return the property variable + * Return the current $Property name * * @return string * @@ -257,25 +244,25 @@ public function getProperty() } /** - * Setup a Text value or Content value for the Microdata + * Setup a Human content or content for the Machines * - * @param string $value The human value or marchine value to be used - * @param string $machineValue The machine value + * @param string $content The human content or machine content to be used + * @param string $machineContent The machine content * * @return JMicrodata Instance of $this * * @since 3.2 */ - public function content($value, $machineValue = null) + public function content($content, $machineContent = null) { - $this->content = $value; - $this->machineContent = $machineValue; + $this->content = $content; + $this->machineContent = $machineContent; return $this; } /** - * Return the content variable + * Return the current $content * * @return string * @@ -286,6 +273,18 @@ public function getContent() return $this->content; } + /** + * Return the current $machineContent + * + * @return string + * + * @since 3.3 + */ + public function getMachineContent() + { + return $this->machineContent; + } + /** * Setup a Fallback Type and Property * @@ -303,16 +302,16 @@ public function fallback($type, $property) return $this; } - // Sanitize the Type + // Sanitize the $Type $this->fallbackType = static::sanitizeType($type); - // If the given Type isn't available, fallback to Thing + // If the given $Type isn't available, fallback to 'Thing' Type if (!static::isTypeAvailable($this->fallbackType)) { $this->fallbackType = 'Thing'; } - // Control if the Property exist in the given Type and setup it, if not leave NULL + // Control if the $Property exist in the given $Type and setup it, otherwise leave it 'NULL' if (static::isPropertyInType($this->fallbackType, $property)) { $this->fallbackProperty = $property; @@ -326,7 +325,7 @@ public function fallback($type, $property) } /** - * Return the fallbackType variable + * Return the current $fallbackType * * @return string * @@ -338,7 +337,7 @@ public function getFallbackType() } /** - * Return the fallbackProperty variable + * Return the current $fallbackProperty * * @return string * @@ -350,13 +349,12 @@ public function getFallbackProperty() } /** - * This function handle the logic of a Microdata intelligent display. - * Check if the Type, Property are available, if not check for a Fallback, - * then reset all params for the next use and - * return the Microdata HTML + * This function handles the display logic. + * It checks if the Type, Property are available, if not check for a Fallback, + * then reset all params for the next use and return the HTML. * - * @param string $displayType Optional, 'inline', available ['inline'|'span'|'div'|meta] - * @param boolean $emptyOutput Return an empty string if the microdata output is disabled and there is a $content value + * @param string $displayType Optional, 'inline', available options ['inline'|'span'|'div'|meta] + * @param boolean $emptyOutput Return an empty string if the library output is disabled and there is a $content value * * @return string * @@ -365,19 +363,19 @@ public function getFallbackProperty() public function display($displayType = '', $emptyOutput = false) { // Initialize the HTML to output - $html = ($this->content !== null) ? $this->content : ''; + $html = ($this->content !== null && !$emptyOutput) ? $this->content : ''; - // Control if the Microdata output is enabled, otherwise return the content or empty string + // Control if the library output is enabled, otherwise return the $content or an empty string if (!$this->enabled) { // Reset params $this->resetParams(); - return ($emptyOutput) ? '' : $html; + return $html; } - // If the property is wrong for the current Type check if Fallback available, otherwise return empty HTML - if ($this->property && !$this->fallback) + // If the $property is wrong for the current $Type check if a Fallback is available, otherwise return an empty HTML + if ($this->property) { // Process and return the HTML the way the user expects to if ($displayType) @@ -407,13 +405,13 @@ public function display($displayType = '', $emptyOutput = false) { /* * Process and return the HTML in an automatic way, - * with the Property expected Types and display the Microdata in the right way, - * check if the Property is normal, nested or must be rendered in a metadata tag + * with the $Property expected Types and display everything in the right way, + * check if the $Property is 'normal', 'nested' or must be rendered in a metadata tag */ switch (static::getExpectedDisplayType($this->type, $this->property)) { case 'nested': - // Retrive the expected nested Type of the Property + // Retrieve the expected 'nested' Type of the $Property $nestedType = static::getExpectedTypes($this->type, $this->property); $nestedProperty = ''; @@ -432,7 +430,7 @@ public function display($displayType = '', $emptyOutput = false) $nestedType = $nestedType[0]; } - // Check if a Content is available, otherwise Fallback to an 'inline' display type + // Check if a $content is available, otherwise fallback to an 'inline' display type if ($this->content !== null) { if ($nestedProperty) @@ -463,7 +461,7 @@ public function display($displayType = '', $emptyOutput = false) break; case 'meta': - // Check if the Content value is available, otherwise Fallback to an 'inline' display Type + // Check if a $content is available, otherwise fallback to an 'inline' display type if ($this->content !== null) { $html = ($this->machineContent !== null) ? $this->machineContent : $this->content; @@ -479,8 +477,8 @@ public function display($displayType = '', $emptyOutput = false) default: /* * Default expected display type = 'normal' - * Check if the Content value is available, - * otherwise Fallback to an 'inline' display Type + * Check if a $content is available, + * otherwise fallback to an 'inline' display type */ if ($this->content !== null) { @@ -517,7 +515,7 @@ public function display($displayType = '', $emptyOutput = false) default: // Default $displayType = 'inline' - $html = static::htmlScope($type::scope()) . ' ' . static::htmlProperty($this->fallbackProperty); + $html = static::htmlScope($this->fallbackType) . ' ' . static::htmlProperty($this->fallbackProperty); break; } } @@ -525,13 +523,13 @@ public function display($displayType = '', $emptyOutput = false) { /* * Process and return the HTML in an automatic way, - * with the Property expected Types an display the Microdata in the right way, - * check if the Property is nested or must be rendered in a metadata tag + * with the $Property expected Types an display everything in the right way, + * check if the Property is 'nested' or must be rendered in a metadata tag */ switch (static::getExpectedDisplayType($this->fallbackType, $this->fallbackProperty)) { case 'meta': - // Check if the Content value is available, otherwise Fallback to an 'inline' display Type + // Check if a $content is available, otherwise fallback to an 'inline' display Type if ($this->content !== null) { $html = ($this->machineContent !== null) ? $this->machineContent : $this->content; @@ -547,8 +545,8 @@ public function display($displayType = '', $emptyOutput = false) default: /* * Default expected display type = 'normal' - * Check if the Content value is available, - * otherwise Fallback to an 'inline' display Type + * Check if a $content is available, + * otherwise fallback to an 'inline' display Type */ if ($this->content !== null) { @@ -584,7 +582,7 @@ public function display($displayType = '', $emptyOutput = false) */ public function displayScope() { - // Control if the Microdata output is enabled, otherwise return the content or empty string + // Control if the library output is enabled, otherwise return the $content or empty string if (!$this->enabled) { return ''; @@ -594,7 +592,7 @@ public function displayScope() } /** - * Return the sanitized Type + * Return the sanitized $Type * * @param string $type The Type to sanitize * @@ -608,7 +606,7 @@ public static function sanitizeType($type) } /** - * Return the sanitized Property + * Return the sanitized $Property * * @param string $property The Property to sanitize * @@ -622,7 +620,7 @@ public static function sanitizeProperty($property) } /** - * Return an array with all Types and Properties + * Return an array with all available Types and Properties from the http://schema.org vocabulary * * @return array * @@ -636,7 +634,7 @@ public static function getTypes() } /** - * Return an array with all available Types + * Return an array with all available Types from the http://schema.org vocabulary * * @return array * @@ -650,7 +648,7 @@ public static function getAvailableTypes() } /** - * Return the expected types of the Property + * Return the expected Types of the given Property * * @param string $type The Type to process * @param string $property The Property to process @@ -665,13 +663,13 @@ public static function getExpectedTypes($type, $property) $tmp = static::$types[$type]['properties']; - // Check if the Property is in the Type + // Check if the $Property is in the $Type if (isset($tmp[$property])) { return $tmp[$property]['expectedTypes']; } - // Check if the Property is inherit + // Check if the $Property is inherit $extendedType = static::$types[$type]['extends']; // Recursive @@ -684,8 +682,8 @@ public static function getExpectedTypes($type, $property) } /** - * Return the expected display type of the [normal|nested|meta] - * In wich way to display the Property: + * Return the expected display type: [normal|nested|meta] + * In which way to display the Property: * normal -> itemprop="name" * nested -> itemprop="director" itemscope itemtype="http://schema.org/Person" * meta -> @@ -704,19 +702,19 @@ protected static function getExpectedDisplayType($type, $property) // Retrieve the first expected type $type = $expectedTypes[0]; - // Check if it's a meta display + // Check if it's a 'meta' display if ($type === 'Date' || $type === 'DateTime' || $property === 'interactionCount') { return 'meta'; } - // Check if it's a normal display + // Check if it's a 'normal' display if ($type === 'Text' || $type === 'URL' || $type === 'Boolean' || $type === 'Number') { return 'normal'; } - // Otherwise it's a nested display + // Otherwise it's a 'nested' display return 'nested'; } @@ -737,13 +735,13 @@ public static function isPropertyInType($type, $property) return false; } - // Control if the Property exists, and return true + // Control if the $Property exists, and return 'true' if (array_key_exists($property, static::$types[$type]['properties'])) { return true; } - // Recursive: Check if the Property is inherit + // Recursive: Check if the $Property is inherit $extendedType = static::$types[$type]['extends']; if (!empty($extendedType)) @@ -771,113 +769,85 @@ public static function isTypeAvailable($type) } /** - * Return the microdata in a tag with content for machines. + * Return Microdata semantics in a tag with content for machines. * * @param string $content The machine content to display * @param string $property The Property * @param string $scope Optional, the Type scope to display - * @param boolean $inverse Optional, default = false, inverse the $scope with the $property + * @param boolean $invert Optional, default = false, invert the $scope with the $property * * @return string * - * @since 3.2 + * @since 3.2 */ - public static function htmlMeta($content, $property, $scope = '', $inverse = false) + public static function htmlMeta($content, $property, $scope = '', $invert = false) { - // Control if the Property has allready the itemprop - if (stripos($property, 'itemprop') !== 0) - { - $property = static::htmlProperty($property); - } - - // Control if the Scope have allready the itemtype - if (!empty($scope) && stripos($scope, 'itemscope') !== 0) - { - $scope = static::htmlScope($scope); - } - - if ($inverse) - { - $tmp = join(' ', array($property, $scope)); - } - else - { - $tmp = join(' ', array($scope, $property)); - } - - $tmp = trim($tmp); - - return ""; + return static::htmlTag('meta', $content, $property, $scope, $invert); } /** - * Return the microdata in a tag. + * Return Microdata semantics in a tag. * - * @param string $content The human value - * @param string $property Optional, the human value to display + * @param string $content The human content + * @param string $property Optional, the human content to display * @param string $scope Optional, the Type scope to display - * @param boolean $inverse Optional, default = false, inverse the $scope with the $property + * @param boolean $invert Optional, default = false, invert the $scope with the $property * * @return string * - * @since 3.2 + * @since 3.2 */ - public static function htmlSpan($content, $property = '', $scope = '', $inverse = false) + public static function htmlSpan($content, $property = '', $scope = '', $invert = false) { - // Control if the Property has allready the itemprop - if (!empty($property) && stripos($property, 'itemprop') !== 0) - { - $property = static::htmlProperty($property); - } - - // Control if the Scope have allready the itemtype - if (!empty($scope) && stripos($scope, 'itemscope') !== 0) - { - $scope = static::htmlScope($scope); - } - - if ($inverse) - { - $tmp = join(' ', array($property, $scope)); - } - else - { - $tmp = join(' ', array($scope, $property)); - } - - $tmp = trim($tmp); - $tmp = ($tmp) ? ' ' . $tmp : ''; + return static::htmlTag('span', $content, $property, $scope, $invert); + } - return "$content"; + /** + * Return Microdata semantics in a
tag. + * + * @param string $content The human content + * @param string $property Optional, the human content to display + * @param string $scope Optional, the Type scope to display + * @param boolean $invert Optional, default = false, invert the $scope with the $property + * + * @return string + * + * @since 3.2 + */ + public static function htmlDiv($content, $property = '', $scope = '', $invert = false) + { + return static::htmlTag('div', $content, $property, $scope, $invert); } /** - * Return the microdata in an
tag. + * Return Microdata semantics in a specified tag. * - * @param string $content The human value - * @param string $property Optional, the human value to display + * @param string $tag The HTML tag + * @param string $content The human content + * @param string $property Optional, the human content to display * @param string $scope Optional, the Type scope to display - * @param boolean $inverse Optional, default = false, inverse the $scope with the $property + * @param boolean $invert Optional, default = false, invert the $scope with the $property * * @return string * - * @since 3.2 + * @since 3.3 */ - public static function htmlDiv($content, $property = '', $scope = '', $inverse = false) + public static function htmlTag($tag, $content, $property = '', $scope = '', $invert = false) { - // Control if the Property has allready the itemprop + // Control if the $Property has already the 'itemprop' prefix if (!empty($property) && stripos($property, 'itemprop') !== 0) { $property = static::htmlProperty($property); } - // Control if the Scope have allready the itemtype + // Control if the $Scope have already the 'itemscope' prefix if (!empty($scope) && stripos($scope, 'itemscope') !== 0) { $scope = static::htmlScope($scope); } - if ($inverse) + // Depending on the case, the $scope must precede the $property, or otherwise + if ($invert) { $tmp = join(' ', array($property, $scope)); } @@ -889,7 +859,13 @@ public static function htmlDiv($content, $property = '', $scope = '', $inverse = $tmp = trim($tmp); $tmp = ($tmp) ? ' ' . $tmp : ''; - return "$content
"; + // Control if it is an empty element without a closing tag + if ($tag === 'meta') + { + return ""; + } + + return "<" . $tag . $tmp . ">" . $content . ""; } /** @@ -903,12 +879,7 @@ public static function htmlDiv($content, $property = '', $scope = '', $inverse = */ public static function htmlScope($scope) { - if (stripos($scope, 'http') !== 0) - { - $scope = 'https://schema.org/' . ucfirst($scope); - } - - return "itemscope itemtype='$scope'"; + return "itemscope itemtype='https://schema.org/" . static::sanitizeType($scope) . "'"; } /** diff --git a/libraries/joomla/microdata/types.json b/libraries/joomla/microdata/types.json index 690de54eb001b..03e74a5a20e9a 100644 --- a/libraries/joomla/microdata/types.json +++ b/libraries/joomla/microdata/types.json @@ -1 +1 @@ -{"DataType":{"extends":"","properties":[]},"Boolean":{"extends":"DataType","properties":[]},"Date":{"extends":"DataType","properties":[]},"DateTime":{"extends":"DataType","properties":[]},"Number":{"extends":"DataType","properties":[]},"Float":{"extends":"Number","properties":[]},"Integer":{"extends":"Number","properties":[]},"Text":{"extends":"DataType","properties":[]},"URL":{"extends":"Text","properties":[]},"Time":{"extends":"DataType","properties":[]},"Thing":{"extends":"","properties":{"additionalType":{"expectedTypes":["URL"]},"alternateName":{"expectedTypes":["Text"]},"description":{"expectedTypes":["Text"]},"image":{"expectedTypes":["ImageObject","URL"]},"name":{"expectedTypes":["Text"]},"potentialAction":{"expectedTypes":["Action"]},"sameAs":{"expectedTypes":["URL"]},"url":{"expectedTypes":["URL"]}}},"Action":{"extends":"Thing","properties":{"actionStatus":{"expectedTypes":["ActionStatusType"]},"agent":{"expectedTypes":["Organization","Person"]},"endTime":{"expectedTypes":["DateTime"]},"instrument":{"expectedTypes":["Thing"]},"location":{"expectedTypes":["Place","PostalAddress"]},"object":{"expectedTypes":["Thing"]},"participant":{"expectedTypes":["Organization","Person"]},"result":{"expectedTypes":["Thing"]},"startTime":{"expectedTypes":["DateTime"]},"target":{"expectedTypes":["EntryPoint"]}}},"AchieveAction":{"extends":"Action","properties":[]},"LoseAction":{"extends":"AchieveAction","properties":{"winner":{"expectedTypes":["Person"]}}},"TieAction":{"extends":"AchieveAction","properties":[]},"WinAction":{"extends":"AchieveAction","properties":{"loser":{"expectedTypes":["Person"]}}},"AssessAction":{"extends":"Action","properties":[]},"ChooseAction":{"extends":"AssessAction","properties":{"option":{"expectedTypes":["Text","Thing"]}}},"VoteAction":{"extends":"ChooseAction","properties":{"candidate":{"expectedTypes":["Person"]}}},"IgnoreAction":{"extends":"AssessAction","properties":[]},"ReactAction":{"extends":"AssessAction","properties":[]},"AgreeAction":{"extends":"ReactAction","properties":[]},"DisagreeAction":{"extends":"ReactAction","properties":[]},"DislikeAction":{"extends":"ReactAction","properties":[]},"EndorseAction":{"extends":"ReactAction","properties":{"endorsee":{"expectedTypes":["Organization","Person"]}}},"LikeAction":{"extends":"ReactAction","properties":[]},"WantAction":{"extends":"ReactAction","properties":[]},"ReviewAction":{"extends":"AssessAction","properties":{"resultReview":{"expectedTypes":["Review"]}}},"ConsumeAction":{"extends":"Action","properties":[]},"DrinkAction":{"extends":"ConsumeAction","properties":[]},"EatAction":{"extends":"ConsumeAction","properties":[]},"InstallAction":{"extends":"ConsumeAction","properties":[]},"ListenAction":{"extends":"ConsumeAction","properties":[]},"ReadAction":{"extends":"ConsumeAction","properties":[]},"UseAction":{"extends":"ConsumeAction","properties":[]},"WearAction":{"extends":"UseAction","properties":[]},"ViewAction":{"extends":"ConsumeAction","properties":[]},"WatchAction":{"extends":"ConsumeAction","properties":[]},"CreateAction":{"extends":"Action","properties":[]},"CookAction":{"extends":"CreateAction","properties":{"foodEstablishment":{"expectedTypes":["FoodEstablishment","Place"]},"foodEvent":{"expectedTypes":["FoodEvent"]},"recipe":{"expectedTypes":["Recipe"]}}},"DrawAction":{"extends":"CreateAction","properties":[]},"FilmAction":{"extends":"CreateAction","properties":[]},"PaintAction":{"extends":"CreateAction","properties":[]},"PhotographAction":{"extends":"CreateAction","properties":[]},"WriteAction":{"extends":"CreateAction","properties":{"language":{"expectedTypes":["Language"]}}},"FindAction":{"extends":"Action","properties":[]},"CheckAction":{"extends":"FindAction","properties":[]},"DiscoverAction":{"extends":"FindAction","properties":[]},"TrackAction":{"extends":"FindAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"InteractAction":{"extends":"Action","properties":[]},"BefriendAction":{"extends":"InteractAction","properties":[]},"CommunicateAction":{"extends":"InteractAction","properties":{"about":{"expectedTypes":["Thing"]},"language":{"expectedTypes":["Language"]},"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"AskAction":{"extends":"CommunicateAction","properties":{"question":{"expectedTypes":["Text"]}}},"CheckInAction":{"extends":"CommunicateAction","properties":[]},"CheckOutAction":{"extends":"CommunicateAction","properties":[]},"CommentAction":{"extends":"CommunicateAction","properties":[]},"InformAction":{"extends":"CommunicateAction","properties":{"event":{"expectedTypes":["Event"]}}},"ConfirmAction":{"extends":"InformAction","properties":[]},"RsvpAction":{"extends":"InformAction","properties":[]},"InviteAction":{"extends":"CommunicateAction","properties":{"event":{"expectedTypes":["Event"]}}},"ReplyAction":{"extends":"CommunicateAction","properties":[]},"ShareAction":{"extends":"CommunicateAction","properties":[]},"FollowAction":{"extends":"InteractAction","properties":{"followee":{"expectedTypes":["Organization","Person"]}}},"JoinAction":{"extends":"InteractAction","properties":{"event":{"expectedTypes":["Event"]}}},"LeaveAction":{"extends":"InteractAction","properties":{"event":{"expectedTypes":["Event"]}}},"MarryAction":{"extends":"InteractAction","properties":[]},"RegisterAction":{"extends":"InteractAction","properties":[]},"SubscribeAction":{"extends":"InteractAction","properties":[]},"UnRegisterAction":{"extends":"InteractAction","properties":[]},"MoveAction":{"extends":"Action","properties":{"fromLocation":{"expectedTypes":["Number","Place"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"ArriveAction":{"extends":"MoveAction","properties":[]},"DepartAction":{"extends":"MoveAction","properties":[]},"TravelAction":{"extends":"MoveAction","properties":{"distance":{"expectedTypes":["Distance"]}}},"OrganizeAction":{"extends":"Action","properties":[]},"AllocateAction":{"extends":"OrganizeAction","properties":{"purpose":{"expectedTypes":["MedicalDevicePurpose","Thing"]}}},"AcceptAction":{"extends":"AllocateAction","properties":[]},"AssignAction":{"extends":"AllocateAction","properties":[]},"AuthorizeAction":{"extends":"AllocateAction","properties":{"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"RejectAction":{"extends":"AllocateAction","properties":[]},"ApplyAction":{"extends":"OrganizeAction","properties":[]},"BookmarkAction":{"extends":"OrganizeAction","properties":[]},"PlanAction":{"extends":"OrganizeAction","properties":{"scheduledTime":{"expectedTypes":["DateTime"]}}},"CancelAction":{"extends":"PlanAction","properties":[]},"ReserveAction":{"extends":"PlanAction","properties":{"scheduledTime":{"expectedTypes":["DateTime"]}}},"ScheduleAction":{"extends":"PlanAction","properties":[]},"PlayAction":{"extends":"Action","properties":{"audience":{"expectedTypes":["Audience"]},"event":{"expectedTypes":["Event"]}}},"ExerciseAction":{"extends":"PlayAction","properties":{"course":{"expectedTypes":["Place"]},"diet":{"expectedTypes":["Diet"]},"distance":{"expectedTypes":["Distance"]},"exercisePlan":{"expectedTypes":["ExercisePlan"]},"exerciseType":{"expectedTypes":["Text"]},"fromLocation":{"expectedTypes":["Number","Place"]},"opponent":{"expectedTypes":["Person"]},"sportsActivityLocation":{"expectedTypes":["SportsActivityLocation"]},"sportsEvent":{"expectedTypes":["SportsEvent"]},"sportsTeam":{"expectedTypes":["SportsTeam"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"PerformAction":{"extends":"PlayAction","properties":{"entertainmentBusiness":{"expectedTypes":["EntertainmentBusiness"]}}},"SearchAction":{"extends":"Action","properties":{"query":{"expectedTypes":["Text","Class"]}}},"TradeAction":{"extends":"Action","properties":{"price":{"expectedTypes":["Text","Number"]}}},"BuyAction":{"extends":"TradeAction","properties":{"vendor":{"expectedTypes":["Organization","Person"]},"warrantyPromise":{"expectedTypes":["WarrantyPromise"]}}},"DonateAction":{"extends":"TradeAction","properties":{"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"OrderAction":{"extends":"TradeAction","properties":[]},"PayAction":{"extends":"TradeAction","properties":{"purpose":{"expectedTypes":["Thing","MedicalDevicePurpose"]},"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"QuoteAction":{"extends":"TradeAction","properties":[]},"RentAction":{"extends":"TradeAction","properties":{"landlord":{"expectedTypes":["Organization","Person"]},"realEstateAgent":{"expectedTypes":["RealEstateAgent"]}}},"SellAction":{"extends":"TradeAction","properties":{"buyer":{"expectedTypes":["Person"]},"warrantyPromise":{"expectedTypes":["WarrantyPromise"]}}},"TipAction":{"extends":"TradeAction","properties":{"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"TransferAction":{"extends":"Action","properties":{"fromLocation":{"expectedTypes":["Number","Place"]},"toLocation":{"expectedTypes":["Number","Place"]}}},"BorrowAction":{"extends":"TransferAction","properties":{"lender":{"expectedTypes":["Person"]}}},"DownloadAction":{"extends":"TransferAction","properties":[]},"GiveAction":{"extends":"TransferAction","properties":{"recipient":{"expectedTypes":["Organization","Audience","Person"]}}},"LendAction":{"extends":"TransferAction","properties":{"borrower":{"expectedTypes":["Person"]}}},"ReceiveAction":{"extends":"TransferAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]},"sender":{"expectedTypes":["Organization","Audience","Person"]}}},"ReturnAction":{"extends":"TransferAction","properties":{"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"SendAction":{"extends":"TransferAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]},"recipient":{"expectedTypes":["Audience","Organization","Person"]}}},"TakeAction":{"extends":"TransferAction","properties":[]},"UpdateAction":{"extends":"Action","properties":{"collection":{"expectedTypes":["Thing"]}}},"AddAction":{"extends":"UpdateAction","properties":[]},"InsertAction":{"extends":"AddAction","properties":{"toLocation":{"expectedTypes":["Number","Place"]}}},"AppendAction":{"extends":"InsertAction","properties":[]},"PrependAction":{"extends":"InsertAction","properties":[]},"DeleteAction":{"extends":"UpdateAction","properties":[]},"ReplaceAction":{"extends":"UpdateAction","properties":{"replacee":{"expectedTypes":["Thing"]},"replacer":{"expectedTypes":["Thing"]}}},"BroadcastService":{"extends":"Thing","properties":{"area":{"expectedTypes":["Place"]},"broadcaster":{"expectedTypes":["Organization"]},"parentService":{"expectedTypes":["BroadcastService"]}}},"Class":{"extends":"Intangible","properties":[]},"CreativeWork":{"extends":"Thing","properties":{"about":{"expectedTypes":["Thing"]},"accessibilityAPI":{"expectedTypes":["Text"]},"accessibilityControl":{"expectedTypes":["Text"]},"accessibilityFeature":{"expectedTypes":["Text"]},"accessibilityHazard":{"expectedTypes":["Text"]},"accountablePerson":{"expectedTypes":["Person"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"alternativeHeadline":{"expectedTypes":["Text"]},"associatedMedia":{"expectedTypes":["MediaObject"]},"audience":{"expectedTypes":["Audience"]},"audio":{"expectedTypes":["AudioObject"]},"author":{"expectedTypes":["Organization","Person"]},"award":{"expectedTypes":["Text"]},"citation":{"expectedTypes":["Text","CreativeWork"]},"comment":{"expectedTypes":["Comment","UserComments"]},"commentCount":{"expectedTypes":["Integer"]},"contentLocation":{"expectedTypes":["Place"]},"contentRating":{"expectedTypes":["Text"]},"contributor":{"expectedTypes":["Organization","Person"]},"copyrightHolder":{"expectedTypes":["Organization","Person"]},"copyrightYear":{"expectedTypes":["Number"]},"creator":{"expectedTypes":["Organization","Person"]},"dateCreated":{"expectedTypes":["Date"]},"dateModified":{"expectedTypes":["Date"]},"datePublished":{"expectedTypes":["Date"]},"discussionUrl":{"expectedTypes":["URL"]},"editor":{"expectedTypes":["Person"]},"educationalAlignment":{"expectedTypes":["AlignmentObject"]},"educationalUse":{"expectedTypes":["Text"]},"encoding":{"expectedTypes":["MediaObject"]},"genre":{"expectedTypes":["Text"]},"headline":{"expectedTypes":["Text"]},"inLanguage":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"interactivityType":{"expectedTypes":["Text"]},"isBasedOnUrl":{"expectedTypes":["URL"]},"isFamilyFriendly":{"expectedTypes":["Boolean"]},"keywords":{"expectedTypes":["Text"]},"learningResourceType":{"expectedTypes":["Text"]},"license":{"expectedTypes":["CreativeWork","URL"]},"mentions":{"expectedTypes":["Thing"]},"offers":{"expectedTypes":["Offer"]},"provider":{"expectedTypes":["Organization","Person"]},"publisher":{"expectedTypes":["Organization"]},"publishingPrinciples":{"expectedTypes":["URL"]},"review":{"expectedTypes":["Review"]},"sourceOrganization":{"expectedTypes":["Organization"]},"text":{"expectedTypes":["Text"]},"thumbnailUrl":{"expectedTypes":["URL"]},"timeRequired":{"expectedTypes":["Duration"]},"typicalAgeRange":{"expectedTypes":["Text"]},"version":{"expectedTypes":["Number"]},"video":{"expectedTypes":["VideoObject"]}}},"Answer":{"extends":"CreativeWork","properties":{"downvoteCount":{"expectedTypes":["Integer"]},"parentItem":{"expectedTypes":["Question"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"Article":{"extends":"CreativeWork","properties":{"articleBody":{"expectedTypes":["Text"]},"articleSection":{"expectedTypes":["Text"]},"wordCount":{"expectedTypes":["Integer"]}}},"BlogPosting":{"extends":"Article","properties":[]},"NewsArticle":{"extends":"Article","properties":{"dateline":{"expectedTypes":["Text"]},"printColumn":{"expectedTypes":["Text"]},"printEdition":{"expectedTypes":["Text"]},"printPage":{"expectedTypes":["Text"]},"printSection":{"expectedTypes":["Text"]}}},"ScholarlyArticle":{"extends":"Article","properties":[]},"MedicalScholarlyArticle":{"extends":"ScholarlyArticle","properties":{"publicationType":{"expectedTypes":["Text"]}}},"TechArticle":{"extends":"Article","properties":{"dependencies":{"expectedTypes":["Text"]},"proficiencyLevel":{"expectedTypes":["Text"]}}},"APIReference":{"extends":"TechArticle","properties":{"assembly":{"expectedTypes":["Text"]},"assemblyVersion":{"expectedTypes":["Text"]},"programmingModel":{"expectedTypes":["Text"]},"targetPlatform":{"expectedTypes":["Text"]}}},"Blog":{"extends":"CreativeWork","properties":{"blogPost":{"expectedTypes":["BlogPosting"]}}},"Book":{"extends":"CreativeWork","properties":{"bookEdition":{"expectedTypes":["Text"]},"bookFormat":{"expectedTypes":["BookFormatType"]},"illustrator":{"expectedTypes":["Person"]},"isbn":{"expectedTypes":["Text"]},"numberOfPages":{"expectedTypes":["Integer"]}}},"Clip":{"extends":"CreativeWork","properties":{"clipNumber":{"expectedTypes":["Integer"]},"partOfEpisode":{"expectedTypes":["Episode"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"publication":{"expectedTypes":["PublicationEvent"]}}},"RadioClip":{"extends":"Clip","properties":{"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]}}},"TVClip":{"extends":"Clip","properties":{"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]}}},"Code":{"extends":"CreativeWork","properties":{"codeRepository":{"expectedTypes":["URL"]},"programmingLanguage":{"expectedTypes":["Thing"]},"runtime":{"expectedTypes":["Text"]},"sampleType":{"expectedTypes":["Text"]},"targetProduct":{"expectedTypes":["SoftwareApplication"]}}},"Comment":{"extends":"CreativeWork","properties":{"downvoteCount":{"expectedTypes":["Integer"]},"parentItem":{"expectedTypes":["Question"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"DataCatalog":{"extends":"CreativeWork","properties":{"dataset":{"expectedTypes":["Dataset"]}}},"Dataset":{"extends":"CreativeWork","properties":{"catalog":{"expectedTypes":["DataCatalog"]},"distribution":{"expectedTypes":["DataDownload"]},"spatial":{"expectedTypes":["Place"]},"temporal":{"expectedTypes":["DateTime"]}}},"Diet":{"extends":"CreativeWork","properties":{"dietFeatures":{"expectedTypes":["Text"]},"endorsers":{"expectedTypes":["Organization","Person"]},"expertConsiderations":{"expectedTypes":["Text"]},"overview":{"expectedTypes":["Text"]},"physiologicalBenefits":{"expectedTypes":["Text"]},"proprietaryName":{"expectedTypes":["Text"]},"risks":{"expectedTypes":["Text"]}}},"EmailMessage":{"extends":"CreativeWork","properties":[]},"Episode":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"episodeNumber":{"expectedTypes":["Integer"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"publication":{"expectedTypes":["PublicationEvent"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioEpisode":{"extends":"Episode","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"TVEpisode":{"extends":"Episode","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"ExercisePlan":{"extends":"PhysicalActivity","properties":{"activityDuration":{"expectedTypes":["Duration"]},"activityFrequency":{"expectedTypes":["Text"]},"additionalVariable":{"expectedTypes":["Text"]},"exerciseType":{"expectedTypes":["Text"]},"intensity":{"expectedTypes":["Text"]},"repetitions":{"expectedTypes":["Number"]},"restPeriods":{"expectedTypes":["Text"]},"workload":{"expectedTypes":["Energy"]}}},"ItemList":{"extends":"CreativeWork","properties":{"itemListElement":{"expectedTypes":["Text"]},"itemListOrder":{"expectedTypes":["Text"]}}},"Map":{"extends":"CreativeWork","properties":{"mapType":{"expectedTypes":["MapCategoryType"]}}},"MediaObject":{"extends":"CreativeWork","properties":{"associatedArticle":{"expectedTypes":["NewsArticle"]},"bitrate":{"expectedTypes":["Text"]},"contentSize":{"expectedTypes":["Text"]},"contentUrl":{"expectedTypes":["URL"]},"duration":{"expectedTypes":["Duration"]},"embedUrl":{"expectedTypes":["URL"]},"encodesCreativeWork":{"expectedTypes":["CreativeWork"]},"encodingFormat":{"expectedTypes":["Text"]},"expires":{"expectedTypes":["Date"]},"height":{"expectedTypes":["QuantitativeValue","Distance"]},"interactionCount":{"expectedTypes":["Text"]},"offers":{"expectedTypes":["Offer"]},"playerType":{"expectedTypes":["Text"]},"productionCompany":{"expectedTypes":["Organization"]},"publication":{"expectedTypes":["PublicationEvent"]},"regionsAllowed":{"expectedTypes":["Place"]},"requiresSubscription":{"expectedTypes":["Boolean"]},"uploadDate":{"expectedTypes":["Date"]},"width":{"expectedTypes":["QuantitativeValue","Distance"]}}},"AudioObject":{"extends":"MediaObject","properties":{"transcript":{"expectedTypes":["Text"]}}},"DataDownload":{"extends":"MediaObject","properties":[]},"ImageObject":{"extends":"MediaObject","properties":{"caption":{"expectedTypes":["Text"]},"exifData":{"expectedTypes":["Text"]},"representativeOfPage":{"expectedTypes":["Boolean"]},"thumbnail":{"expectedTypes":["ImageObject"]}}},"MusicVideoObject":{"extends":"MediaObject","properties":[]},"VideoObject":{"extends":"MediaObject","properties":{"caption":{"expectedTypes":["Text"]},"productionCompany":{"expectedTypes":["Organization"]},"thumbnail":{"expectedTypes":["ImageObject"]},"transcript":{"expectedTypes":["Text"]},"videoFrameSize":{"expectedTypes":["Text"]},"videoQuality":{"expectedTypes":["Text"]}}},"Movie":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"duration":{"expectedTypes":["Duration"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"MusicPlaylist":{"extends":"CreativeWork","properties":{"numTracks":{"expectedTypes":["Integer"]},"track":{"expectedTypes":["MusicRecording"]}}},"MusicAlbum":{"extends":"MusicPlaylist","properties":{"byArtist":{"expectedTypes":["MusicGroup"]}}},"MusicRecording":{"extends":"CreativeWork","properties":{"byArtist":{"expectedTypes":["MusicGroup"]},"duration":{"expectedTypes":["Duration"]},"inAlbum":{"expectedTypes":["MusicAlbum"]},"inPlaylist":{"expectedTypes":["MusicPlaylist"]}}},"Painting":{"extends":"CreativeWork","properties":[]},"Photograph":{"extends":"CreativeWork","properties":[]},"Question":{"extends":"CreativeWork","properties":{"acceptedAnswer":{"expectedTypes":["Answer"]},"answerCount":{"expectedTypes":["Integer"]},"downvoteCount":{"expectedTypes":["Integer"]},"suggestedAnswer":{"expectedTypes":["Answer"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"Recipe":{"extends":"CreativeWork","properties":{"cookTime":{"expectedTypes":["Duration"]},"cookingMethod":{"expectedTypes":["Text"]},"ingredients":{"expectedTypes":["Text"]},"nutrition":{"expectedTypes":["NutritionInformation"]},"prepTime":{"expectedTypes":["Duration"]},"recipeCategory":{"expectedTypes":["Text"]},"recipeCuisine":{"expectedTypes":["Text"]},"recipeInstructions":{"expectedTypes":["Text"]},"recipeYield":{"expectedTypes":["Text"]},"totalTime":{"expectedTypes":["Duration"]}}},"Review":{"extends":"CreativeWork","properties":{"itemReviewed":{"expectedTypes":["Thing"]},"reviewBody":{"expectedTypes":["Text"]},"reviewRating":{"expectedTypes":["Rating"]}}},"Sculpture":{"extends":"CreativeWork","properties":[]},"Season":{"extends":"CreativeWork","properties":{"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"partOfSeries":{"expectedTypes":["Series"]},"position":{"expectedTypes":["Text"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"seasonNumber":{"expectedTypes":["Integer"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioSeason":{"extends":"Season","properties":{"episode":{"expectedTypes":["Episode"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"partOfSeries":{"expectedTypes":["Series"]},"trailer":{"expectedTypes":["VideoObject"]}}},"TVSeason":{"extends":"Season","properties":{"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"partOfSeries":{"expectedTypes":["Series"]},"seasonNumber":{"expectedTypes":["Integer"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"Series":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"numberOfSeasons":{"expectedTypes":["Number"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioSeries":{"extends":"Series","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"episode":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"trailer":{"expectedTypes":["VideoObject"]}}},"TVSeries":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"producer":{"expectedTypes":["Person"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"SoftwareApplication":{"extends":"CreativeWork","properties":{"applicationCategory":{"expectedTypes":["Text","URL"]},"applicationSubCategory":{"expectedTypes":["Text","URL"]},"applicationSuite":{"expectedTypes":["Text"]},"countriesNotSupported":{"expectedTypes":["Text"]},"countriesSupported":{"expectedTypes":["Text"]},"device":{"expectedTypes":["Text"]},"downloadUrl":{"expectedTypes":["URL"]},"featureList":{"expectedTypes":["Text","URL"]},"fileFormat":{"expectedTypes":["Text"]},"fileSize":{"expectedTypes":["Integer"]},"installUrl":{"expectedTypes":["URL"]},"memoryRequirements":{"expectedTypes":["Text","URL"]},"operatingSystem":{"expectedTypes":["Text"]},"permissions":{"expectedTypes":["Text"]},"processorRequirements":{"expectedTypes":["Text"]},"releaseNotes":{"expectedTypes":["Text","URL"]},"requirements":{"expectedTypes":["Text","URL"]},"screenshot":{"expectedTypes":["URL","ImageObject"]},"softwareVersion":{"expectedTypes":["Text"]},"storageRequirements":{"expectedTypes":["Text","URL"]}}},"MobileApplication":{"extends":"SoftwareApplication","properties":{"carrierRequirements":{"expectedTypes":["Text"]}}},"WebApplication":{"extends":"SoftwareApplication","properties":{"browserRequirements":{"expectedTypes":["Text"]}}},"WebPage":{"extends":"CreativeWork","properties":{"breadcrumb":{"expectedTypes":["Text"]},"isPartOf":{"expectedTypes":["CollectionPage"]},"lastReviewed":{"expectedTypes":["Date"]},"mainContentOfPage":{"expectedTypes":["WebPageElement"]},"primaryImageOfPage":{"expectedTypes":["ImageObject"]},"relatedLink":{"expectedTypes":["URL"]},"reviewedBy":{"expectedTypes":["Organization","Person"]},"significantLink":{"expectedTypes":["URL"]},"specialty":{"expectedTypes":["Specialty"]}}},"AboutPage":{"extends":"WebPage","properties":[]},"CheckoutPage":{"extends":"WebPage","properties":[]},"CollectionPage":{"extends":"WebPage","properties":[]},"ImageGallery":{"extends":"CollectionPage","properties":[]},"VideoGallery":{"extends":"CollectionPage","properties":[]},"ContactPage":{"extends":"WebPage","properties":[]},"ItemPage":{"extends":"WebPage","properties":[]},"MedicalWebPage":{"extends":"WebPage","properties":{"aspect":{"expectedTypes":["Text"]}}},"ProfilePage":{"extends":"WebPage","properties":[]},"QAPage":{"extends":"WebPage","properties":[]},"SearchResultsPage":{"extends":"WebPage","properties":[]},"WebPageElement":{"extends":"CreativeWork","properties":[]},"SiteNavigationElement":{"extends":"WebPageElement","properties":[]},"Table":{"extends":"WebPageElement","properties":[]},"WPAdBlock":{"extends":"WebPageElement","properties":[]},"WPFooter":{"extends":"WebPageElement","properties":[]},"WPHeader":{"extends":"WebPageElement","properties":[]},"WPSideBar":{"extends":"WebPageElement","properties":[]},"Event":{"extends":"Thing","properties":{"attendee":{"expectedTypes":["Organization","Person"]},"doorTime":{"expectedTypes":["DateTime"]},"duration":{"expectedTypes":["Duration"]},"endDate":{"expectedTypes":["Date"]},"eventStatus":{"expectedTypes":["EventStatusType"]},"location":{"expectedTypes":["Place","PostalAddress"]},"offers":{"expectedTypes":["Offer"]},"organizer":{"expectedTypes":["Organization","Person"]},"performer":{"expectedTypes":["Organization","Person"]},"previousStartDate":{"expectedTypes":["Date"]},"startDate":{"expectedTypes":["Date"]},"subEvent":{"expectedTypes":["Event"]},"superEvent":{"expectedTypes":["Event"]},"typicalAgeRange":{"expectedTypes":["Text"]},"workPerformed":{"expectedTypes":["CreativeWork"]}}},"BusinessEvent":{"extends":"Event","properties":[]},"ChildrensEvent":{"extends":"Event","properties":[]},"ComedyEvent":{"extends":"Event","properties":[]},"DanceEvent":{"extends":"Event","properties":[]},"DeliveryEvent":{"extends":"Event","properties":{"accessCode":{"expectedTypes":["Text"]},"availableFrom":{"expectedTypes":["DateTime"]},"availableThrough":{"expectedTypes":["DateTime"]},"hasDeliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"EducationEvent":{"extends":"Event","properties":[]},"Festival":{"extends":"Event","properties":[]},"FoodEvent":{"extends":"Event","properties":[]},"LiteraryEvent":{"extends":"Event","properties":[]},"MusicEvent":{"extends":"Event","properties":[]},"PublicationEvent":{"extends":"Event","properties":{"free":{"expectedTypes":["Boolean"]},"publishedOn":{"expectedTypes":["BroadcastService"]}}},"BroadcastEvent":{"extends":"PublicationEvent","properties":[]},"OnDemandEvent":{"extends":"PublicationEvent","properties":[]},"SaleEvent":{"extends":"Event","properties":[]},"SocialEvent":{"extends":"Event","properties":[]},"SportsEvent":{"extends":"Event","properties":[]},"TheaterEvent":{"extends":"Event","properties":[]},"UserInteraction":{"extends":"Event","properties":[]},"UserBlocks":{"extends":"UserInteraction","properties":[]},"UserCheckins":{"extends":"UserInteraction","properties":[]},"UserComments":{"extends":"UserInteraction","properties":{"commentText":{"expectedTypes":["Text"]},"commentTime":{"expectedTypes":["Date"]},"creator":{"expectedTypes":["Person","Organization"]},"discusses":{"expectedTypes":["CreativeWork"]},"replyToUrl":{"expectedTypes":["URL"]}}},"UserDownloads":{"extends":"UserInteraction","properties":[]},"UserLikes":{"extends":"UserInteraction","properties":[]},"UserPageVisits":{"extends":"UserInteraction","properties":[]},"UserPlays":{"extends":"UserInteraction","properties":[]},"UserPlusOnes":{"extends":"UserInteraction","properties":[]},"UserTweets":{"extends":"UserInteraction","properties":[]},"VisualArtsEvent":{"extends":"Event","properties":[]},"Intangible":{"extends":"Thing","properties":[]},"AlignmentObject":{"extends":"Intangible","properties":{"alignmentType":{"expectedTypes":["Text"]},"educationalFramework":{"expectedTypes":["Text"]},"targetDescription":{"expectedTypes":["Text"]},"targetName":{"expectedTypes":["Text"]},"targetUrl":{"expectedTypes":["URL"]}}},"Audience":{"extends":"Intangible","properties":{"audienceType":{"expectedTypes":["Text"]},"geographicArea":{"expectedTypes":["AdministrativeArea"]}}},"BusinessAudience":{"extends":"Audience","properties":{"numberofEmployees":{"expectedTypes":["QuantitativeValue"]},"yearlyRevenue":{"expectedTypes":["QuantitativeValue"]},"yearsInOperation":{"expectedTypes":["QuantitativeValue"]}}},"EducationalAudience":{"extends":"Audience","properties":{"educationalRole":{"expectedTypes":["Text"]}}},"MedicalAudience":{"extends":"Audience","properties":[]},"PeopleAudience":{"extends":"Audience","properties":{"healthCondition":{"expectedTypes":["MedicalCondition"]},"requiredGender":{"expectedTypes":["Text"]},"requiredMaxAge":{"expectedTypes":["Integer"]},"requiredMinAge":{"expectedTypes":["Integer"]},"suggestedGender":{"expectedTypes":["Text"]},"suggestedMaxAge":{"expectedTypes":["Number"]},"suggestedMinAge":{"expectedTypes":["Number"]}}},"ParentAudience":{"extends":"PeopleAudience","properties":{"childMaxAge":{"expectedTypes":["Number"]},"childMinAge":{"expectedTypes":["Number"]}}},"Brand":{"extends":"Intangible","properties":{"logo":{"expectedTypes":["ImageObject","URL"]}}},"BusTrip":{"extends":"Intangible","properties":{"arrivalBusStop":{"expectedTypes":["BusStop","BusStation"]},"arrivalTime":{"expectedTypes":["DateTime"]},"busName":{"expectedTypes":["Text"]},"busNumber":{"expectedTypes":["Text"]},"departureBusStop":{"expectedTypes":["BusStop","BusStation"]},"departureTime":{"expectedTypes":["DateTime"]},"provider":{"expectedTypes":["Organization","Person"]}}},"Demand":{"extends":"Intangible","properties":{"acceptedPaymentMethod":{"expectedTypes":["PaymentMethod"]},"advanceBookingRequirement":{"expectedTypes":["QuantitativeValue"]},"availability":{"expectedTypes":["ItemAvailability"]},"availabilityEnds":{"expectedTypes":["DateTime"]},"availabilityStarts":{"expectedTypes":["DateTime"]},"availableAtOrFrom":{"expectedTypes":["Place"]},"availableDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"deliveryLeadTime":{"expectedTypes":["QuantitativeValue"]},"eligibleCustomerType":{"expectedTypes":["BusinessEntityType"]},"eligibleDuration":{"expectedTypes":["QuantitativeValue"]},"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleRegion":{"expectedTypes":["Text","GeoShape"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"includesObject":{"expectedTypes":["TypeAndQuantityNode"]},"inventoryLevel":{"expectedTypes":["QuantitativeValue"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"itemOffered":{"expectedTypes":["Product"]},"mpn":{"expectedTypes":["Text"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]},"seller":{"expectedTypes":["Organization","Person"]},"serialNumber":{"expectedTypes":["Text"]},"sku":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"warranty":{"expectedTypes":["WarrantyPromise"]}}},"Enumeration":{"extends":"Intangible","properties":[]},"BookFormatType":{"extends":"Enumeration","properties":[]},"BusinessEntityType":{"extends":"Enumeration","properties":[]},"BusinessFunction":{"extends":"Enumeration","properties":[]},"ContactPointOption":{"extends":"Enumeration","properties":[]},"DayOfWeek":{"extends":"Enumeration","properties":[]},"DeliveryMethod":{"extends":"Enumeration","properties":[]},"LockerDelivery":{"extends":"DeliveryMethod","properties":[]},"OnSitePickup":{"extends":"Enumeration","properties":[]},"ParcelService":{"extends":"DeliveryMethod","properties":[]},"EventStatusType":{"extends":"Enumeration","properties":[]},"ItemAvailability":{"extends":"Enumeration","properties":[]},"OfferItemCondition":{"extends":"Enumeration","properties":[]},"OrderStatus":{"extends":"Enumeration","properties":[]},"PaymentMethod":{"extends":"Enumeration","properties":[]},"CreditCard":{"extends":"PaymentMethod","properties":[]},"QualitativeValue":{"extends":"Enumeration","properties":{"equal":{"expectedTypes":["QualitativeValue"]},"greater":{"expectedTypes":["QualitativeValue"]},"greaterOrEqual":{"expectedTypes":["QualitativeValue"]},"lesser":{"expectedTypes":["QualitativeValue"]},"lesserOrEqual":{"expectedTypes":["QualitativeValue"]},"nonEqual":{"expectedTypes":["QualitativeValue"]},"valueReference":{"expectedTypes":["StructuredValue","Enumeration"]}}},"ReservationStatusType":{"extends":"Enumeration","properties":[]},"Specialty":{"extends":"Enumeration","properties":[]},"MedicalSpecialty":{"extends":"MedicalEnumeration","properties":[]},"WarrantyScope":{"extends":"Enumeration","properties":[]},"Flight":{"extends":"Intangible","properties":{"aircraft":{"expectedTypes":["Text","Vehicle"]},"arrivalAirport":{"expectedTypes":["Airport"]},"arrivalGate":{"expectedTypes":["Text"]},"arrivalTerminal":{"expectedTypes":["Text"]},"arrivalTime":{"expectedTypes":["DateTime"]},"carrier":{"expectedTypes":["Organization"]},"departureAirport":{"expectedTypes":["Airport"]},"departureGate":{"expectedTypes":["Text"]},"departureTerminal":{"expectedTypes":["Text"]},"departureTime":{"expectedTypes":["DateTime"]},"estimatedFlightDuration":{"expectedTypes":["Text","Duration"]},"flightDistance":{"expectedTypes":["Text","Distance"]},"flightNumber":{"expectedTypes":["Text"]},"mealService":{"expectedTypes":["Text"]},"provider":{"expectedTypes":["Organization","Person"]},"webCheckinTime":{"expectedTypes":["DateTime"]}}},"JobPosting":{"extends":"Intangible","properties":{"baseSalary":{"expectedTypes":["Number"]},"benefits":{"expectedTypes":["Text"]},"datePosted":{"expectedTypes":["Date"]},"educationRequirements":{"expectedTypes":["Text"]},"employmentType":{"expectedTypes":["Text"]},"experienceRequirements":{"expectedTypes":["Text"]},"hiringOrganization":{"expectedTypes":["Organization"]},"incentives":{"expectedTypes":["Text"]},"industry":{"expectedTypes":["Text"]},"jobLocation":{"expectedTypes":["Place"]},"occupationalCategory":{"expectedTypes":["Text"]},"qualifications":{"expectedTypes":["Text"]},"responsibilities":{"expectedTypes":["Text"]},"salaryCurrency":{"expectedTypes":["Text"]},"skills":{"expectedTypes":["Text"]},"specialCommitments":{"expectedTypes":["Text"]},"title":{"expectedTypes":["Text"]},"workHours":{"expectedTypes":["Text"]}}},"Language":{"extends":"Intangible","properties":[]},"Offer":{"extends":"Intangible","properties":{"acceptedPaymentMethod":{"expectedTypes":["PaymentMethod"]},"addOn":{"expectedTypes":["Offer"]},"advanceBookingRequirement":{"expectedTypes":["QuantitativeValue"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"availability":{"expectedTypes":["ItemAvailability"]},"availabilityEnds":{"expectedTypes":["DateTime"]},"availabilityStarts":{"expectedTypes":["DateTime"]},"availableAtOrFrom":{"expectedTypes":["Place"]},"availableDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"category":{"expectedTypes":["Text","Thing","PhysicalActivityCategory"]},"deliveryLeadTime":{"expectedTypes":["QuantitativeValue"]},"eligibleCustomerType":{"expectedTypes":["BusinessEntityType"]},"eligibleDuration":{"expectedTypes":["QuantitativeValue"]},"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleRegion":{"expectedTypes":["Text","GeoShape"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"includesObject":{"expectedTypes":["TypeAndQuantityNode"]},"inventoryLevel":{"expectedTypes":["QuantitativeValue"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"itemOffered":{"expectedTypes":["Product"]},"mpn":{"expectedTypes":["Text"]},"price":{"expectedTypes":["Text","Number"]},"priceCurrency":{"expectedTypes":["Text"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]},"priceValidUntil":{"expectedTypes":["Date"]},"review":{"expectedTypes":["Review"]},"seller":{"expectedTypes":["Organization","Person"]},"serialNumber":{"expectedTypes":["Text"]},"sku":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"warranty":{"expectedTypes":["WarrantyPromise"]}}},"AggregateOffer":{"extends":"Offer","properties":{"highPrice":{"expectedTypes":["Text","Number"]},"lowPrice":{"expectedTypes":["Text","Number"]},"offerCount":{"expectedTypes":["Integer"]}}},"Order":{"extends":"Intangible","properties":{"acceptedOffer":{"expectedTypes":["Offer"]},"billingAddress":{"expectedTypes":["PostalAddress"]},"confirmationNumber":{"expectedTypes":["Text"]},"customer":{"expectedTypes":["Organization","Person"]},"discount":{"expectedTypes":["Text","Number"]},"discountCode":{"expectedTypes":["Text"]},"discountCurrency":{"expectedTypes":["Text"]},"isGift":{"expectedTypes":["Boolean"]},"merchant":{"expectedTypes":["Organization","Person"]},"orderDate":{"expectedTypes":["DateTime"]},"orderNumber":{"expectedTypes":["Text"]},"orderStatus":{"expectedTypes":["OrderStatus"]},"orderedItem":{"expectedTypes":["Product"]},"paymentDue":{"expectedTypes":["DateTime"]},"paymentMethod":{"expectedTypes":["PaymentMethod"]},"paymentMethodId":{"expectedTypes":["Text"]},"paymentUrl":{"expectedTypes":["URL"]}}},"ParcelDelivery":{"extends":"Intangible","properties":{"carrier":{"expectedTypes":["Organization"]},"deliveryAddress":{"expectedTypes":["PostalAddress"]},"deliveryStatus":{"expectedTypes":["DeliveryEvent"]},"expectedArrivalFrom":{"expectedTypes":["DateTime"]},"expectedArrivalUntil":{"expectedTypes":["DateTime"]},"hasDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"itemShipped":{"expectedTypes":["Product"]},"originAddress":{"expectedTypes":["PostalAddress"]},"partOfOrder":{"expectedTypes":["Order"]},"trackingNumber":{"expectedTypes":["Text"]},"trackingUrl":{"expectedTypes":["URL"]}}},"Permit":{"extends":"Intangible","properties":{"issuedBy":{"expectedTypes":["Organization"]},"issuedThrough":{"expectedTypes":["Service"]},"permitAudience":{"expectedTypes":["Audience"]},"validFor":{"expectedTypes":["Duration"]},"validFrom":{"expectedTypes":["DateTime"]},"validIn":{"expectedTypes":["AdministrativeArea"]},"validUntil":{"expectedTypes":["Date"]}}},"GovernmentPermit":{"extends":"Permit","properties":[]},"ProgramMembership":{"extends":"Intangible","properties":{"hostingOrganization":{"expectedTypes":["Organization"]},"member":{"expectedTypes":["Organization","Person"]},"membershipNumber":{"expectedTypes":["Text"]},"programName":{"expectedTypes":["Text"]}}},"Quantity":{"extends":"Intangible","properties":[]},"Distance":{"extends":"Quantity","properties":[]},"Duration":{"extends":"Quantity","properties":[]},"Energy":{"extends":"Quantity","properties":[]},"Mass":{"extends":"Quantity","properties":[]},"Rating":{"extends":"Intangible","properties":{"bestRating":{"expectedTypes":["Text","Number"]},"ratingValue":{"expectedTypes":["Text"]},"worstRating":{"expectedTypes":["Text","Number"]}}},"AggregateRating":{"extends":"Rating","properties":{"itemReviewed":{"expectedTypes":["Thing"]},"ratingCount":{"expectedTypes":["Number"]},"reviewCount":{"expectedTypes":["Number"]}}},"Reservation":{"extends":"Intangible","properties":{"bookingAgent":{"expectedTypes":["Organization","Person"]},"bookingTime":{"expectedTypes":["DateTime"]},"modifiedTime":{"expectedTypes":["DateTime"]},"priceCurrency":{"expectedTypes":["Text"]},"programMembershipUsed":{"expectedTypes":["ProgramMembership"]},"provider":{"expectedTypes":["Organization","Person"]},"reservationFor":{"expectedTypes":["Thing"]},"reservationId":{"expectedTypes":["Text"]},"reservationStatus":{"expectedTypes":["ReservationStatusType"]},"reservedTicket":{"expectedTypes":["Ticket"]},"totalPrice":{"expectedTypes":["Text","Number","PriceSpecification"]},"underName":{"expectedTypes":["Organization","Person"]}}},"BusReservation":{"extends":"Reservation","properties":[]},"EventReservation":{"extends":"Reservation","properties":[]},"FlightReservation":{"extends":"Reservation","properties":{"boardingGroup":{"expectedTypes":["Text"]}}},"FoodEstablishmentReservation":{"extends":"Reservation","properties":{"endTime":{"expectedTypes":["DateTime"]},"partySize":{"expectedTypes":["Number","QuantitativeValue"]},"startTime":{"expectedTypes":["DateTime"]}}},"LodgingReservation":{"extends":"Reservation","properties":{"checkinTime":{"expectedTypes":["DateTime"]},"checkoutTime":{"expectedTypes":["DateTime"]},"lodgingUnitDescription":{"expectedTypes":["Text"]},"lodgingUnitType":{"expectedTypes":["Text","QualitativeValue"]},"numAdults":{"expectedTypes":["Number","QuantitativeValue"]},"numChildren":{"expectedTypes":["Number","QuantitativeValue"]}}},"RentalCarReservation":{"extends":"Reservation","properties":{"dropoffLocation":{"expectedTypes":["Place"]},"dropoffTime":{"expectedTypes":["DateTime"]},"pickupLocation":{"expectedTypes":["Place"]},"pickupTime":{"expectedTypes":["DateTime"]}}},"ReservationPackage":{"extends":"Reservation","properties":{"subReservation":{"expectedTypes":["Reservation"]}}},"TaxiReservation":{"extends":"Reservation","properties":{"partySize":{"expectedTypes":["Number","QuantitativeValue"]},"pickupLocation":{"expectedTypes":["Place"]},"pickupTime":{"expectedTypes":["DateTime"]}}},"TrainReservation":{"extends":"Reservation","properties":[]},"Seat":{"extends":"Intangible","properties":{"seatNumber":{"expectedTypes":["Text"]},"seatRow":{"expectedTypes":["Text"]},"seatSection":{"expectedTypes":["Text"]},"seatingType":{"expectedTypes":["Text","QualitativeValue"]}}},"Service":{"extends":"Intangible","properties":{"availableChannel":{"expectedTypes":["ServiceChannel"]},"produces":{"expectedTypes":["Thing"]},"provider":{"expectedTypes":["Organization","Person"]},"serviceArea":{"expectedTypes":["AdministrativeArea"]},"serviceAudience":{"expectedTypes":["Audience"]},"serviceType":{"expectedTypes":["Text"]}}},"GovernmentService":{"extends":"Service","properties":{"serviceOperator":{"expectedTypes":["Organization"]}}},"Taxi":{"extends":"Service","properties":[]},"ServiceChannel":{"extends":"Intangible","properties":{"availableLanguage":{"expectedTypes":["Language"]},"processingTime":{"expectedTypes":["Duration"]},"providesService":{"expectedTypes":["Service"]},"serviceLocation":{"expectedTypes":["Place"]},"servicePhone":{"expectedTypes":["ContactPoint"]},"servicePostalAddress":{"expectedTypes":["PostalAddress"]},"serviceSmsNumber":{"expectedTypes":["ContactPoint"]},"serviceUrl":{"expectedTypes":["URL"]}}},"StructuredValue":{"extends":"Intangible","properties":[]},"ContactPoint":{"extends":"StructuredValue","properties":{"areaServed":{"expectedTypes":["AdministrativeArea"]},"availableLanguage":{"expectedTypes":["Language"]},"contactOption":{"expectedTypes":["ContactPointOption"]},"contactType":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"faxNumber":{"expectedTypes":["Text"]},"hoursAvailable":{"expectedTypes":["OpeningHoursSpecification"]},"productSupported":{"expectedTypes":["Text","Product"]},"telephone":{"expectedTypes":["Text"]}}},"PostalAddress":{"extends":"ContactPoint","properties":{"addressCountry":{"expectedTypes":["Country"]},"addressLocality":{"expectedTypes":["Text"]},"addressRegion":{"expectedTypes":["Text"]},"postOfficeBoxNumber":{"expectedTypes":["Text"]},"postalCode":{"expectedTypes":["Text"]},"streetAddress":{"expectedTypes":["Text"]}}},"GeoCoordinates":{"extends":"StructuredValue","properties":{"elevation":{"expectedTypes":["Text","Number"]},"latitude":{"expectedTypes":["Text","Number"]},"longitude":{"expectedTypes":["Text","Number"]}}},"GeoShape":{"extends":"StructuredValue","properties":{"box":{"expectedTypes":["Text"]},"circle":{"expectedTypes":["Text"]},"elevation":{"expectedTypes":["Text","Number"]},"line":{"expectedTypes":["Text"]},"polygon":{"expectedTypes":["Text"]}}},"NutritionInformation":{"extends":"StructuredValue","properties":{"calories":{"expectedTypes":["Energy"]},"carbohydrateContent":{"expectedTypes":["Mass"]},"cholesterolContent":{"expectedTypes":["Mass"]},"fatContent":{"expectedTypes":["Mass"]},"fiberContent":{"expectedTypes":["Mass"]},"proteinContent":{"expectedTypes":["Mass"]},"saturatedFatContent":{"expectedTypes":["Mass"]},"servingSize":{"expectedTypes":["Text"]},"sodiumContent":{"expectedTypes":["Mass"]},"sugarContent":{"expectedTypes":["Mass"]},"transFatContent":{"expectedTypes":["Mass"]},"unsaturatedFatContent":{"expectedTypes":["Mass"]}}},"OpeningHoursSpecification":{"extends":"StructuredValue","properties":{"closes":{"expectedTypes":["Time"]},"dayOfWeek":{"expectedTypes":["DayOfWeek"]},"opens":{"expectedTypes":["Time"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]}}},"OwnershipInfo":{"extends":"StructuredValue","properties":{"acquiredFrom":{"expectedTypes":["Organization","Person"]},"ownedFrom":{"expectedTypes":["DateTime"]},"ownedThrough":{"expectedTypes":["DateTime"]},"typeOfGood":{"expectedTypes":["Product"]}}},"PriceSpecification":{"extends":"StructuredValue","properties":{"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"maxPrice":{"expectedTypes":["Number"]},"minPrice":{"expectedTypes":["Number"]},"price":{"expectedTypes":["Text","Number"]},"priceCurrency":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"valueAddedTaxIncluded":{"expectedTypes":["Boolean"]}}},"DeliveryChargeSpecification":{"extends":"PriceSpecification","properties":{"appliesToDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"eligibleRegion":{"expectedTypes":["Text","GeoShape"]}}},"PaymentChargeSpecification":{"extends":"PriceSpecification","properties":{"appliesToDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"appliesToPaymentMethod":{"expectedTypes":["PaymentMethod"]}}},"UnitPriceSpecification":{"extends":"PriceSpecification","properties":{"billingIncrement":{"expectedTypes":["Number"]},"priceType":{"expectedTypes":["Text"]},"unitCode":{"expectedTypes":["Text"]}}},"QuantitativeValue":{"extends":"StructuredValue","properties":{"maxValue":{"expectedTypes":["Number"]},"minValue":{"expectedTypes":["Number"]},"unitCode":{"expectedTypes":["Text"]},"value":{"expectedTypes":["Number"]},"valueReference":{"expectedTypes":["StructuredValue","Enumeration"]}}},"TypeAndQuantityNode":{"extends":"StructuredValue","properties":{"amountOfThisGood":{"expectedTypes":["Number"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"typeOfGood":{"expectedTypes":["Product"]},"unitCode":{"expectedTypes":["Text"]}}},"WarrantyPromise":{"extends":"StructuredValue","properties":{"durationOfWarranty":{"expectedTypes":["QuantitativeValue"]},"warrantyScope":{"expectedTypes":["WarrantyScope"]}}},"Ticket":{"extends":"Intangible","properties":{"dateIssued":{"expectedTypes":["DateTime"]},"issuedBy":{"expectedTypes":["Organization"]},"priceCurrency":{"expectedTypes":["Text"]},"ticketNumber":{"expectedTypes":["Text"]},"ticketToken":{"expectedTypes":["Text","URL"]},"ticketedSeat":{"expectedTypes":["Seat"]},"totalPrice":{"expectedTypes":["Text","Number","PriceSpecification"]},"underName":{"expectedTypes":["Person","Organization"]}}},"TrainTrip":{"extends":"Intangible","properties":{"arrivalPlatform":{"expectedTypes":["Text"]},"arrivalStation":{"expectedTypes":["TrainStation"]},"arrivalTime":{"expectedTypes":["DateTime"]},"departurePlatform":{"expectedTypes":["Text"]},"departureStation":{"expectedTypes":["TrainStation"]},"departureTime":{"expectedTypes":["DateTime"]},"provider":{"expectedTypes":["Organization","Person"]},"trainName":{"expectedTypes":["Text"]},"trainNumber":{"expectedTypes":["Text"]}}},"MedicalEntity":{"extends":"Thing","properties":{"alternateName":{"expectedTypes":["Text"]},"code":{"expectedTypes":["MedicalCode"]},"guideline":{"expectedTypes":["MedicalGuideline"]},"medicineSystem":{"expectedTypes":["MedicineSystem"]},"recognizingAuthority":{"expectedTypes":["Organization"]},"relevantSpecialty":{"expectedTypes":["MedicalSpecialty"]},"study":{"expectedTypes":["MedicalStudy"]}}},"AnatomicalStructure":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"bodyLocation":{"expectedTypes":["Text"]},"connectedTo":{"expectedTypes":["AnatomicalStructure"]},"diagram":{"expectedTypes":["ImageObject"]},"function":{"expectedTypes":["Text"]},"partOfSystem":{"expectedTypes":["AnatomicalSystem"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]},"subStructure":{"expectedTypes":["AnatomicalStructure"]}}},"Bone":{"extends":"AnatomicalStructure","properties":[]},"BrainStructure":{"extends":"AnatomicalStructure","properties":[]},"Joint":{"extends":"AnatomicalStructure","properties":{"biomechnicalClass":{"expectedTypes":["Text"]},"functionalClass":{"expectedTypes":["Text"]},"structuralClass":{"expectedTypes":["Text"]}}},"Ligament":{"extends":"AnatomicalStructure","properties":[]},"Muscle":{"extends":"AnatomicalStructure","properties":{"antagonist":{"expectedTypes":["Muscle"]},"bloodSupply":{"expectedTypes":["Vessel"]},"insertion":{"expectedTypes":["AnatomicalStructure"]},"muscleAction":{"expectedTypes":["Text"]},"nerve":{"expectedTypes":["Nerve"]},"origin":{"expectedTypes":["AnatomicalStructure"]}}},"Nerve":{"extends":"AnatomicalStructure","properties":{"branch":{"expectedTypes":["Nerve","AnatomicalStructure"]},"nerveMotor":{"expectedTypes":["Muscle"]},"sensoryUnit":{"expectedTypes":["SuperficialAnatomy","AnatomicalStructure"]},"sourcedFrom":{"expectedTypes":["BrainStructure"]}}},"Vessel":{"extends":"AnatomicalStructure","properties":[]},"Artery":{"extends":"Vessel","properties":{"arterialBranch":{"expectedTypes":["AnatomicalStructure"]},"source":{"expectedTypes":["AnatomicalStructure"]},"supplyTo":{"expectedTypes":["AnatomicalStructure"]}}},"LymphaticVessel":{"extends":"Vessel","properties":{"originatesFrom":{"expectedTypes":["Vessel"]},"regionDrained":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"runsTo":{"expectedTypes":["Vessel"]}}},"Vein":{"extends":"Vessel","properties":{"drainsTo":{"expectedTypes":["Vessel"]},"regionDrained":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"tributary":{"expectedTypes":["AnatomicalStructure"]}}},"AnatomicalSystem":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"comprisedOf":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedStructure":{"expectedTypes":["AnatomicalStructure"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]}}},"MedicalCause":{"extends":"MedicalEntity","properties":{"causeOf":{"expectedTypes":["MedicalEntity"]}}},"MedicalCondition":{"extends":"MedicalEntity","properties":{"associatedAnatomy":{"expectedTypes":["SuperficialAnatomy","AnatomicalSystem","AnatomicalStructure"]},"cause":{"expectedTypes":["MedicalCause"]},"differentialDiagnosis":{"expectedTypes":["DDxElement"]},"epidemiology":{"expectedTypes":["Text"]},"expectedPrognosis":{"expectedTypes":["Text"]},"naturalProgression":{"expectedTypes":["Text"]},"pathophysiology":{"expectedTypes":["Text"]},"possibleComplication":{"expectedTypes":["Text"]},"possibleTreatment":{"expectedTypes":["MedicalTherapy"]},"primaryPrevention":{"expectedTypes":["MedicalTherapy"]},"riskFactor":{"expectedTypes":["MedicalRiskFactor"]},"secondaryPrevention":{"expectedTypes":["MedicalTherapy"]},"signOrSymptom":{"expectedTypes":["MedicalSignOrSymptom"]},"stage":{"expectedTypes":["MedicalConditionStage"]},"subtype":{"expectedTypes":["Text"]},"typicalTest":{"expectedTypes":["MedicalTest"]}}},"InfectiousDisease":{"extends":"MedicalCondition","properties":{"infectiousAgent":{"expectedTypes":["Text"]},"infectiousAgentClass":{"expectedTypes":["InfectiousAgentClass"]},"transmissionMethod":{"expectedTypes":["Text"]}}},"MedicalContraindication":{"extends":"MedicalEntity","properties":[]},"MedicalDevice":{"extends":"MedicalEntity","properties":{"adverseOutcome":{"expectedTypes":["MedicalEntity"]},"contraindication":{"expectedTypes":["MedicalContraindication"]},"indication":{"expectedTypes":["MedicalIndication"]},"postOp":{"expectedTypes":["Text"]},"preOp":{"expectedTypes":["Text"]},"procedure":{"expectedTypes":["Text"]},"purpose":{"expectedTypes":["Thing","MedicalDevicePurpose"]},"seriousAdverseOutcome":{"expectedTypes":["MedicalEntity"]}}},"MedicalGuideline":{"extends":"MedicalEntity","properties":{"evidenceLevel":{"expectedTypes":["MedicalEvidenceLevel"]},"evidenceOrigin":{"expectedTypes":["Text"]},"guidelineDate":{"expectedTypes":["Date"]},"guidelineSubject":{"expectedTypes":["MedicalEntity"]}}},"MedicalGuidelineContraindication":{"extends":"MedicalGuideline","properties":[]},"MedicalGuidelineRecommendation":{"extends":"MedicalGuideline","properties":{"recommendationStrength":{"expectedTypes":["Text"]}}},"MedicalIndication":{"extends":"MedicalEntity","properties":[]},"ApprovedIndication":{"extends":"MedicalIndication","properties":[]},"PreventionIndication":{"extends":"MedicalIndication","properties":[]},"TreatmentIndication":{"extends":"MedicalIndication","properties":[]},"MedicalIntangible":{"extends":"MedicalEntity","properties":[]},"DDxElement":{"extends":"MedicalIntangible","properties":{"diagnosis":{"expectedTypes":["MedicalCondition"]},"distinguishingSign":{"expectedTypes":["MedicalSignOrSymptom"]}}},"DoseSchedule":{"extends":"MedicalIntangible","properties":{"doseUnit":{"expectedTypes":["Text"]},"doseValue":{"expectedTypes":["Number"]},"frequency":{"expectedTypes":["Text"]},"targetPopulation":{"expectedTypes":["Text"]}}},"MaximumDoseSchedule":{"extends":"DoseSchedule","properties":[]},"RecommendedDoseSchedule":{"extends":"DoseSchedule","properties":[]},"ReportedDoseSchedule":{"extends":"DoseSchedule","properties":[]},"DrugCost":{"extends":"MedicalIntangible","properties":{"applicableLocation":{"expectedTypes":["AdministrativeArea"]},"costCategory":{"expectedTypes":["DrugCostCategory"]},"costCurrency":{"expectedTypes":["Text"]},"costOrigin":{"expectedTypes":["Text"]},"costPerUnit":{"expectedTypes":["Text","Number"]},"drugUnit":{"expectedTypes":["Text"]}}},"DrugLegalStatus":{"extends":"MedicalIntangible","properties":{"applicableLocation":{"expectedTypes":["AdministrativeArea"]}}},"DrugStrength":{"extends":"MedicalIntangible","properties":{"activeIngredient":{"expectedTypes":["Text"]},"availableIn":{"expectedTypes":["AdministrativeArea"]},"strengthUnit":{"expectedTypes":["Text"]},"strengthValue":{"expectedTypes":["Number"]}}},"MedicalCode":{"extends":"MedicalIntangible","properties":{"codeValue":{"expectedTypes":["Text"]},"codingSystem":{"expectedTypes":["Text"]}}},"MedicalConditionStage":{"extends":"MedicalIntangible","properties":{"stageAsNumber":{"expectedTypes":["Number"]},"subStageSuffix":{"expectedTypes":["Text"]}}},"MedicalEnumeration":{"extends":"MedicalIntangible","properties":[]},"DrugCostCategory":{"extends":"MedicalEnumeration","properties":[]},"DrugPregnancyCategory":{"extends":"MedicalEnumeration","properties":[]},"DrugPrescriptionStatus":{"extends":"MedicalEnumeration","properties":[]},"InfectiousAgentClass":{"extends":"MedicalEnumeration","properties":[]},"MedicalDevicePurpose":{"extends":"MedicalEnumeration","properties":[]},"MedicalEvidenceLevel":{"extends":"MedicalEnumeration","properties":[]},"MedicalImagingTechnique":{"extends":"MedicalEnumeration","properties":[]},"MedicalObservationalStudyDesign":{"extends":"MedicalEnumeration","properties":[]},"MedicalProcedureType":{"extends":"MedicalEnumeration","properties":[]},"MedicalStudyStatus":{"extends":"MedicalEnumeration","properties":[]},"MedicalTrialDesign":{"extends":"MedicalEnumeration","properties":[]},"MedicineSystem":{"extends":"MedicalEnumeration","properties":[]},"PhysicalActivityCategory":{"extends":"MedicalEnumeration","properties":[]},"PhysicalExam":{"extends":"MedicalEnumeration","properties":[]},"MedicalProcedure":{"extends":"MedicalEntity","properties":{"followup":{"expectedTypes":["Text"]},"howPerformed":{"expectedTypes":["Text"]},"preparation":{"expectedTypes":["Text"]},"procedureType":{"expectedTypes":["MedicalProcedureType"]}}},"DiagnosticProcedure":{"extends":"MedicalProcedure","properties":[]},"PalliativeProcedure":{"extends":"MedicalTherapy","properties":[]},"TherapeuticProcedure":{"extends":"MedicalTherapy","properties":[]},"MedicalRiskEstimator":{"extends":"MedicalEntity","properties":{"estimatesRiskOf":{"expectedTypes":["MedicalEntity"]},"includedRiskFactor":{"expectedTypes":["MedicalRiskFactor"]}}},"MedicalRiskCalculator":{"extends":"MedicalRiskEstimator","properties":[]},"MedicalRiskScore":{"extends":"MedicalRiskEstimator","properties":{"algorithm":{"expectedTypes":["Text"]}}},"MedicalRiskFactor":{"extends":"MedicalEntity","properties":{"increasesRiskOf":{"expectedTypes":["MedicalEntity"]}}},"MedicalSignOrSymptom":{"extends":"MedicalEntity","properties":{"cause":{"expectedTypes":["MedicalCause"]},"possibleTreatment":{"expectedTypes":["MedicalTherapy"]}}},"MedicalSign":{"extends":"MedicalSignOrSymptom","properties":{"identifyingExam":{"expectedTypes":["PhysicalExam"]},"identifyingTest":{"expectedTypes":["MedicalTest"]}}},"MedicalSymptom":{"extends":"MedicalSignOrSymptom","properties":[]},"MedicalStudy":{"extends":"MedicalEntity","properties":{"outcome":{"expectedTypes":["Text"]},"population":{"expectedTypes":["Text"]},"sponsor":{"expectedTypes":["Organization"]},"status":{"expectedTypes":["MedicalStudyStatus"]},"studyLocation":{"expectedTypes":["AdministrativeArea"]},"studySubject":{"expectedTypes":["MedicalEntity"]}}},"MedicalObservationalStudy":{"extends":"MedicalStudy","properties":{"studyDesign":{"expectedTypes":["MedicalObservationalStudyDesign"]}}},"MedicalTrial":{"extends":"MedicalStudy","properties":{"phase":{"expectedTypes":["Text"]},"trialDesign":{"expectedTypes":["MedicalTrialDesign"]}}},"MedicalTest":{"extends":"MedicalEntity","properties":{"affectedBy":{"expectedTypes":["Drug"]},"normalRange":{"expectedTypes":["Text"]},"signDetected":{"expectedTypes":["MedicalSign"]},"usedToDiagnose":{"expectedTypes":["MedicalCondition"]},"usesDevice":{"expectedTypes":["MedicalDevice"]}}},"BloodTest":{"extends":"MedicalTest","properties":[]},"ImagingTest":{"extends":"MedicalTest","properties":{"imagingTechnique":{"expectedTypes":["MedicalImagingTechnique"]}}},"MedicalTestPanel":{"extends":"MedicalTest","properties":{"subTest":{"expectedTypes":["MedicalTest"]}}},"PathologyTest":{"extends":"MedicalTest","properties":{"tissueSample":{"expectedTypes":["Text"]}}},"MedicalTherapy":{"extends":"MedicalEntity","properties":{"adverseOutcome":{"expectedTypes":["MedicalEntity"]},"contraindication":{"expectedTypes":["MedicalContraindication"]},"duplicateTherapy":{"expectedTypes":["MedicalTherapy"]},"indication":{"expectedTypes":["MedicalIndication"]},"seriousAdverseOutcome":{"expectedTypes":["MedicalEntity"]}}},"DietarySupplement":{"extends":"MedicalTherapy","properties":{"activeIngredient":{"expectedTypes":["Text"]},"background":{"expectedTypes":["Text"]},"dosageForm":{"expectedTypes":["Text"]},"isProprietary":{"expectedTypes":["Boolean"]},"legalStatus":{"expectedTypes":["DrugLegalStatus"]},"manufacturer":{"expectedTypes":["Organization"]},"maximumIntake":{"expectedTypes":["MaximumDoseSchedule"]},"mechanismOfAction":{"expectedTypes":["Text"]},"nonProprietaryName":{"expectedTypes":["Text"]},"recommendedIntake":{"expectedTypes":["RecommendedDoseSchedule"]},"safetyConsideration":{"expectedTypes":["Text"]},"targetPopulation":{"expectedTypes":["Text"]}}},"Drug":{"extends":"MedicalTherapy","properties":{"activeIngredient":{"expectedTypes":["Text"]},"administrationRoute":{"expectedTypes":["Text"]},"alcoholWarning":{"expectedTypes":["Text"]},"availableStrength":{"expectedTypes":["DrugStrength"]},"breastfeedingWarning":{"expectedTypes":["Text"]},"clincalPharmacology":{"expectedTypes":["Text"]},"cost":{"expectedTypes":["DrugCost"]},"dosageForm":{"expectedTypes":["Text"]},"doseSchedule":{"expectedTypes":["DoseSchedule"]},"drugClass":{"expectedTypes":["DrugClass"]},"foodWarning":{"expectedTypes":["Text"]},"interactingDrug":{"expectedTypes":["Drug"]},"isAvailableGenerically":{"expectedTypes":["Boolean"]},"isProprietary":{"expectedTypes":["Boolean"]},"labelDetails":{"expectedTypes":["URL"]},"legalStatus":{"expectedTypes":["DrugLegalStatus"]},"manufacturer":{"expectedTypes":["Organization"]},"mechanismOfAction":{"expectedTypes":["Text"]},"nonProprietaryName":{"expectedTypes":["Text"]},"overdosage":{"expectedTypes":["Text"]},"pregnancyCategory":{"expectedTypes":["DrugPregnancyCategory"]},"pregnancyWarning":{"expectedTypes":["Text"]},"prescribingInfo":{"expectedTypes":["URL"]},"prescriptionStatus":{"expectedTypes":["DrugPrescriptionStatus"]},"relatedDrug":{"expectedTypes":["Drug"]},"warning":{"expectedTypes":["Text","URL"]}}},"DrugClass":{"extends":"MedicalTherapy","properties":{"drug":{"expectedTypes":["Drug"]}}},"LifestyleModification":{"extends":"MedicalTherapy","properties":[]},"PhysicalActivity":{"extends":"LifestyleModification","properties":{"associatedAnatomy":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem","SuperficialAnatomy"]},"category":{"expectedTypes":["PhysicalActivityCategory","Text","Thing"]},"epidemiology":{"expectedTypes":["Text"]},"pathophysiology":{"expectedTypes":["Text"]}}},"PhysicalTherapy":{"extends":"MedicalTherapy","properties":[]},"PsychologicalTreatment":{"extends":"MedicalTherapy","properties":[]},"RadiationTherapy":{"extends":"MedicalTherapy","properties":[]},"SuperficialAnatomy":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"relatedAnatomy":{"expectedTypes":["AnatomicalStructure","AnatomicalSystem"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]},"significance":{"expectedTypes":["Text"]}}},"Organization":{"extends":"Thing","properties":{"address":{"expectedTypes":["PostalAddress"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"brand":{"expectedTypes":["Brand","Organization"]},"contactPoint":{"expectedTypes":["ContactPoint"]},"department":{"expectedTypes":["Organization"]},"dissolutionDate":{"expectedTypes":["Date"]},"duns":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"employee":{"expectedTypes":["Person"]},"event":{"expectedTypes":["Event"]},"faxNumber":{"expectedTypes":["Text"]},"founder":{"expectedTypes":["Person"]},"foundingDate":{"expectedTypes":["Date"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasPOS":{"expectedTypes":["Place"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"legalName":{"expectedTypes":["Text"]},"location":{"expectedTypes":["Place","PostalAddress"]},"logo":{"expectedTypes":["URL","ImageObject"]},"makesOffer":{"expectedTypes":["Offer"]},"member":{"expectedTypes":["Person","Organization"]},"memberOf":{"expectedTypes":["Organization","ProgramMembership"]},"naics":{"expectedTypes":["Text"]},"owns":{"expectedTypes":["OwnershipInfo","Product"]},"review":{"expectedTypes":["Review"]},"seeks":{"expectedTypes":["Demand"]},"subOrganization":{"expectedTypes":["Organization"]},"taxID":{"expectedTypes":["Text"]},"telephone":{"expectedTypes":["Text"]},"vatID":{"expectedTypes":["Text"]}}},"Airline":{"extends":"Organization","properties":{"iataCode":{"expectedTypes":["Text"]}}},"Corporation":{"extends":"Organization","properties":{"tickerSymbol":{"expectedTypes":["Text"]}}},"EducationalOrganization":{"extends":"Organization","properties":{"alumni":{"expectedTypes":["Person"]}}},"CollegeOrUniversity":{"extends":"EducationalOrganization","properties":[]},"ElementarySchool":{"extends":"EducationalOrganization","properties":[]},"HighSchool":{"extends":"EducationalOrganization","properties":[]},"MiddleSchool":{"extends":"EducationalOrganization","properties":[]},"Preschool":{"extends":"EducationalOrganization","properties":[]},"School":{"extends":"EducationalOrganization","properties":[]},"GovernmentOrganization":{"extends":"Organization","properties":[]},"LocalBusiness":{"extends":"Organization","properties":{"branchOf":{"expectedTypes":["Organization"]},"currenciesAccepted":{"expectedTypes":["Text"]},"openingHours":{"expectedTypes":["Duration"]},"paymentAccepted":{"expectedTypes":["Text"]},"priceRange":{"expectedTypes":["Text"]}}},"AnimalShelter":{"extends":"LocalBusiness","properties":[]},"AutomotiveBusiness":{"extends":"LocalBusiness","properties":[]},"AutoBodyShop":{"extends":"AutomotiveBusiness","properties":[]},"AutoDealer":{"extends":"AutomotiveBusiness","properties":[]},"AutoPartsStore":{"extends":"AutomotiveBusiness","properties":[]},"AutoRental":{"extends":"AutomotiveBusiness","properties":[]},"AutoRepair":{"extends":"AutomotiveBusiness","properties":[]},"AutoWash":{"extends":"AutomotiveBusiness","properties":[]},"GasStation":{"extends":"AutomotiveBusiness","properties":[]},"MotorcycleDealer":{"extends":"AutomotiveBusiness","properties":[]},"MotorcycleRepair":{"extends":"AutomotiveBusiness","properties":[]},"ChildCare":{"extends":"LocalBusiness","properties":[]},"DryCleaningOrLaundry":{"extends":"LocalBusiness","properties":[]},"EmergencyService":{"extends":"LocalBusiness","properties":[]},"FireStation":{"extends":"EmergencyService","properties":[]},"Hospital":{"extends":"EmergencyService","properties":{"availableService":{"expectedTypes":["MedicalTherapy","MedicalProcedure","MedicalTest"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"PoliceStation":{"extends":"EmergencyService","properties":[]},"EmploymentAgency":{"extends":"LocalBusiness","properties":[]},"EntertainmentBusiness":{"extends":"LocalBusiness","properties":[]},"AdultEntertainment":{"extends":"EntertainmentBusiness","properties":[]},"AmusementPark":{"extends":"EntertainmentBusiness","properties":[]},"ArtGallery":{"extends":"EntertainmentBusiness","properties":[]},"Casino":{"extends":"EntertainmentBusiness","properties":[]},"ComedyClub":{"extends":"EntertainmentBusiness","properties":[]},"MovieTheater":{"extends":"EntertainmentBusiness","properties":[]},"NightClub":{"extends":"EntertainmentBusiness","properties":[]},"FinancialService":{"extends":"LocalBusiness","properties":[]},"AccountingService":{"extends":"ProfessionalService","properties":[]},"AutomatedTeller":{"extends":"FinancialService","properties":[]},"BankOrCreditUnion":{"extends":"FinancialService","properties":[]},"InsuranceAgency":{"extends":"FinancialService","properties":[]},"FoodEstablishment":{"extends":"LocalBusiness","properties":{"acceptsReservations":{"expectedTypes":["Boolean","URL","Text"]},"menu":{"expectedTypes":["URL","Text"]},"servesCuisine":{"expectedTypes":["Text"]}}},"Bakery":{"extends":"FoodEstablishment","properties":[]},"BarOrPub":{"extends":"FoodEstablishment","properties":[]},"Brewery":{"extends":"FoodEstablishment","properties":[]},"CafeOrCoffeeShop":{"extends":"FoodEstablishment","properties":[]},"FastFoodRestaurant":{"extends":"FoodEstablishment","properties":[]},"IceCreamShop":{"extends":"FoodEstablishment","properties":[]},"Restaurant":{"extends":"FoodEstablishment","properties":[]},"Winery":{"extends":"FoodEstablishment","properties":[]},"GovernmentOffice":{"extends":"LocalBusiness","properties":[]},"PostOffice":{"extends":"GovernmentOffice","properties":[]},"HealthAndBeautyBusiness":{"extends":"LocalBusiness","properties":[]},"BeautySalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"DaySpa":{"extends":"HealthAndBeautyBusiness","properties":[]},"HairSalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"HealthClub":{"extends":"HealthAndBeautyBusiness","properties":[]},"NailSalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"TattooParlor":{"extends":"HealthAndBeautyBusiness","properties":[]},"HomeAndConstructionBusiness":{"extends":"LocalBusiness","properties":[]},"Electrician":{"extends":"ProfessionalService","properties":[]},"GeneralContractor":{"extends":"ProfessionalService","properties":[]},"HVACBusiness":{"extends":"HomeAndConstructionBusiness","properties":[]},"HousePainter":{"extends":"ProfessionalService","properties":[]},"Locksmith":{"extends":"ProfessionalService","properties":[]},"MovingCompany":{"extends":"HomeAndConstructionBusiness","properties":[]},"Plumber":{"extends":"ProfessionalService","properties":[]},"RoofingContractor":{"extends":"ProfessionalService","properties":[]},"InternetCafe":{"extends":"LocalBusiness","properties":[]},"Library":{"extends":"LocalBusiness","properties":[]},"LodgingBusiness":{"extends":"LocalBusiness","properties":[]},"BedAndBreakfast":{"extends":"LodgingBusiness","properties":[]},"Hostel":{"extends":"LodgingBusiness","properties":[]},"Hotel":{"extends":"LodgingBusiness","properties":[]},"Motel":{"extends":"LodgingBusiness","properties":[]},"MedicalOrganization":{"extends":"LocalBusiness","properties":[]},"Dentist":{"extends":"ProfessionalService","properties":[]},"DiagnosticLab":{"extends":"MedicalOrganization","properties":{"availableTest":{"expectedTypes":["MedicalTest"]}}},"MedicalClinic":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalTherapy","MedicalProcedure","MedicalTest"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"Optician":{"extends":"MedicalOrganization","properties":[]},"Pharmacy":{"extends":"MedicalOrganization","properties":[]},"Physician":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalTherapy","MedicalProcedure","MedicalTest"]},"hospitalAffiliation":{"expectedTypes":["Hospital"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"VeterinaryCare":{"extends":"MedicalOrganization","properties":[]},"ProfessionalService":{"extends":"LocalBusiness","properties":[]},"Attorney":{"extends":"ProfessionalService","properties":[]},"Notary":{"extends":"ProfessionalService","properties":[]},"RadioStation":{"extends":"LocalBusiness","properties":[]},"RealEstateAgent":{"extends":"LocalBusiness","properties":[]},"RecyclingCenter":{"extends":"LocalBusiness","properties":[]},"SelfStorage":{"extends":"LocalBusiness","properties":[]},"ShoppingCenter":{"extends":"LocalBusiness","properties":[]},"SportsActivityLocation":{"extends":"LocalBusiness","properties":[]},"BowlingAlley":{"extends":"SportsActivityLocation","properties":[]},"ExerciseGym":{"extends":"SportsActivityLocation","properties":[]},"GolfCourse":{"extends":"SportsActivityLocation","properties":[]},"PublicSwimmingPool":{"extends":"SportsActivityLocation","properties":[]},"SkiResort":{"extends":"SportsActivityLocation","properties":[]},"SportsClub":{"extends":"SportsActivityLocation","properties":[]},"StadiumOrArena":{"extends":"CivicStructure","properties":[]},"TennisComplex":{"extends":"SportsActivityLocation","properties":[]},"Store":{"extends":"LocalBusiness","properties":[]},"BikeStore":{"extends":"Store","properties":[]},"BookStore":{"extends":"Store","properties":[]},"ClothingStore":{"extends":"Store","properties":[]},"ComputerStore":{"extends":"Store","properties":[]},"ConvenienceStore":{"extends":"Store","properties":[]},"DepartmentStore":{"extends":"Store","properties":[]},"ElectronicsStore":{"extends":"Store","properties":[]},"Florist":{"extends":"Store","properties":[]},"FurnitureStore":{"extends":"Store","properties":[]},"GardenStore":{"extends":"Store","properties":[]},"GroceryStore":{"extends":"Store","properties":[]},"HardwareStore":{"extends":"Store","properties":[]},"HobbyShop":{"extends":"Store","properties":[]},"HomeGoodsStore":{"extends":"Store","properties":[]},"JewelryStore":{"extends":"Store","properties":[]},"LiquorStore":{"extends":"Store","properties":[]},"MensClothingStore":{"extends":"Store","properties":[]},"MobilePhoneStore":{"extends":"Store","properties":[]},"MovieRentalStore":{"extends":"Store","properties":[]},"MusicStore":{"extends":"Store","properties":[]},"OfficeEquipmentStore":{"extends":"Store","properties":[]},"OutletStore":{"extends":"Store","properties":[]},"PawnShop":{"extends":"Store","properties":[]},"PetStore":{"extends":"Store","properties":[]},"ShoeStore":{"extends":"Store","properties":[]},"SportingGoodsStore":{"extends":"Store","properties":[]},"TireShop":{"extends":"Store","properties":[]},"ToyStore":{"extends":"Store","properties":[]},"WholesaleStore":{"extends":"Store","properties":[]},"TelevisionStation":{"extends":"LocalBusiness","properties":[]},"TouristInformationCenter":{"extends":"LocalBusiness","properties":[]},"TravelAgency":{"extends":"LocalBusiness","properties":[]},"NGO":{"extends":"Organization","properties":[]},"PerformingGroup":{"extends":"Organization","properties":[]},"DanceGroup":{"extends":"PerformingGroup","properties":[]},"MusicGroup":{"extends":"PerformingGroup","properties":{"album":{"expectedTypes":["MusicAlbum"]},"track":{"expectedTypes":["MusicRecording"]}}},"TheaterGroup":{"extends":"PerformingGroup","properties":[]},"SportsTeam":{"extends":"Organization","properties":[]},"Person":{"extends":"Thing","properties":{"additionalName":{"expectedTypes":["Text"]},"address":{"expectedTypes":["PostalAddress"]},"affiliation":{"expectedTypes":["Organization"]},"alumniOf":{"expectedTypes":["EducationalOrganization"]},"award":{"expectedTypes":["Text"]},"birthDate":{"expectedTypes":["Date"]},"brand":{"expectedTypes":["Brand","Organization"]},"children":{"expectedTypes":["Person"]},"colleague":{"expectedTypes":["Person"]},"contactPoint":{"expectedTypes":["ContactPoint"]},"deathDate":{"expectedTypes":["Date"]},"duns":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"familyName":{"expectedTypes":["Text"]},"faxNumber":{"expectedTypes":["Text"]},"follows":{"expectedTypes":["Person"]},"gender":{"expectedTypes":["Text"]},"givenName":{"expectedTypes":["Text"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasPOS":{"expectedTypes":["Place"]},"homeLocation":{"expectedTypes":["ContactPoint","Place"]},"honorificPrefix":{"expectedTypes":["Text"]},"honorificSuffix":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"jobTitle":{"expectedTypes":["Text"]},"knows":{"expectedTypes":["Person"]},"makesOffer":{"expectedTypes":["Offer"]},"memberOf":{"expectedTypes":["Organization","ProgramMembership"]},"naics":{"expectedTypes":["Text"]},"nationality":{"expectedTypes":["Country"]},"owns":{"expectedTypes":["OwnershipInfo","Product"]},"parent":{"expectedTypes":["Person"]},"performerIn":{"expectedTypes":["Event"]},"relatedTo":{"expectedTypes":["Person"]},"seeks":{"expectedTypes":["Demand"]},"sibling":{"expectedTypes":["Person"]},"spouse":{"expectedTypes":["Person"]},"taxID":{"expectedTypes":["Text"]},"telephone":{"expectedTypes":["Text"]},"vatID":{"expectedTypes":["Text"]},"workLocation":{"expectedTypes":["ContactPoint","Place"]},"worksFor":{"expectedTypes":["Organization"]}}},"Place":{"extends":"Thing","properties":{"address":{"expectedTypes":["PostalAddress"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"containedIn":{"expectedTypes":["Place"]},"event":{"expectedTypes":["Event"]},"faxNumber":{"expectedTypes":["Text"]},"geo":{"expectedTypes":["GeoCoordinates","GeoShape"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasMap":{"expectedTypes":["Map","URL"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"logo":{"expectedTypes":["URL","ImageObject"]},"openingHoursSpecification":{"expectedTypes":["OpeningHoursSpecification"]},"photo":{"expectedTypes":["ImageObject","Photograph"]},"review":{"expectedTypes":["Review"]},"telephone":{"expectedTypes":["Text"]}}},"AdministrativeArea":{"extends":"Place","properties":[]},"City":{"extends":"AdministrativeArea","properties":[]},"Country":{"extends":"AdministrativeArea","properties":[]},"State":{"extends":"AdministrativeArea","properties":[]},"CivicStructure":{"extends":"Place","properties":{"openingHours":{"expectedTypes":["Duration"]}}},"Airport":{"extends":"CivicStructure","properties":{"iataCode":{"expectedTypes":["Text"]},"icaoCode":{"expectedTypes":["Text"]}}},"Aquarium":{"extends":"CivicStructure","properties":[]},"Beach":{"extends":"CivicStructure","properties":[]},"BusStation":{"extends":"CivicStructure","properties":[]},"BusStop":{"extends":"CivicStructure","properties":[]},"Campground":{"extends":"CivicStructure","properties":[]},"Cemetery":{"extends":"CivicStructure","properties":[]},"Crematorium":{"extends":"CivicStructure","properties":[]},"EventVenue":{"extends":"CivicStructure","properties":[]},"GovernmentBuilding":{"extends":"CivicStructure","properties":[]},"CityHall":{"extends":"GovernmentBuilding","properties":[]},"Courthouse":{"extends":"GovernmentBuilding","properties":[]},"DefenceEstablishment":{"extends":"GovernmentBuilding","properties":[]},"Embassy":{"extends":"GovernmentBuilding","properties":[]},"LegislativeBuilding":{"extends":"GovernmentBuilding","properties":[]},"Museum":{"extends":"CivicStructure","properties":[]},"MusicVenue":{"extends":"CivicStructure","properties":[]},"Park":{"extends":"CivicStructure","properties":[]},"ParkingFacility":{"extends":"CivicStructure","properties":[]},"PerformingArtsTheater":{"extends":"CivicStructure","properties":[]},"PlaceOfWorship":{"extends":"CivicStructure","properties":[]},"BuddhistTemple":{"extends":"PlaceOfWorship","properties":[]},"CatholicChurch":{"extends":"PlaceOfWorship","properties":[]},"Church":{"extends":"PlaceOfWorship","properties":[]},"HinduTemple":{"extends":"PlaceOfWorship","properties":[]},"Mosque":{"extends":"PlaceOfWorship","properties":[]},"Synagogue":{"extends":"PlaceOfWorship","properties":[]},"Playground":{"extends":"CivicStructure","properties":[]},"RVPark":{"extends":"CivicStructure","properties":[]},"SubwayStation":{"extends":"CivicStructure","properties":[]},"TaxiStand":{"extends":"CivicStructure","properties":[]},"TrainStation":{"extends":"CivicStructure","properties":[]},"Zoo":{"extends":"CivicStructure","properties":[]},"Landform":{"extends":"Place","properties":[]},"BodyOfWater":{"extends":"Landform","properties":[]},"Canal":{"extends":"BodyOfWater","properties":[]},"LakeBodyOfWater":{"extends":"BodyOfWater","properties":[]},"OceanBodyOfWater":{"extends":"BodyOfWater","properties":[]},"Pond":{"extends":"BodyOfWater","properties":[]},"Reservoir":{"extends":"BodyOfWater","properties":[]},"RiverBodyOfWater":{"extends":"BodyOfWater","properties":[]},"SeaBodyOfWater":{"extends":"BodyOfWater","properties":[]},"Waterfall":{"extends":"BodyOfWater","properties":[]},"Continent":{"extends":"Landform","properties":[]},"Mountain":{"extends":"Landform","properties":[]},"Volcano":{"extends":"Landform","properties":[]},"LandmarksOrHistoricalBuildings":{"extends":"Place","properties":[]},"Residence":{"extends":"Place","properties":[]},"ApartmentComplex":{"extends":"Residence","properties":[]},"GatedResidenceCommunity":{"extends":"Residence","properties":[]},"SingleFamilyResidence":{"extends":"Residence","properties":[]},"TouristAttraction":{"extends":"Place","properties":[]},"Product":{"extends":"Thing","properties":{"aggregateRating":{"expectedTypes":["AggregateRating"]},"audience":{"expectedTypes":["Audience"]},"brand":{"expectedTypes":["Brand","Organization"]},"color":{"expectedTypes":["Text"]},"depth":{"expectedTypes":["QuantitativeValue","Distance"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"height":{"expectedTypes":["QuantitativeValue","Distance"]},"isAccessoryOrSparePartFor":{"expectedTypes":["Product"]},"isConsumableFor":{"expectedTypes":["Product"]},"isRelatedTo":{"expectedTypes":["Product"]},"isSimilarTo":{"expectedTypes":["Product"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"logo":{"expectedTypes":["URL","ImageObject"]},"manufacturer":{"expectedTypes":["Organization"]},"model":{"expectedTypes":["ProductModel","Text"]},"mpn":{"expectedTypes":["Text"]},"offers":{"expectedTypes":["Offer"]},"productID":{"expectedTypes":["Text"]},"releaseDate":{"expectedTypes":["Date"]},"review":{"expectedTypes":["Review"]},"sku":{"expectedTypes":["Text"]},"weight":{"expectedTypes":["QuantitativeValue"]},"width":{"expectedTypes":["QuantitativeValue","Distance"]}}},"IndividualProduct":{"extends":"Product","properties":{"serialNumber":{"expectedTypes":["Text"]}}},"ProductModel":{"extends":"Product","properties":{"isVariantOf":{"expectedTypes":["ProductModel"]},"predecessorOf":{"expectedTypes":["ProductModel"]},"successorOf":{"expectedTypes":["ProductModel"]}}},"SomeProducts":{"extends":"Product","properties":{"inventoryLevel":{"expectedTypes":["QuantitativeValue"]}}},"Vehicle":{"extends":"Product","properties":[]},"Car":{"extends":"Vehicle","properties":[]},"Property":{"extends":"Intangible","properties":{"domainIncludes":{"expectedTypes":["Class"]},"inverseOf":{"expectedTypes":["Property"]},"rangeIncludes":{"expectedTypes":["Class"]},"supercededBy":{"expectedTypes":["Property"]}}}} \ No newline at end of file +{"DataType":{"extends":"","properties":[]},"Boolean":{"extends":"DataType","properties":[]},"False":{"extends":"Boolean","properties":[]},"True":{"extends":"Boolean","properties":[]},"Date":{"extends":"DataType","properties":[]},"DateTime":{"extends":"DataType","properties":[]},"Number":{"extends":"DataType","properties":[]},"Float":{"extends":"Number","properties":[]},"Integer":{"extends":"Number","properties":[]},"Text":{"extends":"DataType","properties":[]},"URL":{"extends":"Text","properties":[]},"Time":{"extends":"DataType","properties":[]},"Thing":{"extends":"","properties":{"additionalType":{"expectedTypes":["URL"]},"alternateName":{"expectedTypes":["Text"]},"description":{"expectedTypes":["Text"]},"image":{"expectedTypes":["URL","ImageObject"]},"name":{"expectedTypes":["Text"]},"potentialAction":{"expectedTypes":["Action"]},"sameAs":{"expectedTypes":["URL"]},"url":{"expectedTypes":["URL"]}}},"Action":{"extends":"Thing","properties":{"actionStatus":{"expectedTypes":["ActionStatusType"]},"agent":{"expectedTypes":["Organization","Person"]},"endTime":{"expectedTypes":["DateTime"]},"error":{"expectedTypes":["Thing"]},"instrument":{"expectedTypes":["Thing"]},"location":{"expectedTypes":["PostalAddress","Place"]},"object":{"expectedTypes":["Thing"]},"participant":{"expectedTypes":["Organization","Person"]},"result":{"expectedTypes":["Thing"]},"startTime":{"expectedTypes":["DateTime"]},"target":{"expectedTypes":["EntryPoint"]}}},"AchieveAction":{"extends":"Action","properties":[]},"LoseAction":{"extends":"AchieveAction","properties":{"winner":{"expectedTypes":["Person"]}}},"TieAction":{"extends":"AchieveAction","properties":[]},"WinAction":{"extends":"AchieveAction","properties":{"loser":{"expectedTypes":["Person"]}}},"AssessAction":{"extends":"Action","properties":[]},"ChooseAction":{"extends":"AssessAction","properties":{"option":{"expectedTypes":["Text","Thing"]}}},"VoteAction":{"extends":"ChooseAction","properties":{"candidate":{"expectedTypes":["Person"]}}},"IgnoreAction":{"extends":"AssessAction","properties":[]},"ReactAction":{"extends":"AssessAction","properties":[]},"AgreeAction":{"extends":"ReactAction","properties":[]},"DisagreeAction":{"extends":"ReactAction","properties":[]},"DislikeAction":{"extends":"ReactAction","properties":[]},"EndorseAction":{"extends":"ReactAction","properties":{"endorsee":{"expectedTypes":["Organization","Person"]}}},"LikeAction":{"extends":"ReactAction","properties":[]},"WantAction":{"extends":"ReactAction","properties":[]},"ReviewAction":{"extends":"AssessAction","properties":{"resultReview":{"expectedTypes":["Review"]}}},"ConsumeAction":{"extends":"Action","properties":{"expectsAcceptanceOf":{"expectedTypes":["Offer"]}}},"DrinkAction":{"extends":"ConsumeAction","properties":[]},"EatAction":{"extends":"ConsumeAction","properties":[]},"InstallAction":{"extends":"ConsumeAction","properties":[]},"ListenAction":{"extends":"ConsumeAction","properties":[]},"ReadAction":{"extends":"ConsumeAction","properties":[]},"UseAction":{"extends":"ConsumeAction","properties":[]},"WearAction":{"extends":"UseAction","properties":[]},"ViewAction":{"extends":"ConsumeAction","properties":[]},"WatchAction":{"extends":"ConsumeAction","properties":[]},"ControlAction":{"extends":"Action","properties":[]},"ActivateAction":{"extends":"ControlAction","properties":[]},"DeactivateAction":{"extends":"ControlAction","properties":[]},"ResumeAction":{"extends":"ControlAction","properties":[]},"SuspendAction":{"extends":"ControlAction","properties":[]},"CreateAction":{"extends":"Action","properties":[]},"CookAction":{"extends":"CreateAction","properties":{"foodEstablishment":{"expectedTypes":["FoodEstablishment","Place"]},"foodEvent":{"expectedTypes":["FoodEvent"]},"recipe":{"expectedTypes":["Recipe"]}}},"DrawAction":{"extends":"CreateAction","properties":[]},"FilmAction":{"extends":"CreateAction","properties":[]},"PaintAction":{"extends":"CreateAction","properties":[]},"PhotographAction":{"extends":"CreateAction","properties":[]},"WriteAction":{"extends":"CreateAction","properties":{"language":{"expectedTypes":["Language"]}}},"FindAction":{"extends":"Action","properties":[]},"CheckAction":{"extends":"FindAction","properties":[]},"DiscoverAction":{"extends":"FindAction","properties":[]},"TrackAction":{"extends":"FindAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"InteractAction":{"extends":"Action","properties":[]},"BefriendAction":{"extends":"InteractAction","properties":[]},"CommunicateAction":{"extends":"InteractAction","properties":{"about":{"expectedTypes":["Thing"]},"language":{"expectedTypes":["Language"]},"recipient":{"expectedTypes":["Organization","Person","Audience"]}}},"AskAction":{"extends":"CommunicateAction","properties":{"question":{"expectedTypes":["Text"]}}},"CheckInAction":{"extends":"CommunicateAction","properties":[]},"CheckOutAction":{"extends":"CommunicateAction","properties":[]},"CommentAction":{"extends":"CommunicateAction","properties":[]},"InformAction":{"extends":"CommunicateAction","properties":{"event":{"expectedTypes":["Event"]}}},"ConfirmAction":{"extends":"InformAction","properties":[]},"RsvpAction":{"extends":"InformAction","properties":{"additionalNumberOfGuests":{"expectedTypes":["Number"]},"rsvpResponse":{"expectedTypes":["RsvpResponseType"]}}},"InviteAction":{"extends":"CommunicateAction","properties":{"event":{"expectedTypes":["Event"]}}},"ReplyAction":{"extends":"CommunicateAction","properties":[]},"ShareAction":{"extends":"CommunicateAction","properties":[]},"FollowAction":{"extends":"InteractAction","properties":{"followee":{"expectedTypes":["Organization","Person"]}}},"JoinAction":{"extends":"InteractAction","properties":{"event":{"expectedTypes":["Event"]}}},"LeaveAction":{"extends":"InteractAction","properties":{"event":{"expectedTypes":["Event"]}}},"MarryAction":{"extends":"InteractAction","properties":[]},"RegisterAction":{"extends":"InteractAction","properties":[]},"SubscribeAction":{"extends":"InteractAction","properties":[]},"UnRegisterAction":{"extends":"InteractAction","properties":[]},"MoveAction":{"extends":"Action","properties":{"fromLocation":{"expectedTypes":["Place"]},"toLocation":{"expectedTypes":["Place"]}}},"ArriveAction":{"extends":"MoveAction","properties":[]},"DepartAction":{"extends":"MoveAction","properties":[]},"TravelAction":{"extends":"MoveAction","properties":{"distance":{"expectedTypes":["Distance"]}}},"OrganizeAction":{"extends":"Action","properties":[]},"AllocateAction":{"extends":"OrganizeAction","properties":{"purpose":{"expectedTypes":["MedicalDevicePurpose","Thing"]}}},"AcceptAction":{"extends":"AllocateAction","properties":[]},"AssignAction":{"extends":"AllocateAction","properties":[]},"AuthorizeAction":{"extends":"AllocateAction","properties":{"recipient":{"expectedTypes":["Organization","Person","Audience"]}}},"RejectAction":{"extends":"AllocateAction","properties":[]},"ApplyAction":{"extends":"OrganizeAction","properties":[]},"BookmarkAction":{"extends":"OrganizeAction","properties":[]},"PlanAction":{"extends":"OrganizeAction","properties":{"scheduledTime":{"expectedTypes":["DateTime"]}}},"CancelAction":{"extends":"PlanAction","properties":[]},"ReserveAction":{"extends":"PlanAction","properties":[]},"ScheduleAction":{"extends":"PlanAction","properties":[]},"PlayAction":{"extends":"Action","properties":{"audience":{"expectedTypes":["Audience"]},"event":{"expectedTypes":["Event"]}}},"ExerciseAction":{"extends":"PlayAction","properties":{"course":{"expectedTypes":["Place"]},"diet":{"expectedTypes":["Diet"]},"distance":{"expectedTypes":["Distance"]},"exercisePlan":{"expectedTypes":["ExercisePlan"]},"exerciseType":{"expectedTypes":["Text"]},"fromLocation":{"expectedTypes":["Place"]},"opponent":{"expectedTypes":["Person"]},"sportsActivityLocation":{"expectedTypes":["SportsActivityLocation"]},"sportsEvent":{"expectedTypes":["SportsEvent"]},"sportsTeam":{"expectedTypes":["SportsTeam"]},"toLocation":{"expectedTypes":["Place"]}}},"PerformAction":{"extends":"PlayAction","properties":{"entertainmentBusiness":{"expectedTypes":["EntertainmentBusiness"]}}},"SearchAction":{"extends":"Action","properties":{"query":{"expectedTypes":["Text","Class"]}}},"TradeAction":{"extends":"Action","properties":{"price":{"expectedTypes":["Text","Number"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]}}},"BuyAction":{"extends":"TradeAction","properties":{"seller":{"expectedTypes":["Organization","Person"]},"warrantyPromise":{"expectedTypes":["WarrantyPromise"]}}},"DonateAction":{"extends":"TradeAction","properties":{"recipient":{"expectedTypes":["Organization","Person","Audience"]}}},"OrderAction":{"extends":"TradeAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"PayAction":{"extends":"TradeAction","properties":{"purpose":{"expectedTypes":["MedicalDevicePurpose","Thing"]},"recipient":{"expectedTypes":["Organization","Person","Audience"]}}},"QuoteAction":{"extends":"TradeAction","properties":[]},"RentAction":{"extends":"TradeAction","properties":{"landlord":{"expectedTypes":["Organization","Person"]},"realEstateAgent":{"expectedTypes":["RealEstateAgent"]}}},"SellAction":{"extends":"TradeAction","properties":{"buyer":{"expectedTypes":["Person"]},"warrantyPromise":{"expectedTypes":["WarrantyPromise"]}}},"TipAction":{"extends":"TradeAction","properties":{"recipient":{"expectedTypes":["Organization","Person","Audience"]}}},"TransferAction":{"extends":"Action","properties":{"fromLocation":{"expectedTypes":["Place"]},"toLocation":{"expectedTypes":["Place"]}}},"BorrowAction":{"extends":"TransferAction","properties":{"lender":{"expectedTypes":["Person"]}}},"DownloadAction":{"extends":"TransferAction","properties":[]},"GiveAction":{"extends":"TransferAction","properties":{"recipient":{"expectedTypes":["Organization","Person","Audience"]}}},"LendAction":{"extends":"TransferAction","properties":{"borrower":{"expectedTypes":["Person"]}}},"ReceiveAction":{"extends":"TransferAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]},"sender":{"expectedTypes":["Organization","Person","Audience"]}}},"ReturnAction":{"extends":"TransferAction","properties":{"recipient":{"expectedTypes":["Organization","Person","Audience"]}}},"SendAction":{"extends":"TransferAction","properties":{"deliveryMethod":{"expectedTypes":["DeliveryMethod"]},"recipient":{"expectedTypes":["Organization","Person","Audience"]}}},"TakeAction":{"extends":"TransferAction","properties":[]},"UpdateAction":{"extends":"Action","properties":{"collection":{"expectedTypes":["Thing"]}}},"AddAction":{"extends":"UpdateAction","properties":[]},"InsertAction":{"extends":"AddAction","properties":{"toLocation":{"expectedTypes":["Place"]}}},"AppendAction":{"extends":"InsertAction","properties":[]},"PrependAction":{"extends":"InsertAction","properties":[]},"DeleteAction":{"extends":"UpdateAction","properties":[]},"ReplaceAction":{"extends":"UpdateAction","properties":{"replacee":{"expectedTypes":["Thing"]},"replacer":{"expectedTypes":["Thing"]}}},"BroadcastService":{"extends":"Thing","properties":{"area":{"expectedTypes":["Place"]},"broadcaster":{"expectedTypes":["Organization"]},"parentService":{"expectedTypes":["BroadcastService"]}}},"CreativeWork":{"extends":"Thing","properties":{"about":{"expectedTypes":["Thing"]},"accessibilityAPI":{"expectedTypes":["Text"]},"accessibilityControl":{"expectedTypes":["Text"]},"accessibilityFeature":{"expectedTypes":["Text"]},"accessibilityHazard":{"expectedTypes":["Text"]},"accountablePerson":{"expectedTypes":["Person"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"alternativeHeadline":{"expectedTypes":["Text"]},"associatedMedia":{"expectedTypes":["MediaObject"]},"audience":{"expectedTypes":["Audience"]},"audio":{"expectedTypes":["AudioObject"]},"author":{"expectedTypes":["Organization","Person"]},"award":{"expectedTypes":["Text"]},"character":{"expectedTypes":["Person"]},"citation":{"expectedTypes":["CreativeWork","Text"]},"comment":{"expectedTypes":["UserComments","Comment"]},"commentCount":{"expectedTypes":["Integer"]},"contentLocation":{"expectedTypes":["Place"]},"contentRating":{"expectedTypes":["Text"]},"contributor":{"expectedTypes":["Organization","Person"]},"copyrightHolder":{"expectedTypes":["Organization","Person"]},"copyrightYear":{"expectedTypes":["Number"]},"creator":{"expectedTypes":["Organization","Person"]},"dateCreated":{"expectedTypes":["Date"]},"dateModified":{"expectedTypes":["Date"]},"datePublished":{"expectedTypes":["Date"]},"discussionUrl":{"expectedTypes":["URL"]},"editor":{"expectedTypes":["Person"]},"educationalAlignment":{"expectedTypes":["AlignmentObject"]},"educationalUse":{"expectedTypes":["Text"]},"encoding":{"expectedTypes":["MediaObject"]},"exampleOfWork":{"expectedTypes":["CreativeWork"]},"genre":{"expectedTypes":["Text"]},"hasPart":{"expectedTypes":["CreativeWork"]},"headline":{"expectedTypes":["Text"]},"inLanguage":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"interactivityType":{"expectedTypes":["Text"]},"isBasedOnUrl":{"expectedTypes":["URL"]},"isFamilyFriendly":{"expectedTypes":["Boolean"]},"isPartOf":{"expectedTypes":["CreativeWork"]},"keywords":{"expectedTypes":["Text"]},"learningResourceType":{"expectedTypes":["Text"]},"license":{"expectedTypes":["CreativeWork","URL"]},"mentions":{"expectedTypes":["Thing"]},"offers":{"expectedTypes":["Offer"]},"position":{"expectedTypes":["Integer","Text"]},"producer":{"expectedTypes":["Organization","Person"]},"provider":{"expectedTypes":["Organization","Person"]},"publisher":{"expectedTypes":["Organization"]},"publishingPrinciples":{"expectedTypes":["URL"]},"recordedAt":{"expectedTypes":["Event"]},"releasedEvent":{"expectedTypes":["PublicationEvent"]},"review":{"expectedTypes":["Review"]},"sourceOrganization":{"expectedTypes":["Organization"]},"text":{"expectedTypes":["Text"]},"thumbnailUrl":{"expectedTypes":["URL"]},"timeRequired":{"expectedTypes":["Duration"]},"translator":{"expectedTypes":["Organization","Person"]},"typicalAgeRange":{"expectedTypes":["Text"]},"version":{"expectedTypes":["Number"]},"video":{"expectedTypes":["VideoObject"]},"workExample":{"expectedTypes":["CreativeWork"]}}},"Answer":{"extends":"CreativeWork","properties":{"downvoteCount":{"expectedTypes":["Integer"]},"parentItem":{"expectedTypes":["Question"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"Article":{"extends":"CreativeWork","properties":{"articleBody":{"expectedTypes":["Text"]},"articleSection":{"expectedTypes":["Text"]},"pageEnd":{"expectedTypes":["Integer","Text"]},"pageStart":{"expectedTypes":["Integer","Text"]},"pagination":{"expectedTypes":["Text"]},"wordCount":{"expectedTypes":["Integer"]}}},"BlogPosting":{"extends":"Article","properties":[]},"NewsArticle":{"extends":"Article","properties":{"dateline":{"expectedTypes":["Text"]},"printColumn":{"expectedTypes":["Text"]},"printEdition":{"expectedTypes":["Text"]},"printPage":{"expectedTypes":["Text"]},"printSection":{"expectedTypes":["Text"]}}},"ScholarlyArticle":{"extends":"Article","properties":[]},"MedicalScholarlyArticle":{"extends":"ScholarlyArticle","properties":{"publicationType":{"expectedTypes":["Text"]}}},"TechArticle":{"extends":"Article","properties":{"dependencies":{"expectedTypes":["Text"]},"proficiencyLevel":{"expectedTypes":["Text"]}}},"APIReference":{"extends":"TechArticle","properties":{"assembly":{"expectedTypes":["Text"]},"assemblyVersion":{"expectedTypes":["Text"]},"programmingModel":{"expectedTypes":["Text"]},"targetPlatform":{"expectedTypes":["Text"]}}},"Blog":{"extends":"CreativeWork","properties":{"blogPost":{"expectedTypes":["BlogPosting"]}}},"Book":{"extends":"CreativeWork","properties":{"bookEdition":{"expectedTypes":["Text"]},"bookFormat":{"expectedTypes":["BookFormatType"]},"illustrator":{"expectedTypes":["Person"]},"isbn":{"expectedTypes":["Text"]},"numberOfPages":{"expectedTypes":["Integer"]}}},"Clip":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"clipNumber":{"expectedTypes":["Integer","Text"]},"director":{"expectedTypes":["Person"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfEpisode":{"expectedTypes":["Episode"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"publication":{"expectedTypes":["PublicationEvent"]}}},"RadioClip":{"extends":"Clip","properties":[]},"TVClip":{"extends":"Clip","properties":[]},"Code":{"extends":"CreativeWork","properties":{"codeRepository":{"expectedTypes":["URL"]},"programmingLanguage":{"expectedTypes":["Thing"]},"runtime":{"expectedTypes":["Text"]},"sampleType":{"expectedTypes":["Text"]},"targetProduct":{"expectedTypes":["SoftwareApplication"]}}},"Comment":{"extends":"CreativeWork","properties":{"downvoteCount":{"expectedTypes":["Integer"]},"parentItem":{"expectedTypes":["Question"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"DataCatalog":{"extends":"CreativeWork","properties":{"dataset":{"expectedTypes":["Dataset"]}}},"Dataset":{"extends":"CreativeWork","properties":{"catalog":{"expectedTypes":["DataCatalog"]},"distribution":{"expectedTypes":["DataDownload"]},"spatial":{"expectedTypes":["Place"]},"temporal":{"expectedTypes":["DateTime"]}}},"Diet":{"extends":"CreativeWork","properties":{"dietFeatures":{"expectedTypes":["Text"]},"endorsers":{"expectedTypes":["Organization","Person"]},"expertConsiderations":{"expectedTypes":["Text"]},"overview":{"expectedTypes":["Text"]},"physiologicalBenefits":{"expectedTypes":["Text"]},"proprietaryName":{"expectedTypes":["Text"]},"risks":{"expectedTypes":["Text"]}}},"EmailMessage":{"extends":"CreativeWork","properties":[]},"Episode":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"episodeNumber":{"expectedTypes":["Integer","Text"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"partOfSeason":{"expectedTypes":["Season"]},"partOfSeries":{"expectedTypes":["Series"]},"productionCompany":{"expectedTypes":["Organization"]},"publication":{"expectedTypes":["PublicationEvent"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioEpisode":{"extends":"Episode","properties":[]},"TVEpisode":{"extends":"Episode","properties":[]},"ExercisePlan":{"extends":"CreativeWork","properties":{"activityDuration":{"expectedTypes":["Duration"]},"activityFrequency":{"expectedTypes":["Text"]},"additionalVariable":{"expectedTypes":["Text"]},"exerciseType":{"expectedTypes":["Text"]},"intensity":{"expectedTypes":["Text"]},"repetitions":{"expectedTypes":["Number"]},"restPeriods":{"expectedTypes":["Text"]},"workload":{"expectedTypes":["Energy"]}}},"Game":{"extends":"CreativeWork","properties":{"characterAttribute":{"expectedTypes":["Thing"]},"gameItem":{"expectedTypes":["Thing"]},"gameLocation":{"expectedTypes":["PostalAddress","URL","Place"]},"numberOfPlayers":{"expectedTypes":["QuantitativeValue"]},"quest":{"expectedTypes":["Thing"]}}},"VideoGame":{"extends":"Game","properties":{"actor":{"expectedTypes":["Person"]},"cheatCode":{"expectedTypes":["CreativeWork"]},"director":{"expectedTypes":["Person"]},"gamePlatform":{"expectedTypes":["Thing","Text","URL"]},"gameServer":{"expectedTypes":["GameServer"]},"gameTip":{"expectedTypes":["CreativeWork"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"playMode":{"expectedTypes":["GamePlayMode"]},"trailer":{"expectedTypes":["VideoObject"]}}},"Map":{"extends":"CreativeWork","properties":{"mapType":{"expectedTypes":["MapCategoryType"]}}},"MediaObject":{"extends":"CreativeWork","properties":{"associatedArticle":{"expectedTypes":["NewsArticle"]},"bitrate":{"expectedTypes":["Text"]},"contentSize":{"expectedTypes":["Text"]},"contentUrl":{"expectedTypes":["URL"]},"duration":{"expectedTypes":["Duration"]},"embedUrl":{"expectedTypes":["URL"]},"encodesCreativeWork":{"expectedTypes":["CreativeWork"]},"encodingFormat":{"expectedTypes":["Text"]},"expires":{"expectedTypes":["Date"]},"height":{"expectedTypes":["QuantitativeValue","Distance"]},"playerType":{"expectedTypes":["Text"]},"productionCompany":{"expectedTypes":["Organization"]},"publication":{"expectedTypes":["PublicationEvent"]},"regionsAllowed":{"expectedTypes":["Place"]},"requiresSubscription":{"expectedTypes":["Boolean"]},"uploadDate":{"expectedTypes":["Date"]},"width":{"expectedTypes":["QuantitativeValue","Distance"]}}},"AudioObject":{"extends":"MediaObject","properties":{"transcript":{"expectedTypes":["Text"]}}},"DataDownload":{"extends":"MediaObject","properties":[]},"ImageObject":{"extends":"MediaObject","properties":{"caption":{"expectedTypes":["Text"]},"exifData":{"expectedTypes":["Text"]},"representativeOfPage":{"expectedTypes":["Boolean"]},"thumbnail":{"expectedTypes":["ImageObject"]}}},"MusicVideoObject":{"extends":"MediaObject","properties":[]},"VideoObject":{"extends":"MediaObject","properties":{"actor":{"expectedTypes":["Person"]},"caption":{"expectedTypes":["Text"]},"director":{"expectedTypes":["Person"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"thumbnail":{"expectedTypes":["ImageObject"]},"transcript":{"expectedTypes":["Text"]},"videoFrameSize":{"expectedTypes":["Text"]},"videoQuality":{"expectedTypes":["Text"]}}},"Movie":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"duration":{"expectedTypes":["Duration"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"MusicComposition":{"extends":"CreativeWork","properties":{"composer":{"expectedTypes":["Person","Organization"]},"firstPerformance":{"expectedTypes":["Event"]},"includedComposition":{"expectedTypes":["MusicComposition"]},"iswcCode":{"expectedTypes":["Text"]},"lyricist":{"expectedTypes":["Person"]},"musicArrangement":{"expectedTypes":["MusicComposition"]},"musicCompositionForm":{"expectedTypes":["Text"]},"musicalKey":{"expectedTypes":["Text"]},"recordedAs":{"expectedTypes":["MusicRecording"]}}},"MusicPlaylist":{"extends":"CreativeWork","properties":{"numTracks":{"expectedTypes":["Integer"]},"track":{"expectedTypes":["MusicRecording","ItemList"]}}},"MusicAlbum":{"extends":"MusicPlaylist","properties":{"albumProductionType":{"expectedTypes":["MusicAlbumProductionType"]},"albumRelease":{"expectedTypes":["MusicRelease"]},"albumReleaseType":{"expectedTypes":["MusicAlbumReleaseType"]},"byArtist":{"expectedTypes":["MusicGroup"]}}},"MusicRelease":{"extends":"MusicPlaylist","properties":{"catalogNumber":{"expectedTypes":["Text"]},"creditedTo":{"expectedTypes":["Organization","Person"]},"duration":{"expectedTypes":["Duration"]},"musicReleaseFormat":{"expectedTypes":["MusicReleaseFormatType"]},"recordLabel":{"expectedTypes":["Organization"]},"releaseOf":{"expectedTypes":["MusicAlbum"]}}},"MusicRecording":{"extends":"CreativeWork","properties":{"byArtist":{"expectedTypes":["MusicGroup"]},"duration":{"expectedTypes":["Duration"]},"inAlbum":{"expectedTypes":["MusicAlbum"]},"inPlaylist":{"expectedTypes":["MusicPlaylist"]},"isrcCode":{"expectedTypes":["Text"]},"recordingOf":{"expectedTypes":["MusicComposition"]}}},"Painting":{"extends":"CreativeWork","properties":[]},"Photograph":{"extends":"CreativeWork","properties":[]},"PublicationIssue":{"extends":"CreativeWork","properties":{"issueNumber":{"expectedTypes":["Integer","Text"]},"pageEnd":{"expectedTypes":["Integer","Text"]},"pageStart":{"expectedTypes":["Integer","Text"]},"pagination":{"expectedTypes":["Text"]}}},"PublicationVolume":{"extends":"CreativeWork","properties":{"pageEnd":{"expectedTypes":["Integer","Text"]},"pageStart":{"expectedTypes":["Integer","Text"]},"pagination":{"expectedTypes":["Text"]},"volumeNumber":{"expectedTypes":["Integer","Text"]}}},"Question":{"extends":"CreativeWork","properties":{"acceptedAnswer":{"expectedTypes":["Answer"]},"answerCount":{"expectedTypes":["Integer"]},"downvoteCount":{"expectedTypes":["Integer"]},"suggestedAnswer":{"expectedTypes":["Answer"]},"upvoteCount":{"expectedTypes":["Integer"]}}},"Recipe":{"extends":"CreativeWork","properties":{"cookTime":{"expectedTypes":["Duration"]},"cookingMethod":{"expectedTypes":["Text"]},"ingredients":{"expectedTypes":["Text"]},"nutrition":{"expectedTypes":["NutritionInformation"]},"prepTime":{"expectedTypes":["Duration"]},"recipeCategory":{"expectedTypes":["Text"]},"recipeCuisine":{"expectedTypes":["Text"]},"recipeInstructions":{"expectedTypes":["Text"]},"recipeYield":{"expectedTypes":["Text"]},"totalTime":{"expectedTypes":["Duration"]}}},"Review":{"extends":"CreativeWork","properties":{"itemReviewed":{"expectedTypes":["Thing"]},"reviewBody":{"expectedTypes":["Text"]},"reviewRating":{"expectedTypes":["Rating"]}}},"Sculpture":{"extends":"CreativeWork","properties":[]},"Season":{"extends":"CreativeWork","properties":{"endDate":{"expectedTypes":["Date"]},"episode":{"expectedTypes":["Episode"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"partOfSeries":{"expectedTypes":["Series"]},"productionCompany":{"expectedTypes":["Organization"]},"seasonNumber":{"expectedTypes":["Integer","Text"]},"startDate":{"expectedTypes":["Date"]},"trailer":{"expectedTypes":["VideoObject"]}}},"RadioSeason":{"extends":"Season","properties":[]},"TVSeason":{"extends":"CreativeWork","properties":[]},"Series":{"extends":"CreativeWork","properties":{"endDate":{"expectedTypes":["Date"]},"startDate":{"expectedTypes":["Date"]}}},"BookSeries":{"extends":"Series","properties":[]},"MovieSeries":{"extends":"Series","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"productionCompany":{"expectedTypes":["Organization"]},"trailer":{"expectedTypes":["VideoObject"]}}},"Periodical":{"extends":"Series","properties":{"issn":{"expectedTypes":["Text"]}}},"RadioSeries":{"extends":"Series","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"episode":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"numberOfSeasons":{"expectedTypes":["Number"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"trailer":{"expectedTypes":["VideoObject"]}}},"TVSeries":{"extends":"CreativeWork","properties":{"actor":{"expectedTypes":["Person"]},"director":{"expectedTypes":["Person"]},"episode":{"expectedTypes":["Episode"]},"musicBy":{"expectedTypes":["MusicGroup","Person"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"numberOfSeasons":{"expectedTypes":["Number"]},"productionCompany":{"expectedTypes":["Organization"]},"season":{"expectedTypes":["Season"]},"trailer":{"expectedTypes":["VideoObject"]}}},"VideoGameSeries":{"extends":"Series","properties":{"actor":{"expectedTypes":["Person"]},"characterAttribute":{"expectedTypes":["Thing"]},"cheatCode":{"expectedTypes":["CreativeWork"]},"director":{"expectedTypes":["Person"]},"episode":{"expectedTypes":["Episode"]},"gameItem":{"expectedTypes":["Thing"]},"gamePlatform":{"expectedTypes":["Text","Thing","URL"]},"musicBy":{"expectedTypes":["Person","MusicGroup"]},"numberOfEpisodes":{"expectedTypes":["Number"]},"numberOfPlayers":{"expectedTypes":["QuantitativeValue"]},"numberOfSeasons":{"expectedTypes":["Number"]},"playMode":{"expectedTypes":["GamePlayMode"]},"productionCompany":{"expectedTypes":["Organization"]},"quest":{"expectedTypes":["Thing"]},"season":{"expectedTypes":["Season"]},"trailer":{"expectedTypes":["VideoObject"]}}},"SoftwareApplication":{"extends":"CreativeWork","properties":{"applicationCategory":{"expectedTypes":["Text","URL"]},"applicationSubCategory":{"expectedTypes":["Text","URL"]},"applicationSuite":{"expectedTypes":["Text"]},"countriesNotSupported":{"expectedTypes":["Text"]},"countriesSupported":{"expectedTypes":["Text"]},"device":{"expectedTypes":["Text"]},"downloadUrl":{"expectedTypes":["URL"]},"featureList":{"expectedTypes":["Text","URL"]},"fileFormat":{"expectedTypes":["Text"]},"fileSize":{"expectedTypes":["Integer"]},"installUrl":{"expectedTypes":["URL"]},"memoryRequirements":{"expectedTypes":["Text","URL"]},"operatingSystem":{"expectedTypes":["Text"]},"permissions":{"expectedTypes":["Text"]},"processorRequirements":{"expectedTypes":["Text"]},"releaseNotes":{"expectedTypes":["Text","URL"]},"requirements":{"expectedTypes":["Text","URL"]},"screenshot":{"expectedTypes":["ImageObject","URL"]},"softwareAddOn":{"expectedTypes":["SoftwareApplication"]},"softwareHelp":{"expectedTypes":["CreativeWork"]},"softwareVersion":{"expectedTypes":["Text"]},"storageRequirements":{"expectedTypes":["Text","URL"]}}},"MobileApplication":{"extends":"SoftwareApplication","properties":{"carrierRequirements":{"expectedTypes":["Text"]}}},"WebApplication":{"extends":"SoftwareApplication","properties":{"browserRequirements":{"expectedTypes":["Text"]}}},"VisualArtwork":{"extends":"CreativeWork","properties":{"artEdition":{"expectedTypes":["Integer","Text"]},"artform":{"expectedTypes":["Text","URL"]},"depth":{"expectedTypes":["Distance","QuantitativeValue"]},"height":{"expectedTypes":["Distance","QuantitativeValue"]},"material":{"expectedTypes":["Text","URL"]},"surface":{"expectedTypes":["Text","URL"]},"width":{"expectedTypes":["Distance","QuantitativeValue"]}}},"WebPage":{"extends":"CreativeWork","properties":{"breadcrumb":{"expectedTypes":["Text","BreadcrumbList"]},"lastReviewed":{"expectedTypes":["Date"]},"mainContentOfPage":{"expectedTypes":["WebPageElement"]},"primaryImageOfPage":{"expectedTypes":["ImageObject"]},"relatedLink":{"expectedTypes":["URL"]},"reviewedBy":{"expectedTypes":["Person","Organization"]},"significantLink":{"expectedTypes":["URL"]},"specialty":{"expectedTypes":["Specialty"]}}},"AboutPage":{"extends":"WebPage","properties":[]},"CheckoutPage":{"extends":"WebPage","properties":[]},"CollectionPage":{"extends":"WebPage","properties":[]},"ImageGallery":{"extends":"CollectionPage","properties":[]},"VideoGallery":{"extends":"CollectionPage","properties":[]},"ContactPage":{"extends":"WebPage","properties":[]},"ItemPage":{"extends":"WebPage","properties":[]},"MedicalWebPage":{"extends":"WebPage","properties":{"aspect":{"expectedTypes":["Text"]}}},"ProfilePage":{"extends":"WebPage","properties":[]},"QAPage":{"extends":"WebPage","properties":[]},"SearchResultsPage":{"extends":"WebPage","properties":[]},"WebPageElement":{"extends":"CreativeWork","properties":[]},"SiteNavigationElement":{"extends":"WebPageElement","properties":[]},"Table":{"extends":"WebPageElement","properties":[]},"WPAdBlock":{"extends":"WebPageElement","properties":[]},"WPFooter":{"extends":"WebPageElement","properties":[]},"WPHeader":{"extends":"WebPageElement","properties":[]},"WPSideBar":{"extends":"WebPageElement","properties":[]},"WebSite":{"extends":"CreativeWork","properties":[]},"Event":{"extends":"Thing","properties":{"attendee":{"expectedTypes":["Organization","Person"]},"doorTime":{"expectedTypes":["DateTime"]},"duration":{"expectedTypes":["Duration"]},"endDate":{"expectedTypes":["Date"]},"eventStatus":{"expectedTypes":["EventStatusType"]},"location":{"expectedTypes":["PostalAddress","Place"]},"offers":{"expectedTypes":["Offer"]},"organizer":{"expectedTypes":["Organization","Person"]},"performer":{"expectedTypes":["Organization","Person"]},"previousStartDate":{"expectedTypes":["Date"]},"recordedIn":{"expectedTypes":["CreativeWork"]},"startDate":{"expectedTypes":["Date"]},"subEvent":{"expectedTypes":["Event"]},"superEvent":{"expectedTypes":["Event"]},"typicalAgeRange":{"expectedTypes":["Text"]},"workPerformed":{"expectedTypes":["CreativeWork"]}}},"BusinessEvent":{"extends":"Event","properties":[]},"ChildrensEvent":{"extends":"Event","properties":[]},"ComedyEvent":{"extends":"Event","properties":[]},"DanceEvent":{"extends":"Event","properties":[]},"DeliveryEvent":{"extends":"Event","properties":{"accessCode":{"expectedTypes":["Text"]},"availableFrom":{"expectedTypes":["DateTime"]},"availableThrough":{"expectedTypes":["DateTime"]},"hasDeliveryMethod":{"expectedTypes":["DeliveryMethod"]}}},"EducationEvent":{"extends":"Event","properties":[]},"Festival":{"extends":"Event","properties":[]},"FoodEvent":{"extends":"Event","properties":[]},"LiteraryEvent":{"extends":"Event","properties":[]},"MusicEvent":{"extends":"Event","properties":[]},"PublicationEvent":{"extends":"Event","properties":{"free":{"expectedTypes":["Boolean"]},"publishedOn":{"expectedTypes":["BroadcastService"]}}},"BroadcastEvent":{"extends":"PublicationEvent","properties":[]},"OnDemandEvent":{"extends":"PublicationEvent","properties":[]},"SaleEvent":{"extends":"Event","properties":[]},"SocialEvent":{"extends":"Event","properties":[]},"SportsEvent":{"extends":"Event","properties":{"awayTeam":{"expectedTypes":["Person","SportsTeam"]},"competitor":{"expectedTypes":["Person","SportsTeam"]},"homeTeam":{"expectedTypes":["Person","SportsTeam"]}}},"TheaterEvent":{"extends":"Event","properties":[]},"UserInteraction":{"extends":"Event","properties":[]},"UserBlocks":{"extends":"UserInteraction","properties":[]},"UserCheckins":{"extends":"UserInteraction","properties":[]},"UserComments":{"extends":"UserInteraction","properties":{"commentText":{"expectedTypes":["Text"]},"commentTime":{"expectedTypes":["Date"]},"creator":{"expectedTypes":["Organization","Person"]},"discusses":{"expectedTypes":["CreativeWork"]},"replyToUrl":{"expectedTypes":["URL"]}}},"UserDownloads":{"extends":"UserInteraction","properties":[]},"UserLikes":{"extends":"UserInteraction","properties":[]},"UserPageVisits":{"extends":"UserInteraction","properties":[]},"UserPlays":{"extends":"UserInteraction","properties":[]},"UserPlusOnes":{"extends":"UserInteraction","properties":[]},"UserTweets":{"extends":"UserInteraction","properties":[]},"VisualArtsEvent":{"extends":"Event","properties":[]},"Intangible":{"extends":"Thing","properties":[]},"AlignmentObject":{"extends":"Intangible","properties":{"alignmentType":{"expectedTypes":["Text"]},"educationalFramework":{"expectedTypes":["Text"]},"targetDescription":{"expectedTypes":["Text"]},"targetName":{"expectedTypes":["Text"]},"targetUrl":{"expectedTypes":["URL"]}}},"Audience":{"extends":"Intangible","properties":{"audienceType":{"expectedTypes":["Text"]},"geographicArea":{"expectedTypes":["AdministrativeArea"]}}},"BusinessAudience":{"extends":"Audience","properties":{"numberOfEmployees":{"expectedTypes":["QuantitativeValue"]},"yearlyRevenue":{"expectedTypes":["QuantitativeValue"]},"yearsInOperation":{"expectedTypes":["QuantitativeValue"]}}},"EducationalAudience":{"extends":"Audience","properties":{"educationalRole":{"expectedTypes":["Text"]}}},"MedicalAudience":{"extends":"Audience","properties":[]},"PeopleAudience":{"extends":"Audience","properties":{"healthCondition":{"expectedTypes":["MedicalCondition"]},"requiredGender":{"expectedTypes":["Text"]},"requiredMaxAge":{"expectedTypes":["Integer"]},"requiredMinAge":{"expectedTypes":["Integer"]},"suggestedGender":{"expectedTypes":["Text"]},"suggestedMaxAge":{"expectedTypes":["Number"]},"suggestedMinAge":{"expectedTypes":["Number"]}}},"ParentAudience":{"extends":"PeopleAudience","properties":{"childMaxAge":{"expectedTypes":["Number"]},"childMinAge":{"expectedTypes":["Number"]}}},"Brand":{"extends":"Intangible","properties":{"logo":{"expectedTypes":["ImageObject","URL"]}}},"BusTrip":{"extends":"Intangible","properties":{"arrivalBusStop":{"expectedTypes":["BusStation","BusStop"]},"arrivalTime":{"expectedTypes":["DateTime"]},"busName":{"expectedTypes":["Text"]},"busNumber":{"expectedTypes":["Text"]},"departureBusStop":{"expectedTypes":["BusStation","BusStop"]},"departureTime":{"expectedTypes":["DateTime"]},"provider":{"expectedTypes":["Person","Organization"]}}},"Class":{"extends":"Intangible","properties":[]},"Demand":{"extends":"Intangible","properties":{"acceptedPaymentMethod":{"expectedTypes":["PaymentMethod"]},"advanceBookingRequirement":{"expectedTypes":["QuantitativeValue"]},"availability":{"expectedTypes":["ItemAvailability"]},"availabilityEnds":{"expectedTypes":["DateTime"]},"availabilityStarts":{"expectedTypes":["DateTime"]},"availableAtOrFrom":{"expectedTypes":["Place"]},"availableDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"deliveryLeadTime":{"expectedTypes":["QuantitativeValue"]},"eligibleCustomerType":{"expectedTypes":["BusinessEntityType"]},"eligibleDuration":{"expectedTypes":["QuantitativeValue"]},"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleRegion":{"expectedTypes":["GeoShape","Text"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"includesObject":{"expectedTypes":["TypeAndQuantityNode"]},"inventoryLevel":{"expectedTypes":["QuantitativeValue"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"itemOffered":{"expectedTypes":["Product"]},"mpn":{"expectedTypes":["Text"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]},"seller":{"expectedTypes":["Organization","Person"]},"serialNumber":{"expectedTypes":["Text"]},"sku":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"warranty":{"expectedTypes":["WarrantyPromise"]}}},"EntryPoint":{"extends":"Intangible","properties":{"application":{"expectedTypes":["SoftwareApplication"]},"contentType":{"expectedTypes":["Text"]},"encodingType":{"expectedTypes":["Text"]},"httpMethod":{"expectedTypes":["Text"]},"urlTemplate":{"expectedTypes":["Text"]}}},"Enumeration":{"extends":"Intangible","properties":[]},"ActionStatusType":{"extends":"Enumeration","properties":[]},"BookFormatType":{"extends":"Enumeration","properties":[]},"BusinessEntityType":{"extends":"Enumeration","properties":[]},"BusinessFunction":{"extends":"Enumeration","properties":[]},"ContactPointOption":{"extends":"Enumeration","properties":[]},"DayOfWeek":{"extends":"Enumeration","properties":[]},"DeliveryMethod":{"extends":"Enumeration","properties":[]},"LockerDelivery":{"extends":"DeliveryMethod","properties":[]},"ParcelService":{"extends":"DeliveryMethod","properties":[]},"DrugCostCategory":{"extends":"Enumeration","properties":[]},"DrugPregnancyCategory":{"extends":"MedicalEnumeration","properties":[]},"DrugPrescriptionStatus":{"extends":"Enumeration","properties":[]},"EventStatusType":{"extends":"Enumeration","properties":[]},"GamePlayMode":{"extends":"Enumeration","properties":[]},"GameServerStatus":{"extends":"Enumeration","properties":[]},"InfectiousAgentClass":{"extends":"MedicalEnumeration","properties":[]},"ItemAvailability":{"extends":"Enumeration","properties":[]},"ItemListOrderType":{"extends":"Enumeration","properties":[]},"MapCategoryType":{"extends":"Enumeration","properties":[]},"MedicalDevicePurpose":{"extends":"Enumeration","properties":[]},"MedicalEnumeration":{"extends":"Enumeration","properties":[]},"MedicalEvidenceLevel":{"extends":"Enumeration","properties":[]},"MedicalImagingTechnique":{"extends":"Enumeration","properties":[]},"MedicalObservationalStudyDesign":{"extends":"Enumeration","properties":[]},"MedicalProcedureType":{"extends":"MedicalEnumeration","properties":[]},"MedicalSpecialty":{"extends":"Enumeration","properties":[]},"MedicalStudyStatus":{"extends":"Enumeration","properties":[]},"MedicalTrialDesign":{"extends":"Enumeration","properties":[]},"MedicineSystem":{"extends":"Enumeration","properties":[]},"PhysicalActivityCategory":{"extends":"MedicalEnumeration","properties":[]},"PhysicalExam":{"extends":"Enumeration","properties":[]},"MusicAlbumProductionType":{"extends":"Enumeration","properties":[]},"MusicAlbumReleaseType":{"extends":"Enumeration","properties":[]},"MusicReleaseFormatType":{"extends":"Enumeration","properties":[]},"OfferItemCondition":{"extends":"Enumeration","properties":[]},"OrderStatus":{"extends":"Enumeration","properties":[]},"PaymentMethod":{"extends":"Enumeration","properties":[]},"CreditCard":{"extends":"PaymentMethod","properties":[]},"QualitativeValue":{"extends":"Enumeration","properties":{"equal":{"expectedTypes":["QualitativeValue"]},"greater":{"expectedTypes":["QualitativeValue"]},"greaterOrEqual":{"expectedTypes":["QualitativeValue"]},"lesser":{"expectedTypes":["QualitativeValue"]},"lesserOrEqual":{"expectedTypes":["QualitativeValue"]},"nonEqual":{"expectedTypes":["QualitativeValue"]},"valueReference":{"expectedTypes":["Enumeration","StructuredValue"]}}},"ReservationStatusType":{"extends":"Enumeration","properties":[]},"RsvpResponseType":{"extends":"Enumeration","properties":[]},"Specialty":{"extends":"Enumeration","properties":[]},"WarrantyScope":{"extends":"Enumeration","properties":[]},"Flight":{"extends":"Intangible","properties":{"aircraft":{"expectedTypes":["Vehicle","Text"]},"arrivalAirport":{"expectedTypes":["Airport"]},"arrivalGate":{"expectedTypes":["Text"]},"arrivalTerminal":{"expectedTypes":["Text"]},"arrivalTime":{"expectedTypes":["DateTime"]},"departureAirport":{"expectedTypes":["Airport"]},"departureGate":{"expectedTypes":["Text"]},"departureTerminal":{"expectedTypes":["Text"]},"departureTime":{"expectedTypes":["DateTime"]},"estimatedFlightDuration":{"expectedTypes":["Duration","Text"]},"flightDistance":{"expectedTypes":["Text","Distance"]},"flightNumber":{"expectedTypes":["Text"]},"mealService":{"expectedTypes":["Text"]},"provider":{"expectedTypes":["Organization","Person"]},"seller":{"expectedTypes":["Organization","Person"]},"webCheckinTime":{"expectedTypes":["DateTime"]}}},"GameServer":{"extends":"Intangible","properties":{"game":{"expectedTypes":["VideoGame"]},"playersOnline":{"expectedTypes":["Number"]},"serverStatus":{"expectedTypes":["GameServerStatus"]}}},"Invoice":{"extends":"Intangible","properties":{"accountId":{"expectedTypes":["Text"]},"billingPeriod":{"expectedTypes":["Duration"]},"broker":{"expectedTypes":["Person","Organization"]},"category":{"expectedTypes":["Text","PhysicalActivityCategory","Thing"]},"confirmationNumber":{"expectedTypes":["Text"]},"customer":{"expectedTypes":["Person","Organization"]},"minimumPaymentDue":{"expectedTypes":["PriceSpecification"]},"paymentDue":{"expectedTypes":["DateTime"]},"paymentMethod":{"expectedTypes":["PaymentMethod"]},"paymentMethodId":{"expectedTypes":["Text"]},"paymentStatus":{"expectedTypes":["Text"]},"provider":{"expectedTypes":["Person","Organization"]},"referencesOrder":{"expectedTypes":["Order"]},"scheduledPaymentDate":{"expectedTypes":["Date"]},"totalPaymentDue":{"expectedTypes":["PriceSpecification"]}}},"ItemList":{"extends":"Intangible","properties":{"itemListElement":{"expectedTypes":["Text","ListItem","Thing"]},"itemListOrder":{"expectedTypes":["Text","ItemListOrderType"]},"numberOfItems":{"expectedTypes":["Number"]}}},"BreadcrumbList":{"extends":"ItemList","properties":[]},"JobPosting":{"extends":"Intangible","properties":{"baseSalary":{"expectedTypes":["Number","PriceSpecification"]},"benefits":{"expectedTypes":["Text"]},"datePosted":{"expectedTypes":["Date"]},"educationRequirements":{"expectedTypes":["Text"]},"employmentType":{"expectedTypes":["Text"]},"experienceRequirements":{"expectedTypes":["Text"]},"hiringOrganization":{"expectedTypes":["Organization"]},"incentives":{"expectedTypes":["Text"]},"industry":{"expectedTypes":["Text"]},"jobLocation":{"expectedTypes":["Place"]},"occupationalCategory":{"expectedTypes":["Text"]},"qualifications":{"expectedTypes":["Text"]},"responsibilities":{"expectedTypes":["Text"]},"salaryCurrency":{"expectedTypes":["Text"]},"skills":{"expectedTypes":["Text"]},"specialCommitments":{"expectedTypes":["Text"]},"title":{"expectedTypes":["Text"]},"workHours":{"expectedTypes":["Text"]}}},"Language":{"extends":"Intangible","properties":[]},"ListItem":{"extends":"Intangible","properties":{"item":{"expectedTypes":["Thing"]},"nextItem":{"expectedTypes":["ListItem"]},"position":{"expectedTypes":["Text","Integer"]},"previousItem":{"expectedTypes":["ListItem"]}}},"Offer":{"extends":"Intangible","properties":{"acceptedPaymentMethod":{"expectedTypes":["PaymentMethod"]},"addOn":{"expectedTypes":["Offer"]},"advanceBookingRequirement":{"expectedTypes":["QuantitativeValue"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"availability":{"expectedTypes":["ItemAvailability"]},"availabilityEnds":{"expectedTypes":["DateTime"]},"availabilityStarts":{"expectedTypes":["DateTime"]},"availableAtOrFrom":{"expectedTypes":["Place"]},"availableDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"category":{"expectedTypes":["PhysicalActivityCategory","Thing","Text"]},"deliveryLeadTime":{"expectedTypes":["QuantitativeValue"]},"eligibleCustomerType":{"expectedTypes":["BusinessEntityType"]},"eligibleDuration":{"expectedTypes":["QuantitativeValue"]},"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleRegion":{"expectedTypes":["GeoShape","Text"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"includesObject":{"expectedTypes":["TypeAndQuantityNode"]},"ineligibleRegion":{"expectedTypes":["Place"]},"inventoryLevel":{"expectedTypes":["QuantitativeValue"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"itemOffered":{"expectedTypes":["Product"]},"mpn":{"expectedTypes":["Text"]},"price":{"expectedTypes":["Number","Text"]},"priceCurrency":{"expectedTypes":["Text"]},"priceSpecification":{"expectedTypes":["PriceSpecification"]},"priceValidUntil":{"expectedTypes":["Date"]},"review":{"expectedTypes":["Review"]},"seller":{"expectedTypes":["Organization","Person"]},"serialNumber":{"expectedTypes":["Text"]},"sku":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"warranty":{"expectedTypes":["WarrantyPromise"]}}},"AggregateOffer":{"extends":"Offer","properties":{"highPrice":{"expectedTypes":["Text","Number"]},"lowPrice":{"expectedTypes":["Text","Number"]},"offerCount":{"expectedTypes":["Integer"]},"offers":{"expectedTypes":["Offer"]}}},"Order":{"extends":"Intangible","properties":{"acceptedOffer":{"expectedTypes":["Offer"]},"billingAddress":{"expectedTypes":["PostalAddress"]},"broker":{"expectedTypes":["Person","Organization"]},"confirmationNumber":{"expectedTypes":["Text"]},"customer":{"expectedTypes":["Person","Organization"]},"discount":{"expectedTypes":["Text","Number"]},"discountCode":{"expectedTypes":["Text"]},"discountCurrency":{"expectedTypes":["Text"]},"isGift":{"expectedTypes":["Boolean"]},"orderDate":{"expectedTypes":["DateTime"]},"orderNumber":{"expectedTypes":["Text"]},"orderStatus":{"expectedTypes":["OrderStatus"]},"orderedItem":{"expectedTypes":["Product"]},"partOfInvoice":{"expectedTypes":["Invoice"]},"paymentDue":{"expectedTypes":["DateTime"]},"paymentMethod":{"expectedTypes":["PaymentMethod"]},"paymentMethodId":{"expectedTypes":["Text"]},"paymentUrl":{"expectedTypes":["URL"]},"seller":{"expectedTypes":["Person","Organization"]}}},"ParcelDelivery":{"extends":"Intangible","properties":{"deliveryAddress":{"expectedTypes":["PostalAddress"]},"deliveryStatus":{"expectedTypes":["DeliveryEvent"]},"expectedArrivalFrom":{"expectedTypes":["DateTime"]},"expectedArrivalUntil":{"expectedTypes":["DateTime"]},"hasDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"itemShipped":{"expectedTypes":["Product"]},"originAddress":{"expectedTypes":["PostalAddress"]},"partOfOrder":{"expectedTypes":["Order"]},"provider":{"expectedTypes":["Person","Organization"]},"trackingNumber":{"expectedTypes":["Text"]},"trackingUrl":{"expectedTypes":["URL"]}}},"Permit":{"extends":"Intangible","properties":{"issuedBy":{"expectedTypes":["Organization"]},"issuedThrough":{"expectedTypes":["Service"]},"permitAudience":{"expectedTypes":["Audience"]},"validFor":{"expectedTypes":["Duration"]},"validFrom":{"expectedTypes":["DateTime"]},"validIn":{"expectedTypes":["AdministrativeArea"]},"validUntil":{"expectedTypes":["Date"]}}},"GovernmentPermit":{"extends":"Permit","properties":[]},"ProgramMembership":{"extends":"Intangible","properties":{"hostingOrganization":{"expectedTypes":["Organization"]},"member":{"expectedTypes":["Person","Organization"]},"membershipNumber":{"expectedTypes":["Text"]},"programName":{"expectedTypes":["Text"]}}},"Property":{"extends":"Intangible","properties":{"domainIncludes":{"expectedTypes":["Class"]},"inverseOf":{"expectedTypes":["Property"]},"rangeIncludes":{"expectedTypes":["Class"]},"supersededBy":{"expectedTypes":["Property"]}}},"PropertyValueSpecification":{"extends":"Intangible","properties":{"defaultValue":{"expectedTypes":["Text","Thing"]},"maxValue":{"expectedTypes":["Number"]},"minValue":{"expectedTypes":["Number"]},"multipleValues":{"expectedTypes":["Boolean"]},"readonlyValue":{"expectedTypes":["Boolean"]},"stepValue":{"expectedTypes":["Number"]},"valueMaxLength":{"expectedTypes":["Number"]},"valueMinLength":{"expectedTypes":["Number"]},"valueName":{"expectedTypes":["Text"]},"valuePattern":{"expectedTypes":["Text"]},"valueRequired":{"expectedTypes":["Boolean"]}}},"Quantity":{"extends":"Intangible","properties":[]},"Distance":{"extends":"Quantity","properties":[]},"Duration":{"extends":"Quantity","properties":[]},"Energy":{"extends":"Quantity","properties":[]},"Mass":{"extends":"Quantity","properties":[]},"Rating":{"extends":"Intangible","properties":{"bestRating":{"expectedTypes":["Number","Text"]},"ratingValue":{"expectedTypes":["Text"]},"worstRating":{"expectedTypes":["Number","Text"]}}},"AggregateRating":{"extends":"Rating","properties":{"itemReviewed":{"expectedTypes":["Thing"]},"ratingCount":{"expectedTypes":["Number"]},"reviewCount":{"expectedTypes":["Number"]}}},"Reservation":{"extends":"Intangible","properties":{"bookingTime":{"expectedTypes":["DateTime"]},"broker":{"expectedTypes":["Organization","Person"]},"modifiedTime":{"expectedTypes":["DateTime"]},"priceCurrency":{"expectedTypes":["Text"]},"programMembershipUsed":{"expectedTypes":["ProgramMembership"]},"provider":{"expectedTypes":["Organization","Person"]},"reservationFor":{"expectedTypes":["Thing"]},"reservationId":{"expectedTypes":["Text"]},"reservationStatus":{"expectedTypes":["ReservationStatusType"]},"reservedTicket":{"expectedTypes":["Ticket"]},"totalPrice":{"expectedTypes":["Number","PriceSpecification","Text"]},"underName":{"expectedTypes":["Organization","Person"]}}},"BusReservation":{"extends":"Reservation","properties":[]},"EventReservation":{"extends":"Reservation","properties":[]},"FlightReservation":{"extends":"Reservation","properties":{"boardingGroup":{"expectedTypes":["Text"]}}},"FoodEstablishmentReservation":{"extends":"Reservation","properties":{"endTime":{"expectedTypes":["DateTime"]},"partySize":{"expectedTypes":["Number","QuantitativeValue"]},"startTime":{"expectedTypes":["DateTime"]}}},"LodgingReservation":{"extends":"Reservation","properties":{"checkinTime":{"expectedTypes":["DateTime"]},"checkoutTime":{"expectedTypes":["DateTime"]},"lodgingUnitDescription":{"expectedTypes":["Text"]},"lodgingUnitType":{"expectedTypes":["Text","QualitativeValue"]},"numAdults":{"expectedTypes":["QuantitativeValue","Number"]},"numChildren":{"expectedTypes":["QuantitativeValue","Number"]}}},"RentalCarReservation":{"extends":"Reservation","properties":{"dropoffLocation":{"expectedTypes":["Place"]},"dropoffTime":{"expectedTypes":["DateTime"]},"pickupLocation":{"expectedTypes":["Place"]},"pickupTime":{"expectedTypes":["DateTime"]}}},"ReservationPackage":{"extends":"Reservation","properties":{"subReservation":{"expectedTypes":["Reservation"]}}},"TaxiReservation":{"extends":"Reservation","properties":{"partySize":{"expectedTypes":["Number","QuantitativeValue"]},"pickupLocation":{"expectedTypes":["Place"]},"pickupTime":{"expectedTypes":["DateTime"]}}},"TrainReservation":{"extends":"Reservation","properties":[]},"Role":{"extends":"Intangible","properties":{"endDate":{"expectedTypes":["Date"]},"roleName":{"expectedTypes":["Text","URL"]},"startDate":{"expectedTypes":["Date"]}}},"OrganizationRole":{"extends":"Role","properties":{"numberedPosition":{"expectedTypes":["Number"]}}},"EmployeeRole":{"extends":"OrganizationRole","properties":{"baseSalary":{"expectedTypes":["Number","PriceSpecification"]},"salaryCurrency":{"expectedTypes":["Text"]}}},"PerformanceRole":{"extends":"Role","properties":{"characterName":{"expectedTypes":["Text"]}}},"Seat":{"extends":"Intangible","properties":{"seatNumber":{"expectedTypes":["Text"]},"seatRow":{"expectedTypes":["Text"]},"seatSection":{"expectedTypes":["Text"]},"seatingType":{"expectedTypes":["Text","QualitativeValue"]}}},"Service":{"extends":"Intangible","properties":{"availableChannel":{"expectedTypes":["ServiceChannel"]},"produces":{"expectedTypes":["Thing"]},"provider":{"expectedTypes":["Person","Organization"]},"serviceArea":{"expectedTypes":["AdministrativeArea"]},"serviceAudience":{"expectedTypes":["Audience"]},"serviceType":{"expectedTypes":["Text"]}}},"GovernmentService":{"extends":"Service","properties":{"serviceOperator":{"expectedTypes":["Organization"]}}},"Taxi":{"extends":"Service","properties":[]},"ServiceChannel":{"extends":"Intangible","properties":{"availableLanguage":{"expectedTypes":["Language"]},"processingTime":{"expectedTypes":["Duration"]},"providesService":{"expectedTypes":["Service"]},"serviceLocation":{"expectedTypes":["Place"]},"servicePhone":{"expectedTypes":["ContactPoint"]},"servicePostalAddress":{"expectedTypes":["PostalAddress"]},"serviceSmsNumber":{"expectedTypes":["ContactPoint"]},"serviceUrl":{"expectedTypes":["URL"]}}},"StructuredValue":{"extends":"Intangible","properties":[]},"ContactPoint":{"extends":"StructuredValue","properties":{"areaServed":{"expectedTypes":["AdministrativeArea"]},"availableLanguage":{"expectedTypes":["Language"]},"contactOption":{"expectedTypes":["ContactPointOption"]},"contactType":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"faxNumber":{"expectedTypes":["Text"]},"hoursAvailable":{"expectedTypes":["OpeningHoursSpecification"]},"productSupported":{"expectedTypes":["Product","Text"]},"telephone":{"expectedTypes":["Text"]}}},"PostalAddress":{"extends":"ContactPoint","properties":{"addressCountry":{"expectedTypes":["Country"]},"addressLocality":{"expectedTypes":["Text"]},"addressRegion":{"expectedTypes":["Text"]},"postOfficeBoxNumber":{"expectedTypes":["Text"]},"postalCode":{"expectedTypes":["Text"]},"streetAddress":{"expectedTypes":["Text"]}}},"DatedMoneySpecification":{"extends":"StructuredValue","properties":{"amount":{"expectedTypes":["Number"]},"currency":{"expectedTypes":["Text"]},"endDate":{"expectedTypes":["Date"]},"startDate":{"expectedTypes":["Date"]}}},"GeoCoordinates":{"extends":"StructuredValue","properties":{"elevation":{"expectedTypes":["Text","Number"]},"latitude":{"expectedTypes":["Text","Number"]},"longitude":{"expectedTypes":["Text","Number"]}}},"GeoShape":{"extends":"StructuredValue","properties":{"box":{"expectedTypes":["Text"]},"circle":{"expectedTypes":["Text"]},"elevation":{"expectedTypes":["Number","Text"]},"line":{"expectedTypes":["Text"]},"polygon":{"expectedTypes":["Text"]}}},"NutritionInformation":{"extends":"StructuredValue","properties":{"calories":{"expectedTypes":["Energy"]},"carbohydrateContent":{"expectedTypes":["Mass"]},"cholesterolContent":{"expectedTypes":["Mass"]},"fatContent":{"expectedTypes":["Mass"]},"fiberContent":{"expectedTypes":["Mass"]},"proteinContent":{"expectedTypes":["Mass"]},"saturatedFatContent":{"expectedTypes":["Mass"]},"servingSize":{"expectedTypes":["Text"]},"sodiumContent":{"expectedTypes":["Mass"]},"sugarContent":{"expectedTypes":["Mass"]},"transFatContent":{"expectedTypes":["Mass"]},"unsaturatedFatContent":{"expectedTypes":["Mass"]}}},"OpeningHoursSpecification":{"extends":"StructuredValue","properties":{"closes":{"expectedTypes":["Time"]},"dayOfWeek":{"expectedTypes":["DayOfWeek"]},"opens":{"expectedTypes":["Time"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]}}},"OwnershipInfo":{"extends":"StructuredValue","properties":{"acquiredFrom":{"expectedTypes":["Organization","Person"]},"ownedFrom":{"expectedTypes":["DateTime"]},"ownedThrough":{"expectedTypes":["DateTime"]},"typeOfGood":{"expectedTypes":["Product"]}}},"PriceSpecification":{"extends":"StructuredValue","properties":{"eligibleQuantity":{"expectedTypes":["QuantitativeValue"]},"eligibleTransactionVolume":{"expectedTypes":["PriceSpecification"]},"maxPrice":{"expectedTypes":["Number"]},"minPrice":{"expectedTypes":["Number"]},"price":{"expectedTypes":["Number","Text"]},"priceCurrency":{"expectedTypes":["Text"]},"validFrom":{"expectedTypes":["DateTime"]},"validThrough":{"expectedTypes":["DateTime"]},"valueAddedTaxIncluded":{"expectedTypes":["Boolean"]}}},"DeliveryChargeSpecification":{"extends":"PriceSpecification","properties":{"appliesToDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"eligibleRegion":{"expectedTypes":["Text","GeoShape"]}}},"PaymentChargeSpecification":{"extends":"PriceSpecification","properties":{"appliesToDeliveryMethod":{"expectedTypes":["DeliveryMethod"]},"appliesToPaymentMethod":{"expectedTypes":["PaymentMethod"]}}},"UnitPriceSpecification":{"extends":"PriceSpecification","properties":{"billingIncrement":{"expectedTypes":["Number"]},"priceType":{"expectedTypes":["Text"]},"unitCode":{"expectedTypes":["Text"]}}},"QuantitativeValue":{"extends":"StructuredValue","properties":{"maxValue":{"expectedTypes":["Number"]},"minValue":{"expectedTypes":["Number"]},"unitCode":{"expectedTypes":["Text"]},"value":{"expectedTypes":["Number"]},"valueReference":{"expectedTypes":["StructuredValue","Enumeration"]}}},"TypeAndQuantityNode":{"extends":"StructuredValue","properties":{"amountOfThisGood":{"expectedTypes":["Number"]},"businessFunction":{"expectedTypes":["BusinessFunction"]},"typeOfGood":{"expectedTypes":["Product"]},"unitCode":{"expectedTypes":["Text"]}}},"WarrantyPromise":{"extends":"StructuredValue","properties":{"durationOfWarranty":{"expectedTypes":["QuantitativeValue"]},"warrantyScope":{"expectedTypes":["WarrantyScope"]}}},"Ticket":{"extends":"Intangible","properties":{"dateIssued":{"expectedTypes":["DateTime"]},"issuedBy":{"expectedTypes":["Organization"]},"priceCurrency":{"expectedTypes":["Text"]},"ticketNumber":{"expectedTypes":["Text"]},"ticketToken":{"expectedTypes":["Text","URL"]},"ticketedSeat":{"expectedTypes":["Seat"]},"totalPrice":{"expectedTypes":["Text","Number","PriceSpecification"]},"underName":{"expectedTypes":["Person","Organization"]}}},"TrainTrip":{"extends":"Intangible","properties":{"arrivalPlatform":{"expectedTypes":["Text"]},"arrivalStation":{"expectedTypes":["TrainStation"]},"arrivalTime":{"expectedTypes":["DateTime"]},"departurePlatform":{"expectedTypes":["Text"]},"departureStation":{"expectedTypes":["TrainStation"]},"departureTime":{"expectedTypes":["DateTime"]},"provider":{"expectedTypes":["Person","Organization"]},"trainName":{"expectedTypes":["Text"]},"trainNumber":{"expectedTypes":["Text"]}}},"MedicalEntity":{"extends":"Thing","properties":{"code":{"expectedTypes":["MedicalCode"]},"guideline":{"expectedTypes":["MedicalGuideline"]},"medicineSystem":{"expectedTypes":["MedicineSystem"]},"recognizingAuthority":{"expectedTypes":["Organization"]},"relevantSpecialty":{"expectedTypes":["MedicalSpecialty"]},"study":{"expectedTypes":["MedicalStudy"]}}},"AnatomicalStructure":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"bodyLocation":{"expectedTypes":["Text"]},"connectedTo":{"expectedTypes":["AnatomicalStructure"]},"diagram":{"expectedTypes":["ImageObject"]},"function":{"expectedTypes":["Text"]},"partOfSystem":{"expectedTypes":["AnatomicalSystem"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]},"subStructure":{"expectedTypes":["AnatomicalStructure"]}}},"Bone":{"extends":"AnatomicalStructure","properties":[]},"BrainStructure":{"extends":"AnatomicalStructure","properties":[]},"Joint":{"extends":"AnatomicalStructure","properties":{"biomechnicalClass":{"expectedTypes":["Text"]},"functionalClass":{"expectedTypes":["Text"]},"structuralClass":{"expectedTypes":["Text"]}}},"Ligament":{"extends":"AnatomicalStructure","properties":[]},"Muscle":{"extends":"AnatomicalStructure","properties":{"antagonist":{"expectedTypes":["Muscle"]},"bloodSupply":{"expectedTypes":["Vessel"]},"insertion":{"expectedTypes":["AnatomicalStructure"]},"muscleAction":{"expectedTypes":["Text"]},"nerve":{"expectedTypes":["Nerve"]},"origin":{"expectedTypes":["AnatomicalStructure"]}}},"Nerve":{"extends":"AnatomicalStructure","properties":{"branch":{"expectedTypes":["AnatomicalStructure"]},"nerveMotor":{"expectedTypes":["Muscle"]},"sensoryUnit":{"expectedTypes":["SuperficialAnatomy","AnatomicalStructure"]},"sourcedFrom":{"expectedTypes":["BrainStructure"]}}},"Vessel":{"extends":"AnatomicalStructure","properties":[]},"Artery":{"extends":"Vessel","properties":{"arterialBranch":{"expectedTypes":["AnatomicalStructure"]},"source":{"expectedTypes":["AnatomicalStructure"]},"supplyTo":{"expectedTypes":["AnatomicalStructure"]}}},"LymphaticVessel":{"extends":"Vessel","properties":{"originatesFrom":{"expectedTypes":["Vessel"]},"regionDrained":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"runsTo":{"expectedTypes":["Vessel"]}}},"Vein":{"extends":"Vessel","properties":{"drainsTo":{"expectedTypes":["Vessel"]},"regionDrained":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"tributary":{"expectedTypes":["AnatomicalStructure"]}}},"AnatomicalSystem":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"comprisedOf":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedStructure":{"expectedTypes":["AnatomicalStructure"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]}}},"MedicalCause":{"extends":"MedicalEntity","properties":{"causeOf":{"expectedTypes":["MedicalEntity"]}}},"MedicalCondition":{"extends":"MedicalEntity","properties":{"associatedAnatomy":{"expectedTypes":["AnatomicalSystem","SuperficialAnatomy","AnatomicalStructure"]},"cause":{"expectedTypes":["MedicalCause"]},"differentialDiagnosis":{"expectedTypes":["DDxElement"]},"epidemiology":{"expectedTypes":["Text"]},"expectedPrognosis":{"expectedTypes":["Text"]},"naturalProgression":{"expectedTypes":["Text"]},"pathophysiology":{"expectedTypes":["Text"]},"possibleComplication":{"expectedTypes":["Text"]},"possibleTreatment":{"expectedTypes":["MedicalTherapy"]},"primaryPrevention":{"expectedTypes":["MedicalTherapy"]},"riskFactor":{"expectedTypes":["MedicalRiskFactor"]},"secondaryPrevention":{"expectedTypes":["MedicalTherapy"]},"signOrSymptom":{"expectedTypes":["MedicalSignOrSymptom"]},"stage":{"expectedTypes":["MedicalConditionStage"]},"subtype":{"expectedTypes":["Text"]},"typicalTest":{"expectedTypes":["MedicalTest"]}}},"InfectiousDisease":{"extends":"MedicalCondition","properties":{"infectiousAgent":{"expectedTypes":["Text"]},"infectiousAgentClass":{"expectedTypes":["InfectiousAgentClass"]},"transmissionMethod":{"expectedTypes":["Text"]}}},"MedicalContraindication":{"extends":"MedicalEntity","properties":[]},"MedicalDevice":{"extends":"MedicalEntity","properties":{"adverseOutcome":{"expectedTypes":["MedicalEntity"]},"contraindication":{"expectedTypes":["MedicalContraindication"]},"indication":{"expectedTypes":["MedicalIndication"]},"postOp":{"expectedTypes":["Text"]},"preOp":{"expectedTypes":["Text"]},"procedure":{"expectedTypes":["Text"]},"purpose":{"expectedTypes":["MedicalDevicePurpose","Thing"]},"seriousAdverseOutcome":{"expectedTypes":["MedicalEntity"]}}},"MedicalGuideline":{"extends":"MedicalEntity","properties":{"evidenceLevel":{"expectedTypes":["MedicalEvidenceLevel"]},"evidenceOrigin":{"expectedTypes":["Text"]},"guidelineDate":{"expectedTypes":["Date"]},"guidelineSubject":{"expectedTypes":["MedicalEntity"]}}},"MedicalGuidelineContraindication":{"extends":"MedicalGuideline","properties":[]},"MedicalGuidelineRecommendation":{"extends":"MedicalGuideline","properties":{"recommendationStrength":{"expectedTypes":["Text"]}}},"MedicalIndication":{"extends":"MedicalEntity","properties":[]},"ApprovedIndication":{"extends":"MedicalIndication","properties":[]},"PreventionIndication":{"extends":"MedicalIndication","properties":[]},"TreatmentIndication":{"extends":"MedicalIndication","properties":[]},"MedicalIntangible":{"extends":"MedicalEntity","properties":[]},"DDxElement":{"extends":"MedicalIntangible","properties":{"diagnosis":{"expectedTypes":["MedicalCondition"]},"distinguishingSign":{"expectedTypes":["MedicalSignOrSymptom"]}}},"DoseSchedule":{"extends":"MedicalIntangible","properties":{"doseUnit":{"expectedTypes":["Text"]},"doseValue":{"expectedTypes":["Number"]},"frequency":{"expectedTypes":["Text"]},"targetPopulation":{"expectedTypes":["Text"]}}},"MaximumDoseSchedule":{"extends":"DoseSchedule","properties":[]},"RecommendedDoseSchedule":{"extends":"DoseSchedule","properties":[]},"ReportedDoseSchedule":{"extends":"DoseSchedule","properties":[]},"DrugCost":{"extends":"MedicalIntangible","properties":{"applicableLocation":{"expectedTypes":["AdministrativeArea"]},"costCategory":{"expectedTypes":["DrugCostCategory"]},"costCurrency":{"expectedTypes":["Text"]},"costOrigin":{"expectedTypes":["Text"]},"costPerUnit":{"expectedTypes":["Text","Number"]},"drugUnit":{"expectedTypes":["Text"]}}},"DrugLegalStatus":{"extends":"MedicalIntangible","properties":{"applicableLocation":{"expectedTypes":["AdministrativeArea"]}}},"DrugStrength":{"extends":"MedicalIntangible","properties":{"activeIngredient":{"expectedTypes":["Text"]},"availableIn":{"expectedTypes":["AdministrativeArea"]},"strengthUnit":{"expectedTypes":["Text"]},"strengthValue":{"expectedTypes":["Number"]}}},"MedicalCode":{"extends":"MedicalIntangible","properties":{"codeValue":{"expectedTypes":["Text"]},"codingSystem":{"expectedTypes":["Text"]}}},"MedicalConditionStage":{"extends":"MedicalIntangible","properties":{"stageAsNumber":{"expectedTypes":["Number"]},"subStageSuffix":{"expectedTypes":["Text"]}}},"":{"extends":"","properties":[]},"MedicalProcedure":{"extends":"MedicalEntity","properties":{"followup":{"expectedTypes":["Text"]},"howPerformed":{"expectedTypes":["Text"]},"preparation":{"expectedTypes":["Text"]},"procedureType":{"expectedTypes":["MedicalProcedureType"]}}},"DiagnosticProcedure":{"extends":"MedicalProcedure","properties":[]},"PalliativeProcedure":{"extends":"MedicalTherapy","properties":[]},"TherapeuticProcedure":{"extends":"MedicalTherapy","properties":[]},"MedicalRiskEstimator":{"extends":"MedicalEntity","properties":{"estimatesRiskOf":{"expectedTypes":["MedicalEntity"]},"includedRiskFactor":{"expectedTypes":["MedicalRiskFactor"]}}},"MedicalRiskCalculator":{"extends":"MedicalRiskEstimator","properties":[]},"MedicalRiskScore":{"extends":"MedicalRiskEstimator","properties":{"algorithm":{"expectedTypes":["Text"]}}},"MedicalRiskFactor":{"extends":"MedicalEntity","properties":{"increasesRiskOf":{"expectedTypes":["MedicalEntity"]}}},"MedicalSignOrSymptom":{"extends":"MedicalEntity","properties":{"cause":{"expectedTypes":["MedicalCause"]},"possibleTreatment":{"expectedTypes":["MedicalTherapy"]}}},"MedicalSign":{"extends":"MedicalSignOrSymptom","properties":{"identifyingExam":{"expectedTypes":["PhysicalExam"]},"identifyingTest":{"expectedTypes":["MedicalTest"]}}},"MedicalSymptom":{"extends":"MedicalSignOrSymptom","properties":[]},"MedicalStudy":{"extends":"MedicalEntity","properties":{"outcome":{"expectedTypes":["Text"]},"population":{"expectedTypes":["Text"]},"sponsor":{"expectedTypes":["Organization"]},"status":{"expectedTypes":["MedicalStudyStatus"]},"studyLocation":{"expectedTypes":["AdministrativeArea"]},"studySubject":{"expectedTypes":["MedicalEntity"]}}},"MedicalObservationalStudy":{"extends":"MedicalStudy","properties":{"studyDesign":{"expectedTypes":["MedicalObservationalStudyDesign"]}}},"MedicalTrial":{"extends":"MedicalStudy","properties":{"phase":{"expectedTypes":["Text"]},"trialDesign":{"expectedTypes":["MedicalTrialDesign"]}}},"MedicalTest":{"extends":"MedicalEntity","properties":{"affectedBy":{"expectedTypes":["Drug"]},"normalRange":{"expectedTypes":["Text"]},"signDetected":{"expectedTypes":["MedicalSign"]},"usedToDiagnose":{"expectedTypes":["MedicalCondition"]},"usesDevice":{"expectedTypes":["MedicalDevice"]}}},"BloodTest":{"extends":"MedicalTest","properties":[]},"ImagingTest":{"extends":"MedicalTest","properties":{"imagingTechnique":{"expectedTypes":["MedicalImagingTechnique"]}}},"MedicalTestPanel":{"extends":"MedicalTest","properties":{"subTest":{"expectedTypes":["MedicalTest"]}}},"PathologyTest":{"extends":"MedicalTest","properties":{"tissueSample":{"expectedTypes":["Text"]}}},"MedicalTherapy":{"extends":"MedicalEntity","properties":{"adverseOutcome":{"expectedTypes":["MedicalEntity"]},"contraindication":{"expectedTypes":["MedicalContraindication"]},"duplicateTherapy":{"expectedTypes":["MedicalTherapy"]},"indication":{"expectedTypes":["MedicalIndication"]},"seriousAdverseOutcome":{"expectedTypes":["MedicalEntity"]}}},"DietarySupplement":{"extends":"MedicalTherapy","properties":{"activeIngredient":{"expectedTypes":["Text"]},"background":{"expectedTypes":["Text"]},"dosageForm":{"expectedTypes":["Text"]},"isProprietary":{"expectedTypes":["Boolean"]},"legalStatus":{"expectedTypes":["DrugLegalStatus"]},"manufacturer":{"expectedTypes":["Organization"]},"maximumIntake":{"expectedTypes":["MaximumDoseSchedule"]},"mechanismOfAction":{"expectedTypes":["Text"]},"nonProprietaryName":{"expectedTypes":["Text"]},"recommendedIntake":{"expectedTypes":["RecommendedDoseSchedule"]},"safetyConsideration":{"expectedTypes":["Text"]},"targetPopulation":{"expectedTypes":["Text"]}}},"Drug":{"extends":"MedicalTherapy","properties":{"activeIngredient":{"expectedTypes":["Text"]},"administrationRoute":{"expectedTypes":["Text"]},"alcoholWarning":{"expectedTypes":["Text"]},"availableStrength":{"expectedTypes":["DrugStrength"]},"breastfeedingWarning":{"expectedTypes":["Text"]},"clinicalPharmacology":{"expectedTypes":["Text"]},"cost":{"expectedTypes":["DrugCost"]},"dosageForm":{"expectedTypes":["Text"]},"doseSchedule":{"expectedTypes":["DoseSchedule"]},"drugClass":{"expectedTypes":["DrugClass"]},"foodWarning":{"expectedTypes":["Text"]},"interactingDrug":{"expectedTypes":["Drug"]},"isAvailableGenerically":{"expectedTypes":["Boolean"]},"isProprietary":{"expectedTypes":["Boolean"]},"labelDetails":{"expectedTypes":["URL"]},"legalStatus":{"expectedTypes":["DrugLegalStatus"]},"manufacturer":{"expectedTypes":["Organization"]},"mechanismOfAction":{"expectedTypes":["Text"]},"nonProprietaryName":{"expectedTypes":["Text"]},"overdosage":{"expectedTypes":["Text"]},"pregnancyCategory":{"expectedTypes":["DrugPregnancyCategory"]},"pregnancyWarning":{"expectedTypes":["Text"]},"prescribingInfo":{"expectedTypes":["URL"]},"prescriptionStatus":{"expectedTypes":["DrugPrescriptionStatus"]},"relatedDrug":{"expectedTypes":["Drug"]},"warning":{"expectedTypes":["Text","URL"]}}},"DrugClass":{"extends":"MedicalTherapy","properties":{"drug":{"expectedTypes":["Drug"]}}},"LifestyleModification":{"extends":"MedicalTherapy","properties":[]},"PhysicalActivity":{"extends":"LifestyleModification","properties":{"associatedAnatomy":{"expectedTypes":["AnatomicalSystem","SuperficialAnatomy","AnatomicalStructure"]},"category":{"expectedTypes":["PhysicalActivityCategory","Thing","Text"]},"epidemiology":{"expectedTypes":["Text"]},"pathophysiology":{"expectedTypes":["Text"]}}},"PhysicalTherapy":{"extends":"MedicalTherapy","properties":[]},"PsychologicalTreatment":{"extends":"MedicalTherapy","properties":[]},"RadiationTherapy":{"extends":"MedicalTherapy","properties":[]},"SuperficialAnatomy":{"extends":"MedicalEntity","properties":{"associatedPathophysiology":{"expectedTypes":["Text"]},"relatedAnatomy":{"expectedTypes":["AnatomicalSystem","AnatomicalStructure"]},"relatedCondition":{"expectedTypes":["MedicalCondition"]},"relatedTherapy":{"expectedTypes":["MedicalTherapy"]},"significance":{"expectedTypes":["Text"]}}},"Organization":{"extends":"Thing","properties":{"address":{"expectedTypes":["PostalAddress"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"brand":{"expectedTypes":["Brand","Organization"]},"contactPoint":{"expectedTypes":["ContactPoint"]},"department":{"expectedTypes":["Organization"]},"dissolutionDate":{"expectedTypes":["Date"]},"duns":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"employee":{"expectedTypes":["Person"]},"event":{"expectedTypes":["Event"]},"faxNumber":{"expectedTypes":["Text"]},"founder":{"expectedTypes":["Person"]},"foundingDate":{"expectedTypes":["Date"]},"foundingLocation":{"expectedTypes":["Place"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasPOS":{"expectedTypes":["Place"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"legalName":{"expectedTypes":["Text"]},"location":{"expectedTypes":["Place","PostalAddress"]},"logo":{"expectedTypes":["ImageObject","URL"]},"makesOffer":{"expectedTypes":["Offer"]},"member":{"expectedTypes":["Person","Organization"]},"memberOf":{"expectedTypes":["ProgramMembership","Organization"]},"naics":{"expectedTypes":["Text"]},"owns":{"expectedTypes":["Product","OwnershipInfo"]},"review":{"expectedTypes":["Review"]},"seeks":{"expectedTypes":["Demand"]},"subOrganization":{"expectedTypes":["Organization"]},"taxID":{"expectedTypes":["Text"]},"telephone":{"expectedTypes":["Text"]},"vatID":{"expectedTypes":["Text"]}}},"Airline":{"extends":"Organization","properties":{"iataCode":{"expectedTypes":["Text"]}}},"Corporation":{"extends":"Organization","properties":{"tickerSymbol":{"expectedTypes":["Text"]}}},"EducationalOrganization":{"extends":"Organization","properties":{"alumni":{"expectedTypes":["Person"]}}},"CollegeOrUniversity":{"extends":"EducationalOrganization","properties":[]},"ElementarySchool":{"extends":"EducationalOrganization","properties":[]},"HighSchool":{"extends":"EducationalOrganization","properties":[]},"MiddleSchool":{"extends":"EducationalOrganization","properties":[]},"Preschool":{"extends":"EducationalOrganization","properties":[]},"School":{"extends":"EducationalOrganization","properties":[]},"GovernmentOrganization":{"extends":"Organization","properties":[]},"LocalBusiness":{"extends":"Organization","properties":{"branchOf":{"expectedTypes":["Organization"]},"currenciesAccepted":{"expectedTypes":["Text"]},"openingHours":{"expectedTypes":["Duration"]},"paymentAccepted":{"expectedTypes":["Text"]},"priceRange":{"expectedTypes":["Text"]}}},"AnimalShelter":{"extends":"LocalBusiness","properties":[]},"AutomotiveBusiness":{"extends":"LocalBusiness","properties":[]},"AutoBodyShop":{"extends":"AutomotiveBusiness","properties":[]},"AutoDealer":{"extends":"AutomotiveBusiness","properties":[]},"AutoPartsStore":{"extends":"Store","properties":[]},"AutoRental":{"extends":"AutomotiveBusiness","properties":[]},"AutoRepair":{"extends":"AutomotiveBusiness","properties":[]},"AutoWash":{"extends":"AutomotiveBusiness","properties":[]},"GasStation":{"extends":"AutomotiveBusiness","properties":[]},"MotorcycleDealer":{"extends":"AutomotiveBusiness","properties":[]},"MotorcycleRepair":{"extends":"AutomotiveBusiness","properties":[]},"ChildCare":{"extends":"LocalBusiness","properties":[]},"DryCleaningOrLaundry":{"extends":"LocalBusiness","properties":[]},"EmergencyService":{"extends":"LocalBusiness","properties":[]},"FireStation":{"extends":"CivicStructure","properties":[]},"Hospital":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalTest","MedicalTherapy","MedicalProcedure"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"PoliceStation":{"extends":"CivicStructure","properties":[]},"EmploymentAgency":{"extends":"LocalBusiness","properties":[]},"EntertainmentBusiness":{"extends":"LocalBusiness","properties":[]},"AdultEntertainment":{"extends":"EntertainmentBusiness","properties":[]},"AmusementPark":{"extends":"EntertainmentBusiness","properties":[]},"ArtGallery":{"extends":"EntertainmentBusiness","properties":[]},"Casino":{"extends":"EntertainmentBusiness","properties":[]},"ComedyClub":{"extends":"EntertainmentBusiness","properties":[]},"MovieTheater":{"extends":"EntertainmentBusiness","properties":[]},"NightClub":{"extends":"EntertainmentBusiness","properties":[]},"FinancialService":{"extends":"LocalBusiness","properties":[]},"AccountingService":{"extends":"FinancialService","properties":[]},"AutomatedTeller":{"extends":"FinancialService","properties":[]},"BankOrCreditUnion":{"extends":"FinancialService","properties":[]},"InsuranceAgency":{"extends":"FinancialService","properties":[]},"FoodEstablishment":{"extends":"LocalBusiness","properties":{"acceptsReservations":{"expectedTypes":["Text","Boolean","URL"]},"menu":{"expectedTypes":["Text","URL"]},"servesCuisine":{"expectedTypes":["Text"]}}},"Bakery":{"extends":"FoodEstablishment","properties":[]},"BarOrPub":{"extends":"FoodEstablishment","properties":[]},"Brewery":{"extends":"FoodEstablishment","properties":[]},"CafeOrCoffeeShop":{"extends":"FoodEstablishment","properties":[]},"FastFoodRestaurant":{"extends":"FoodEstablishment","properties":[]},"IceCreamShop":{"extends":"FoodEstablishment","properties":[]},"Restaurant":{"extends":"FoodEstablishment","properties":[]},"Winery":{"extends":"FoodEstablishment","properties":[]},"GovernmentOffice":{"extends":"LocalBusiness","properties":[]},"PostOffice":{"extends":"GovernmentOffice","properties":[]},"HealthAndBeautyBusiness":{"extends":"LocalBusiness","properties":[]},"BeautySalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"DaySpa":{"extends":"HealthAndBeautyBusiness","properties":[]},"HairSalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"HealthClub":{"extends":"HealthAndBeautyBusiness","properties":[]},"NailSalon":{"extends":"HealthAndBeautyBusiness","properties":[]},"TattooParlor":{"extends":"HealthAndBeautyBusiness","properties":[]},"HomeAndConstructionBusiness":{"extends":"LocalBusiness","properties":[]},"Electrician":{"extends":"HomeAndConstructionBusiness","properties":[]},"GeneralContractor":{"extends":"HomeAndConstructionBusiness","properties":[]},"HVACBusiness":{"extends":"HomeAndConstructionBusiness","properties":[]},"HousePainter":{"extends":"HomeAndConstructionBusiness","properties":[]},"Locksmith":{"extends":"HomeAndConstructionBusiness","properties":[]},"MovingCompany":{"extends":"HomeAndConstructionBusiness","properties":[]},"Plumber":{"extends":"HomeAndConstructionBusiness","properties":[]},"RoofingContractor":{"extends":"HomeAndConstructionBusiness","properties":[]},"InternetCafe":{"extends":"LocalBusiness","properties":[]},"Library":{"extends":"LocalBusiness","properties":[]},"LodgingBusiness":{"extends":"LocalBusiness","properties":[]},"BedAndBreakfast":{"extends":"LodgingBusiness","properties":[]},"Hostel":{"extends":"LodgingBusiness","properties":[]},"Hotel":{"extends":"LodgingBusiness","properties":[]},"Motel":{"extends":"LodgingBusiness","properties":[]},"MedicalOrganization":{"extends":"LocalBusiness","properties":[]},"Dentist":{"extends":"MedicalOrganization","properties":[]},"DiagnosticLab":{"extends":"MedicalOrganization","properties":{"availableTest":{"expectedTypes":["MedicalTest"]}}},"MedicalClinic":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalTherapy","MedicalProcedure","MedicalTest"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"Optician":{"extends":"MedicalOrganization","properties":[]},"Pharmacy":{"extends":"MedicalOrganization","properties":[]},"Physician":{"extends":"MedicalOrganization","properties":{"availableService":{"expectedTypes":["MedicalTherapy","MedicalProcedure","MedicalTest"]},"hospitalAffiliation":{"expectedTypes":["Hospital"]},"medicalSpecialty":{"expectedTypes":["MedicalSpecialty"]}}},"VeterinaryCare":{"extends":"MedicalOrganization","properties":[]},"ProfessionalService":{"extends":"LocalBusiness","properties":[]},"Attorney":{"extends":"ProfessionalService","properties":[]},"Notary":{"extends":"ProfessionalService","properties":[]},"RadioStation":{"extends":"LocalBusiness","properties":[]},"RealEstateAgent":{"extends":"LocalBusiness","properties":[]},"RecyclingCenter":{"extends":"LocalBusiness","properties":[]},"SelfStorage":{"extends":"LocalBusiness","properties":[]},"ShoppingCenter":{"extends":"LocalBusiness","properties":[]},"SportsActivityLocation":{"extends":"LocalBusiness","properties":[]},"BowlingAlley":{"extends":"SportsActivityLocation","properties":[]},"ExerciseGym":{"extends":"SportsActivityLocation","properties":[]},"GolfCourse":{"extends":"SportsActivityLocation","properties":[]},"PublicSwimmingPool":{"extends":"SportsActivityLocation","properties":[]},"SkiResort":{"extends":"SportsActivityLocation","properties":[]},"SportsClub":{"extends":"SportsActivityLocation","properties":[]},"StadiumOrArena":{"extends":"CivicStructure","properties":[]},"TennisComplex":{"extends":"SportsActivityLocation","properties":[]},"Store":{"extends":"LocalBusiness","properties":[]},"BikeStore":{"extends":"Store","properties":[]},"BookStore":{"extends":"Store","properties":[]},"ClothingStore":{"extends":"Store","properties":[]},"ComputerStore":{"extends":"Store","properties":[]},"ConvenienceStore":{"extends":"Store","properties":[]},"DepartmentStore":{"extends":"Store","properties":[]},"ElectronicsStore":{"extends":"Store","properties":[]},"Florist":{"extends":"Store","properties":[]},"FurnitureStore":{"extends":"Store","properties":[]},"GardenStore":{"extends":"Store","properties":[]},"GroceryStore":{"extends":"Store","properties":[]},"HardwareStore":{"extends":"Store","properties":[]},"HobbyShop":{"extends":"Store","properties":[]},"HomeGoodsStore":{"extends":"Store","properties":[]},"JewelryStore":{"extends":"Store","properties":[]},"LiquorStore":{"extends":"Store","properties":[]},"MensClothingStore":{"extends":"Store","properties":[]},"MobilePhoneStore":{"extends":"Store","properties":[]},"MovieRentalStore":{"extends":"Store","properties":[]},"MusicStore":{"extends":"Store","properties":[]},"OfficeEquipmentStore":{"extends":"Store","properties":[]},"OutletStore":{"extends":"Store","properties":[]},"PawnShop":{"extends":"Store","properties":[]},"PetStore":{"extends":"Store","properties":[]},"ShoeStore":{"extends":"Store","properties":[]},"SportingGoodsStore":{"extends":"Store","properties":[]},"TireShop":{"extends":"Store","properties":[]},"ToyStore":{"extends":"Store","properties":[]},"WholesaleStore":{"extends":"Store","properties":[]},"TelevisionStation":{"extends":"LocalBusiness","properties":[]},"TouristInformationCenter":{"extends":"LocalBusiness","properties":[]},"TravelAgency":{"extends":"LocalBusiness","properties":[]},"NGO":{"extends":"Organization","properties":[]},"PerformingGroup":{"extends":"Organization","properties":[]},"DanceGroup":{"extends":"PerformingGroup","properties":[]},"MusicGroup":{"extends":"PerformingGroup","properties":{"album":{"expectedTypes":["MusicAlbum"]},"genre":{"expectedTypes":["Text"]},"track":{"expectedTypes":["ItemList","MusicRecording"]}}},"TheaterGroup":{"extends":"PerformingGroup","properties":[]},"SportsOrganization":{"extends":"Organization","properties":{"sport":{"expectedTypes":["Text","URL"]}}},"SportsTeam":{"extends":"SportsOrganization","properties":{"athlete":{"expectedTypes":["Person"]},"coach":{"expectedTypes":["Person"]}}},"Person":{"extends":"Thing","properties":{"additionalName":{"expectedTypes":["Text"]},"address":{"expectedTypes":["PostalAddress"]},"affiliation":{"expectedTypes":["Organization"]},"alumniOf":{"expectedTypes":["EducationalOrganization"]},"award":{"expectedTypes":["Text"]},"birthDate":{"expectedTypes":["Date"]},"birthPlace":{"expectedTypes":["Place"]},"brand":{"expectedTypes":["Brand","Organization"]},"children":{"expectedTypes":["Person"]},"colleague":{"expectedTypes":["Person"]},"contactPoint":{"expectedTypes":["ContactPoint"]},"deathDate":{"expectedTypes":["Date"]},"deathPlace":{"expectedTypes":["Place"]},"duns":{"expectedTypes":["Text"]},"email":{"expectedTypes":["Text"]},"familyName":{"expectedTypes":["Text"]},"faxNumber":{"expectedTypes":["Text"]},"follows":{"expectedTypes":["Person"]},"gender":{"expectedTypes":["Text"]},"givenName":{"expectedTypes":["Text"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasPOS":{"expectedTypes":["Place"]},"height":{"expectedTypes":["Distance","QuantitativeValue"]},"homeLocation":{"expectedTypes":["ContactPoint","Place"]},"honorificPrefix":{"expectedTypes":["Text"]},"honorificSuffix":{"expectedTypes":["Text"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"jobTitle":{"expectedTypes":["Text"]},"knows":{"expectedTypes":["Person"]},"makesOffer":{"expectedTypes":["Offer"]},"memberOf":{"expectedTypes":["ProgramMembership","Organization"]},"naics":{"expectedTypes":["Text"]},"nationality":{"expectedTypes":["Country"]},"netWorth":{"expectedTypes":["PriceSpecification"]},"owns":{"expectedTypes":["Product","OwnershipInfo"]},"parent":{"expectedTypes":["Person"]},"performerIn":{"expectedTypes":["Event"]},"relatedTo":{"expectedTypes":["Person"]},"seeks":{"expectedTypes":["Demand"]},"sibling":{"expectedTypes":["Person"]},"spouse":{"expectedTypes":["Person"]},"taxID":{"expectedTypes":["Text"]},"telephone":{"expectedTypes":["Text"]},"vatID":{"expectedTypes":["Text"]},"weight":{"expectedTypes":["QuantitativeValue"]},"workLocation":{"expectedTypes":["ContactPoint","Place"]},"worksFor":{"expectedTypes":["Organization"]}}},"Place":{"extends":"Thing","properties":{"address":{"expectedTypes":["PostalAddress"]},"aggregateRating":{"expectedTypes":["AggregateRating"]},"containedIn":{"expectedTypes":["Place"]},"event":{"expectedTypes":["Event"]},"faxNumber":{"expectedTypes":["Text"]},"geo":{"expectedTypes":["GeoCoordinates","GeoShape"]},"globalLocationNumber":{"expectedTypes":["Text"]},"hasMap":{"expectedTypes":["Map","URL"]},"interactionCount":{"expectedTypes":["Text"]},"isicV4":{"expectedTypes":["Text"]},"logo":{"expectedTypes":["ImageObject","URL"]},"openingHoursSpecification":{"expectedTypes":["OpeningHoursSpecification"]},"photo":{"expectedTypes":["ImageObject","Photograph"]},"review":{"expectedTypes":["Review"]},"telephone":{"expectedTypes":["Text"]}}},"AdministrativeArea":{"extends":"Place","properties":[]},"City":{"extends":"AdministrativeArea","properties":[]},"Country":{"extends":"AdministrativeArea","properties":[]},"State":{"extends":"AdministrativeArea","properties":[]},"CivicStructure":{"extends":"Place","properties":{"openingHours":{"expectedTypes":["Duration"]}}},"Airport":{"extends":"CivicStructure","properties":{"iataCode":{"expectedTypes":["Text"]},"icaoCode":{"expectedTypes":["Text"]}}},"Aquarium":{"extends":"CivicStructure","properties":[]},"Beach":{"extends":"CivicStructure","properties":[]},"BusStation":{"extends":"CivicStructure","properties":[]},"BusStop":{"extends":"CivicStructure","properties":[]},"Campground":{"extends":"CivicStructure","properties":[]},"Cemetery":{"extends":"CivicStructure","properties":[]},"Crematorium":{"extends":"CivicStructure","properties":[]},"EventVenue":{"extends":"CivicStructure","properties":[]},"GovernmentBuilding":{"extends":"CivicStructure","properties":[]},"CityHall":{"extends":"GovernmentBuilding","properties":[]},"Courthouse":{"extends":"GovernmentBuilding","properties":[]},"DefenceEstablishment":{"extends":"GovernmentBuilding","properties":[]},"Embassy":{"extends":"GovernmentBuilding","properties":[]},"LegislativeBuilding":{"extends":"GovernmentBuilding","properties":[]},"Museum":{"extends":"CivicStructure","properties":[]},"MusicVenue":{"extends":"CivicStructure","properties":[]},"Park":{"extends":"CivicStructure","properties":[]},"ParkingFacility":{"extends":"CivicStructure","properties":[]},"PerformingArtsTheater":{"extends":"CivicStructure","properties":[]},"PlaceOfWorship":{"extends":"CivicStructure","properties":[]},"BuddhistTemple":{"extends":"PlaceOfWorship","properties":[]},"CatholicChurch":{"extends":"PlaceOfWorship","properties":[]},"Church":{"extends":"PlaceOfWorship","properties":[]},"HinduTemple":{"extends":"PlaceOfWorship","properties":[]},"Mosque":{"extends":"PlaceOfWorship","properties":[]},"Synagogue":{"extends":"PlaceOfWorship","properties":[]},"Playground":{"extends":"CivicStructure","properties":[]},"RVPark":{"extends":"CivicStructure","properties":[]},"SubwayStation":{"extends":"CivicStructure","properties":[]},"TaxiStand":{"extends":"CivicStructure","properties":[]},"TrainStation":{"extends":"CivicStructure","properties":[]},"Zoo":{"extends":"CivicStructure","properties":[]},"Landform":{"extends":"Place","properties":[]},"BodyOfWater":{"extends":"Landform","properties":[]},"Canal":{"extends":"BodyOfWater","properties":[]},"LakeBodyOfWater":{"extends":"BodyOfWater","properties":[]},"OceanBodyOfWater":{"extends":"BodyOfWater","properties":[]},"Pond":{"extends":"BodyOfWater","properties":[]},"Reservoir":{"extends":"BodyOfWater","properties":[]},"RiverBodyOfWater":{"extends":"BodyOfWater","properties":[]},"SeaBodyOfWater":{"extends":"BodyOfWater","properties":[]},"Waterfall":{"extends":"BodyOfWater","properties":[]},"Continent":{"extends":"Landform","properties":[]},"Mountain":{"extends":"Landform","properties":[]},"Volcano":{"extends":"Landform","properties":[]},"LandmarksOrHistoricalBuildings":{"extends":"Place","properties":[]},"Residence":{"extends":"Place","properties":[]},"ApartmentComplex":{"extends":"Residence","properties":[]},"GatedResidenceCommunity":{"extends":"Residence","properties":[]},"SingleFamilyResidence":{"extends":"Residence","properties":[]},"TouristAttraction":{"extends":"Place","properties":[]},"Product":{"extends":"Thing","properties":{"aggregateRating":{"expectedTypes":["AggregateRating"]},"audience":{"expectedTypes":["Audience"]},"brand":{"expectedTypes":["Brand","Organization"]},"color":{"expectedTypes":["Text"]},"depth":{"expectedTypes":["Distance","QuantitativeValue"]},"gtin13":{"expectedTypes":["Text"]},"gtin14":{"expectedTypes":["Text"]},"gtin8":{"expectedTypes":["Text"]},"height":{"expectedTypes":["Distance","QuantitativeValue"]},"isAccessoryOrSparePartFor":{"expectedTypes":["Product"]},"isConsumableFor":{"expectedTypes":["Product"]},"isRelatedTo":{"expectedTypes":["Product"]},"isSimilarTo":{"expectedTypes":["Product"]},"itemCondition":{"expectedTypes":["OfferItemCondition"]},"logo":{"expectedTypes":["ImageObject","URL"]},"manufacturer":{"expectedTypes":["Organization"]},"model":{"expectedTypes":["Text","ProductModel"]},"mpn":{"expectedTypes":["Text"]},"offers":{"expectedTypes":["Offer"]},"productID":{"expectedTypes":["Text"]},"releaseDate":{"expectedTypes":["Date"]},"review":{"expectedTypes":["Review"]},"sku":{"expectedTypes":["Text"]},"weight":{"expectedTypes":["QuantitativeValue"]},"width":{"expectedTypes":["Distance","QuantitativeValue"]}}},"IndividualProduct":{"extends":"Product","properties":{"serialNumber":{"expectedTypes":["Text"]}}},"ProductModel":{"extends":"Product","properties":{"isVariantOf":{"expectedTypes":["ProductModel"]},"predecessorOf":{"expectedTypes":["ProductModel"]},"successorOf":{"expectedTypes":["ProductModel"]}}},"SomeProducts":{"extends":"Product","properties":{"inventoryLevel":{"expectedTypes":["QuantitativeValue"]}}},"Vehicle":{"extends":"Product","properties":[]},"Car":{"extends":"Vehicle","properties":[]}} \ No newline at end of file diff --git a/tests/unit/suites/libraries/joomla/microdata/JMicrodataTest.php b/tests/unit/suites/libraries/joomla/microdata/JMicrodataTest.php index 1f16453b8555a..4418b2481e569 100644 --- a/tests/unit/suites/libraries/joomla/microdata/JMicrodataTest.php +++ b/tests/unit/suites/libraries/joomla/microdata/JMicrodataTest.php @@ -48,14 +48,14 @@ public function setUp() * Test the default settings * * @return void - * + * * @since 3.2 */ public function testDefaults() { $this->handler = new JMicrodata; - // Test that the default Type is Thing + // Test that the default Type is 'Thing' $this->assertEquals($this->handler->getType(), $this->defaultType); $this->assertClassHasAttribute('types', 'JMicrodata'); @@ -72,10 +72,10 @@ public function testSetType() { $this->handler->setType('Article'); - // Test if the current Type is Article + // Test if the current Type is 'Article' $this->assertEquals($this->handler->getType(), 'Article'); - // Test if the Type fallbacks to Thing Type + // Test if the Type fallbacks to 'Thing' Type $this->handler->setType('TypeThatDoesNotExist'); $this->assertEquals($this->handler->getType(), $this->defaultType); } @@ -94,13 +94,13 @@ public function testFallback() $this->assertEquals($this->handler->getFallbackType(), 'Article'); $this->assertEquals($this->handler->getFallbackProperty(), 'articleBody'); - // Test if Fallback Property fallbacks isn't available in the Type - $this->handler->fallback('Article', 'anUnanvailableProperty'); + // Test if the Fallback Property fallbacks when it isn't available in the $Type + $this->handler->fallback('Article', 'anUnavailableProperty'); $this->assertEquals($this->handler->getFallbackType(), 'Article'); $this->assertNull($this->handler->getFallbackProperty()); - // Test if Fallback Type fallbacks to Thing Type - $this->handler->fallback('anUnanvailableType', 'anUnanvailableProperty'); + // Test if the Fallback Type fallbacks to the 'Thing' Type + $this->handler->fallback('anUnavailableType', 'anUnavailableProperty'); $this->assertEquals($this->handler->getFallbackType(), 'Thing'); $this->assertNull($this->handler->getFallbackProperty()); } @@ -122,7 +122,7 @@ public function testDisplay() $this->assertEquals($this->handler->display(), ''); - // Test if the params are reseted after display() + // Test if the params are reseted after the display() function $this->handler->setType('Article') ->content($content) ->property('name') @@ -132,116 +132,136 @@ public function testDisplay() $this->assertNull($this->handler->getFallbackProperty()); $this->assertNull($this->handler->getFallbackType()); $this->assertNull($this->handler->getProperty()); - $this->assertEmpty($this->handler->getContent()); + $this->assertNull($this->handler->getContent()); // Test for a simple display - $responce = $this->handler + $response = $this->handler ->property('url') ->display(); - $this->assertEquals($responce, "itemprop='url'"); + $this->assertEquals($response, "itemprop='url'"); - // Test for a simple display with content - $responce = $this->handler + // Test for a simple display with $content + $response = $this->handler ->property('url') ->content($content) ->display(); - $this->assertEquals($responce, ""); + $this->assertEquals($response, ""); - // Test for a simple display if the content is empty '' - $responce = $this->handler->enable(true) + // Test for a simple display if the $content is empty '' + $response = $this->handler->enable(true) ->content('') ->property('name') ->display(); - $this->assertEquals($responce, ""); + $this->assertEquals($response, ""); - // Test for a simple nested display - $responce = $this->handler + // Test for a simple 'nested' display + $response = $this->handler ->property('author') ->display(); $this->assertEquals( - $responce, + $response, "itemprop='author' itemscope itemtype='https://schema.org/Organization'" ); - // Test for a nested display with content - $responce = $this->handler + // Test for a 'nested' display with $content + $response = $this->handler ->property('author') ->content($content) ->display(); $this->assertEquals( - $responce, + $response, "" ); - // Test for a nested display with content and Fallback - $responce = $this->handler + // Test for a 'nested' display with $content and $Fallback + $response = $this->handler ->fallback('Person', 'name') ->property('author') ->content($content) ->display(); $this->assertEquals( - $responce, + $response, "" ); - // Test for a nested display with Fallback and without content - $responce = $this->handler + // Test for a 'nested' display with $Fallback and without $content + $response = $this->handler ->fallback('Person', 'name') ->property('author') ->display(); $this->assertEquals( - $responce, + $response, "itemprop='author' itemscope itemtype='https://schema.org/Person' itemprop='name'" ); - // Test for a meta display without content - $responce = $this->handler + // Test for a 'meta' display without $content + $response = $this->handler ->property('datePublished') ->display(); $this->assertEquals( - $responce, + $response, "itemprop='datePublished'" ); - // Test for a meta display with content + // Test for a 'meta' display with $content $content = '01 January 2011'; - $responce = $this->handler + $response = $this->handler ->property('datePublished') ->content($content) ->display(); $this->assertEquals( - $responce, + $response, "$content" ); - // Test if the JMicrodata is disabled - $responce = $this->handler->enable(false) + // Test for a 'meta' display with human $content and $machineContent + $machineContent = "2011-01-01T00:00:00+00:00"; + $response = $this->handler + ->property('datePublished') + ->content($content, $machineContent) + ->display(); + + $this->assertEquals( + $response, + "$content" + ); + + // Test when if fallbacks that the library returns an empty string as specified + $response = $this->handler + ->content('en-GB') + ->property('doesNotExist') + ->display('meta', true); + + $this->assertEquals($response, ''); + + // Test if the library is disabled + $response = $this->handler->enable(false) ->content($content) ->fallback('Article', 'about') ->property('datePublished') ->display(); - $this->assertEquals($responce, $content); + $this->assertEquals($response, $content); - // Test if JMicrodata is disabled and have a $content it must return an empty string - $responce = $this->handler->enable(false) + // Test if the library is disabled and if it have a $content it must return an empty string + $response = $this->handler->enable(false) ->content('en-GB') ->property('inLanguage') ->fallback('Language', 'name') ->display('meta', true); - $this->assertEquals($responce, ''); + $this->assertEquals($response, ''); - // Test if the params are reseted after display(), if the library is disabled + // Test if the params are reseted after the display() function, if the library is disabled $this->assertNull($this->handler->getFallbackProperty()); $this->assertNull($this->handler->getFallbackType()); $this->assertNull($this->handler->getProperty()); @@ -261,60 +281,60 @@ public function testDisplayFallbacks() $this->handler->enable(true)->setType('Article'); $content = 'anything'; - // Test without content if fallbacks, the Property isn't available in the current Type - $responce = $this->handler - ->property('anUnanvailableProperty') + // Test without $content if fallbacks, the $Property isn't available in the current Type + $response = $this->handler + ->property('anUnavailableProperty') ->fallback('Article', 'about') ->display(); $this->assertEquals( - $responce, + $response, "itemscope itemtype='https://schema.org/Article' itemprop='about'" ); - // Test wit content if fallbacks, the Property isn't available in the current Type - $responce = $this->handler + // Test with $content if fallbacks, the $Property isn't available in the current Type + $response = $this->handler ->content($content) - ->property('anUnanvailableProperty') + ->property('anUnavailableProperty') ->fallback('Article', 'about') ->display(); $this->assertEquals( - $responce, + $response, "$content" ); - // Test if fallbacks, the Property isn't available in the current and fallback Type - $responce = $this->handler - ->property('anUnanvailableProperty') - ->fallback('Article', 'anUnanvailableProperty') + // Test if fallbacks, the $Property isn't available in the current and fallback Type + $response = $this->handler + ->property('anUnavailableProperty') + ->fallback('Article', 'anUnavailableProperty') ->display(); $this->assertEquals( - $responce, + $response, "itemscope itemtype='https://schema.org/Article'" ); - // Test with content if fallbacks, the Property isn't available in the current and fallback Type - $responce = $this->handler + // Test with $content if fallbacks, the $Property isn't available in the current $Type + $response = $this->handler ->content($content) - ->property('anUnanvailableProperty') + ->property('anUnavailableProperty') ->fallback('Article', 'datePublished') ->display(); $this->assertEquals( - $responce, + $response, "" ); - // Test withtout content if fallbacks, the Property isn't available in the current and fallback Type - $responce = $this->handler - ->property('anUnanvailableProperty') + // Test without $content if fallbacks, the $Property isn't available in the current $Type + $response = $this->handler + ->property('anUnavailableProperty') ->fallback('Article', 'datePublished') ->display(); $this->assertEquals( - $responce, + $response, "itemscope itemtype='https://schema.org/Article' itemprop='datePublished'" ); } @@ -329,85 +349,84 @@ public function testDisplayFallbacks() public function testDisplayTypes() { // Setup - $type = 'Article'; - $content = 'microdata'; - $property = 'datePublished'; - + $type = 'Article'; + $content = 'anything'; + $property = 'datePublished'; $microdata = $this->handler; $microdata->enable(true)->setType($type); - // Display Type: Inline - $responce = $microdata->content($content) + // Test Display Type: 'inline' + $response = $microdata->content($content) ->property($property) ->display('inline'); $this->assertEquals( - $responce, + $response, "itemprop='$property'" ); - // Display Type: div - $responce = $microdata->content($content) + // Test Display Type: 'div' + $response = $microdata->content($content) ->property($property) ->display('div'); $this->assertEquals( - $responce, + $response, "
$content
" ); - // Display Type: div without $content - $responce = $microdata->property($property) + // Test Display Type: 'div' without $content + $response = $microdata->property($property) ->display('div'); $this->assertEquals( - $responce, + $response, "
" ); - // Display Type: span - $responce = $microdata->content($content) + // Test Display Type: 'span' + $response = $microdata->content($content) ->property($property) ->display('span'); $this->assertEquals( - $responce, + $response, "$content" ); - // Display Type: span without $content - $responce = $microdata + // Test Display Type: 'span' without $content + $response = $microdata ->property($property) ->display('span'); $this->assertEquals( - $responce, + $response, "" ); - // Display Type: meta - $responce = $microdata->content($content) + // Test Display Type: 'meta' + $response = $microdata->content($content) ->property($property) ->display('meta'); $this->assertEquals( - $responce, + $response, "" ); - // Display Type: meta without $content - $responce = $microdata - ->property($property) - ->display('meta'); + // Test Display Type: 'meta' without $content + $response = $microdata + ->property($property) + ->display('meta'); $this->assertEquals( - $responce, + $response, "" ); } /** - * Test the isTypeAvailabe() function + * Test the isTypeAvailable() function * * @return void * @@ -415,12 +434,12 @@ public function testDisplayTypes() */ public function testIsTypeAvailable() { - // Test if the method return true with an available Type + // Test if the function returns 'true' with an available $Type $this->assertTrue( JMicrodata::isTypeAvailable('Article') ); - // Test if the method return false with an unavailable Type + // Test if the function returns 'false' with an unavailable $Type $this->assertFalse( JMicrodata::isTypeAvailable('SomethingThatDoesNotExist') ); @@ -438,22 +457,22 @@ public function testIsPropertyInType() // Setup $type = 'Article'; - // Test a Property that is available in the Type + // Test a $Property that is available in the $Type $this->assertTrue( JMicrodata::isPropertyInType($type, 'articleBody') ); - // Test an inherit Property that is available in the Type + // Test an inherit $Property that is available in the $Type $this->assertTrue( JMicrodata::isPropertyInType($type, 'about') ); - // Test a Property that is unavailable in the Type + // Test a $Property that is unavailable in the $Type $this->assertFalse( JMicrodata::isPropertyInType($type, 'aPropertyThatDoesNotExist') ); - // Test a Property in an unanvailable Type + // Test a Property in an unavailable Type $this->assertFalse( JMicrodata::isPropertyInType('aTypeThatDoesNotExist', 'aPropertyThatDoesNotExist') ); @@ -505,16 +524,16 @@ public function testDisplayScope() $this->handler->enable(true) ->setType($type); - // Test a displayScope() when microdata are enabled + // Test the displayScope() function when the library is enabled $this->assertEquals( $this->handler->displayScope(), "itemscope itemtype='https://schema.org/$type'" ); - // Test a displayScope() when microdata are disabled + // Test the displayScope() function when the library is disabled $this->assertEquals( - $this->handler->displayScope(), - "itemscope itemtype='https://schema.org/$type'" + $this->handler->enable(false)->displayScope(), + "" ); } @@ -527,11 +546,11 @@ public function testDisplayScope() */ public function testGetAvailableTypes() { - $responce = JMicrodata::getAvailableTypes(); + $response = JMicrodata::getAvailableTypes(); - $this->assertGreaterThan(500, count($responce)); - $this->assertNotEmpty($responce); - $this->assertTrue(in_array('Thing', $responce)); + $this->assertGreaterThan(500, count($response)); + $this->assertNotEmpty($response); + $this->assertTrue(in_array('Thing', $response)); } /** @@ -543,8 +562,8 @@ public function testGetAvailableTypes() */ public function testHtmlMeta() { - $scope = 'Article'; - $content = 'microdata'; + $scope = 'Article'; + $content = 'anything'; $property = 'datePublished'; // Test with all params @@ -553,7 +572,7 @@ public function testHtmlMeta() "" ); - // Test with the inverse mode + // Test with the $inverse mode $this->assertEquals( JMicrodata::htmlMeta($content, $property, $scope, true), "" @@ -576,8 +595,8 @@ public function testHtmlMeta() public function testHtmlDiv() { // Setup - $scope = 'Article'; - $content = 'microdata'; + $scope = 'Article'; + $content = 'microdata'; $property = 'about'; // Test with all params @@ -586,7 +605,7 @@ public function testHtmlDiv() "
$content
" ); - // Test with the inverse mode + // Test with the $inverse mode $this->assertEquals( JMicrodata::htmlDiv($content, $property, $scope, true), "
$content
" @@ -604,7 +623,7 @@ public function testHtmlDiv() "
$content
" ); - // Test withoud the $scope, $property + // Test without the $scope, $property $this->assertEquals( JMicrodata::htmlDiv($content), "
$content
" @@ -621,8 +640,8 @@ public function testHtmlDiv() public function testHtmlSpan() { // Setup - $scope = 'Article'; - $content = 'microdata'; + $scope = 'Article'; + $content = 'anything'; $property = 'about'; // Test with all params @@ -649,7 +668,7 @@ public function testHtmlSpan() "$content" ); - // Test withoud the $scope, $property + // Test without the $scope, $property $this->assertEquals( JMicrodata::htmlSpan($content), "$content" From 94d0b38feb0cd795b67d21d92f22cf5b6fecc1e6 Mon Sep 17 00:00:00 2001 From: wilsonge Date: Tue, 17 Mar 2015 00:51:38 +0000 Subject: [PATCH 004/104] Simplify Constructor --- libraries/cms/ucm/content.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libraries/cms/ucm/content.php b/libraries/cms/ucm/content.php index aea9d7f36f81c..840fab30eceb2 100644 --- a/libraries/cms/ucm/content.php +++ b/libraries/cms/ucm/content.php @@ -43,11 +43,7 @@ class JUcmContent extends JUcmBase */ public function __construct(JTableInterface $table = null, $alias = null, JUcmType $type = null) { - // Setup dependencies. - $input = JFactory::getApplication()->input; - $this->alias = isset($alias) ? $alias : $input->get('option') . '.' . $input->get('view'); - - $this->type = isset($type) ? $type : $this->getType(); + parent::__construct($alias, $type); if ($table) { From a0b6dca7faaad9f2ef599620053f2667ce7dd02a Mon Sep 17 00:00:00 2001 From: wilsonge Date: Tue, 17 Mar 2015 00:52:32 +0000 Subject: [PATCH 005/104] Ensure the existing type is returned if set --- libraries/cms/ucm/base.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/cms/ucm/base.php b/libraries/cms/ucm/base.php index a05a496c1a7aa..a61d0064b7e58 100644 --- a/libraries/cms/ucm/base.php +++ b/libraries/cms/ucm/base.php @@ -106,9 +106,12 @@ protected function store($data, JTableInterface $table = null, $primaryKey = nul */ public function getType() { - $type = new JUcmType($this->alias); + if (!$this->type) + { + $this->type = new JUcmType($this->alias); + } - return $type; + return $this->type; } /** From f4e6e2a1f158f26b41ad9c428ab2f8874e048eda Mon Sep 17 00:00:00 2001 From: wilsonge Date: Wed, 8 Jul 2015 12:38:32 +0100 Subject: [PATCH 006/104] Add create table syntax for mysqli database importer --- libraries/joomla/database/importer/mysqli.php | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/libraries/joomla/database/importer/mysqli.php b/libraries/joomla/database/importer/mysqli.php index f51614d2f54ec..94cb072d5dc66 100644 --- a/libraries/joomla/database/importer/mysqli.php +++ b/libraries/joomla/database/importer/mysqli.php @@ -41,6 +41,49 @@ public function check() return $this; } + /** + * Get the SQL syntax to add a table. + * + * @param SimpleXMLElement $table The table information. + * + * @return string + * + * @since 11.1 + * @throws RuntimeException + */ + protected function xmlToCreate(SimpleXMLElement $table) + { + $existingTables = $this->db->getTableList(); + $tableName = (string) $table['name']; + + if (in_array($tableName, $existingTables)) + { + throw new RuntimeException('The table you are trying to create already exists'); + } + + $createTableStatement = 'CREATE TABLE ' . $this->db->quoteName($tableName) . ' ('; + + foreach ($table->xpath('field') as $field) + { + $createTableStatement .= $this->getColumnSQL($field) . ', '; + } + + $newLookup = $this->getKeyLookup($table->xpath('key')); + + // Loop through each key in the new structure. + foreach ($newLookup as $key) + { + $createTableStatement .= $this->getKeySQL($key) . ', '; + } + + // Remove the comma after the last key + $createTableStatement = rtrim($createTableStatement, ', '); + + $createTableStatement .= ')'; + + return $createTableStatement; + } + /** * Get the SQL syntax to add a column. * From 4e4a7605d818283449e5c0681b1dd8dff6d294db Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 19:18:36 +0100 Subject: [PATCH 007/104] Refactor the form layout to make use of the renderField method The following changes were made to this file, starting from the top: - Removed the error-handle code block at the top that seemed to be left over from Joomla! 1.6 - Added the well CSS class suffix to the form to match the output / markup of com_users.registration and login - Rewritten the foreach loop to fetch the fieldset and field information from the xml file and make use of the renderField method - Adjusted the markup containing the button and hidden field/s to match the output / markup of com_users.registration and login --- .../views/contact/tmpl/default_form.php | 54 ++++++++----------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/components/com_contact/views/contact/tmpl/default_form.php b/components/com_contact/views/contact/tmpl/default_form.php index 23055078ca3f8..93a817fa454b3 100644 --- a/components/com_contact/views/contact/tmpl/default_form.php +++ b/components/com_contact/views/contact/tmpl/default_form.php @@ -9,44 +9,31 @@ defined('_JEXEC') or die; +use \Joomla\String\StringHelper; + JHtml::_('behavior.keepalive'); JHtml::_('behavior.formvalidator'); - -if (isset($this->error)) : ?> -
- error; ?> -
- - +?>
-
-
- - - form->getFieldsets() as $fieldset) : ?> - form->getFieldset($fieldset->name) as $field) : ?> - name === 'contact_email_copy' && !$this->params->get('show_email_copy')) : ?> - + + form->getFieldsets() as $fieldset): ?> + form->getFieldset($fieldset->name); ?> + +
+ label) && StringHelper::strlen($legend = trim(JText::_($fieldset->label)))) : ?> + -
- hidden) : ?> -
- input; ?> -
- -
- label; ?> - required && $field->type != 'Spacer') : ?> - - -
-
input; ?>
+ + name === 'contact_email_copy' && !$this->params->get('show_email_copy')) : ?> + -
- - - -
+ renderField(); ?> + +
+ + +
+
@@ -54,6 +41,7 @@
+
From 91c01f5de9804e44ed9b5be58c72ec5b38374ccd Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 20:40:02 +0100 Subject: [PATCH 008/104] Remove unnecessary jimport and unused "com_media" params The following changes were made to this file, starting from the top: - Removed the com_media variable assignment since there seem to be no reference where this was used - Removed unnecessary jimport for jhtml bootstrap --- components/com_contact/views/contact/tmpl/default.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/components/com_contact/views/contact/tmpl/default.php b/components/com_contact/views/contact/tmpl/default.php index ccc562678f939..65611a55eabef 100644 --- a/components/com_contact/views/contact/tmpl/default.php +++ b/components/com_contact/views/contact/tmpl/default.php @@ -8,12 +8,8 @@ */ defined('_JEXEC') or die; - -$cparams = JComponentHelper::getParams('com_media'); - -jimport('joomla.html.html.bootstrap'); ?> -
+
params->get('show_page_heading')) : ?>

escape($this->params->get('page_heading')); ?> From bfd6c4380244792eb578fbe1090fe391cce44f92 Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 20:57:44 +0100 Subject: [PATCH 009/104] Add component specific renderfield JLayout override This adds a component specific renderfield JLayout override. The "optional" addition to the label for required fields was moved from the com_contact form layout in here to be able to use the renderField method in the layout file. --- .../layouts/joomla/form/renderfield.php | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 components/com_contact/layouts/joomla/form/renderfield.php diff --git a/components/com_contact/layouts/joomla/form/renderfield.php b/components/com_contact/layouts/joomla/form/renderfield.php new file mode 100644 index 0000000000000..a0b789ee424a3 --- /dev/null +++ b/components/com_contact/layouts/joomla/form/renderfield.php @@ -0,0 +1,41 @@ + +
> + +
+ + + + +
+ +
+
From 6b9ca1d15fab288e6143cbe7250900eadd5de0e0 Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 21:02:11 +0100 Subject: [PATCH 010/104] Change contact form fieldset label to match the com_users schema Change contact form fieldset label to match the com_users schema and add component specific "* Requied field" "constant" --- language/en-GB/en-GB.com_contact.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/language/en-GB/en-GB.com_contact.ini b/language/en-GB/en-GB.com_contact.ini index 826042703ec10..ecc50744b34b9 100644 --- a/language/en-GB/en-GB.com_contact.ini +++ b/language/en-GB/en-GB.com_contact.ini @@ -3,14 +3,13 @@ ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 - COM_CONTACT_ADDRESS="Address" COM_CONTACT_ARTICLES_HEADING="Contact's articles" COM_CONTACT_CAPTCHA_LABEL="Captcha" COM_CONTACT_CAPTCHA_DESC="Type in the textbox what you see in the image." COM_CONTACT_CAT_NUM="# of Contacts :" COM_CONTACT_CONTACT_EMAIL_A_COPY_DESC="Sends a copy of the message to the address you have supplied." -COM_CONTACT_CONTACT_EMAIL_A_COPY_LABEL="Send Copy to Yourself" +COM_CONTACT_CONTACT_EMAIL_A_COPY_LABEL="Send copy to yourself" COM_CONTACT_CONTACT_EMAIL_NAME_DESC="Your name." COM_CONTACT_CONTACT_EMAIL_NAME_LABEL="Name" COM_CONTACT_CONTACT_ENTER_MESSAGE_DESC="Enter your message here." @@ -39,7 +38,7 @@ COM_CONTACT_ENQUIRY_TEXT="This is an enquiry email via %s from:" COM_CONTACT_ERROR_CONTACT_NOT_FOUND="Contact not found" COM_CONTACT_FAX="Fax" COM_CONTACT_FAX_NUMBER="Fax: %s" -COM_CONTACT_FORM_LABEL="Send an Email. All fields with an asterisk (*) are required." +COM_CONTACT_CONTACT_DEFAULT_LABEL="Send an Email" COM_CONTACT_FORM_NC="Please make sure the form is complete and valid." COM_CONTACT_IMAGE_DETAILS="Contact image" COM_CONTACT_LINKS="Links" @@ -49,6 +48,7 @@ COM_CONTACT_MOBILE_NUMBER="Mobile: %s" COM_CONTACT_NO_CONTACTS="There are no Contacts to display" COM_CONTACT_NOT_MORE_THAN_ONE_EMAIL_ADDRESS="You can't enter more than one email address." COM_CONTACT_NUM_ITEMS="Contact Count:" +COM_CONTACT_CONTACT_REQUIRED="* Required field" COM_CONTACT_OPTIONAL="(optional)" COM_CONTACT_OTHER_INFORMATION="Miscellaneous Information" COM_CONTACT_POSITION="Position" From 202e8386b2a1327f42a01f2a418dd6ea7a5e0596 Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 21:10:20 +0100 Subject: [PATCH 011/104] Add spacer and update fieldset label format to match what is used in com_users Besides reordering the label and description attributes in this file which, to be honest, was more about finding peace and satisfying my OCD, I've changed the fieldset label to match the format that is used in com_users and added a spacer label to output the *Required field hint for the form. --- .../com_contact/models/forms/contact.xml | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/components/com_contact/models/forms/contact.xml b/components/com_contact/models/forms/contact.xml index 1500d002a6ab1..1ec9116477bee 100644 --- a/components/com_contact/models/forms/contact.xml +++ b/components/com_contact/models/forms/contact.xml @@ -1,55 +1,65 @@
-
- + + - - - - -
-
\ No newline at end of file + From ebd0f124f3e41a724a89c46f76e5795a2bc1c51b Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 21:13:57 +0100 Subject: [PATCH 012/104] Remove whitespace in renderField method --- libraries/joomla/form/field.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/joomla/form/field.php b/libraries/joomla/form/field.php index 6fa2b8754a08a..f1223bc0c6943 100644 --- a/libraries/joomla/form/field.php +++ b/libraries/joomla/form/field.php @@ -923,9 +923,9 @@ public function renderField($options = array()) $options['hiddenLabel'] = true; } - if ($showon = $this->getAttribute('showon')) + if (($showon = $this->getAttribute('showon'))) { - $showon = explode(':', $showon, 2); + $showon = explode(':', $showon, 2); $options['class'] .= ' showon_' . implode(' showon_', explode(',', $showon[1])); $id = $this->getName($showon[0]); $id = $this->multiple ? str_replace('[]', '', $id) : $id; From 92467ace89a91115fa42b1e25e975005528ca43e Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 21:16:21 +0100 Subject: [PATCH 013/104] Remove whitespace / blank lines --- layouts/joomla/form/field/radio.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/layouts/joomla/form/field/radio.php b/layouts/joomla/form/field/radio.php index 6962914a5b2b8..904a029332198 100644 --- a/layouts/joomla/form/field/radio.php +++ b/layouts/joomla/form/field/radio.php @@ -52,10 +52,8 @@ * %4 = any other attributes */ $format = ''; - -$alt = preg_replace('/[^a-zA-Z0-9_\-]/', '_', $name); +$alt = preg_replace('/[^a-zA-Z0-9_\-]/', '_', $name); ?> -
From fe6f57ac161a63fed3dcab0f0a5ff5efcacd794d Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 21:20:42 +0100 Subject: [PATCH 014/104] Introduce extract($displayData); to make the variables more accessible These changes allow a more direct access to input, label and the options --- layouts/joomla/form/renderfield.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/layouts/joomla/form/renderfield.php b/layouts/joomla/form/renderfield.php index 72a3b76982f71..4e8895b1e0fb1 100644 --- a/layouts/joomla/form/renderfield.php +++ b/layouts/joomla/form/renderfield.php @@ -9,6 +9,8 @@ defined('_JEXEC') or die; +extract($displayData); + /** * Layout variables * --------------------- @@ -17,19 +19,18 @@ * $input : (string) The input field html code */ -if (!empty($displayData['options']['showonEnabled'])) +if (!empty($options['showonEnabled'])) { JHtml::_('jquery.framework'); JHtml::_('script', 'jui/cms.js', false, true); } -$class = empty($displayData['options']['class']) ? "" : " " . $displayData['options']['class']; -$rel = empty($displayData['options']['rel']) ? "" : " " . $displayData['options']['rel']; +$class = empty($options['class']) ? '' : ' ' . $options['class']; +$rel = empty($options['rel']) ? '' : ' ' . $options['rel']; ?> -
> - -
+ +
-
+
From e624050d75137b530ad47bab963dc01b69205634 Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 21:22:57 +0100 Subject: [PATCH 015/104] Introduce extract($displayData); to make the variables more accessible As well es for the renderfield.php the proposed changes allow a more direct access the the variables used in this file --- layouts/joomla/form/renderlabel.php | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/layouts/joomla/form/renderlabel.php b/layouts/joomla/form/renderlabel.php index 0520c9f481a9e..730337c2ae5c4 100644 --- a/layouts/joomla/form/renderlabel.php +++ b/layouts/joomla/form/renderlabel.php @@ -9,6 +9,8 @@ defined('_JEXEC') or die; +extract($displayData); + /** * Layout variables * --------------------- @@ -20,31 +22,24 @@ * $position : (string) The tooltip position. Bottom for alias */ -$text = $displayData['text']; -$desc = $displayData['description']; -$for = $displayData['for']; -$req = $displayData['required']; -$classes = array_filter((array) $displayData['classes']); -$position = $displayData['position']; +$classes = array_filter((array) $classes); $id = $for . '-lbl'; $title = ''; -// If a description is specified, use it to build a tooltip. -if (!empty($desc)) +if (!empty($description)) { JHtml::_('bootstrap.tooltip'); $classes[] = 'hasTooltip'; - $title = ' title="' . JHtml::tooltipText(trim($text, ':'), $desc, 0) . '"'; + $title = ' title="' . JHtml::tooltipText(trim($text, ':'), $description, 0) . '"'; } -// If required, there's a class for that. -if ($req) +if ($required) { $classes[] = 'required'; } ?> \ No newline at end of file +  * + From e119c7f581b183f5293e61848de5d184fba8c64d Mon Sep 17 00:00:00 2001 From: matrikular Date: Tue, 17 Nov 2015 23:19:33 +0100 Subject: [PATCH 016/104] Add whitespace to fieldset --- components/com_contact/views/contact/tmpl/default_form.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/com_contact/views/contact/tmpl/default_form.php b/components/com_contact/views/contact/tmpl/default_form.php index 93a817fa454b3..7cc18157c1039 100644 --- a/components/com_contact/views/contact/tmpl/default_form.php +++ b/components/com_contact/views/contact/tmpl/default_form.php @@ -16,7 +16,7 @@ ?>
- form->getFieldsets() as $fieldset): ?> + form->getFieldsets() as $fieldset) : ?> form->getFieldset($fieldset->name); ?>
From aae307c8aa66fc5e965b215918942394f2eb20d3 Mon Sep 17 00:00:00 2001 From: matrikular Date: Fri, 20 Nov 2015 00:39:31 +0100 Subject: [PATCH 017/104] Remove StringHelper dependency and add check to fieldset rendering --- .../com_contact/views/contact/tmpl/default_form.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/components/com_contact/views/contact/tmpl/default_form.php b/components/com_contact/views/contact/tmpl/default_form.php index 7cc18157c1039..efc0024d8f9aa 100644 --- a/components/com_contact/views/contact/tmpl/default_form.php +++ b/components/com_contact/views/contact/tmpl/default_form.php @@ -9,18 +9,21 @@ defined('_JEXEC') or die; -use \Joomla\String\StringHelper; - JHtml::_('behavior.keepalive'); JHtml::_('behavior.formvalidator'); + +$captchaEnabled = (JFactory::getApplication()->get('captcha', '0') !== '0' && !empty(JPluginHelper::getPlugin('captcha'))); ?>
- form->getFieldsets() as $fieldset) : ?> + form->getFieldsets() as $fieldset): ?> + name === 'captcha' && !$captchaEnabled) : ?> + + form->getFieldset($fieldset->name); ?>
- label) && StringHelper::strlen($legend = trim(JText::_($fieldset->label)))) : ?> + label) && strlen($legend = trim(JText::_($fieldset->label)))) : ?> From a16cc179fbb7d2d4f8e8253c70e4d9ff9143c24d Mon Sep 17 00:00:00 2001 From: matrikular Date: Fri, 20 Nov 2015 20:50:43 +0100 Subject: [PATCH 018/104] Change method of how to determine if captcha was enabled --- .../com_contact/views/contact/tmpl/default_form.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/components/com_contact/views/contact/tmpl/default_form.php b/components/com_contact/views/contact/tmpl/default_form.php index efc0024d8f9aa..e30e963ff73e6 100644 --- a/components/com_contact/views/contact/tmpl/default_form.php +++ b/components/com_contact/views/contact/tmpl/default_form.php @@ -12,7 +12,16 @@ JHtml::_('behavior.keepalive'); JHtml::_('behavior.formvalidator'); -$captchaEnabled = (JFactory::getApplication()->get('captcha', '0') !== '0' && !empty(JPluginHelper::getPlugin('captcha'))); +$captchaEnabled = false; + +foreach (JPluginHelper::getPlugin('captcha') as $plugin) +{ + if (JFactory::getApplication()->get('captcha', '0') === $plugin->name) + { + $captchaEnabled = true; + break; + } +} ?>
From 374ce765e4ba7596439c1c37a2809be571d60915 Mon Sep 17 00:00:00 2001 From: Thomas Hunziker Date: Sat, 21 Nov 2015 16:55:58 +0100 Subject: [PATCH 019/104] Add comments about output source. --- components/com_content/views/article/tmpl/default.php | 3 +++ components/com_content/views/category/tmpl/blog_item.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/components/com_content/views/article/tmpl/default.php b/components/com_content/views/article/tmpl/default.php index 38f1237b12c84..42c67a75d51f9 100644 --- a/components/com_content/views/article/tmpl/default.php +++ b/components/com_content/views/article/tmpl/default.php @@ -83,7 +83,9 @@ item->tagLayout->render($this->item->tags->itemTags); ?> + get('show_intro')) : echo $this->item->event->afterDisplayTitle; endif; ?> + item->event->beforeDisplayContent; ?> urls_position) && ($urls->urls_position == '0')) || ($params->get('urls_position') == '0' && empty($urls->urls_position))) @@ -163,5 +165,6 @@ echo $this->item->pagination; ?> + item->event->afterDisplayContent; ?>
diff --git a/components/com_content/views/category/tmpl/blog_item.php b/components/com_content/views/category/tmpl/blog_item.php index dbfc4b228d7b3..05dab5f8edd3b 100644 --- a/components/com_content/views/category/tmpl/blog_item.php +++ b/components/com_content/views/category/tmpl/blog_item.php @@ -42,8 +42,10 @@ get('show_intro')) : ?> + item->event->afterDisplayTitle; ?> + item->event->beforeDisplayContent; ?> item->introtext; ?> @@ -70,4 +72,5 @@
+ item->event->afterDisplayContent; ?> From 4040f6a7b3f155631ed9b99d87123f8248f999cd Mon Sep 17 00:00:00 2001 From: Thomas Hunziker Date: Sat, 21 Nov 2015 19:30:52 +0100 Subject: [PATCH 020/104] Add comments also to the other views. --- .../com_content/views/archive/tmpl/default_items.php | 3 +++ components/com_content/views/article/tmpl/default.php | 6 +++--- .../com_content/views/category/tmpl/blog_item.php | 10 ++++++---- .../com_content/views/featured/tmpl/default_item.php | 7 ++++++- components/com_tags/views/tag/tmpl/default_items.php | 3 +++ 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/components/com_content/views/archive/tmpl/default_items.php b/components/com_content/views/archive/tmpl/default_items.php index bade1eea7b775..825a592047159 100644 --- a/components/com_content/views/archive/tmpl/default_items.php +++ b/components/com_content/views/archive/tmpl/default_items.php @@ -123,8 +123,10 @@ get('show_intro')) : ?> + event->afterDisplayTitle; ?> + event->beforeDisplayContent; ?> get('show_intro')) :?>
introtext, $params->get('introtext_limit')); ?>
@@ -206,6 +208,7 @@
+ event->afterDisplayContent; ?>

diff --git a/components/com_content/views/article/tmpl/default.php b/components/com_content/views/article/tmpl/default.php index 42c67a75d51f9..ea84fc8fbb72d 100644 --- a/components/com_content/views/article/tmpl/default.php +++ b/components/com_content/views/article/tmpl/default.php @@ -83,9 +83,9 @@ item->tagLayout->render($this->item->tags->itemTags); ?> - + get('show_intro')) : echo $this->item->event->afterDisplayTitle; endif; ?> - + item->event->beforeDisplayContent; ?> urls_position) && ($urls->urls_position == '0')) || ($params->get('urls_position') == '0' && empty($urls->urls_position))) @@ -165,6 +165,6 @@ echo $this->item->pagination; ?> - + item->event->afterDisplayContent; ?>
diff --git a/components/com_content/views/category/tmpl/blog_item.php b/components/com_content/views/category/tmpl/blog_item.php index 05dab5f8edd3b..e3afd0a115157 100644 --- a/components/com_content/views/category/tmpl/blog_item.php +++ b/components/com_content/views/category/tmpl/blog_item.php @@ -42,11 +42,13 @@ get('show_intro')) : ?> - + item->event->afterDisplayTitle; ?> - -item->event->beforeDisplayContent; ?> item->introtext; ?> + +item->event->beforeDisplayContent; ?> + +item->introtext; ?> $this->item, 'params' => $params, 'position' => 'below')); ?> @@ -72,5 +74,5 @@
- + item->event->afterDisplayContent; ?> diff --git a/components/com_content/views/featured/tmpl/default_item.php b/components/com_content/views/featured/tmpl/default_item.php index 048ac1ab186d1..d087b22951711 100644 --- a/components/com_content/views/featured/tmpl/default_item.php +++ b/components/com_content/views/featured/tmpl/default_item.php @@ -66,9 +66,13 @@ get('show_intro')) : ?> + item->event->afterDisplayTitle; ?> -item->event->beforeDisplayContent; ?> item->introtext; ?> + +item->event->beforeDisplayContent; ?> + +item->introtext; ?> $this->item, 'params' => $params, 'position' => 'below')); ?> @@ -97,4 +101,5 @@ + item->event->afterDisplayContent; ?> diff --git a/components/com_tags/views/tag/tmpl/default_items.php b/components/com_tags/views/tag/tmpl/default_items.php index 92322c66fd381..fb9fd8261de1c 100644 --- a/components/com_tags/views/tag/tmpl/default_items.php +++ b/components/com_tags/views/tag/tmpl/default_items.php @@ -71,6 +71,7 @@ + event->afterDisplayTitle; ?> core_images);?> params->get('tag_list_show_item_image', 1) == 1 && !empty($images->image_intro)) :?> @@ -79,10 +80,12 @@ params->get('tag_list_show_item_description', 1)) : ?> + event->beforeDisplayContent; ?> core_body, $this->params->get('tag_list_item_maximum_characters')); ?> + event->afterDisplayContent; ?> From fc124a20f2b80f6aa749166f4b047a1e6e79a37b Mon Sep 17 00:00:00 2001 From: Jean-Marie Simonet Date: Thu, 26 Nov 2015 08:14:11 +0100 Subject: [PATCH 021/104] Correcting some language strings values --- administrator/language/en-GB/en-GB.lib_joomla.ini | 8 ++++---- language/en-GB/en-GB.lib_joomla.ini | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/administrator/language/en-GB/en-GB.lib_joomla.ini b/administrator/language/en-GB/en-GB.lib_joomla.ini index 3fa7ce40818e0..15edc4195cd62 100644 --- a/administrator/language/en-GB/en-GB.lib_joomla.ini +++ b/administrator/language/en-GB/en-GB.lib_joomla.ini @@ -625,7 +625,7 @@ JLIB_MEDIA_ERROR_WARNINVALID_IMG="Not a valid image." JLIB_MEDIA_ERROR_WARNINVALID_MIME="Illegal or invalid mime type detected." JLIB_MEDIA_ERROR_WARNNOTADMIN="Uploaded file is not an image file and you do not have permission." -JLIB_NO_EDITOR_PLUGIN_PUBLISHED="We can't show an editor because no editor plugin is published." +JLIB_NO_EDITOR_PLUGIN_PUBLISHED="Unable to display an editor because no editor plugin is published." JLIB_PLUGIN_ERROR_LOADING_PLUGINS="Error loading Plugins: %s" JLIB_REGISTRY_EXCEPTION_LOAD_FORMAT_CLASS="Unable to load format class." @@ -635,7 +635,7 @@ JLIB_RULES_ALLOWED="Allowed" JLIB_RULES_ALLOWED_ADMIN="Allowed (Super User)" JLIB_RULES_CALCULATED_SETTING="Calculated Setting 2" JLIB_RULES_CONFLICT="Conflict" -JLIB_RULES_DATABASE_FAILURE="Failure by storing the data to the database." +JLIB_RULES_DATABASE_FAILURE="Failed storing the data to the database." JLIB_RULES_DENIED="Denied" JLIB_RULES_GROUP="%s" JLIB_RULES_GROUPS="Groups" @@ -645,8 +645,8 @@ JLIB_RULES_NOT_ALLOWED="Not Allowed." JLIB_RULES_NOT_ALLOWED_ADMIN_CONFLICT="Conflict" JLIB_RULES_NOT_ALLOWED_LOCKED="Not Allowed (Locked)" JLIB_RULES_NOT_SET="Not Set" -JLIB_RULES_REQUEST_FAILURE="Failure by sending the data to server." -JLIB_RULES_SAVE_BEFORE_CHANGE_PERMISSIONS="Please save before change permissions." +JLIB_RULES_REQUEST_FAILURE="Failed sending the data to server." +JLIB_RULES_SAVE_BEFORE_CHANGE_PERMISSIONS="Please save before changing permissions." JLIB_RULES_SELECT_ALLOW_DENY_GROUP="Allow or deny %s for users in the %s group." JLIB_RULES_SELECT_SETTING="Select New Setting 1" JLIB_RULES_SETTING_NOTES="1. If you change the setting, it will apply to this and all child groups, components and content. Note that Denied will overrule any inherited setting and also the setting in any child group, component or content. In the case of a setting conflict, Deny will take precedence. Not Set is equivalent to Denied but can be changed in child groups, components and content.
2. If you select a new setting, select Save to refresh the calculated settings." diff --git a/language/en-GB/en-GB.lib_joomla.ini b/language/en-GB/en-GB.lib_joomla.ini index 3fa7ce40818e0..15edc4195cd62 100644 --- a/language/en-GB/en-GB.lib_joomla.ini +++ b/language/en-GB/en-GB.lib_joomla.ini @@ -625,7 +625,7 @@ JLIB_MEDIA_ERROR_WARNINVALID_IMG="Not a valid image." JLIB_MEDIA_ERROR_WARNINVALID_MIME="Illegal or invalid mime type detected." JLIB_MEDIA_ERROR_WARNNOTADMIN="Uploaded file is not an image file and you do not have permission." -JLIB_NO_EDITOR_PLUGIN_PUBLISHED="We can't show an editor because no editor plugin is published." +JLIB_NO_EDITOR_PLUGIN_PUBLISHED="Unable to display an editor because no editor plugin is published." JLIB_PLUGIN_ERROR_LOADING_PLUGINS="Error loading Plugins: %s" JLIB_REGISTRY_EXCEPTION_LOAD_FORMAT_CLASS="Unable to load format class." @@ -635,7 +635,7 @@ JLIB_RULES_ALLOWED="Allowed" JLIB_RULES_ALLOWED_ADMIN="Allowed (Super User)" JLIB_RULES_CALCULATED_SETTING="Calculated Setting 2" JLIB_RULES_CONFLICT="Conflict" -JLIB_RULES_DATABASE_FAILURE="Failure by storing the data to the database." +JLIB_RULES_DATABASE_FAILURE="Failed storing the data to the database." JLIB_RULES_DENIED="Denied" JLIB_RULES_GROUP="%s" JLIB_RULES_GROUPS="Groups" @@ -645,8 +645,8 @@ JLIB_RULES_NOT_ALLOWED="Not Allowed." JLIB_RULES_NOT_ALLOWED_ADMIN_CONFLICT="Conflict" JLIB_RULES_NOT_ALLOWED_LOCKED="Not Allowed (Locked)" JLIB_RULES_NOT_SET="Not Set" -JLIB_RULES_REQUEST_FAILURE="Failure by sending the data to server." -JLIB_RULES_SAVE_BEFORE_CHANGE_PERMISSIONS="Please save before change permissions." +JLIB_RULES_REQUEST_FAILURE="Failed sending the data to server." +JLIB_RULES_SAVE_BEFORE_CHANGE_PERMISSIONS="Please save before changing permissions." JLIB_RULES_SELECT_ALLOW_DENY_GROUP="Allow or deny %s for users in the %s group." JLIB_RULES_SELECT_SETTING="Select New Setting 1" JLIB_RULES_SETTING_NOTES="1. If you change the setting, it will apply to this and all child groups, components and content. Note that Denied will overrule any inherited setting and also the setting in any child group, component or content. In the case of a setting conflict, Deny will take precedence. Not Set is equivalent to Denied but can be changed in child groups, components and content.
2. If you select a new setting, select Save to refresh the calculated settings." From 3f9f446c376440be640d6541651b07c83e3957a4 Mon Sep 17 00:00:00 2001 From: zero-24 Date: Fri, 27 Nov 2015 11:43:35 +0100 Subject: [PATCH 022/104] https://joomla.stackexchange.com --- administrator/modules/mod_menu/tmpl/default_enabled.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/modules/mod_menu/tmpl/default_enabled.php b/administrator/modules/mod_menu/tmpl/default_enabled.php index e7267c19a16b6..424f0f8abed6a 100644 --- a/administrator/modules/mod_menu/tmpl/default_enabled.php +++ b/administrator/modules/mod_menu/tmpl/default_enabled.php @@ -368,7 +368,7 @@ new JMenuNode(JText::_('MOD_MENU_HELP_SECURITY'), 'https://developer.joomla.org/security-centre.html', 'class:help-security', false, '_blank') ); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_DEVELOPER'), 'https://developer.joomla.org', 'class:help-dev', false, '_blank')); - $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_XCHANGE'), 'http://joomla.stackexchange.com', 'class:help-dev', false, '_blank')); + $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_XCHANGE'), 'https://joomla.stackexchange.com', 'class:help-dev', false, '_blank')); $menu->addChild(new JMenuNode(JText::_('MOD_MENU_HELP_SHOP'), 'http://shop.joomla.org', 'class:help-shop', false, '_blank')); $menu->getParent(); } From bf0d420a6b17ef0ad8b35bc242056db76a4ea77d Mon Sep 17 00:00:00 2001 From: zero-24 Date: Fri, 27 Nov 2015 11:52:29 +0100 Subject: [PATCH 023/104] Update default_enabled.php --- .../templates/hathor/html/mod_menu/default_enabled.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/templates/hathor/html/mod_menu/default_enabled.php b/administrator/templates/hathor/html/mod_menu/default_enabled.php index f893753821707..047f17dacc259 100644 --- a/administrator/templates/hathor/html/mod_menu/default_enabled.php +++ b/administrator/templates/hathor/html/mod_menu/default_enabled.php @@ -343,7 +343,7 @@ new JMenuNode(JText::_('MOD_MENU_HELP_DEVELOPER'), 'https://developer.joomla.org', 'class:help-dev', false, '_blank') ); $menu->addChild( - new JMenuNode(JText::_('MOD_MENU_HELP_XCHANGE'), 'http://joomla.stackexchange.com', 'class:help-dev', false, '_blank') + new JMenuNode(JText::_('MOD_MENU_HELP_XCHANGE'), 'https://joomla.stackexchange.com', 'class:help-dev', false, '_blank') ); $menu->addChild( new JMenuNode(JText::_('MOD_MENU_HELP_SHOP'), 'http://shop.joomla.org', 'class:help-shop', false, '_blank') From 3604624a45bdaab81d3f09f702f3cead488a6d52 Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Fri, 27 Nov 2015 11:17:26 +0000 Subject: [PATCH 024/104] Menu text --- administrator/language/en-GB/en-GB.com_menus.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/administrator/language/en-GB/en-GB.com_menus.ini b/administrator/language/en-GB/en-GB.com_menus.ini index 99e63b6aee29e..4db646b0a30ac 100644 --- a/administrator/language/en-GB/en-GB.com_menus.ini +++ b/administrator/language/en-GB/en-GB.com_menus.ini @@ -4,7 +4,7 @@ ; Note : All ini files need to be saved as UTF-8 COM_MENUS="Menus" -COM_MENUS_ADD_MENU_MODULE="Add a module for this menu type." +COM_MENUS_ADD_MENU_MODULE="Add a module for this menu." COM_MENUS_ADVANCED_FIELDSET_LABEL="Advanced" COM_MENUS_BASIC_FIELDSET_LABEL="Options" COM_MENUS_BATCH_MENU_ITEM_CANNOT_CREATE="You are not allowed to create new menu items." @@ -67,7 +67,7 @@ COM_MENUS_ITEM_FIELD_ANCHOR_CSS_LABEL="Link CSS Style" COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_DESC="An optional, custom description for the title attribute of the menu hyperlink." COM_MENUS_ITEM_FIELD_ANCHOR_TITLE_LABEL="Link Title Attribute" COM_MENUS_ITEM_FIELD_ASSIGNED_DESC="Shows which menu the link will appear in." -COM_MENUS_ITEM_FIELD_ASSIGNED_LABEL=" Menu Location" +COM_MENUS_ITEM_FIELD_ASSIGNED_LABEL=" Menu" COM_MENUS_ITEM_FIELD_ASSOCIATION_NO_VALUE="- No association -" COM_MENUS_ITEM_FIELD_BROWSERNAV_DESC="Target browser window when the menu item is selected." COM_MENUS_ITEM_FIELD_BROWSERNAV_LABEL="Target Window" From c3b1cd453e18b3195d9224c7c7cc12d4936d5b84 Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Fri, 27 Nov 2015 11:27:53 +0000 Subject: [PATCH 025/104] remove hyphen --- .../language/en-GB/en-GB.plg_quickicon_extensionupdate.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.ini b/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.ini index 1c342a792b8f2..eab09a1583763 100644 --- a/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.ini +++ b/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.ini @@ -11,5 +11,5 @@ PLG_QUICKICON_EXTENSIONUPDATE_GROUP_LABEL="Group" PLG_QUICKICON_EXTENSIONUPDATE_UPDATEFOUND="Updates are available! %s" PLG_QUICKICON_EXTENSIONUPDATE_UPDATEFOUND_BUTTON="View Updates" PLG_QUICKICON_EXTENSIONUPDATE_UPDATEFOUND_MESSAGE="%s Extension Update(s) are available:" -PLG_QUICKICON_EXTENSIONUPDATE_UPTODATE="All extensions are up-to-date." +PLG_QUICKICON_EXTENSIONUPDATE_UPTODATE="All extensions are up to date." PLG_QUICKICON_EXTENSIONUPDATE_XML_DESCRIPTION="Checks for updates of your installed third-party extensions and notifies you when you visit the Control Panel page." From e37f2469bd5f3d04bfb7583af7a9115535794e7f Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Fri, 27 Nov 2015 11:29:14 +0000 Subject: [PATCH 026/104] remove hyphen and bang --- .../language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini b/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini index d78aac6d5e2ba..6e64c85d8614d 100644 --- a/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini +++ b/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini @@ -11,5 +11,5 @@ PLG_QUICKICON_JOOMLAUPDATE_GROUP_LABEL="Group" PLG_QUICKICON_JOOMLAUPDATE_UPDATEFOUND="Joomla! %s, Update now!" PLG_QUICKICON_JOOMLAUPDATE_UPDATEFOUND_BUTTON="Update Now" PLG_QUICKICON_JOOMLAUPDATE_UPDATEFOUND_MESSAGE="Joomla! %s is available:" -PLG_QUICKICON_JOOMLAUPDATE_UPTODATE="Joomla! is up-to-date." +PLG_QUICKICON_JOOMLAUPDATE_UPTODATE="Joomla is up to date." PLG_QUICKICON_JOOMLAUPDATE_XML_DESCRIPTION="Checks for Joomla! updates and notifies you when you visit the Control Panel page." From e557e0e2c9ae620db01ca23e1666301755a17fec Mon Sep 17 00:00:00 2001 From: Thomas Hunziker Date: Fri, 27 Nov 2015 19:12:45 +0100 Subject: [PATCH 027/104] Updating installation language files --- installation/language/nb-NO/nb-NO.ini | 15 +++++++------ installation/language/nb-NO/nb-NO.xml | 4 ++-- installation/language/nn-NO/nn-NO.ini | 10 +++++++-- installation/language/nn-NO/nn-NO.xml | 4 ++-- installation/language/zh-CN/zh-CN.ini | 32 ++++++++++++++++----------- installation/language/zh-CN/zh-CN.xml | 4 ++-- 6 files changed, 41 insertions(+), 28 deletions(-) diff --git a/installation/language/nb-NO/nb-NO.ini b/installation/language/nb-NO/nb-NO.ini index 5944a4e9de87a..81608a45358ac 100644 --- a/installation/language/nb-NO/nb-NO.ini +++ b/installation/language/nb-NO/nb-NO.ini @@ -87,7 +87,7 @@ INSTL_SAMPLE_LEARN_SET="Engelsk eksempeldata - Lær Joomla!" INSTL_SAMPLE_TESTING_SET="Engelsk eksempeldata - Test" INSTL_SITE_INSTALL_SAMPLE_NONE_DESC="Installer Joomla med bare en meny og et innloggingsskjema, uten noe innhold." INSTL_SAMPLE_BLOG_SET_DESC="Installer Joomla med noen få artikler og blogg-relaterte moduler som 'Eldre innlegg', 'Bloggrull' og 'Mest lest'." -INSTL_SAMPLE_BROCHURE_SET_DESC="Installer Joomla med noen få sider (en meny med sidene 'Hjem', 'Om oss', 'Nyheter' og 'Kontakt oss'), samt moduler som 'Søk', 'Egendfinert HTML' og 'Innlogging'." +INSTL_SAMPLE_BROCHURE_SET_DESC="Installer Joomla med noen få sider (en meny med sidene 'Hjem', 'Om oss', 'Nyheter' og 'Kontakt oss'), samt moduler som 'Søk', 'Egendfinert' og 'Innlogging'." INSTL_SAMPLE_DATA_SET_DESC="Installer Joomla med en side (en meny med en lenke), samt moduler som 'Siste nyheter' og 'Innlogging'." INSTL_SAMPLE_LEARN_SET_DESC="Installer Joomla med eksempelartikler som forklarer hvordan systemet fungerer." INSTL_SAMPLE_TESTING_SET_DESC="Installer Joomla med alle mulige menytyper, for rask og enkel hjelp til testing av hele systemet." @@ -116,19 +116,19 @@ INSTL_EMAIL_NOT_SENT="E-post kunne ikke sendes." ;Complete view INSTL_COMPLETE_ADMINISTRATION_LOGIN_DETAILS="Innloggingsdetaljer for administrasjonspanelet" -; The word 'installation' should not be translated as it is a physical folder. Wtf do you know ... +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_ERROR_FOLDER_ALREADY_REMOVED="Installasjonsmappen er allerede slettet." -; The word 'installation' should not be translated as it is a physical folder. Wtf do you know ... +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_ERROR_FOLDER_DELETE="Installasjonsmappen kunne ikke slettes, du må slette denne manuelt." -; The word 'installation' should not be translated as it is a physical folder. Wtf do you know ... +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_FOLDER_REMOVED="Installasjonsmappen ble slettet" INSTL_COMPLETE_LANGUAGE_1="Joomla! i ditt eget språk?" -; The word 'installation' should not be translated as it is a physical folder. Wtf do you know ... +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_LANGUAGE_DESC="Før du sletter installasjonsmappen kan du installere ekstra språk. Klikk følgende knapp dersom du ønsker å legge til ekstra språk for Joomla-installasjonen." INSTL_COMPLETE_LANGUAGE_DESC2="Merk: Installasjonsskriptet vil behøve tilgang til Internett for å kunne laste ned og installere flere språk.
Noen serverkonfigurasjoner sperrer dessverre for dette. Dersom dette er tilfellet for deg er det ingen fare, du vil kunne installere flere språk senere via administrasjonspanelet." -; The word 'installation' should not be translated as it is a physical folder. Wtf do you know ... +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_REMOVE_FOLDER="Slett installasjonsmappen" -; The word 'installation' should not be translated as it is a physical folder. Wtf do you know ... +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_REMOVE_INSTALLATION="HUSK Å SLETTE INSTALLASJONSMAPPEN
Du vil ikke kunne bruke nettstedet før installasjonsmappen er slettet. Dette er en sikkerhetsfunksjon for Joomla!." INSTL_COMPLETE_TITLE="Gratulerer! Joomla! er nå installert." INSTL_COMPLETE_INSTALL_LANGUAGES="Ekstra steg: Installer språk" @@ -319,3 +319,4 @@ POSTGRESQL="PostgreSQL" SQLAZURE="Microsoft SQL Azure" SQLITE="SQLite" SQLSRV="Microsoft SQL Server" + diff --git a/installation/language/nb-NO/nb-NO.xml b/installation/language/nb-NO/nb-NO.xml index 92a41c91a724e..98e482c1235c9 100644 --- a/installation/language/nb-NO/nb-NO.xml +++ b/installation/language/nb-NO/nb-NO.xml @@ -1,9 +1,9 @@ Norwegian bokmål (nb-NO) - 3.4.4 + 3.5.0 August 2015 Norsk Joomla! Copyright (C) 2005 - 2015 Open Source Matters. All rights reserved. diff --git a/installation/language/nn-NO/nn-NO.ini b/installation/language/nn-NO/nn-NO.ini index 70f22b9f99fdb..15b802773a8db 100644 --- a/installation/language/nn-NO/nn-NO.ini +++ b/installation/language/nn-NO/nn-NO.ini @@ -87,7 +87,7 @@ INSTL_SAMPLE_LEARN_SET="Engelsk dømedata - Lær Joomla!" INSTL_SAMPLE_TESTING_SET="Engelsk dømedata - Test" INSTL_SITE_INSTALL_SAMPLE_NONE_DESC="Installer Joomla med berre ein meny og et innloggingsskjema, utan noko innhald." INSTL_SAMPLE_BLOG_SET_DESC="Installer Joomla med nokre få artiklar og blogg-relaterte modular som 'Eldre innlegg', 'Bloggrull' og 'Mest lest'." -INSTL_SAMPLE_BROCHURE_SET_DESC="Installer Joomla med nokre få sider (ein meny med sidene 'Heim', 'Om oss', 'Nyhende' og 'Kontakt oss'), og dessutan modular som 'Søk', 'Egendfinert HTML' og 'Innlogging'." +INSTL_SAMPLE_BROCHURE_SET_DESC="Installer Joomla med nokre få sider (ein meny med sidene 'Heim', 'Om oss', 'Nyhende' og 'Kontakt oss'), og dessutan modular som 'Søk', 'Egendfinert' og 'Innlogging'." INSTL_SAMPLE_DATA_SET_DESC="Installer Joomla med ei side (ein meny med ei lenkje), og dessutan modular som 'Siste nyhende' og 'Innlogging'." INSTL_SAMPLE_LEARN_SET_DESC="Installer Joomla med dømeartiklar som forklarer korleis systemet fungerer." INSTL_SAMPLE_TESTING_SET_DESC="Installer Joomla med alle moglege menytypar, for rask og enkel hjelp til testing av heile systemet." @@ -116,13 +116,19 @@ INSTL_EMAIL_NOT_SENT="E-post kunne ikkje sendast." ;Complete view INSTL_COMPLETE_ADMINISTRATION_LOGIN_DETAILS="Innloggingsdetaljer for administrasjonspanelet" +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_ERROR_FOLDER_ALREADY_REMOVED="Installasjonsmappa er allereie slettet." +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_ERROR_FOLDER_DELETE="Installasjonsmappa kunne ikkje slettes, du må sletta denne manuelt." +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_FOLDER_REMOVED="Installasjonsmappa vart slettet" INSTL_COMPLETE_LANGUAGE_1="Joomla! i ditt eige språk?" +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_LANGUAGE_DESC="Før du slettar installasjonsmappa kan du installera ekstra språk. Klikkar følgjande knapp dersom du ynskjer å leggja til ekstra språk for Joomla-installasjonen." INSTL_COMPLETE_LANGUAGE_DESC2="Merk: Installasjonsskriptet vil trenga tilgjenge til Internett for å kunne lasta ned og installera fleire språk.
Nokre serverkonfigurasjoner sperrar di verre for dette. Dersom dette er tilfellet for deg er det ingen fare, du vil kunna installera fleire språk seinare via administrasjonspanelet." +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_REMOVE_FOLDER="Slett installasjonsmappa" +; The word 'installation' should not be translated as it is a physical folder. INSTL_COMPLETE_REMOVE_INSTALLATION="HUGS Å SLETTA INSTALLASJONSMAPPA
Du vil ikkje kunna bruka nettstaden før installasjonsmappa er slettet. Dette er ein tryggleiksfunksjon for Joomla!." INSTL_COMPLETE_TITLE="Gratulerer! Joomla! er no installert." INSTL_COMPLETE_INSTALL_LANGUAGES="Ekstra steg: Installer språk" @@ -312,4 +318,4 @@ PDOMYSQL="MySQL (PDO)" POSTGRESQL="PostgreSQL" SQLAZURE="Microsoft SQL Azure" SQLITE="SQLite" -SQLSRV="Microsoft SQL Servar" \ No newline at end of file +SQLSRV="Microsoft SQL Servar" diff --git a/installation/language/nn-NO/nn-NO.xml b/installation/language/nn-NO/nn-NO.xml index 1e2f34b0b23fc..cd8c364fcdc70 100644 --- a/installation/language/nn-NO/nn-NO.xml +++ b/installation/language/nn-NO/nn-NO.xml @@ -1,9 +1,9 @@ Norwegian Nynorsk (nn-NO) - 3.4.2 + 3.5.0 2015-04-14 Norsk Joomla and Skolelinux Copyright (C) 2005 - 2015 Open Source Matters. All rights reserved. diff --git a/installation/language/zh-CN/zh-CN.ini b/installation/language/zh-CN/zh-CN.ini index e63578953faee..0f8ee184ccc6d 100644 --- a/installation/language/zh-CN/zh-CN.ini +++ b/installation/language/zh-CN/zh-CN.ini @@ -36,7 +36,7 @@ INSTL_DATABASE_NO_SCHEMA="没有该数据库类型的数据库模式(database INSTL_DATABASE_OLD_PROCESS_DESC="以前安装的joomla!在安装过程中将会被备份" INSTL_DATABASE_OLD_PROCESS_LABEL="旧数据的处理" INSTL_DATABASE_PASSWORD_DESC="为网站安全起见,请为mysql用户设置密码" -INSTL_DATABASE_PASSWORD_LABEL="密码" +INSTL_DATABASE_PASSWORD_LABEL="数据库密码" INSTL_DATABASE_PREFIX_DESC="为数据表选择一个前缀或者使用随机产生的前缀。理想的前缀是:三四个字符长度,仅包含字母并且以下划线结束。请确保数据库里的其它数据表没有使用该前缀。一般也不要使用 "bak_" ,因该前缀常用于备份数据表。" INSTL_DATABASE_PREFIX_LABEL="数据表前缀" INSTL_DATABASE_PREFIX_MSG="数据表前缀必须以字母开始,中间是数字或字母,最后以下划线结束。" @@ -74,7 +74,7 @@ INSTL_ADMIN_USER_DESC="设置您网站超级管理员的用户名" INSTL_SITE_NAME_LABEL="网站名称" INSTL_SITE_NAME_DESC="请填写您的网站的名称。" INSTL_SITE_METADESC_LABEL="网站描述" -INSTL_SITE_METADESC_TITLE_LABEL="请填写提供给搜索引擎的网站的描述。一般最好是20个字。" +INSTL_SITE_METADESC_TITLE_LABEL="请填写提供给搜索引擎的网站的描述。一般针对谷歌最好是20个字。" INSTL_SITE_OFFLINE_LABEL="网站关闭" INSTL_SITE_OFFLINE_TITLE_LABEL="设置为完成安装后关闭网站前台。此后您可以随时通过全局配置开放网站。" INSTL_SITE_INSTALL_SAMPLE_LABEL="安装示范数据" @@ -87,7 +87,7 @@ INSTL_SAMPLE_LEARN_SET="学习型Joomla示范数据(英文)" INSTL_SAMPLE_TESTING_SET="帮助测试示范数据(英文)" INSTL_SITE_INSTALL_SAMPLE_NONE_DESC="安装后只有一个菜单和一个登录表单,不安装任何示范内容。" INSTL_SAMPLE_BLOG_SET_DESC="安装后网站里将有类似博客的包含热门文章等等的基础排版。" -INSTL_SAMPLE_BROCHURE_SET_DESC="安装后网站内容为手册风格。菜单有“首页”、“关于我们”、“新闻”、“联系我们”。模块有搜索、自定义HTML和登录框。" +INSTL_SAMPLE_BROCHURE_SET_DESC="安装后网站内容为手册风格。菜单有“首页”、“关于我们”、“新闻”、“联系我们”。模块有搜索、自定义和登录框。" INSTL_SAMPLE_DATA_SET_DESC="安装后网站将只有一个页面(一个菜单项)和最新文章、登录框等模块。" INSTL_SAMPLE_LEARN_SET_DESC="安装后网站里将有一些文章介绍Joomla的基础概念。" INSTL_SAMPLE_TESTING_SET_DESC="安装所有的示范内容,便于全面测试Joomla。" @@ -101,7 +101,7 @@ INSTL_SUMMARY_EMAIL_PASSWORDS_LABEL="在Email中包含密码。" INSTL_SUMMARY_EMAIL_PASSWORDS_DESC="警示:强烈建议您不要通过Email发送或保存密码。" ;Installing view -INSTL_INSTALLING="安装中..." +INSTL_INSTALLING="安装中……" INSTL_INSTALLING_DATABASE_BACKUP="旧数据表备份中" INSTL_INSTALLING_DATABASE_REMOVE="旧数据表删除中" INSTL_INSTALLING_DATABASE="数据表创建中" @@ -116,14 +116,20 @@ INSTL_EMAIL_NOT_SENT="无法发送Email。" ;Complete view INSTL_COMPLETE_ADMINISTRATION_LOGIN_DETAILS="管理员登陆用的资料" -INSTL_COMPLETE_ERROR_FOLDER_ALREADY_REMOVED="已删除安装目录。" -INSTL_COMPLETE_ERROR_FOLDER_DELETE="安装目录无法删除,请手动删除。" -INSTL_COMPLETE_FOLDER_REMOVED="安装目录成功移除。" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_ERROR_FOLDER_ALREADY_REMOVED="已删除目录installation。" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_ERROR_FOLDER_DELETE="目录installation无法删除,请手动删除。" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_FOLDER_REMOVED="成功删除目录installation。" INSTL_COMPLETE_LANGUAGE_1="创建使用您母语的网站及(或)自动创建多语言网站" -INSTL_COMPLETE_LANGUAGE_DESC="删除安装文件夹前可为本站安装指定语言或多语言。请点击以下按钮:" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_LANGUAGE_DESC="删除目录iinstallation前可为本站安装指定语言或多语言。请点击以下按钮:" INSTL_COMPLETE_LANGUAGE_DESC2="提示:您将需要访问权限来允许Joomla下载和安装新的语言。
有的服务器的配置不允许Joomla这样安装语言。如您遇到的正是这种情况,不用担心,您还能稍后通过登录Joomla管理后台来安装语言。" -INSTL_COMPLETE_REMOVE_FOLDER="删除安装目录" -INSTL_COMPLETE_REMOVE_INSTALLATION="请记住要彻底删除安装目录(installation)
在目录 "installation" 被删除之前,您无法进行下一步操作。这是Joomla!的一项安全功能。" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_REMOVE_FOLDER="删除目录installation" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_REMOVE_INSTALLATION="请记住要彻底删除目录installation
在目录 "installation" 被删除之前,您无法进行下一步操作。这是Joomla!的一项安全功能。" INSTL_COMPLETE_TITLE="恭喜!已经成功安装您的Joomla网站!" INSTL_COMPLETE_INSTALL_LANGUAGES="特别推荐:安装语言" @@ -299,11 +305,11 @@ JNONE="无" ;Necessary for errors ADMIN_EMAIL="您的邮箱" -ADMIN_PASSWORD="系统管理员密码" -ADMIN_PASSWORD2="确认系统管理员密码" +ADMIN_PASSWORD="管理员密码" +ADMIN_PASSWORD2="确认管理员密码" SITE_NAME="网站名称" -; 数据库类型 (允许一个比内部名称允许更具描述性的标签) +; 数据库类型 (允许比内部名称允许更具描述性的标签) MYSQL="MySQL" MYSQLI="MySQLi" ORACLE="Oracle" diff --git a/installation/language/zh-CN/zh-CN.xml b/installation/language/zh-CN/zh-CN.xml index da36deb9d3eda..7d9a43c6a42bb 100644 --- a/installation/language/zh-CN/zh-CN.xml +++ b/installation/language/zh-CN/zh-CN.xml @@ -1,9 +1,9 @@ Chinese Simplified 简体中文 - 3.4.0 + 3.5.0 2015.3.15 Joomla! Project admin@joomla.org From 8e8157d692a36e9757cdb4615899fd9355169eb5 Mon Sep 17 00:00:00 2001 From: bertmert Date: Sat, 28 Nov 2015 04:49:11 +0100 Subject: [PATCH 028/104] Fix issue #8464 --- .../components/com_modules/models/module.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/administrator/components/com_modules/models/module.php b/administrator/components/com_modules/models/module.php index a594fdbbabbd5..34c5e155ff96c 100644 --- a/administrator/components/com_modules/models/module.php +++ b/administrator/components/com_modules/models/module.php @@ -601,13 +601,18 @@ protected function loadFormData() $data->set('language', $app->input->getString('language', (!empty($filters['language']) ? $filters['language'] : null))); $data->set('access', $app->input->getInt('access', (!empty($filters['access']) ? $filters['access'] : JFactory::getConfig()->get('access')))); } + + // Avoid to delete params of a second module opened in a new browser tab while new one is not saved yet. + if (empty($data->params)) + { - // This allows us to inject parameter settings into a new module. - $params = $app->getUserState('com_modules.add.module.params'); + // This allows us to inject parameter settings into a new module. + $params = $app->getUserState('com_modules.add.module.params'); - if (is_array($params)) - { - $data->set('params', $params); + if (is_array($params)) + { + $data->set('params', $params); + } } } From 8a2a791c74bd6266d3674cbebc1999f94502eb64 Mon Sep 17 00:00:00 2001 From: bertmert Date: Sat, 28 Nov 2015 05:13:27 +0100 Subject: [PATCH 029/104] Fix issue #8464 Travis: Remove whitespace --- administrator/components/com_modules/models/module.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_modules/models/module.php b/administrator/components/com_modules/models/module.php index 34c5e155ff96c..630def4c0ee80 100644 --- a/administrator/components/com_modules/models/module.php +++ b/administrator/components/com_modules/models/module.php @@ -601,7 +601,7 @@ protected function loadFormData() $data->set('language', $app->input->getString('language', (!empty($filters['language']) ? $filters['language'] : null))); $data->set('access', $app->input->getInt('access', (!empty($filters['access']) ? $filters['access'] : JFactory::getConfig()->get('access')))); } - + // Avoid to delete params of a second module opened in a new browser tab while new one is not saved yet. if (empty($data->params)) { From dbc02cb442b3fea49aec4d0e6a02f28105d9e5cb Mon Sep 17 00:00:00 2001 From: Jean-Marie Simonet Date: Sat, 28 Nov 2015 08:18:00 +0100 Subject: [PATCH 030/104] Correcting smartsearch filter #8140 --- .../com_finder/helpers/html/finder.php | 2 +- .../com_finder/models/forms/filter_maps.xml | 74 +++++++++---------- .../language/en-GB/en-GB.com_finder.ini | 2 +- 3 files changed, 38 insertions(+), 40 deletions(-) diff --git a/administrator/components/com_finder/helpers/html/finder.php b/administrator/components/com_finder/helpers/html/finder.php index 6010102eee2c9..e702abfa3cba2 100644 --- a/administrator/components/com_finder/helpers/html/finder.php +++ b/administrator/components/com_finder/helpers/html/finder.php @@ -92,7 +92,7 @@ public static function mapslist() // Compile the options. $options = array(); - $options[] = JHtml::_('select.option', '1', JText::_('COM_FINDER_MAPS_BRANCHES')); + $options[] = JHtml::_('select.option', '1', JText::_('COM_FINDER_MAPS_SELECT_BRANCH')); foreach ($rows as $row) { diff --git a/administrator/components/com_finder/models/forms/filter_maps.xml b/administrator/components/com_finder/models/forms/filter_maps.xml index be3b238805e94..ec70c76b34417 100644 --- a/administrator/components/com_finder/models/forms/filter_maps.xml +++ b/administrator/components/com_finder/models/forms/filter_maps.xml @@ -1,44 +1,42 @@ -
+
- - - - - + + + + + - - - + - - - - + + + + diff --git a/administrator/language/en-GB/en-GB.com_finder.ini b/administrator/language/en-GB/en-GB.com_finder.ini index bb2f65a92dc58..0a90c09300eb0 100644 --- a/administrator/language/en-GB/en-GB.com_finder.ini +++ b/administrator/language/en-GB/en-GB.com_finder.ini @@ -171,7 +171,7 @@ COM_FINDER_MAPS_CONFIRM_DELETE_PROMPT="Are you sure you want to delete the selec COM_FINDER_MAPS_MULTILANG="Note: Language filter system plugin has been enabled, so this branch will not be used." COM_FINDER_MAPS_NO_CONTENT="No results to display. Either no content has been indexed or no content meets your filter criteria." COM_FINDER_MAPS_RETURN_TO_BRANCHES="Return to Branches" -COM_FINDER_MAPS_SELECT_BRANCHE="- Select Branch -" +COM_FINDER_MAPS_SELECT_BRANCH="- Select Branch -" COM_FINDER_MAPS_SELECT_TYPE="- Select Type of Content -" COM_FINDER_MAPS_TOOLBAR_TITLE="Smart Search: Content Maps" COM_FINDER_MESSAGE_RETURNED="The following message was returned by the server:" From ebcaa15726c94c93bdfe2fd2c665bd8c0c0919e0 Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 28 Nov 2015 11:09:14 +0000 Subject: [PATCH 031/104] fix stripe --- .../components/com_finder/views/index/tmpl/default.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_finder/views/index/tmpl/default.php b/administrator/components/com_finder/views/index/tmpl/default.php index d9ced32826403..e4101a9f800ba 100644 --- a/administrator/components/com_finder/views/index/tmpl/default.php +++ b/administrator/components/com_finder/views/index/tmpl/default.php @@ -113,7 +113,7 @@ published, $i, 'index.', $canChange, 'cb'); ?> - +
- English (GB) - Joomla help wiki - Franais (FR) - Aide de Joomla! + English (GB) - Joomla help wiki + Franais (FR) - Aide de Joomla! diff --git a/libraries/cms/form/field/helpsite.php b/libraries/cms/form/field/helpsite.php index 57adf77f2bdef..fe9f9d814e140 100644 --- a/libraries/cms/form/field/helpsite.php +++ b/libraries/cms/form/field/helpsite.php @@ -56,12 +56,15 @@ protected function getInput() 'var helpsite_base = "' . addslashes(JUri::root()) . '";' ); + $showDefault = $this->getAttribute('showDefault') === 'false' ? 'false' : 'true'; + $html = parent::getInput(); $button = ''; diff --git a/media/system/js/helpsite.js b/media/system/js/helpsite.js index ae10af0e332e3..c34be112ac0b2 100644 --- a/media/system/js/helpsite.js +++ b/media/system/js/helpsite.js @@ -11,14 +11,18 @@ jQuery(document).ready(function() { jQuery('#helpsite-refresh').click(function() { // Uses global variable helpsite_base for bast uri - var select_id = jQuery(this).attr('rel'); + var select_id = jQuery(this).attr('rel'); + var showDefault = jQuery(this).attr('showDefault'); + jQuery.getJSON(helpsite_base + 'index.php?option=com_users&task=profile.gethelpsites&format=json', function(data){ // The response contains the options to use in help site select field var items = []; // Build options jQuery.each(data, function(key, val) { - items.push(''); + if (val.value !== '' || showDefault === 'true') { + items.push(''); + } }); // Replace current select options. The trigger is needed for Chosen select box enhancer From 1a98a82df8d4f65680e7867c70bcca1f4164345d Mon Sep 17 00:00:00 2001 From: George Wilson Date: Wed, 2 Dec 2015 11:20:25 +0000 Subject: [PATCH 040/104] Fix wrong context for plugin event --- libraries/legacy/view/category.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/legacy/view/category.php b/libraries/legacy/view/category.php index 7a80a2a8974af..3ed4a0d7e9b46 100644 --- a/libraries/legacy/view/category.php +++ b/libraries/legacy/view/category.php @@ -156,7 +156,7 @@ public function commonCategoryDisplay() $dispatcher = JEventDispatcher::getInstance(); JPluginHelper::importPlugin('content'); - $dispatcher->trigger('onContentPrepare', array ('com_contact.category', &$itemElement, &$itemElement->params, 0)); + $dispatcher->trigger('onContentPrepare', array ($this->extension . '.category', &$itemElement, &$itemElement->params, 0)); $results = $dispatcher->trigger('onContentAfterTitle', array($this->extension . '.category', &$itemElement, &$itemElement->core_params, 0)); $itemElement->event->afterDisplayTitle = trim(implode("\n", $results)); From 048736b54cc9bf8c93289e530059e482f48ff540 Mon Sep 17 00:00:00 2001 From: Roberto Segura - phproberto Date: Wed, 2 Dec 2015 12:48:02 +0100 Subject: [PATCH 041/104] [imp] use base json profile controller --- .../com_users/controllers/profile.json.php | 21 ++++++++ .../com_users/controllers/profile.json.php | 38 +------------ .../controllers/profile_base_json.php | 53 +++++++++++++++++++ libraries/cms/form/field/helpsite.php | 3 -- media/system/js/helpsite.js | 2 +- 5 files changed, 77 insertions(+), 40 deletions(-) create mode 100644 administrator/components/com_users/controllers/profile.json.php create mode 100644 components/com_users/controllers/profile_base_json.php diff --git a/administrator/components/com_users/controllers/profile.json.php b/administrator/components/com_users/controllers/profile.json.php new file mode 100644 index 0000000000000..add6fdd7c9ffc --- /dev/null +++ b/administrator/components/com_users/controllers/profile.json.php @@ -0,0 +1,21 @@ +close(); - } } diff --git a/components/com_users/controllers/profile_base_json.php b/components/com_users/controllers/profile_base_json.php new file mode 100644 index 0000000000000..351b6f6d5c37f --- /dev/null +++ b/components/com_users/controllers/profile_base_json.php @@ -0,0 +1,53 @@ +close(); + } +} diff --git a/libraries/cms/form/field/helpsite.php b/libraries/cms/form/field/helpsite.php index fe9f9d814e140..0ccca015dc547 100644 --- a/libraries/cms/form/field/helpsite.php +++ b/libraries/cms/form/field/helpsite.php @@ -52,9 +52,6 @@ protected function getOptions() protected function getInput() { JHtml::script('system/helpsite.js', false, true); - JFactory::getDocument()->addScriptDeclaration( - 'var helpsite_base = "' . addslashes(JUri::root()) . '";' - ); $showDefault = $this->getAttribute('showDefault') === 'false' ? 'false' : 'true'; diff --git a/media/system/js/helpsite.js b/media/system/js/helpsite.js index c34be112ac0b2..79428820fffc9 100644 --- a/media/system/js/helpsite.js +++ b/media/system/js/helpsite.js @@ -14,7 +14,7 @@ jQuery(document).ready(function() { var select_id = jQuery(this).attr('rel'); var showDefault = jQuery(this).attr('showDefault'); - jQuery.getJSON(helpsite_base + 'index.php?option=com_users&task=profile.gethelpsites&format=json', function(data){ + jQuery.getJSON('index.php?option=com_users&task=profile.gethelpsites&format=json', function(data){ // The response contains the options to use in help site select field var items = []; From 5c19acf6bef687fd7fa8d009b26e12212dc94b4d Mon Sep 17 00:00:00 2001 From: Michael Babker Date: Wed, 2 Dec 2015 12:06:22 -0500 Subject: [PATCH 042/104] Revert "Add plugin events to com_contact (redo) Fixes #8024" This reverts commit 88fb40b7ad4bbc2d525c63cadfa8b62e1307fb96. --- .../views/categories/tmpl/default_items.php | 12 +-- .../views/category/tmpl/default_items.php | 7 -- .../com_contact/views/category/view.html.php | 6 +- .../views/contact/tmpl/default.php | 37 +++------ .../com_contact/views/contact/view.html.php | 82 ++++++------------- .../views/featured/tmpl/default.php | 7 +- .../com_contact/views/featured/view.html.php | 56 ++++++------- layouts/joomla/content/category_default.php | 19 ++--- libraries/legacy/view/category.php | 30 +------ .../html/com_contact/category/default.php | 2 +- .../html/com_contact/contact/default.php | 7 -- .../html/com_contact/contact/encyclopedia.php | 5 -- 12 files changed, 86 insertions(+), 184 deletions(-) diff --git a/components/com_contact/views/categories/tmpl/default_items.php b/components/com_contact/views/categories/tmpl/default_items.php index 9d68a3ec4463f..ae2e2ca17863d 100644 --- a/components/com_contact/views/categories/tmpl/default_items.php +++ b/components/com_contact/views/categories/tmpl/default_items.php @@ -25,15 +25,17 @@
> params->get('show_subcat_desc_cat') == 1) :?> @@ -44,7 +46,7 @@ - getChildren()) > 0) :?> + getChildren()) > 0 && $this->maxLevelcat > 1) :?>
items[$item->id] = $item->getChildren(); diff --git a/components/com_contact/views/category/tmpl/default_items.php b/components/com_contact/views/category/tmpl/default_items.php index d74c57cd07904..8fe3c347bbd5e 100644 --- a/components/com_contact/views/category/tmpl/default_items.php +++ b/components/com_contact/views/category/tmpl/default_items.php @@ -71,11 +71,6 @@
- - event->afterDisplayTitle; ?> - - event->beforeDisplayContent; ?> - params->get('show_position_headings')) : ?> con_position; ?>
@@ -94,8 +89,6 @@ country; ?>
- - event->afterDisplayContent; ?> diff --git a/components/com_contact/views/category/view.html.php b/components/com_contact/views/category/view.html.php index afdf543e760e3..18f676c81526a 100644 --- a/components/com_contact/views/category/view.html.php +++ b/components/com_contact/views/category/view.html.php @@ -9,6 +9,8 @@ defined('_JEXEC') or die; +use Joomla\Registry\Registry; + /** * HTML View class for the Contacts component * @@ -49,8 +51,8 @@ public function display($tpl = null) // Compute the contact slug. foreach ($this->items as $item) { - $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id; - $temp = new JRegistry; + $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id; + $temp = new Registry; $temp->loadString($item->params); $item->params = clone($this->params); $item->params->merge($temp); diff --git a/components/com_contact/views/contact/tmpl/default.php b/components/com_contact/views/contact/tmpl/default.php index ccc562678f939..8c6f4f7ed62b4 100644 --- a/components/com_contact/views/contact/tmpl/default.php +++ b/components/com_contact/views/contact/tmpl/default.php @@ -13,32 +13,27 @@ jimport('joomla.html.html.bootstrap'); ?> -
+
params->get('show_page_heading')) : ?>

escape($this->params->get('page_heading')); ?>

- contact->name && $this->params->get('show_name')) : ?> - - + params->get('show_contact_category') == 'show_no_link') : ?>

contact->category_title; ?>

- - item->event->afterDisplayTitle; ?> - params->get('show_contact_category') == 'show_with_link') : ?> contact->catid); ?>

@@ -47,7 +42,6 @@

- params->get('show_contact_list') && count($this->contacts) > 1) : ?>
@@ -60,12 +54,9 @@ item->tagLayout->render($this->item->tags->itemTags); ?> - item->event->beforeDisplayContent; ?> - params->get('presentation_style') == 'sliders') : ?> 'basic-details')); ?> - params->get('presentation_style') == 'tabs') : ?> 'basic-details')); ?> @@ -73,24 +64,22 @@ params->get('presentation_style') == 'sliders') : ?> - params->get('presentation_style') == 'tabs') : ?> - params->get('presentation_style') == 'plain'):?> ' . JText::_('COM_CONTACT_DETAILS') . ''; ?> contact->image && $this->params->get('show_image')) : ?>
- contact->image, JText::_('COM_CONTACT_IMAGE_DETAILS'), array('align' => 'middle')); ?> + contact->image, JText::_('COM_CONTACT_IMAGE_DETAILS'), array('align' => 'middle', 'itemprop' => 'image')); ?>
contact->con_position && $this->params->get('show_position')) : ?>
-
+
contact->con_position; ?>
@@ -107,7 +96,6 @@ params->get('presentation_style') == 'sliders') : ?> - params->get('presentation_style') == 'tabs') : ?> @@ -120,7 +108,7 @@ params->get('presentation_style') == 'tabs') : ?> - params->get('presentation_style') == 'plain'): ?> + params->get('presentation_style') == 'plain'):?> ' . JText::_('COM_CONTACT_EMAIL_FORM') . ''; ?> @@ -129,10 +117,10 @@ params->get('presentation_style') == 'sliders') : ?> + params->get('presentation_style') == 'tabs') : ?> + + - params->get('presentation_style') == 'tabs') : ?> - - params->get('show_links')) : ?> @@ -144,11 +132,9 @@ params->get('presentation_style') == 'sliders') : ?> - params->get('presentation_style') == 'tabs') : ?> - params->get('presentation_style') == 'plain'):?> ' . JText::_('JGLOBAL_ARTICLES') . ''; ?> @@ -158,7 +144,6 @@ params->get('presentation_style') == 'sliders') : ?> - params->get('presentation_style') == 'tabs') : ?> @@ -166,6 +151,7 @@ params->get('show_profile') && $this->contact->user_id && JPluginHelper::isEnabled('user', 'profile')) : ?> + params->get('presentation_style') == 'sliders') : ?> @@ -184,9 +170,11 @@ params->get('presentation_style') == 'tabs') : ?> + contact->misc && $this->params->get('show_misc')) : ?> + params->get('presentation_style') == 'sliders') : ?> @@ -227,5 +215,4 @@ params->get('presentation_style') == 'tabs') : ?> - item->event->afterDisplayContent; ?>
diff --git a/components/com_contact/views/contact/view.html.php b/components/com_contact/views/contact/view.html.php index 4ac6ff57309f6..6457f917f7e89 100644 --- a/components/com_contact/views/contact/view.html.php +++ b/components/com_contact/views/contact/view.html.php @@ -52,21 +52,19 @@ class ContactViewContact extends JViewLegacy protected $return_page; /** - * Method to display the view. + * Execute and display a template script. * - * @param string $tpl A template file to load. [optional] + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * - * @return mixed Exception on failure, void on success. - * - * @since 1.5 + * @return mixed A string if successful, otherwise a Error object. */ public function display($tpl = null) { - $app = JFactory::getApplication(); - $user = JFactory::getUser(); - $state = $this->get('State'); - $item = $this->get('Item'); - $this->form = $this->get('Form'); + $app = JFactory::getApplication(); + $user = JFactory::getUser(); + $state = $this->get('State'); + $item = $this->get('Item'); + $this->form = $this->get('Form'); // Get the parameters $params = JComponentHelper::getParams('com_contact'); @@ -95,26 +93,26 @@ public function display($tpl = null) } // Check if access is not public - $groups = $user->getAuthorisedViewLevels(); + $groups = $user->getAuthorisedViewLevels(); $return = ''; if ((!in_array($item->access, $groups)) || (!in_array($item->category_access, $groups))) { - JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR')); + $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); + $app->setHeader('status', 403, true); - return false; + return; } - $options['category_id'] = $item->catid; - $options['order by'] = 'a.default_con DESC, a.ordering ASC'; + $options['category_id'] = $item->catid; + $options['order by'] = 'a.default_con DESC, a.ordering ASC'; // Handle email cloaking if ($item->email_to && $params->get('show_email')) { $item->email_to = JHtml::_('email.cloak', $item->email_to); } - if ($params->get('show_street_address') || $params->get('show_suburb') || $params->get('show_state') || $params->get('show_postcode') || $params->get('show_country')) { @@ -233,31 +231,6 @@ public function display($tpl = null) $item->link = JRoute::_(ContactHelperRoute::getContactRoute($item->slug, $item->catid)); } - // Process the content plugins. - $dispatcher = JEventDispatcher::getInstance(); - JPluginHelper::importPlugin('content'); - $offset = $state->get('list.offset'); - - // Fix for where some plugins require a text attribute - !empty($item->description)? $item->text = $item->description : $item->text = null; - $dispatcher->trigger('onContentPrepare', array ('com_contact.contact', &$item, &$this->params, $offset)); - - // Store the events for later - $item->event = new stdClass; - $results = $dispatcher->trigger('onContentAfterTitle', array('com_contact.contact', &$item, &$this->params, $offset)); - $item->event->afterDisplayTitle = trim(implode("\n", $results)); - - $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_contact.contact', &$item, &$this->params, $offset)); - $item->event->beforeDisplayContent = trim(implode("\n", $results)); - - $results = $dispatcher->trigger('onContentAfterDisplay', array('com_contact.contact', &$item, &$this->params, $offset)); - $item->event->afterDisplayContent = trim(implode("\n", $results)); - - if ($item->text) - { - $item->description = $item->text; - } - // Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); @@ -300,15 +273,13 @@ public function display($tpl = null) * Prepares the document * * @return void - * - * @since 1.6 */ protected function _prepareDocument() { - $app = JFactory::getApplication(); - $menus = $app->getMenu(); - $pathway = $app->getPathway(); - $title = null; + $app = JFactory::getApplication(); + $menus = $app->getMenu(); + $pathway = $app->getPathway(); + $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself @@ -330,12 +301,12 @@ protected function _prepareDocument() // If the menu item does not concern this contact if ($menu && ($menu->query['option'] != 'com_contact' || $menu->query['view'] != 'contact' || $id != $this->item->id)) { + // If this is not a single contact menu item, set the page title to the contact title if ($this->item->name) { $title = $this->item->name; } - $path = array(array('title' => $this->contact->name, 'link' => '')); $category = JCategories::getInstance('Contact')->get($this->contact->catid); @@ -355,29 +326,28 @@ protected function _prepareDocument() if (empty($title)) { - $title = $app->getCfg('sitename'); + $title = $app->get('sitename'); } - elseif ($app->getCfg('sitename_pagetitles', 0) == 1) + elseif ($app->get('sitename_pagetitles', 0) == 1) { - $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); + $title = JText::sprintf('JPAGETITLE', $app->get('sitename'), $title); } - elseif ($app->getCfg('sitename_pagetitles', 0) == 2) + elseif ($app->get('sitename_pagetitles', 0) == 2) { - $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); + $title = JText::sprintf('JPAGETITLE', $title, $app->get('sitename')); } if (empty($title)) { $title = $this->item->name; } - $this->document->setTitle($title); if ($this->item->metadesc) { $this->document->setDescription($this->item->metadesc); } - elseif (!$this->item->metadesc && $this->params->get('menu-meta_description')) + elseif ($this->params->get('menu-meta_description')) { $this->document->setDescription($this->params->get('menu-meta_description')); } @@ -386,7 +356,7 @@ protected function _prepareDocument() { $this->document->setMetadata('keywords', $this->item->metakey); } - elseif (!$this->item->metakey && $this->params->get('menu-meta_keywords')) + elseif ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); } diff --git a/components/com_contact/views/featured/tmpl/default.php b/components/com_contact/views/featured/tmpl/default.php index 87758e5cf52f4..54c4d15569712 100644 --- a/components/com_contact/views/featured/tmpl/default.php +++ b/components/com_contact/views/featured/tmpl/default.php @@ -22,7 +22,6 @@ loadTemplate('items'); ?> - params->def('show_pagination', 2) == 1 || ($this->params->get('show_pagination') == 2 && $this->pagination->pagesTotal > 1)) : ?> +
diff --git a/components/com_contact/views/featured/view.html.php b/components/com_contact/views/featured/view.html.php index dfd7a366f4d74..e1f60772e6bb1 100644 --- a/components/com_contact/views/featured/view.html.php +++ b/components/com_contact/views/featured/view.html.php @@ -12,7 +12,7 @@ use Joomla\Registry\Registry; /** - * Frontpage View class + * Featured View class * * @since 1.6 */ @@ -61,32 +61,29 @@ class ContactViewFeatured extends JViewLegacy protected $pagination; /** - * Method to display the view. + * Display the view * - * @param string $tpl A template file to load. [optional] + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * - * @return mixed Exception on failure, void on success. - * - * @since 1.6 + * @return mixed False on error, null otherwise. */ public function display($tpl = null) { - $app = JFactory::getApplication(); - $params = $app->getParams(); + $app = JFactory::getApplication(); + $params = $app->getParams(); // Get some data from the models - $state = $this->get('State'); - $items = $this->get('Items'); - $category = $this->get('Category'); - $children = $this->get('Children'); - $parent = $this->get('Parent'); - $pagination = $this->get('Pagination'); + $state = $this->get('State'); + $items = $this->get('Items'); + $category = $this->get('Category'); + $children = $this->get('Children'); + $parent = $this->get('Parent'); + $pagination = $this->get('Pagination'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); - return false; } @@ -94,14 +91,13 @@ public function display($tpl = null) // Compute the contact slug. for ($i = 0, $n = count($items); $i < $n; $i++) { - $item = &$items[$i]; - $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id; - $temp = new Registry; + $item = &$items[$i]; + $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id; + $temp = new Registry; $temp->loadString($item->params); - $item->params = clone $params; + $item->params = clone($params); $item->params->merge($temp); - if ($item->params->get('show_email', 0) == 1) { $item->email_to = trim($item->email_to); @@ -132,7 +128,7 @@ public function display($tpl = null) $this->_prepareDocument(); - return parent::display($tpl); + parent::display($tpl); } /** @@ -140,13 +136,13 @@ public function display($tpl = null) * * @return void * - * @since 1.5 + * @since 1.6 */ protected function _prepareDocument() { - $app = JFactory::getApplication(); - $menus = $app->getMenu(); - $title = null; + $app = JFactory::getApplication(); + $menus = $app->getMenu(); + $title = null; // Because the application sets a default page title, // we need to get it from the menu item itself @@ -165,15 +161,15 @@ protected function _prepareDocument() if (empty($title)) { - $title = $app->getCfg('sitename'); + $title = $app->get('sitename'); } - elseif ($app->getCfg('sitename_pagetitles', 0) == 1) + elseif ($app->get('sitename_pagetitles', 0) == 1) { - $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title); + $title = JText::sprintf('JPAGETITLE', $app->get('sitename'), $title); } - elseif ($app->getCfg('sitename_pagetitles', 0) == 2) + elseif ($app->get('sitename_pagetitles', 0) == 2) { - $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename')); + $title = JText::sprintf('JPAGETITLE', $title, $app->get('sitename')); } $this->document->setTitle($title); diff --git a/layouts/joomla/content/category_default.php b/layouts/joomla/content/category_default.php index 96ce2012c8893..83af5deb83fd1 100644 --- a/layouts/joomla/content/category_default.php +++ b/layouts/joomla/content/category_default.php @@ -9,19 +9,15 @@ defined('JPATH_BASE') or die; -/** - * Note that this layout opens a div with the page class suffix. If you do not use the category children - * layout you need to close this div either by overriding this file or in your main layout. - */ +// Note that this layout opens a div with the page class suffix. If you do not use the category children +// layout you need to close this div either by overriding this file or in your main layout. $params = $displayData->params; $extension = $displayData->get('category')->extension; $canEdit = $params->get('access-edit'); $className = substr($extension, 4); -/** - * This will work for the core components but not necessarily for other components - * that may have different pluralisation rules. - */ +// This will work for the core components but not necessarily for other components +// that may have different pluralisation rules. if (substr($className, -1) == 's') { $className = rtrim($className, 's'); @@ -35,24 +31,21 @@ escape($params->get('page_heading')); ?> - - get('show_category_title', 1)) : ?> + get('show_category_title', 1)) : ?>

get('category')->title, '', $extension . '.category.title'); ?>

- get('show_cat_tags', 1)) : ?> - get('show_description', 1) || $params->def('show_description_image', 1)) : ?>
get('show_description_image') && $displayData->get('category')->getParams()->get('image')) : ?> <?php echo htmlspecialchars($displayData->get('category')->getParams()->get('image_alt')); ?> get('show_description') && $displayData->get('category')->description) : ?> - get('category')->description, '', $extension . '.category.description'); ?> + get('category')->description, '', $extension . '.category'); ?>
diff --git a/libraries/legacy/view/category.php b/libraries/legacy/view/category.php index 3ed4a0d7e9b46..2d4568c1de7ae 100644 --- a/libraries/legacy/view/category.php +++ b/libraries/legacy/view/category.php @@ -145,35 +145,7 @@ public function commonCategoryDisplay() // Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); - foreach ($items as $itemElement) - { - $itemElement = (object) $itemElement; - $itemElement->event = new stdClass; - - // For some plugins. - !empty($itemElement->description)? $itemElement->text = $itemElement->description : $itemElement->text = null; - - $dispatcher = JEventDispatcher::getInstance(); - JPluginHelper::importPlugin('content'); - - $dispatcher->trigger('onContentPrepare', array ($this->extension . '.category', &$itemElement, &$itemElement->params, 0)); - - $results = $dispatcher->trigger('onContentAfterTitle', array($this->extension . '.category', &$itemElement, &$itemElement->core_params, 0)); - $itemElement->event->afterDisplayTitle = trim(implode("\n", $results)); - - $results = $dispatcher->trigger('onContentBeforeDisplay', array($this->extension . '.category', &$itemElement, &$itemElement->core_params, 0)); - $itemElement->event->beforeDisplayContent = trim(implode("\n", $results)); - - $results = $dispatcher->trigger('onContentAfterDisplay', array($this->extension . '.category', &$itemElement, &$itemElement->core_params, 0)); - $itemElement->event->afterDisplayContent = trim(implode("\n", $results)); - - if ($itemElement->text) - { - $itemElement->description = $itemElement->text; - } - } - - $maxLevel = $params->get('maxLevel', -1) < 0 ? PHP_INT_MAX : $params->get('maxLevel', PHP_INT_MAX); + $maxLevel = $params->get('maxLevel', -1); $this->maxLevel = &$maxLevel; $this->state = &$state; $this->items = &$items; diff --git a/templates/beez3/html/com_contact/category/default.php b/templates/beez3/html/com_contact/category/default.php index 04dc530a8b8a8..d309a661601bf 100644 --- a/templates/beez3/html/com_contact/category/default.php +++ b/templates/beez3/html/com_contact/category/default.php @@ -27,7 +27,7 @@ params->get('show_description') && $this->category->description) : ?> - category->description, '', 'com_contact.category.description'); ?> + category->description, '', 'com_contact.category'); ?>
diff --git a/templates/beez3/html/com_contact/contact/default.php b/templates/beez3/html/com_contact/contact/default.php index 1e42b2af17732..2d19b51c172e0 100644 --- a/templates/beez3/html/com_contact/contact/default.php +++ b/templates/beez3/html/com_contact/contact/default.php @@ -38,9 +38,6 @@ - - item->event->afterDisplayTitle; ?> - params->get('show_contact_list') && count($this->contacts) > 1) : ?> @@ -53,8 +50,6 @@ item->tagLayout->render($this->item->tags->itemTags); ?> - item->event->beforeDisplayContent; ?> - params->get('presentation_style') == 'sliders') : ?> '1')); ?> @@ -171,6 +166,4 @@ params->get('presentation_style') == 'sliders') : echo JHtml::_('sliders.end'); endif; ?> - - item->event->afterDisplayContent; ?> diff --git a/templates/beez3/html/com_contact/contact/encyclopedia.php b/templates/beez3/html/com_contact/contact/encyclopedia.php index d283c06dcdb7c..0257ee83c932b 100644 --- a/templates/beez3/html/com_contact/contact/encyclopedia.php +++ b/templates/beez3/html/com_contact/contact/encyclopedia.php @@ -24,10 +24,6 @@ - item->event->afterDisplayTitle; ?> - - item->event->beforeDisplayContent; ?> -
contact->image ) : ?>
@@ -77,4 +73,3 @@ params->get('presentation_style').'.end'); ?>
-item->event->afterDisplayContent; ?> From 3c968ff10443b6c59468d2b99ffa2598dda22bb8 Mon Sep 17 00:00:00 2001 From: wilsonge Date: Wed, 2 Dec 2015 12:10:29 -0500 Subject: [PATCH 043/104] Add plugin events to com_contact (redo) Fixes #8024 --- .../views/category/tmpl/default_items.php | 7 ++++ .../views/contact/tmpl/default.php | 30 ++++++++++++----- .../com_contact/views/contact/view.html.php | 33 +++++++++++++++++-- .../views/featured/tmpl/default.php | 7 ++-- .../com_contact/views/featured/view.html.php | 12 ++++--- layouts/joomla/content/category_default.php | 19 +++++++---- libraries/legacy/view/category.php | 30 ++++++++++++++++- .../html/com_contact/category/default.php | 2 +- .../html/com_contact/contact/default.php | 8 +++++ .../html/com_contact/contact/encyclopedia.php | 5 +++ 10 files changed, 128 insertions(+), 25 deletions(-) diff --git a/components/com_contact/views/category/tmpl/default_items.php b/components/com_contact/views/category/tmpl/default_items.php index 8fe3c347bbd5e..d74c57cd07904 100644 --- a/components/com_contact/views/category/tmpl/default_items.php +++ b/components/com_contact/views/category/tmpl/default_items.php @@ -71,6 +71,11 @@
+ + event->afterDisplayTitle; ?> + + event->beforeDisplayContent; ?> + params->get('show_position_headings')) : ?> con_position; ?>
@@ -89,6 +94,8 @@ country; ?>
+ + event->afterDisplayContent; ?> diff --git a/components/com_contact/views/contact/tmpl/default.php b/components/com_contact/views/contact/tmpl/default.php index 8c6f4f7ed62b4..40286ba2cde8a 100644 --- a/components/com_contact/views/contact/tmpl/default.php +++ b/components/com_contact/views/contact/tmpl/default.php @@ -19,6 +19,7 @@ escape($this->params->get('page_heading')); ?> + contact->name && $this->params->get('show_name')) : ?> - + + params->get('show_contact_category') == 'show_no_link') : ?>

contact->category_title; ?>

+ + item->event->afterDisplayTitle; ?> + params->get('show_contact_category') == 'show_with_link') : ?> contact->catid); ?>

@@ -42,6 +47,7 @@

+ params->get('show_contact_list') && count($this->contacts) > 1) : ?> @@ -54,9 +60,12 @@ item->tagLayout->render($this->item->tags->itemTags); ?> + item->event->beforeDisplayContent; ?> + params->get('presentation_style') == 'sliders') : ?> 'basic-details')); ?> + params->get('presentation_style') == 'tabs') : ?> 'basic-details')); ?> @@ -64,9 +73,11 @@ params->get('presentation_style') == 'sliders') : ?> + params->get('presentation_style') == 'tabs') : ?> + params->get('presentation_style') == 'plain'):?> ' . JText::_('COM_CONTACT_DETAILS') . ''; ?> @@ -96,6 +107,7 @@ params->get('presentation_style') == 'sliders') : ?> + params->get('presentation_style') == 'tabs') : ?> @@ -108,7 +120,8 @@ params->get('presentation_style') == 'tabs') : ?> - params->get('presentation_style') == 'plain'):?> + + params->get('presentation_style') == 'plain'): ?> ' . JText::_('COM_CONTACT_EMAIL_FORM') . ''; ?> @@ -117,10 +130,10 @@ params->get('presentation_style') == 'sliders') : ?> - params->get('presentation_style') == 'tabs') : ?> - - + params->get('presentation_style') == 'tabs') : ?> + + params->get('show_links')) : ?> @@ -132,9 +145,11 @@ params->get('presentation_style') == 'sliders') : ?> + params->get('presentation_style') == 'tabs') : ?> + params->get('presentation_style') == 'plain'):?> ' . JText::_('JGLOBAL_ARTICLES') . ''; ?> @@ -144,6 +159,7 @@ params->get('presentation_style') == 'sliders') : ?> + params->get('presentation_style') == 'tabs') : ?> @@ -151,7 +167,6 @@ params->get('show_profile') && $this->contact->user_id && JPluginHelper::isEnabled('user', 'profile')) : ?> - params->get('presentation_style') == 'sliders') : ?> @@ -170,11 +185,9 @@ params->get('presentation_style') == 'tabs') : ?> - contact->misc && $this->params->get('show_misc')) : ?> - params->get('presentation_style') == 'sliders') : ?> @@ -215,4 +228,5 @@ params->get('presentation_style') == 'tabs') : ?> + item->event->afterDisplayContent; ?> diff --git a/components/com_contact/views/contact/view.html.php b/components/com_contact/views/contact/view.html.php index 6457f917f7e89..b393e04757d2a 100644 --- a/components/com_contact/views/contact/view.html.php +++ b/components/com_contact/views/contact/view.html.php @@ -102,7 +102,7 @@ public function display($tpl = null) $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); $app->setHeader('status', 403, true); - return; + return false; } $options['category_id'] = $item->catid; @@ -113,6 +113,7 @@ public function display($tpl = null) { $item->email_to = JHtml::_('email.cloak', $item->email_to); } + if ($params->get('show_street_address') || $params->get('show_suburb') || $params->get('show_state') || $params->get('show_postcode') || $params->get('show_country')) { @@ -231,6 +232,31 @@ public function display($tpl = null) $item->link = JRoute::_(ContactHelperRoute::getContactRoute($item->slug, $item->catid)); } + // Process the content plugins. + $dispatcher = JEventDispatcher::getInstance(); + JPluginHelper::importPlugin('content'); + $offset = $state->get('list.offset'); + + // Fix for where some plugins require a text attribute + !empty($item->description)? $item->text = $item->description : $item->text = null; + $dispatcher->trigger('onContentPrepare', array ('com_contact.contact', &$item, &$this->params, $offset)); + + // Store the events for later + $item->event = new stdClass; + $results = $dispatcher->trigger('onContentAfterTitle', array('com_contact.contact', &$item, &$this->params, $offset)); + $item->event->afterDisplayTitle = trim(implode("\n", $results)); + + $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_contact.contact', &$item, &$this->params, $offset)); + $item->event->beforeDisplayContent = trim(implode("\n", $results)); + + $results = $dispatcher->trigger('onContentAfterDisplay', array('com_contact.contact', &$item, &$this->params, $offset)); + $item->event->afterDisplayContent = trim(implode("\n", $results)); + + if ($item->text) + { + $item->description = $item->text; + } + // Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); @@ -273,6 +299,8 @@ public function display($tpl = null) * Prepares the document * * @return void + * + * @since 1.6 */ protected function _prepareDocument() { @@ -301,12 +329,12 @@ protected function _prepareDocument() // If the menu item does not concern this contact if ($menu && ($menu->query['option'] != 'com_contact' || $menu->query['view'] != 'contact' || $id != $this->item->id)) { - // If this is not a single contact menu item, set the page title to the contact title if ($this->item->name) { $title = $this->item->name; } + $path = array(array('title' => $this->contact->name, 'link' => '')); $category = JCategories::getInstance('Contact')->get($this->contact->catid); @@ -341,6 +369,7 @@ protected function _prepareDocument() { $title = $this->item->name; } + $this->document->setTitle($title); if ($this->item->metadesc) diff --git a/components/com_contact/views/featured/tmpl/default.php b/components/com_contact/views/featured/tmpl/default.php index 54c4d15569712..87758e5cf52f4 100644 --- a/components/com_contact/views/featured/tmpl/default.php +++ b/components/com_contact/views/featured/tmpl/default.php @@ -22,6 +22,7 @@ loadTemplate('items'); ?> + params->def('show_pagination', 2) == 1 || ($this->params->get('show_pagination') == 2 && $this->pagination->pagesTotal > 1)) : ?> - diff --git a/components/com_contact/views/featured/view.html.php b/components/com_contact/views/featured/view.html.php index e1f60772e6bb1..f00a1c593509c 100644 --- a/components/com_contact/views/featured/view.html.php +++ b/components/com_contact/views/featured/view.html.php @@ -61,11 +61,13 @@ class ContactViewFeatured extends JViewLegacy protected $pagination; /** - * Display the view + * Method to display the view. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * - * @return mixed False on error, null otherwise. + * @return mixed Exception on failure, void on success. + * + * @since 1.6 */ public function display($tpl = null) { @@ -84,6 +86,7 @@ public function display($tpl = null) if (count($errors = $this->get('Errors'))) { JError::raiseWarning(500, implode("\n", $errors)); + return false; } @@ -96,8 +99,9 @@ public function display($tpl = null) $temp = new Registry; $temp->loadString($item->params); - $item->params = clone($params); + $item->params = clone $params; $item->params->merge($temp); + if ($item->params->get('show_email', 0) == 1) { $item->email_to = trim($item->email_to); @@ -128,7 +132,7 @@ public function display($tpl = null) $this->_prepareDocument(); - parent::display($tpl); + return parent::display($tpl); } /** diff --git a/layouts/joomla/content/category_default.php b/layouts/joomla/content/category_default.php index 83af5deb83fd1..96ce2012c8893 100644 --- a/layouts/joomla/content/category_default.php +++ b/layouts/joomla/content/category_default.php @@ -9,15 +9,19 @@ defined('JPATH_BASE') or die; -// Note that this layout opens a div with the page class suffix. If you do not use the category children -// layout you need to close this div either by overriding this file or in your main layout. +/** + * Note that this layout opens a div with the page class suffix. If you do not use the category children + * layout you need to close this div either by overriding this file or in your main layout. + */ $params = $displayData->params; $extension = $displayData->get('category')->extension; $canEdit = $params->get('access-edit'); $className = substr($extension, 4); -// This will work for the core components but not necessarily for other components -// that may have different pluralisation rules. +/** + * This will work for the core components but not necessarily for other components + * that may have different pluralisation rules. + */ if (substr($className, -1) == 's') { $className = rtrim($className, 's'); @@ -31,21 +35,24 @@ escape($params->get('page_heading')); ?> - get('show_category_title', 1)) : ?> + + get('show_category_title', 1)) : ?>

get('category')->title, '', $extension . '.category.title'); ?>

+ get('show_cat_tags', 1)) : ?> + get('show_description', 1) || $params->def('show_description_image', 1)) : ?>
get('show_description_image') && $displayData->get('category')->getParams()->get('image')) : ?> <?php echo htmlspecialchars($displayData->get('category')->getParams()->get('image_alt')); ?> get('show_description') && $displayData->get('category')->description) : ?> - get('category')->description, '', $extension . '.category'); ?> + get('category')->description, '', $extension . '.category.description'); ?>
diff --git a/libraries/legacy/view/category.php b/libraries/legacy/view/category.php index 2d4568c1de7ae..3ed4a0d7e9b46 100644 --- a/libraries/legacy/view/category.php +++ b/libraries/legacy/view/category.php @@ -145,7 +145,35 @@ public function commonCategoryDisplay() // Escape strings for HTML output $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx')); - $maxLevel = $params->get('maxLevel', -1); + foreach ($items as $itemElement) + { + $itemElement = (object) $itemElement; + $itemElement->event = new stdClass; + + // For some plugins. + !empty($itemElement->description)? $itemElement->text = $itemElement->description : $itemElement->text = null; + + $dispatcher = JEventDispatcher::getInstance(); + JPluginHelper::importPlugin('content'); + + $dispatcher->trigger('onContentPrepare', array ($this->extension . '.category', &$itemElement, &$itemElement->params, 0)); + + $results = $dispatcher->trigger('onContentAfterTitle', array($this->extension . '.category', &$itemElement, &$itemElement->core_params, 0)); + $itemElement->event->afterDisplayTitle = trim(implode("\n", $results)); + + $results = $dispatcher->trigger('onContentBeforeDisplay', array($this->extension . '.category', &$itemElement, &$itemElement->core_params, 0)); + $itemElement->event->beforeDisplayContent = trim(implode("\n", $results)); + + $results = $dispatcher->trigger('onContentAfterDisplay', array($this->extension . '.category', &$itemElement, &$itemElement->core_params, 0)); + $itemElement->event->afterDisplayContent = trim(implode("\n", $results)); + + if ($itemElement->text) + { + $itemElement->description = $itemElement->text; + } + } + + $maxLevel = $params->get('maxLevel', -1) < 0 ? PHP_INT_MAX : $params->get('maxLevel', PHP_INT_MAX); $this->maxLevel = &$maxLevel; $this->state = &$state; $this->items = &$items; diff --git a/templates/beez3/html/com_contact/category/default.php b/templates/beez3/html/com_contact/category/default.php index d309a661601bf..04dc530a8b8a8 100644 --- a/templates/beez3/html/com_contact/category/default.php +++ b/templates/beez3/html/com_contact/category/default.php @@ -27,7 +27,7 @@ params->get('show_description') && $this->category->description) : ?> - category->description, '', 'com_contact.category'); ?> + category->description, '', 'com_contact.category.description'); ?>
diff --git a/templates/beez3/html/com_contact/contact/default.php b/templates/beez3/html/com_contact/contact/default.php index 2d19b51c172e0..deed9166e57c7 100644 --- a/templates/beez3/html/com_contact/contact/default.php +++ b/templates/beez3/html/com_contact/contact/default.php @@ -38,6 +38,9 @@ + + item->event->afterDisplayTitle; ?> + params->get('show_contact_list') && count($this->contacts) > 1) : ?> @@ -50,6 +53,8 @@ item->tagLayout->render($this->item->tags->itemTags); ?> + item->event->beforeDisplayContent; ?> + params->get('presentation_style') == 'sliders') : ?> '1')); ?> @@ -57,6 +62,7 @@ params->get('presentation_style') == 'tabs') : ?> '1')); ?> + params->get('presentation_style') == 'plain'):?> ' . JText::_('COM_CONTACT_DETAILS') . ''; ?> @@ -166,4 +172,6 @@ params->get('presentation_style') == 'sliders') : echo JHtml::_('sliders.end'); endif; ?> + + item->event->afterDisplayContent; ?> diff --git a/templates/beez3/html/com_contact/contact/encyclopedia.php b/templates/beez3/html/com_contact/contact/encyclopedia.php index 0257ee83c932b..d283c06dcdb7c 100644 --- a/templates/beez3/html/com_contact/contact/encyclopedia.php +++ b/templates/beez3/html/com_contact/contact/encyclopedia.php @@ -24,6 +24,10 @@ + item->event->afterDisplayTitle; ?> + + item->event->beforeDisplayContent; ?> +
contact->image ) : ?>
@@ -73,3 +77,4 @@ params->get('presentation_style').'.end'); ?>
+item->event->afterDisplayContent; ?> From ec993d708b268566cdbb998c25cf269851195d98 Mon Sep 17 00:00:00 2001 From: Jean-Marie Simonet Date: Sun, 6 Dec 2015 10:11:00 +0100 Subject: [PATCH 044/104] B/C readding missing string and alpha ordering new strings --- language/en-GB/en-GB.com_contact.ini | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/language/en-GB/en-GB.com_contact.ini b/language/en-GB/en-GB.com_contact.ini index ecc50744b34b9..e011243c44bec 100644 --- a/language/en-GB/en-GB.com_contact.ini +++ b/language/en-GB/en-GB.com_contact.ini @@ -8,6 +8,7 @@ COM_CONTACT_ARTICLES_HEADING="Contact's articles" COM_CONTACT_CAPTCHA_LABEL="Captcha" COM_CONTACT_CAPTCHA_DESC="Type in the textbox what you see in the image." COM_CONTACT_CAT_NUM="# of Contacts :" +COM_CONTACT_CONTACT_DEFAULT_LABEL="Send an Email" COM_CONTACT_CONTACT_EMAIL_A_COPY_DESC="Sends a copy of the message to the address you have supplied." COM_CONTACT_CONTACT_EMAIL_A_COPY_LABEL="Send copy to yourself" COM_CONTACT_CONTACT_EMAIL_NAME_DESC="Your name." @@ -15,6 +16,7 @@ COM_CONTACT_CONTACT_EMAIL_NAME_LABEL="Name" COM_CONTACT_CONTACT_ENTER_MESSAGE_DESC="Enter your message here." COM_CONTACT_CONTACT_ENTER_MESSAGE_LABEL="Message" COM_CONTACT_CONTACT_ENTER_VALID_EMAIL="Please enter a valid email address." +COM_CONTACT_CONTACT_REQUIRED="* Required field" COM_CONTACT_CONTENT_TYPE_CONTACT="Contact" COM_CONTACT_CONTENT_TYPE_CATEGORY="Contact Category" COM_CONTACT_FILTER_LABEL="Filter Field" @@ -38,7 +40,7 @@ COM_CONTACT_ENQUIRY_TEXT="This is an enquiry email via %s from:" COM_CONTACT_ERROR_CONTACT_NOT_FOUND="Contact not found" COM_CONTACT_FAX="Fax" COM_CONTACT_FAX_NUMBER="Fax: %s" -COM_CONTACT_CONTACT_DEFAULT_LABEL="Send an Email" +COM_CONTACT_FORM_LABEL="Send an Email. All fields with an asterisk (*) are required. COM_CONTACT_FORM_NC="Please make sure the form is complete and valid." COM_CONTACT_IMAGE_DETAILS="Contact image" COM_CONTACT_LINKS="Links" @@ -48,7 +50,6 @@ COM_CONTACT_MOBILE_NUMBER="Mobile: %s" COM_CONTACT_NO_CONTACTS="There are no Contacts to display" COM_CONTACT_NOT_MORE_THAN_ONE_EMAIL_ADDRESS="You can't enter more than one email address." COM_CONTACT_NUM_ITEMS="Contact Count:" -COM_CONTACT_CONTACT_REQUIRED="* Required field" COM_CONTACT_OPTIONAL="(optional)" COM_CONTACT_OTHER_INFORMATION="Miscellaneous Information" COM_CONTACT_POSITION="Position" From 331297ac3f7a5c1af4310947225434eeb48f1365 Mon Sep 17 00:00:00 2001 From: Thomas Hunziker Date: Sun, 6 Dec 2015 13:38:44 +0100 Subject: [PATCH 045/104] Fixing language file syntax (missing ") --- language/en-GB/en-GB.com_contact.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/en-GB/en-GB.com_contact.ini b/language/en-GB/en-GB.com_contact.ini index e011243c44bec..59878e062bbaf 100644 --- a/language/en-GB/en-GB.com_contact.ini +++ b/language/en-GB/en-GB.com_contact.ini @@ -40,7 +40,7 @@ COM_CONTACT_ENQUIRY_TEXT="This is an enquiry email via %s from:" COM_CONTACT_ERROR_CONTACT_NOT_FOUND="Contact not found" COM_CONTACT_FAX="Fax" COM_CONTACT_FAX_NUMBER="Fax: %s" -COM_CONTACT_FORM_LABEL="Send an Email. All fields with an asterisk (*) are required. +COM_CONTACT_FORM_LABEL="Send an Email. All fields with an asterisk (*) are required." COM_CONTACT_FORM_NC="Please make sure the form is complete and valid." COM_CONTACT_IMAGE_DETAILS="Contact image" COM_CONTACT_LINKS="Links" From 856f6a08f3b03dc1941e54d6e06f7d3b2bc39853 Mon Sep 17 00:00:00 2001 From: George Wilson Date: Tue, 8 Dec 2015 15:34:06 +0000 Subject: [PATCH 046/104] Travis builds were failing --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 298c7c77e2b62..b25ed34a4f3ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ before_script: # Enable additional PHP extensions - if [ "$INSTALL_MEMCACHED" == "yes" ]; then phpenv config-add build/travis/phpenv/memcached.ini; fi - if [ "$INSTALL_APC" == "yes" ]; then phpenv config-add build/travis/phpenv/apc-$TRAVIS_PHP_VERSION.ini; fi - - if [ "$INSTALL_APCU_STABLE" == "yes" ]; then printf "\n" | pecl install apcu; fi + - if [ "$INSTALL_APCU_STABLE" == "yes" ]; then printf "\n" | pecl install apcu-4.0.10; fi - if [ "$INSTALL_APCU_BETA" == "yes" ]; then printf "\n" | pecl install apcu-beta; fi - if [ "$INSTALL_REDIS" == "yes" ]; then phpenv config-add build/travis/phpenv/redis.ini; fi From 7f99ba176f4559b0d5bba72bb9556abdd5a2cda7 Mon Sep 17 00:00:00 2001 From: Dimitri Grammatikogianni Date: Tue, 8 Dec 2015 18:39:58 +0100 Subject: [PATCH 047/104] travis again --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b25ed34a4f3ed..b316709d4d65b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,9 +16,9 @@ matrix: - php: 5.4 env: INSTALL_APC="yes" - php: 5.5 - env: INSTALL_APCU_STABLE="yes" + env: INSTALL_APCU_BC="yes" - php: 5.6 - env: RUN_PHPCS="yes" INSTALL_APCU_STABLE="yes" + env: RUN_PHPCS="yes" INSTALL_APCU_BC="yes" - php: 7.0 env: INSTALL_APCU_BETA="yes" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" @@ -39,7 +39,7 @@ before_script: # Enable additional PHP extensions - if [ "$INSTALL_MEMCACHED" == "yes" ]; then phpenv config-add build/travis/phpenv/memcached.ini; fi - if [ "$INSTALL_APC" == "yes" ]; then phpenv config-add build/travis/phpenv/apc-$TRAVIS_PHP_VERSION.ini; fi - - if [ "$INSTALL_APCU_STABLE" == "yes" ]; then printf "\n" | pecl install apcu-4.0.10; fi + - if [ "$INSTALL_APCU_BC" == "yes" ]; then printf "\n" | pecl install apcu-4.0.10; fi - if [ "$INSTALL_APCU_BETA" == "yes" ]; then printf "\n" | pecl install apcu-beta; fi - if [ "$INSTALL_REDIS" == "yes" ]; then phpenv config-add build/travis/phpenv/redis.ini; fi From 4347ae14215158a43ec2b480afa2d23b56a3f447 Mon Sep 17 00:00:00 2001 From: Dimitri Grammatikogianni Date: Tue, 8 Dec 2015 18:44:19 +0100 Subject: [PATCH 048/104] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b316709d4d65b..d13995b153b7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ matrix: - php: 5.6 env: RUN_PHPCS="yes" INSTALL_APCU_BC="yes" - php: 7.0 - env: INSTALL_APCU_BETA="yes" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" + env: INSTALL_APCU_BC_BETA="yes" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" services: - memcached From b2f19bbf7a7e25632d77316ca12075c4c49ce0d7 Mon Sep 17 00:00:00 2001 From: Dimitri Grammatikogianni Date: Tue, 8 Dec 2015 18:46:43 +0100 Subject: [PATCH 049/104] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d13995b153b7f..b316709d4d65b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ matrix: - php: 5.6 env: RUN_PHPCS="yes" INSTALL_APCU_BC="yes" - php: 7.0 - env: INSTALL_APCU_BC_BETA="yes" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" + env: INSTALL_APCU_BETA="yes" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" services: - memcached From 1b39a61ee8638a3742d9162425166dffea321368 Mon Sep 17 00:00:00 2001 From: Dimitri Grammatikogianni Date: Tue, 8 Dec 2015 18:58:09 +0100 Subject: [PATCH 050/104] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b316709d4d65b..d13995b153b7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ matrix: - php: 5.6 env: RUN_PHPCS="yes" INSTALL_APCU_BC="yes" - php: 7.0 - env: INSTALL_APCU_BETA="yes" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" + env: INSTALL_APCU_BC_BETA="yes" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" services: - memcached From a6753e1cf015ba1b704012f49a0784ccc245af9d Mon Sep 17 00:00:00 2001 From: Michael Babker Date: Tue, 8 Dec 2015 13:45:38 -0500 Subject: [PATCH 051/104] Seriously fix Travis builds --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index d13995b153b7f..9c51d3429ea1b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,11 +16,11 @@ matrix: - php: 5.4 env: INSTALL_APC="yes" - php: 5.5 - env: INSTALL_APCU_BC="yes" + env: INSTALL_APCU="yes" - php: 5.6 - env: RUN_PHPCS="yes" INSTALL_APCU_BC="yes" + env: RUN_PHPCS="yes" INSTALL_APCU="yes" - php: 7.0 - env: INSTALL_APCU_BC_BETA="yes" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" + env: INSTALL_APCU_BC_BETA="no" INSTALL_MEMCACHED="no" INSTALL_REDIS="no" # Disabled apcu_bc install until https://github.com/travis-ci/travis-ci/issues/5207 is resolved services: - memcached @@ -39,8 +39,8 @@ before_script: # Enable additional PHP extensions - if [ "$INSTALL_MEMCACHED" == "yes" ]; then phpenv config-add build/travis/phpenv/memcached.ini; fi - if [ "$INSTALL_APC" == "yes" ]; then phpenv config-add build/travis/phpenv/apc-$TRAVIS_PHP_VERSION.ini; fi - - if [ "$INSTALL_APCU_BC" == "yes" ]; then printf "\n" | pecl install apcu-4.0.10; fi - - if [ "$INSTALL_APCU_BETA" == "yes" ]; then printf "\n" | pecl install apcu-beta; fi + - if [ "$INSTALL_APCU" == "yes" ]; then printf "\n" | pecl install apcu-4.0.10; fi + - if [ "$INSTALL_APCU_BC_BETA" == "yes" ]; then printf "\n" | pecl install apcu_bc-beta; fi - if [ "$INSTALL_REDIS" == "yes" ]; then phpenv config-add build/travis/phpenv/redis.ini; fi script: From 50998746169cd0fb069489c929e3faa48e3459ee Mon Sep 17 00:00:00 2001 From: Jean-Marie Simonet Date: Wed, 9 Dec 2015 10:23:18 +0100 Subject: [PATCH 052/104] RTL: correcting Protostar display Contact details --- administrator/templates/isis/css/template-rtl.css | 7 +++++++ media/jui/css/bootstrap-rtl.css | 7 +++++++ media/jui/less/bootstrap-rtl.less | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/administrator/templates/isis/css/template-rtl.css b/administrator/templates/isis/css/template-rtl.css index e0eab3600334b..a50d5fa4ca508 100644 --- a/administrator/templates/isis/css/template-rtl.css +++ b/administrator/templates/isis/css/template-rtl.css @@ -8562,7 +8562,14 @@ body { } .dl-horizontal dt { float: right; + text-align: left; + clear: right; +} +.dl-horizontal dd { + margin-left: 0; + margin-right: 180px; } +.dl-horizontal dt .profile> ul { margin: 9px 25px 0 0; } diff --git a/media/jui/css/bootstrap-rtl.css b/media/jui/css/bootstrap-rtl.css index 53eae1552d74b..640911e0d16a0 100644 --- a/media/jui/css/bootstrap-rtl.css +++ b/media/jui/css/bootstrap-rtl.css @@ -437,7 +437,14 @@ body { } .dl-horizontal dt { float: right; + text-align: left; + clear: right; +} +.dl-horizontal dd { + margin-left: 0; + margin-right: 180px; } +.dl-horizontal dt .profile> ul { margin: 9px 25px 0 0; } diff --git a/media/jui/less/bootstrap-rtl.less b/media/jui/less/bootstrap-rtl.less index b3cd0cc0444e2..2d87d48bfa30d 100644 --- a/media/jui/less/bootstrap-rtl.less +++ b/media/jui/less/bootstrap-rtl.less @@ -447,7 +447,14 @@ direction:rtl; } .dl-horizontal dt { float: right; + text-align: left; + clear: right; +} +.dl-horizontal dd { + margin-left: 0; + margin-right: 180px; } +.dl-horizontal dt .profile> ul { margin: 9px 25px 0 0; } From db1605f764837113f7d735ebebde0226c743a4dd Mon Sep 17 00:00:00 2001 From: bertmert Date: Wed, 9 Dec 2015 11:01:25 +0100 Subject: [PATCH 053/104] Select Module. Shows always frontend modules --- administrator/components/com_modules/models/select.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_modules/models/select.php b/administrator/components/com_modules/models/select.php index a2cd220b3174a..a0063b943e754 100644 --- a/administrator/components/com_modules/models/select.php +++ b/administrator/components/com_modules/models/select.php @@ -33,7 +33,7 @@ protected function populateState($ordering = null, $direction = null) $app = JFactory::getApplication('administrator'); // Load the filter state. - $clientId = $app->getUserState('com_modules.modules.filter.client_id', 0); + $clientId = $app->getUserState('com_modules.modules.client_id', 0); $this->setState('filter.client_id', (int) $clientId); // Load the parameters. From 15cc13aa26d51fe8bf9fbffea9a464c2b080fc13 Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Wed, 9 Dec 2015 12:32:08 +0000 Subject: [PATCH 054/104] Update tag creation tooltip --- administrator/language/en-GB/en-GB.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/language/en-GB/en-GB.ini b/administrator/language/en-GB/en-GB.ini index 49c527a4c3005..afaac13b93288 100644 --- a/administrator/language/en-GB/en-GB.ini +++ b/administrator/language/en-GB/en-GB.ini @@ -111,7 +111,7 @@ JSHOW="Show" JSITE="Site" JSUBMIT="Submit" JTAG="Tags" -JTAG_DESC="Assign tags to content items. You may select a tag from the pre-defined list or enter your own by typing the name in the field and pressing enter." +JTAG_DESC="Assign tags to content items. You may select a tag from the pre-defined list or enter a new tag by typing the name in the field and pressing enter." JTRASH="Trash" JTRASHED="Trashed" JTRUE="True" From bc26b314e06d61d7c0b2b5d1cdee47e2205ccf1f Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Wed, 9 Dec 2015 12:33:11 +0000 Subject: [PATCH 055/104] sync front end and back end --- language/en-GB/en-GB.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/en-GB/en-GB.ini b/language/en-GB/en-GB.ini index 5cd00733f1dc6..5df1b9609e67b 100644 --- a/language/en-GB/en-GB.ini +++ b/language/en-GB/en-GB.ini @@ -87,7 +87,7 @@ JSITE="Site" JSTATUS="Status" JSUBMIT="Submit" JTAG="Tags" -JTAG_DESC="Add and delete tags to an item." +JTAG_DESC="Assign tags to content items. You may select a tag from the pre-defined list or enter a new tag by typing the name in the field and pressing enter." JTOOLBAR_VERSIONS="Versions" JTRASH="Trash" JTRASHED="Trashed" From 4fd8ea9d3715dd992dc6cf3dd08ea6bc79f5d31e Mon Sep 17 00:00:00 2001 From: bertmert Date: Wed, 9 Dec 2015 21:41:12 +0100 Subject: [PATCH 056/104] Ordering by headline fix --- .../views/contacts/tmpl/default.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/administrator/components/com_contact/views/contacts/tmpl/default.php b/administrator/components/com_contact/views/contacts/tmpl/default.php index 3601e5ff9030b..319913751577d 100644 --- a/administrator/components/com_contact/views/contacts/tmpl/default.php +++ b/administrator/components/com_contact/views/contacts/tmpl/default.php @@ -54,36 +54,36 @@ - ', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + - + - + - + - + - + - + - + - + From 565764f39cd3e7daeaa13f3b698075fb3f126c9a Mon Sep 17 00:00:00 2001 From: bertmert Date: Wed, 9 Dec 2015 22:04:45 +0100 Subject: [PATCH 057/104] Language ordering. Wrong state fullordering list --- .../components/com_contact/models/forms/filter_contacts.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/administrator/components/com_contact/models/forms/filter_contacts.xml b/administrator/components/com_contact/models/forms/filter_contacts.xml index ab7561bfdcda0..2d59265f11283 100755 --- a/administrator/components/com_contact/models/forms/filter_contacts.xml +++ b/administrator/components/com_contact/models/forms/filter_contacts.xml @@ -80,8 +80,8 @@ - - + + From febfbe3da14f01aa08a77a95327c2ade8678a3ec Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Thu, 10 Dec 2015 10:48:23 +0100 Subject: [PATCH 058/104] Debug console - Profile Information Profile Information bars Time,Memory Add time and memory info on each tooltip --- plugins/system/debug/debug.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/system/debug/debug.php b/plugins/system/debug/debug.php index 60d4d81402160..47b5683ef3a50 100644 --- a/plugins/system/debug/debug.php +++ b/plugins/system/debug/debug.php @@ -582,13 +582,13 @@ protected function displayProfileInformation() $bars[] = (object) array( 'width' => round($mark->time / ($totalTime / 100), 4), 'class' => $barClass, - 'tip' => $mark->tip + 'tip' => $mark->tip . ' ' . round($mark->time , 1) . ' ms' ); $barsMem[] = (object) array( 'width' => round($mark->memory / ($totalMem / 100), 4), 'class' => $barClassMem, - 'tip' => $mark->tip + 'tip' => $mark->tip . ' ' . round($mark->memory , 3) .' MB', ); $htmlMarks[] = '
' . str_replace('label-time', $labelClass, str_replace('label-memory', $labelClassMem, $mark->html)) . '
'; From 37672b8dc1ae76caad6f36dcca9d08e230c27ef8 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Thu, 10 Dec 2015 11:19:04 +0100 Subject: [PATCH 059/104] travis fix Space found before comma in function call --- plugins/system/debug/debug.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/system/debug/debug.php b/plugins/system/debug/debug.php index 47b5683ef3a50..3825633779614 100644 --- a/plugins/system/debug/debug.php +++ b/plugins/system/debug/debug.php @@ -582,13 +582,13 @@ protected function displayProfileInformation() $bars[] = (object) array( 'width' => round($mark->time / ($totalTime / 100), 4), 'class' => $barClass, - 'tip' => $mark->tip . ' ' . round($mark->time , 1) . ' ms' + 'tip' => $mark->tip . ' ' . round($mark->time, 1) . ' ms' ); $barsMem[] = (object) array( 'width' => round($mark->memory / ($totalMem / 100), 4), 'class' => $barClassMem, - 'tip' => $mark->tip . ' ' . round($mark->memory , 3) .' MB', + 'tip' => $mark->tip . ' ' . round($mark->memory, 3) . ' MB', ); $htmlMarks[] = '
' . str_replace('label-time', $labelClass, str_replace('label-memory', $labelClassMem, $mark->html)) . '
'; From 4befc6378e23af43c631c27a2dddee8dc09a34d7 Mon Sep 17 00:00:00 2001 From: George Wilson Date: Fri, 11 Dec 2015 15:49:28 +0000 Subject: [PATCH 060/104] Deal with fatal when XML Form can't be found --- administrator/components/com_users/models/user.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/administrator/components/com_users/models/user.php b/administrator/components/com_users/models/user.php index 3ada3300eea20..b30326bbb26f3 100644 --- a/administrator/components/com_users/models/user.php +++ b/administrator/components/com_users/models/user.php @@ -877,9 +877,14 @@ public function getAssignedGroups($userId = null) if (empty($userId)) { - $result = array(); + $result = array(); + $form = $this->getForm(); + $groupIDs = array(); - $groupsIDs = $this->getForm()->getValue('groups'); + if ($form) + { + $groupsIDs = $form->getValue('groups'); + } if (!empty($groupsIDs)) { From 296a70b49e5c680d8caa33aff80f8c3934a7851b Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 12 Dec 2015 10:24:47 +0000 Subject: [PATCH 061/104] remove twitter --- administrator/language/en-GB/en-GB.tpl_isis.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/language/en-GB/en-GB.tpl_isis.ini b/administrator/language/en-GB/en-GB.tpl_isis.ini index df123e1784b2c..241ec1aa6c480 100644 --- a/administrator/language/en-GB/en-GB.tpl_isis.ini +++ b/administrator/language/en-GB/en-GB.tpl_isis.ini @@ -35,4 +35,4 @@ TPL_ISIS_STATUS_TOP="Top" TPL_ISIS_STICKY_DESC="Optionally set the toolbar to a fixed (pinned) location." TPL_ISIS_STICKY_LABEL="Pinned Toolbar" TPL_ISIS_TOOLBAR="Toolbar" -TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap from Twitter and the launch of the Joomla User Interface library (JUI)." +TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." From 7baf257d91855cded7742c124387a0e1532e675a Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 12 Dec 2015 10:25:11 +0000 Subject: [PATCH 062/104] Update en-GB.tpl_isis.sys.ini --- administrator/language/en-GB/en-GB.tpl_isis.sys.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/language/en-GB/en-GB.tpl_isis.sys.ini b/administrator/language/en-GB/en-GB.tpl_isis.sys.ini index 024b811c3bd42..0905379e468d1 100644 --- a/administrator/language/en-GB/en-GB.tpl_isis.sys.ini +++ b/administrator/language/en-GB/en-GB.tpl_isis.sys.ini @@ -17,4 +17,4 @@ TPL_ISIS_POSITION_STATUS="Status" TPL_ISIS_POSITION_SUBMENU="Submenu" TPL_ISIS_POSITION_TITLE="Title" TPL_ISIS_POSITION_TOOLBAR="Toolbar" -TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap from Twitter and the launch of the Joomla User Interface library (JUI)." +TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." From 088bad29a796c019721d745f7cc6c630d874871c Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 12 Dec 2015 10:25:54 +0000 Subject: [PATCH 063/104] Update en-GB.tpl_isis.sys.ini --- .../templates/isis/language/en-GB/en-GB.tpl_isis.sys.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/templates/isis/language/en-GB/en-GB.tpl_isis.sys.ini b/administrator/templates/isis/language/en-GB/en-GB.tpl_isis.sys.ini index 41f25471f7997..0905379e468d1 100644 --- a/administrator/templates/isis/language/en-GB/en-GB.tpl_isis.sys.ini +++ b/administrator/templates/isis/language/en-GB/en-GB.tpl_isis.sys.ini @@ -17,4 +17,4 @@ TPL_ISIS_POSITION_STATUS="Status" TPL_ISIS_POSITION_SUBMENU="Submenu" TPL_ISIS_POSITION_TITLE="Title" TPL_ISIS_POSITION_TOOLBAR="Toolbar" -TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap from Twitter and the launch of the Joomla User Interface library (JUI)." \ No newline at end of file +TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." From 3fefe7110e43f98f9cadae3e6c8e2d84f7e318d5 Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 12 Dec 2015 10:26:27 +0000 Subject: [PATCH 064/104] Update en-GB.tpl_isis.ini --- administrator/templates/isis/language/en-GB/en-GB.tpl_isis.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/templates/isis/language/en-GB/en-GB.tpl_isis.ini b/administrator/templates/isis/language/en-GB/en-GB.tpl_isis.ini index 38c537e20286e..00cdb292beae8 100644 --- a/administrator/templates/isis/language/en-GB/en-GB.tpl_isis.ini +++ b/administrator/templates/isis/language/en-GB/en-GB.tpl_isis.ini @@ -35,4 +35,4 @@ TPL_ISIS_STATUS_TOP="Top" TPL_ISIS_STICKY_DESC="Optionally set the toolbar to a fixed (pinned) location." TPL_ISIS_STICKY_LABEL="Pinned Toolbar" TPL_ISIS_TOOLBAR="Toolbar" -TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap from Twitter and the launch of the Joomla User Interface library (JUI)." +TPL_ISIS_XML_DESCRIPTION="Continuing the Egyptian god/goddess theme (Khepri from 1.5 and Hathor from 1.6), Isis is the Joomla 3 administrator template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." From d6446991a01edc2c694b23ad3820cb27c1ed419e Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 12 Dec 2015 10:26:52 +0000 Subject: [PATCH 065/104] Update en-GB.tpl_protostar.ini --- language/en-GB/en-GB.tpl_protostar.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/en-GB/en-GB.tpl_protostar.ini b/language/en-GB/en-GB.tpl_protostar.ini index 92ec745f14b2d..4e570e9bb4dcb 100644 --- a/language/en-GB/en-GB.tpl_protostar.ini +++ b/language/en-GB/en-GB.tpl_protostar.ini @@ -3,7 +3,7 @@ ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 -TPL_PROTOSTAR_XML_DESCRIPTION="Continuing the space theme (Solarflare from 1.0 and Milkyway from 1.5), Protostar is the Joomla 3 site template based on Bootstrap from Twitter and the launch of the Joomla User Interface library (JUI)." +TPL_PROTOSTAR_XML_DESCRIPTION="Continuing the space theme (Solarflare from 1.0 and Milkyway from 1.5), Protostar is the Joomla 3 site template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." TPL_PROTOSTAR_BACKGROUND_COLOR_DESC="Choose a background colour for static layouts. If left blank the Default (#f4f6f7) is used." TPL_PROTOSTAR_BACKGROUND_COLOR_LABEL="Background Colour" From 1ab1ccbdb3039d155fd6629027a4690b041367d6 Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 12 Dec 2015 10:27:12 +0000 Subject: [PATCH 066/104] Update en-GB.tpl_protostar.sys.ini --- language/en-GB/en-GB.tpl_protostar.sys.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/en-GB/en-GB.tpl_protostar.sys.ini b/language/en-GB/en-GB.tpl_protostar.sys.ini index 18ff60c7c05f6..f90e7f8e2c2e9 100644 --- a/language/en-GB/en-GB.tpl_protostar.sys.ini +++ b/language/en-GB/en-GB.tpl_protostar.sys.ini @@ -22,4 +22,4 @@ TPL_PROTOSTAR_POSITION_POSITION-7="Right" TPL_PROTOSTAR_POSITION_POSITION-8="Left" TPL_PROTOSTAR_POSITION_POSITION-9="Unused" TPL_PROTOSTAR_POSITION_FOOTER="Footer" -TPL_PROTOSTAR_XML_DESCRIPTION="Continuing the space theme (Solarflare from 1.0 and Milkyway from 1.5), Protostar is the Joomla 3 site template based on Bootstrap from Twitter and the launch of the Joomla User Interface library (JUI)." +TPL_PROTOSTAR_XML_DESCRIPTION="Continuing the space theme (Solarflare from 1.0 and Milkyway from 1.5), Protostar is the Joomla 3 site template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." From f3f7d36afd1b17f70d50f006eb460341f86b8a1c Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 12 Dec 2015 10:27:40 +0000 Subject: [PATCH 067/104] Update en-GB.tpl_protostar.ini --- templates/protostar/language/en-GB/en-GB.tpl_protostar.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/protostar/language/en-GB/en-GB.tpl_protostar.ini b/templates/protostar/language/en-GB/en-GB.tpl_protostar.ini index 842766f06493e..8e9cc99cbffe5 100644 --- a/templates/protostar/language/en-GB/en-GB.tpl_protostar.ini +++ b/templates/protostar/language/en-GB/en-GB.tpl_protostar.ini @@ -3,7 +3,7 @@ ; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php ; Note : All ini files need to be saved as UTF-8 -TPL_PROTOSTAR_XML_DESCRIPTION="Continuing the space theme (Solarflare from 1.0 and Milkyway from 1.5), Protostar is the Joomla 3 site template based on Bootstrap from Twitter and the launch of the Joomla User Interface library (JUI)." +TPL_PROTOSTAR_XML_DESCRIPTION="Continuing the space theme (Solarflare from 1.0 and Milkyway from 1.5), Protostar is the Joomla 3 site template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." TPL_PROTOSTAR_BACKGROUND_COLOR_DESC="Choose a background colour for static layouts. If left blank the Default (#f4f6f7) is used." TPL_PROTOSTAR_BACKGROUND_COLOR_LABEL="Background Colour" From a47a0a051735fd4df8513572db0250ef0a375095 Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sat, 12 Dec 2015 10:27:56 +0000 Subject: [PATCH 068/104] Update en-GB.tpl_protostar.sys.ini --- templates/protostar/language/en-GB/en-GB.tpl_protostar.sys.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/protostar/language/en-GB/en-GB.tpl_protostar.sys.ini b/templates/protostar/language/en-GB/en-GB.tpl_protostar.sys.ini index ebcf24e898dc3..043cc43e29ea0 100644 --- a/templates/protostar/language/en-GB/en-GB.tpl_protostar.sys.ini +++ b/templates/protostar/language/en-GB/en-GB.tpl_protostar.sys.ini @@ -22,4 +22,4 @@ TPL_PROTOSTAR_POSITION_POSITION-7="Right" TPL_PROTOSTAR_POSITION_POSITION-8="Left" TPL_PROTOSTAR_POSITION_POSITION-9="Unused" TPL_PROTOSTAR_POSITION_FOOTER="Footer" -TPL_PROTOSTAR_XML_DESCRIPTION="Continuing the space theme (Solarflare from 1.0 and Milkyway from 1.5), Protostar is the Joomla 3 site template based on Bootstrap from Twitter and the launch of the Joomla User Interface library (JUI)." +TPL_PROTOSTAR_XML_DESCRIPTION="Continuing the space theme (Solarflare from 1.0 and Milkyway from 1.5), Protostar is the Joomla 3 site template based on Bootstrap and the launch of the Joomla User Interface library (JUI)." From 01be6e43d6fc1eb8899c4b76d70fb02c7ae1bb06 Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sun, 13 Dec 2015 12:02:14 +0000 Subject: [PATCH 069/104] Change order of select --- .../com_contact/models/forms/filter_contacts.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/administrator/components/com_contact/models/forms/filter_contacts.xml b/administrator/components/com_contact/models/forms/filter_contacts.xml index 2d59265f11283..cfe21d9e42289 100755 --- a/administrator/components/com_contact/models/forms/filter_contacts.xml +++ b/administrator/components/com_contact/models/forms/filter_contacts.xml @@ -76,16 +76,17 @@ - - + + + + - - + Date: Sun, 13 Dec 2015 12:23:07 +0000 Subject: [PATCH 070/104] Valid date --- administrator/components/com_users/models/forms/note.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/models/forms/note.xml b/administrator/components/com_users/models/forms/note.xml index f942122e8181a..b3260eb5f35b4 100644 --- a/administrator/components/com_users/models/forms/note.xml +++ b/administrator/components/com_users/models/forms/note.xml @@ -68,7 +68,7 @@ type="calendar" label="COM_USERS_FIELD_REVIEW_TIME_LABEL" description="COM_USERS_FIELD_REVIEW_TIME_DESC" - default="0000-00-00" + default="NOW" format="%Y-%m-%d" /> From 1be2da00e11152268e7fd57387ac5ab6214bf8a0 Mon Sep 17 00:00:00 2001 From: bertmert Date: Sun, 13 Dec 2015 13:56:53 +0100 Subject: [PATCH 071/104] Fixes broken ordering --- .../views/newsfeeds/tmpl/default.php | 39 +++++-------------- 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/administrator/components/com_newsfeeds/views/newsfeeds/tmpl/default.php b/administrator/components/com_newsfeeds/views/newsfeeds/tmpl/default.php index f1a0b5feaf5eb..6e67a6ede266b 100644 --- a/administrator/components/com_newsfeeds/views/newsfeeds/tmpl/default.php +++ b/administrator/components/com_newsfeeds/views/newsfeeds/tmpl/default.php @@ -32,26 +32,7 @@ JHtml::_('sortablelist.sortable', 'newsfeedList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } -$sortFields = $this->getSortFields(); $assoc = JLanguageAssociations::isEnabled(); - -JFactory::getDocument()->addScriptDeclaration(' - Joomla.orderTable = function() - { - table = document.getElementById("sortTable"); - direction = document.getElementById("directionTable"); - order = table.options[table.selectedIndex].value; - if (order != "' . $listOrder . '") - { - dirn = "asc"; - } - else - { - dirn = direction.options[direction.selectedIndex].value; - } - Joomla.tableOrdering(order, dirn, ""); - }; -'); ?> @@ -77,36 +58,36 @@ - ', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + - + - + - + - + - + - + - + - + @@ -231,8 +212,6 @@ - -
From 67d00c60e84fd9da2a570cb9e9c74369abfbab11 Mon Sep 17 00:00:00 2001 From: bertmert Date: Sun, 13 Dec 2015 14:03:46 +0100 Subject: [PATCH 072/104] Fixes broken ordering --- .../com_newsfeeds/models/forms/filter_newsfeeds.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/administrator/components/com_newsfeeds/models/forms/filter_newsfeeds.xml b/administrator/components/com_newsfeeds/models/forms/filter_newsfeeds.xml index 36a772ff25609..b6c9739a2c795 100644 --- a/administrator/components/com_newsfeeds/models/forms/filter_newsfeeds.xml +++ b/administrator/components/com_newsfeeds/models/forms/filter_newsfeeds.xml @@ -78,10 +78,10 @@ - - - - + + + + From 2c4f8cbec6637b8d9e9e4111ed8b2ac121fee34b Mon Sep 17 00:00:00 2001 From: Brian Teeman Date: Sun, 13 Dec 2015 13:15:21 +0000 Subject: [PATCH 073/104] center heading --- .../com_languages/views/multilangstatus/tmpl/default.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_languages/views/multilangstatus/tmpl/default.php b/administrator/components/com_languages/views/multilangstatus/tmpl/default.php index 3a86066fec5b9..42a999f2edf90 100644 --- a/administrator/components/com_languages/views/multilangstatus/tmpl/default.php +++ b/administrator/components/com_languages/views/multilangstatus/tmpl/default.php @@ -100,7 +100,7 @@ - + From 115b399d77a01fb3688b09d8352697f318a40121 Mon Sep 17 00:00:00 2001 From: Jean-Marie Simonet Date: Sun, 13 Dec 2015 18:09:20 +0100 Subject: [PATCH 074/104] Regression: correcting #8665 --- .../components/com_menus/models/forms/filter_items.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_menus/models/forms/filter_items.xml b/administrator/components/com_menus/models/forms/filter_items.xml index 8f4ec675b1fdd..98d90806d3953 100644 --- a/administrator/components/com_menus/models/forms/filter_items.xml +++ b/administrator/components/com_menus/models/forms/filter_items.xml @@ -81,7 +81,7 @@ - + From 4f406c3ce6dfbc56dc5138ca007b97a9cd918947 Mon Sep 17 00:00:00 2001 From: bertmert Date: Sun, 13 Dec 2015 20:30:34 +0100 Subject: [PATCH 075/104] Missing error message when empty user --- administrator/components/com_users/views/users/tmpl/modal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_users/views/users/tmpl/modal.php b/administrator/components/com_users/views/users/tmpl/modal.php index 6fcdc93012498..24101382224f2 100644 --- a/administrator/components/com_users/views/users/tmpl/modal.php +++ b/administrator/components/com_users/views/users/tmpl/modal.php @@ -30,7 +30,7 @@
-
From d14d68758b1a1198a55782ad949e8d55c85395fe Mon Sep 17 00:00:00 2001 From: Demis Palma Date: Sun, 13 Dec 2015 22:49:23 +0000 Subject: [PATCH 076/104] Removed redundant unit of measure Unit of measure "px" is redundant and unnecessary. --- plugins/system/debug/debug.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/system/debug/debug.php b/plugins/system/debug/debug.php index 3825633779614..a72764fae6d19 100644 --- a/plugins/system/debug/debug.php +++ b/plugins/system/debug/debug.php @@ -922,7 +922,7 @@ protected function displayQueries() // Timing // Formats the output for the query time with EXPLAIN query results as tooltip: - $htmlTiming = '
'; + $htmlTiming = '
'; $htmlTiming .= JText::sprintf( 'PLG_DEBUG_QUERY_TIME', sprintf( From 995db72ff4eaa544e38b4da3630b7a1ac0146264 Mon Sep 17 00:00:00 2001 From: Robert Deutz Date: Mon, 14 Dec 2015 14:42:11 +0100 Subject: [PATCH 077/104] Prepare 3.4.6 Release --- .../com_templates/controllers/template.php | 24 ++ .../com_templates/models/template.php | 12 +- .../views/template/tmpl/default.php | 393 +++++++++--------- administrator/manifests/files/joomla.xml | 4 +- .../html/com_templates/template/default.php | 139 ++++--- components/com_users/models/reset.php | 16 +- libraries/cms/installer/installer.php | 12 +- libraries/cms/version/version.php | 6 +- libraries/joomla/session/session.php | 167 +------- libraries/joomla/uri/uri.php | 10 +- .../suites/libraries/joomla/uri/JURITest.php | 274 +++++++++++- 11 files changed, 586 insertions(+), 471 deletions(-) diff --git a/administrator/components/com_templates/controllers/template.php b/administrator/components/com_templates/controllers/template.php index 86e4766e8abae..376ac4d72895a 100644 --- a/administrator/components/com_templates/controllers/template.php +++ b/administrator/components/com_templates/controllers/template.php @@ -376,6 +376,9 @@ public function less() */ public function delete() { + // Check for request forgeries + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); @@ -412,6 +415,9 @@ public function delete() */ public function createFile() { + // Check for request forgeries + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); @@ -456,6 +462,9 @@ public function createFile() */ public function uploadFile() { + // Check for request forgeries + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); @@ -487,6 +496,9 @@ public function uploadFile() */ public function createFolder() { + // Check for request forgeries + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); @@ -523,6 +535,9 @@ public function createFolder() */ public function deleteFolder() { + // Check for request forgeries + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); @@ -564,6 +579,9 @@ public function deleteFolder() */ public function renameFile() { + // Check for request forgeries + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $app = JFactory::getApplication(); $model = $this->getModel(); $id = $app->input->get('id'); @@ -673,6 +691,9 @@ public function resizeImage() */ public function copyFile() { + // Check for request forgeries + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $app = JFactory::getApplication(); $id = $app->input->get('id'); $file = $app->input->get('file'); @@ -708,6 +729,9 @@ public function copyFile() */ public function extractArchive() { + // Check for request forgeries + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $app = JFactory::getApplication(); $id = $app->input->get('id'); $file = $app->input->get('file'); diff --git a/administrator/components/com_templates/models/template.php b/administrator/components/com_templates/models/template.php index c167c9e1d3680..9fa40bb9d10c1 100644 --- a/administrator/components/com_templates/models/template.php +++ b/administrator/components/com_templates/models/template.php @@ -439,7 +439,17 @@ public function &getSource() $input = JFactory::getApplication()->input; $fileName = base64_decode($input->get('file')); $client = JApplicationHelper::getClientInfo($this->template->client_id); - $filePath = JPath::clean($client->path . '/templates/' . $this->template->element . '/' . $fileName); + + + try + { + $filePath = JPath::check($client->path . '/templates/' . $this->template->element . '/' . $fileName); + } + catch (Exception $e) + { + $app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_FOUND'), 'error'); + return; + } if (file_exists($filePath)) { diff --git a/administrator/components/com_templates/views/template/tmpl/default.php b/administrator/components/com_templates/views/template/tmpl/default.php index 9d0e4eca13ed1..a46093226d631 100644 --- a/administrator/components/com_templates/views/template/tmpl/default.php +++ b/administrator/components/com_templates/views/template/tmpl/default.php @@ -145,7 +145,7 @@ function clearCoords() if($this->type == 'font') { JFactory::getDocument()->addStyleDeclaration( - "/* Styles for font preview */ + "/* Styles for font preview */ @font-face { font-family: previewFont; @@ -159,99 +159,103 @@ function clearCoords() } ?> 'editor')); ?> - -
-
- type == 'file'): ?> -

source->filename, $this->template->element); ?>

- - type == 'image'): ?> -

image['path'], $this->template->element); ?>

- - type == 'font'): ?> -

font['rel_path'], $this->template->element); ?>

- -
-
-
-
- loadTemplate('tree');?> -
-
- type == 'home'): ?> -
- - -
-

-

-

- - - -

-
-
- - type == 'file'): ?> -
+ +
+
+ type == 'file'): ?> +

source->filename, $this->template->element); ?>

+ + type == 'image'): ?> +

image['path'], $this->template->element); ?>

+ + type == 'font'): ?> +

font['rel_path'], $this->template->element); ?>

+ +
+
+
+
+ loadTemplate('tree');?> +
+
+ type == 'home'): ?> + + + +
+

+

+

+ + + +

+
+ + + type == 'file'): ?> +
-
- form->getInput('source'); ?> -
- - - form->getInput('extension_id'); ?> - form->getInput('filename'); ?> - -
- - type == 'archive'): ?> - -
- - - +
+ form->getInput('source'); ?> +
+ + + form->getInput('extension_id'); ?> + form->getInput('filename'); ?> -
- - type == 'image'): ?> - -
-
- - - - - - -
-
- - type == 'font'): ?> -
-
-
-

H1

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML

-

H2

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML

-

H3

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML

-

H4

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML

-

H5

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML
-

H6

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML
-

Bold

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML -

Italics

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML -

Unordered List

+ + + type == 'archive'): ?> + +
+ + + + +
+ + type == 'image'): ?> + +
+
+ + + + + + +
+
+ + type == 'font'): ?> +
+
+
+

H1

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML

+

H2

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML

+

H3

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML

+

H4

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML

+

H5

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML
+

H6

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML
+

Bold

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML +

Italics

Quickly gaze at Joomla! views from HTML, CSS, JavaScript and XML +

Unordered List

+
    +
  • Item
  • +
  • Item
  • +
  • Item
    • Item
    • Item
    • @@ -259,116 +263,112 @@ function clearCoords()
      • Item
      • Item
      • -
      • Item
        -
          -
        • Item
        • -
        • Item
        • -
        • Item
        • -
        -
      • +
      • Item
    -

    Ordered List

    -
      + +
+

Ordered List

+
    +
  1. Item
  2. +
  3. Item
  4. +
  5. Item
    +
    • Item
    • Item
    • Item
      • Item
      • Item
      • -
      • Item
        -
          -
        • Item
        • -
        • Item
        • -
        • Item
        • -
        -
      • +
      • Item
    • -
- - -
-
-
- -
-
- - - -
-
- - -
-
- - -
-
- - + + + + + +
+ - - + + + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ - - loadTemplate('description');?> - + +loadTemplate('description');?> +
+ method="post" name="adminForm" id="adminForm">
@@ -450,7 +451,7 @@ function clearCoords()
+ class="well" >
diff --git a/administrator/manifests/files/joomla.xml b/administrator/manifests/files/joomla.xml index 44bc6a62395ff..645b4a8f24669 100644 --- a/administrator/manifests/files/joomla.xml +++ b/administrator/manifests/files/joomla.xml @@ -6,8 +6,8 @@ www.joomla.org (C) 2005 - 2015 Open Source Matters. All rights reserved GNU General Public License version 2 or later; see LICENSE.txt - 3.4.5 - October 2015 + 3.4.6 + December 2015 FILES_JOOMLA_XML_DESCRIPTION administrator/components/com_admin/script.php diff --git a/administrator/templates/hathor/html/com_templates/template/default.php b/administrator/templates/hathor/html/com_templates/template/default.php index de74cd0231ce4..a33b6ef523025 100644 --- a/administrator/templates/hathor/html/com_templates/template/default.php +++ b/administrator/templates/hathor/html/com_templates/template/default.php @@ -116,7 +116,7 @@ function clearCoords() if($this->type == 'font') { JFactory::getDocument()->addStyleDeclaration( - "/* Styles for font preview */ + "/* Styles for font preview */ @font-face { font-family: previewFont; @@ -141,8 +141,15 @@ function clearCoords()

fileName); ?>

@@ -427,72 +434,72 @@ function clearCoords() 1)); ?> - -
-
- - - -
- -
- type != 'home'): ?> - -
-
- - - -
- -
- - + +
- + + +
+ +
+ type != 'home'): ?> + +
+
+ + + +
+ +
+ + +
+ +
-
- -
+
+ +
-
- -
+
+ +
diff --git a/components/com_users/models/reset.php b/components/com_users/models/reset.php index 349a2e94e8d68..7036e708bd6f1 100644 --- a/components/com_users/models/reset.php +++ b/components/com_users/models/reset.php @@ -299,21 +299,15 @@ public function processResetConfirm($data) return false; } - $parts = explode(':', $user->activation); - $crypt = $parts[0]; - - if (!isset($parts[1])) + if (!$user->activation) { $this->setError(JText::_('COM_USERS_USER_NOT_FOUND')); return false; } - $salt = $parts[1]; - $testcrypt = JUserHelper::getCryptedPassword($data['token'], $salt, 'md5-hex'); - // Verify the token - if (!($crypt == $testcrypt)) + if (!(JUserHelper::verifyPassword($data['token'], $user->activation))) { $this->setError(JText::_('COM_USERS_USER_NOT_FOUND')); @@ -330,7 +324,7 @@ public function processResetConfirm($data) // Push the user data into the session. $app = JFactory::getApplication(); - $app->setUserState('com_users.reset.token', $crypt . ':' . $salt); + $app->setUserState('com_users.reset.token', $user->activation); $app->setUserState('com_users.reset.user', $user->id); return true; @@ -441,8 +435,8 @@ public function processResetRequest($data) // Set the confirmation token. $token = JApplicationHelper::getHash(JUserHelper::genRandomPassword()); - $salt = JUserHelper::getSalt('crypt-md5'); - $hashedToken = md5($token . $salt) . ':' . $salt; + $hashedToken = JUserHelper::hashPassword($token); + $user->activation = $hashedToken; // Save the user to the database. diff --git a/libraries/cms/installer/installer.php b/libraries/cms/installer/installer.php index 53ca208b77108..4638bb32f2b98 100644 --- a/libraries/cms/installer/installer.php +++ b/libraries/cms/installer/installer.php @@ -2206,6 +2206,7 @@ public static function parseXMLInstallFile($path) /** * Fetches an adapter and adds it to the internal storage if an instance is not set + * while also ensuring its a valid adapter name * * @param string $name Name of adapter to return * @param array $options Adapter options @@ -2218,17 +2219,14 @@ public static function parseXMLInstallFile($path) */ public function getAdapter($name, $options = array()) { - $adapter = $this->loadAdapter($name, $options); + $this->getAdapters($options); - if (!array_key_exists($name, $this->_adapters)) + if (!$this->setAdapter($name, $this->_adapters[$name])) { - if (!$this->setAdapter($name, $adapter)) - { - return false; - } + return false; } - return $adapter; + return $this->_adapters[$name]; } /** diff --git a/libraries/cms/version/version.php b/libraries/cms/version/version.php index 79fffa3d42a1a..def2ad4ce61b7 100644 --- a/libraries/cms/version/version.php +++ b/libraries/cms/version/version.php @@ -23,7 +23,7 @@ final class JVersion public $RELEASE = '3.4'; /** @var string Maintenance version. */ - public $DEV_LEVEL = '5'; + public $DEV_LEVEL = '6'; /** @var string Development STATUS. */ public $DEV_STATUS = 'Stable'; @@ -35,10 +35,10 @@ final class JVersion public $CODENAME = 'Ember'; /** @var string Release date. */ - public $RELDATE = '22-October-2015'; + public $RELDATE = '15-December-2015'; /** @var string Release time. */ - public $RELTIME = '21:30'; + public $RELTIME = '11:11'; /** @var string Release timezone. */ public $RELTZ = 'GMT'; diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index 9edf7c35580e5..f4c54ad8d7535 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -6,9 +6,7 @@ * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ - defined('JPATH_PLATFORM') or die; - /** * Class for managing HTTP sessions * @@ -30,7 +28,6 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_state = 'inactive'; - /** * Maximum age of unused session in minutes * @@ -38,7 +35,6 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_expire = 15; - /** * The session store object. * @@ -46,7 +42,6 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_store = null; - /** * Security policy. * List of checks that will be done. @@ -59,7 +54,6 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_security = array('fix_browser'); - /** * Force cookies to be SSL only * Default false @@ -68,7 +62,6 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_force_ssl = false; - /** * JSession instances container. * @@ -76,7 +69,6 @@ class JSession implements IteratorAggregate * @since 11.3 */ protected static $instance; - /** * The type of storage for the session. * @@ -84,7 +76,6 @@ class JSession implements IteratorAggregate * @since 12.2 */ protected $storeName; - /** * Holds the JInput object * @@ -92,7 +83,6 @@ class JSession implements IteratorAggregate * @since 12.2 */ private $_input = null; - /** * Holds the event dispatcher object * @@ -100,7 +90,6 @@ class JSession implements IteratorAggregate * @since 12.2 */ private $_dispatcher = null; - /** * Constructor * @@ -117,26 +106,18 @@ public function __construct($store = 'none', array $options = array()) session_unset(); session_destroy(); } - // Disable transparent sid support ini_set('session.use_trans_sid', '0'); - // Only allow the session ID to come from cookies and nothing else. ini_set('session.use_only_cookies', '1'); - // Create handler $this->_store = JSessionStorage::getInstance($store, $options); - $this->storeName = $store; - // Set options $this->_setOptions($options); - $this->_setCookieParams(); - $this->_state = 'inactive'; } - /** * Magic method to get read-only access to properties. * @@ -152,15 +133,12 @@ public function __get($name) { return $this->$name; } - if ($name === 'state' || $name === 'expire') { $property = '_' . $name; - return $this->$property; } } - /** * Returns the global Session object, only creating it * if it doesn't already exist. @@ -178,10 +156,8 @@ public static function getInstance($handler, $options) { self::$instance = new JSession($handler, $options); } - return self::$instance; } - /** * Get current state of session * @@ -193,7 +169,6 @@ public function getState() { return $this->_state; } - /** * Get expiration time in minutes * @@ -205,7 +180,6 @@ public function getExpire() { return $this->_expire; } - /** * Get a session token, if a token isn't set yet one will be generated. * @@ -222,17 +196,14 @@ public function getExpire() public function getToken($forceNew = false) { $token = $this->get('session.token'); - // Create a token if ($token === null || $forceNew) { $token = $this->_createToken(12); $this->set('session.token', $token); } - return $token; } - /** * Method to determine if a token exists in the session. If not the * session will be set to expired @@ -248,7 +219,6 @@ public function hasToken($tCheck, $forceExpire = true) { // Check if a token exists in the session $tStored = $this->get('session.token'); - // Check token if (($tStored !== $tCheck)) { @@ -256,13 +226,10 @@ public function hasToken($tCheck, $forceExpire = true) { $this->_state = 'expired'; } - return false; } - return true; } - /** * Method to determine a hash for anti-spoofing variable names * @@ -276,7 +243,6 @@ public static function getFormToken($forceNew = false) { $user = JFactory::getUser(); $session = JFactory::getSession(); - // TODO: Decouple from legacy JApplication class. if (is_callable(array('JApplication', 'getHash'))) { @@ -286,10 +252,8 @@ public static function getFormToken($forceNew = false) { $hash = md5(JFactory::getApplication()->get('secret') . $user->get('id', 0) . $session->getToken($forceNew)); } - return $hash; } - /** * Retrieve an external iterator. * @@ -301,7 +265,6 @@ public function getIterator() { return new ArrayIterator($_SESSION); } - /** * Checks for a form token in the request. * @@ -317,11 +280,9 @@ public static function checkToken($method = 'post') { $token = self::getFormToken(); $app = JFactory::getApplication(); - if (!$app->input->$method->get($token, '', 'alnum')) { $session = JFactory::getSession(); - if ($session->isNew()) { // Redirect to login screen. @@ -338,7 +299,6 @@ public static function checkToken($method = 'post') return true; } } - /** * Get session name * @@ -353,10 +313,8 @@ public function getName() // @TODO : raise error return null; } - return session_name(); } - /** * Get session id * @@ -371,10 +329,8 @@ public function getId() // @TODO : raise error return null; } - return session_id(); } - /** * Get the session handlers * @@ -385,30 +341,24 @@ public function getId() public static function getStores() { $connectors = array(); - // Get an iterator and loop trough the driver classes. $iterator = new DirectoryIterator(__DIR__ . '/storage'); - /* @type $file DirectoryIterator */ foreach ($iterator as $file) { $fileName = $file->getFilename(); - // Only load for php files. if (!$file->isFile() || $file->getExtension() != 'php') { continue; } - // Derive the class name from the type. $class = str_ireplace('.php', '', 'JSessionStorage' . ucfirst(trim($fileName))); - // If the class doesn't exist we have nothing left to do but look at the next type. We did our best. if (!class_exists($class)) { continue; } - // Sweet! Our class exists, so now we just need to know if it passes its test method. if ($class::isSupported()) { @@ -416,10 +366,8 @@ public static function getStores() $connectors[] = str_ireplace('.php', '', $fileName); } } - return $connectors; } - /** * Shorthand to check if the session is active * @@ -431,7 +379,6 @@ public function isActive() { return (bool) ($this->_state == 'active'); } - /** * Check whether this session is currently created * @@ -442,10 +389,8 @@ public function isActive() public function isNew() { $counter = $this->get('session.counter'); - return (bool) ($counter === 1); } - /** * Check whether this session is currently created * @@ -461,7 +406,6 @@ public function initialise(JInput $input, JEventDispatcher $dispatcher = null) $this->_input = $input; $this->_dispatcher = $dispatcher; } - /** * Get data from the session store * @@ -477,23 +421,18 @@ public function get($name, $default = null, $namespace = 'default') { // Add prefix to namespace to avoid collisions $namespace = '__' . $namespace; - if ($this->_state === 'destroyed') { // @TODO :: generated error here $error = null; - return $error; } - if (isset($_SESSION[$namespace][$name])) { return $_SESSION[$namespace][$name]; } - return $default; } - /** * Set data into the session store. * @@ -509,15 +448,12 @@ public function set($name, $value = null, $namespace = 'default') { // Add prefix to namespace to avoid collisions $namespace = '__' . $namespace; - if ($this->_state !== 'active') { // @TODO :: generated error here return null; } - $old = isset($_SESSION[$namespace][$name]) ? $_SESSION[$namespace][$name] : null; - if (null === $value) { unset($_SESSION[$namespace][$name]); @@ -526,10 +462,8 @@ public function set($name, $value = null, $namespace = 'default') { $_SESSION[$namespace][$name] = $value; } - return $old; } - /** * Check whether data exists in the session store * @@ -544,16 +478,13 @@ public function has($name, $namespace = 'default') { // Add prefix to namespace to avoid collisions. $namespace = '__' . $namespace; - if ($this->_state !== 'active') { // @TODO :: generated error here return null; } - return isset($_SESSION[$namespace][$name]); } - /** * Unset data from the session store * @@ -568,24 +499,19 @@ public function clear($name, $namespace = 'default') { // Add prefix to namespace to avoid collisions $namespace = '__' . $namespace; - if ($this->_state !== 'active') { // @TODO :: generated error here return null; } - $value = null; - if (isset($_SESSION[$namespace][$name])) { $value = $_SESSION[$namespace][$name]; unset($_SESSION[$namespace][$name]); } - return $value; } - /** * Start a session. * @@ -599,24 +525,18 @@ public function start() { return; } - $this->_start(); - $this->_state = 'active'; - // Initialise the session $this->_setCounter(); $this->_setTimers(); - // Perform security checks $this->_validate(); - if ($this->_dispatcher instanceof JEventDispatcher) { $this->_dispatcher->trigger('onAfterSessionStart'); } } - /** * Start a session. * @@ -636,14 +556,11 @@ protected function _start() else { $session_name = session_name(); - // Get the JInputCookie object $cookie = $this->_input->cookie; - if (is_null($cookie->get($session_name))) { $session_clean = $this->_input->get($session_name, false, 'string'); - if ($session_clean) { session_id($session_clean); @@ -651,7 +568,6 @@ protected function _start() } } } - /** * Write and Close handlers are called after destructing objects since PHP 5.0.5. * Thus destructors can use sessions but session handler can't use objects. @@ -660,13 +576,10 @@ protected function _start() * Replace with session_register_shutdown() when dropping compatibility with PHP 5.3 */ register_shutdown_function('session_write_close'); - session_cache_limiter('none'); session_start(); - return true; } - /** * Frees all session variables and destroys all data registered to a session * @@ -687,7 +600,6 @@ public function destroy() { return true; } - /* * In order to kill the session altogether, such as to log the user out, the session id * must also be unset. If a cookie is used to propagate the session id (default behavior), @@ -700,15 +612,11 @@ public function destroy() $cookie_path = $config->get('cookie_path', '/'); setcookie(session_name(), '', time() - 42000, $cookie_path, $cookie_domain); } - session_unset(); session_destroy(); - $this->_state = 'destroyed'; - return true; } - /** * Restart an expired or locked session. * @@ -720,29 +628,22 @@ public function destroy() public function restart() { $this->destroy(); - if ($this->_state !== 'destroyed') { // @TODO :: generated error here return false; } - // Re-register the session handler after a session has been destroyed, to avoid PHP bug $this->_store->register(); - $this->_state = 'restart'; - // Regenerate session id session_regenerate_id(true); $this->_start(); $this->_state = 'active'; - $this->_validate(); $this->_setCounter(); - return true; } - /** * Create a new session and copy variables from the old one * @@ -757,26 +658,19 @@ public function fork() // @TODO :: generated error here return false; } - // Keep session config $cookie = session_get_cookie_params(); - // Kill session session_destroy(); - // Re-register the session store after a session has been destroyed, to avoid PHP bug $this->_store->register(); - // Restore config session_set_cookie_params($cookie['lifetime'], $cookie['path'], $cookie['domain'], $cookie['secure'], true); - // Restart session with new id session_regenerate_id(true); session_start(); - return true; } - /** * Writes session data and ends session * @@ -797,7 +691,6 @@ public function close() { session_write_close(); } - /** * Set session cookie parameters * @@ -808,27 +701,21 @@ public function close() protected function _setCookieParams() { $cookie = session_get_cookie_params(); - if ($this->_force_ssl) { $cookie['secure'] = true; } - $config = JFactory::getConfig(); - if ($config->get('cookie_domain', '') != '') { $cookie['domain'] = $config->get('cookie_domain'); } - if ($config->get('cookie_path', '') != '') { $cookie['path'] = $config->get('cookie_path'); } - session_set_cookie_params($cookie['lifetime'], $cookie['path'], $cookie['domain'], $cookie['secure'], true); } - /** * Create a token-string * @@ -844,15 +731,12 @@ protected function _createToken($length = 32) $max = strlen($chars) - 1; $token = ''; $name = session_name(); - for ($i = 0; $i < $length; ++$i) { $token .= $chars[(rand(0, $max))]; } - return md5($token . $name); } - /** * Set counter of session usage * @@ -864,12 +748,9 @@ protected function _setCounter() { $counter = $this->get('session.counter', 0); ++$counter; - $this->set('session.counter', $counter); - return true; } - /** * Set the session timers * @@ -882,18 +763,14 @@ protected function _setTimers() if (!$this->has('session.timer.start')) { $start = time(); - $this->set('session.timer.start', $start); $this->set('session.timer.last', $start); $this->set('session.timer.now', $start); } - $this->set('session.timer.last', $this->get('session.timer.now')); $this->set('session.timer.now', time()); - return true; } - /** * Set additional session options * @@ -910,36 +787,29 @@ protected function _setOptions(array $options) { session_name(md5($options['name'])); } - // Set id if (isset($options['id'])) { session_id($options['id']); } - // Set expire time if (isset($options['expire'])) { $this->_expire = $options['expire']; } - // Get security options if (isset($options['security'])) { $this->_security = explode(',', $options['security']); } - if (isset($options['force_ssl'])) { $this->_force_ssl = (bool) $options['force_ssl']; } - // Sync the session maxlifetime ini_set('session.gc_maxlifetime', $this->_expire); - return true; } - /** * Do some checks for security reason * @@ -962,39 +832,29 @@ protected function _validate($restart = false) if ($restart) { $this->_state = 'active'; - $this->set('session.client.address', null); $this->set('session.client.forwarded', null); $this->set('session.client.browser', null); $this->set('session.token', null); } - // Check if session has expired if ($this->_expire) { $curTime = $this->get('session.timer.now', 0); $maxTime = $this->get('session.timer.last', 0) + $this->_expire; - // Empty session variables if ($maxTime < $curTime) { $this->_state = 'expired'; - return false; } } - - // Record proxy forwarded for in the session in case we need it later - if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) - { - $this->set('session.client.forwarded', $_SERVER['HTTP_X_FORWARDED_FOR']); - } - // Check for client address - if (in_array('fix_adress', $this->_security) && isset($_SERVER['REMOTE_ADDR'])) + if (in_array('fix_adress', $this->_security) + && isset($_SERVER['REMOTE_ADDR']) + && filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP) !== false) { $ip = $this->get('session.client.address'); - if ($ip === null) { $this->set('session.client.address', $_SERVER['REMOTE_ADDR']); @@ -1002,27 +862,14 @@ protected function _validate($restart = false) elseif ($_SERVER['REMOTE_ADDR'] !== $ip) { $this->_state = 'error'; - return false; } } - - // Check for clients browser - if (in_array('fix_browser', $this->_security) && isset($_SERVER['HTTP_USER_AGENT'])) + // Record proxy forwarded for in the session in case we need it later + if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && filter_var($_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP) !== false) { - $browser = $this->get('session.client.browser'); - - if ($browser === null) - { - $this->set('session.client.browser', $_SERVER['HTTP_USER_AGENT']); - } - elseif ($_SERVER['HTTP_USER_AGENT'] !== $browser) - { - // @todo remove code: $this->_state = 'error'; - // @todo remove code: return false; - } + $this->set('session.client.forwarded', $_SERVER['HTTP_X_FORWARDED_FOR']); } - return true; } -} +} \ No newline at end of file diff --git a/libraries/joomla/uri/uri.php b/libraries/joomla/uri/uri.php index af9f4b09054ea..bfb62d76d7a4e 100644 --- a/libraries/joomla/uri/uri.php +++ b/libraries/joomla/uri/uri.php @@ -268,12 +268,16 @@ public static function isInternal($url) $base = $uri->toString(array('scheme', 'host', 'port', 'path')); $host = $uri->toString(array('scheme', 'host', 'port')); - if (stripos($base, static::base()) !== 0 && !empty($host)) + // @see JURITest + if (empty($host) && strpos($uri->path, 'index.php') === 0 + || !empty($host) && preg_match('#' . preg_quote(static::base(), '#') . '#', $base) + || !empty($host) && $host === static::getInstance(static::base())->host && strpos($uri->path, 'index.php') !== false + || !empty($host) && $base === $host && preg_match('#' . preg_quote($base, '#') . '#', static::base())) { - return false; + return true; } - return true; + return false; } /** diff --git a/tests/unit/suites/libraries/joomla/uri/JURITest.php b/tests/unit/suites/libraries/joomla/uri/JURITest.php index 3572a390b7090..e5b0f1fb617e2 100644 --- a/tests/unit/suites/libraries/joomla/uri/JURITest.php +++ b/tests/unit/suites/libraries/joomla/uri/JURITest.php @@ -22,28 +22,6 @@ class JUriTest extends PHPUnit_Framework_TestCase */ protected $object; - /** - * Sets up the fixture, for example, opens a network connection. - * This method is called before a test is executed. - * - * @return void - * - * @since 11.1 - */ - protected function setUp() - { - parent::setUp(); - - JUri::reset(); - - $_SERVER['HTTP_HOST'] = 'www.example.com:80'; - $_SERVER['SCRIPT_NAME'] = '/joomla/index.php'; - $_SERVER['PHP_SELF'] = '/joomla/index.php'; - $_SERVER['REQUEST_URI'] = '/joomla/index.php?var=value 10'; - - $this->object = new JUri; - } - /** * Test the __toString method. * @@ -635,4 +613,256 @@ public function testIsSsl() $this->equalTo(false) ); } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testparsewhennoschemegiven() + { + $this->object->parse('www.myotherexample.com'); + $this->assertFalse($this->object->isInternal('www.myotherexample.com')); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testsefurl() + { + $this->object->parse('/login'); + $this->assertFalse($this->object->isInternal('/login')); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternalWithNoSchemeAndNotInternal() + { + $this->assertFalse( + $this->object->isInternal('www.myotherexample.com'), + 'www.myotherexample.com should NOT be resolved as internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternalWithNoSchemeAndNoHostnameAndNotInternal() + { + $this->assertFalse( + $this->object->isInternal('myotherexample.com'), + 'myotherexample.com should NOT be resolved as internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternalWithSchemeAndNotInternal() + { + $this->assertFalse( + $this->object->isInternal('http://www.myotherexample.com'), + 'http://www.myotherexample.com should NOT be resolved as internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternalWhenInternalWithNoDomainOrScheme() + { + $this->assertTrue( + $this->object->isInternal('index.php?option=com_something'), + 'index.php?option=com_something should be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternalWhenInternalWithDomainAndSchemeAndPort() + { + $this->assertTrue( + $this->object->isInternal(JUri::base() . 'index.php?option=com_something'), + JUri::base() . 'index.php?option=com_something should be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternalWhenInternalWithDomainAndSchemeAndPortNoSubFolder() + { + JUri::reset(); + + $_SERVER['HTTP_HOST'] = 'www.example.com:80'; + $_SERVER['SCRIPT_NAME'] = '/index.php'; + $_SERVER['PHP_SELF'] = '/index.php'; + $_SERVER['REQUEST_URI'] = '/index.php?var=value 10'; + + $this->object = new JUri; + + $this->assertTrue( + $this->object->isInternal(JUri::base() . 'index.php?option=com_something'), + JUri::base() . 'index.php?option=com_something should be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternalWhenNOTInternalWithDomainAndSchemeAndPortAndIndex() + { + $this->assertFalse( + $this->object->isInternal('http://www.myotherexample.com/index.php?option=com_something'), + 'http://www.myotherexample.com/index.php?option=com_something should NOT be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternalWhenNOTInternalWithDomainAndNoSchemeAndPortAndIndex() + { + $this->assertFalse( + $this->object->isInternal('www.myotherexample.com/index.php?option=com_something'), + 'www.myotherexample.comindex.php?option=com_something should NOT be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testisInternal3rdPartyDevs() + { + $this->assertFalse( + $this->object->isInternal('/customDevScript.php'), + '/customDevScript.php should NOT be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testAppendingOfBaseToTheEndOfTheUrl() + { + $this->assertFalse( + $this->object->isInternal('/customDevScript.php?www.example.com'), + '/customDevScript.php?www.example.com should NOT be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testAppendingOfBaseToTheEndOfTheUrl2() + { + $this->assertFalse( + $this->object->isInternal('www.otherexample.com/www.example.com'), + 'www.otherexample.com/www.example.com should NOT be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testSchemeEmptyButHostAndPortMatch() + { + $this->assertTrue( + $this->object->isInternal('www.example.com:80'), + 'www.example.com:80 should be internal' + ); + } + + /** + * Test hardening of JUri::isInternal against non internal links + * + * @return void + * + * @covers JUri::isInternal + */ + public function testPregMatch() + { + $this->assertFalse( + $this->object->isInternal('wwwhexample.com'), + 'wwwhexample.com should NOT be internal' + ); + } + + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + * + * @return void + * + * @since 11.1 + */ + protected function setUp() + { + parent::setUp(); + + JUri::reset(); + + $_SERVER['HTTP_HOST'] = 'www.example.com:80'; + $_SERVER['SCRIPT_NAME'] = '/joomla/index.php'; + $_SERVER['PHP_SELF'] = '/joomla/index.php'; + $_SERVER['REQUEST_URI'] = '/joomla/index.php?var=value 10'; + + $this->object = new JUri; + } } From a6329110199c6535bd3285880eeb1ce5efd0df80 Mon Sep 17 00:00:00 2001 From: Robert Deutz Date: Mon, 14 Dec 2015 18:24:15 +0100 Subject: [PATCH 078/104] fix code style after 3.4.6 merge --- administrator/components/com_templates/models/template.php | 1 - .../components/com_templates/views/template/tmpl/default.php | 2 +- .../templates/hathor/html/com_templates/template/default.php | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/administrator/components/com_templates/models/template.php b/administrator/components/com_templates/models/template.php index 9fa40bb9d10c1..76d790ea0e2e8 100644 --- a/administrator/components/com_templates/models/template.php +++ b/administrator/components/com_templates/models/template.php @@ -440,7 +440,6 @@ public function &getSource() $fileName = base64_decode($input->get('file')); $client = JApplicationHelper::getClientInfo($this->template->client_id); - try { $filePath = JPath::check($client->path . '/templates/' . $this->template->element . '/' . $fileName); diff --git a/administrator/components/com_templates/views/template/tmpl/default.php b/administrator/components/com_templates/views/template/tmpl/default.php index a46093226d631..f7d260f36c89f 100644 --- a/administrator/components/com_templates/views/template/tmpl/default.php +++ b/administrator/components/com_templates/views/template/tmpl/default.php @@ -432,7 +432,7 @@ function clearCoords() - + diff --git a/administrator/templates/hathor/html/com_templates/template/default.php b/administrator/templates/hathor/html/com_templates/template/default.php index a33b6ef523025..b0525e157e031 100644 --- a/administrator/templates/hathor/html/com_templates/template/default.php +++ b/administrator/templates/hathor/html/com_templates/template/default.php @@ -146,7 +146,7 @@ function clearCoords() - + From d66c77b525e3bbc2ce22742f5998a9fa7797c941 Mon Sep 17 00:00:00 2001 From: Roland Dalmulder Date: Mon, 14 Dec 2015 19:47:40 +0100 Subject: [PATCH 079/104] Fixing PHP shorttags --- .../components/com_templates/views/template/tmpl/default.php | 4 ++-- .../templates/hathor/html/com_templates/template/default.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/administrator/components/com_templates/views/template/tmpl/default.php b/administrator/components/com_templates/views/template/tmpl/default.php index f7d260f36c89f..b13c645fd9e1c 100644 --- a/administrator/components/com_templates/views/template/tmpl/default.php +++ b/administrator/components/com_templates/views/template/tmpl/default.php @@ -430,8 +430,8 @@ function clearCoords()
- - + + diff --git a/administrator/templates/hathor/html/com_templates/template/default.php b/administrator/templates/hathor/html/com_templates/template/default.php index b0525e157e031..2b21c42368585 100644 --- a/administrator/templates/hathor/html/com_templates/template/default.php +++ b/administrator/templates/hathor/html/com_templates/template/default.php @@ -144,8 +144,8 @@ function clearCoords() - - + + From 7f0e4d1092fcd3eac97ce0bf273800b78c14a83a Mon Sep 17 00:00:00 2001 From: bertmert Date: Thu, 17 Dec 2015 19:38:14 +0100 Subject: [PATCH 080/104] Firefox fix autofocus username backend login --- libraries/cms/html/behavior.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libraries/cms/html/behavior.php b/libraries/cms/html/behavior.php index 5decb0ff102bc..d4bbf50e2904c 100644 --- a/libraries/cms/html/behavior.php +++ b/libraries/cms/html/behavior.php @@ -759,8 +759,18 @@ public static function noframes() // Include jQuery JHtml::_('jquery.framework'); - $js = "jQuery(function () {if (top == self) {document.documentElement.style.display = 'block'; }" . - " else {top.location = self.location; }});"; + $js = 'jQuery(function () { + if (top == self) { + document.documentElement.style.display = "block"; + } + else + { + top.location = self.location; + } + + // Firefox fix + jQuery("input[autofocus]").focus(); + })'; $document = JFactory::getDocument(); $document->addStyleDeclaration('html { display:none }'); $document->addScriptDeclaration($js); From ff084f7852cadfc73dbf8ac1e86a68ba633d5bbf Mon Sep 17 00:00:00 2001 From: George Wilson Date: Mon, 21 Dec 2015 18:59:56 +0000 Subject: [PATCH 081/104] Add PHP information in the config --- composer.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/composer.json b/composer.json index b0ba2e5eb802d..f44b03fdcd6fc 100644 --- a/composer.json +++ b/composer.json @@ -6,6 +6,9 @@ "homepage": "https://github.com/joomla/joomla-cms", "license": "GPL-2.0+", "config": { + "platform": { + "php": "5.3.10" + }, "vendor-dir": "libraries/vendor" }, "require": { From 2cd4ef682f0cab6ff03200b79007a25f19c6690e Mon Sep 17 00:00:00 2001 From: wilsonge Date: Mon, 21 Dec 2015 20:50:39 +0000 Subject: [PATCH 082/104] Prepare 3.4.7 Release --- .../com_categories/models/category.php | 7 +- .../components/com_menus/models/item.php | 7 +- administrator/manifests/files/joomla.xml | 2 +- libraries/cms/version/version.php | 6 +- libraries/joomla/database/driver/mysqli.php | 2 +- libraries/joomla/session/session.php | 104 +++++++++++++----- libraries/legacy/model/admin.php | 7 +- plugins/system/debug/debug.php | 2 +- 8 files changed, 97 insertions(+), 40 deletions(-) diff --git a/administrator/components/com_categories/models/category.php b/administrator/components/com_categories/models/category.php index c7a762f79baa7..9e9919387f910 100644 --- a/administrator/components/com_categories/models/category.php +++ b/administrator/components/com_categories/models/category.php @@ -575,9 +575,12 @@ public function save($data) // Adding self to the association $associations = $data['associations']; + // Unset any invalid associations + $associations = Joomla\Utilities\ArrayHelper::toInteger($associations); + foreach ($associations as $tag => $id) { - if (empty($id)) + if (!$id) { unset($associations[$tag]); } @@ -618,7 +621,7 @@ public function save($data) foreach ($associations as $id) { - $query->values($id . ',' . $db->quote($this->associationsContext) . ',' . $db->quote($key)); + $query->values(((int) $id) . ',' . $db->quote($this->associationsContext) . ',' . $db->quote($key)); } $db->setQuery($query); diff --git a/administrator/components/com_menus/models/item.php b/administrator/components/com_menus/models/item.php index 77add57c6c7fd..2ea95f671c977 100644 --- a/administrator/components/com_menus/models/item.php +++ b/administrator/components/com_menus/models/item.php @@ -1284,9 +1284,12 @@ public function save($data) // Adding self to the association $associations = $data['associations']; + // Unset any invalid associations + $associations = Joomla\Utilities\ArrayHelper::toInteger($associations); + foreach ($associations as $tag => $id) { - if (empty($id)) + if (!$id) { unset($associations[$tag]); } @@ -1330,7 +1333,7 @@ public function save($data) foreach ($associations as $id) { - $query->values($id . ',' . $db->quote($this->associationsContext) . ',' . $db->quote($key)); + $query->values(((int) $id) . ',' . $db->quote($this->associationsContext) . ',' . $db->quote($key)); } $db->setQuery($query); diff --git a/administrator/manifests/files/joomla.xml b/administrator/manifests/files/joomla.xml index 645b4a8f24669..ce72def969457 100644 --- a/administrator/manifests/files/joomla.xml +++ b/administrator/manifests/files/joomla.xml @@ -6,7 +6,7 @@ www.joomla.org (C) 2005 - 2015 Open Source Matters. All rights reserved GNU General Public License version 2 or later; see LICENSE.txt - 3.4.6 + 3.4.7 December 2015 FILES_JOOMLA_XML_DESCRIPTION diff --git a/libraries/cms/version/version.php b/libraries/cms/version/version.php index def2ad4ce61b7..cd2c40e36d47a 100644 --- a/libraries/cms/version/version.php +++ b/libraries/cms/version/version.php @@ -23,7 +23,7 @@ final class JVersion public $RELEASE = '3.4'; /** @var string Maintenance version. */ - public $DEV_LEVEL = '6'; + public $DEV_LEVEL = '7'; /** @var string Development STATUS. */ public $DEV_STATUS = 'Stable'; @@ -35,10 +35,10 @@ final class JVersion public $CODENAME = 'Ember'; /** @var string Release date. */ - public $RELDATE = '15-December-2015'; + public $RELDATE = '21-December-2015'; /** @var string Release time. */ - public $RELTIME = '11:11'; + public $RELTIME = '16:00'; /** @var string Release timezone. */ public $RELTZ = 'GMT'; diff --git a/libraries/joomla/database/driver/mysqli.php b/libraries/joomla/database/driver/mysqli.php index 042afd7a28a5a..71d524cddd7a3 100644 --- a/libraries/joomla/database/driver/mysqli.php +++ b/libraries/joomla/database/driver/mysqli.php @@ -199,7 +199,7 @@ public function connect() public function disconnect() { // Close the connection. - if ($this->connection) + if ($this->connection->stat() !== false) { foreach ($this->disconnectHandlers as $h) { diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index f4c54ad8d7535..f90aa1af180d6 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -90,6 +90,12 @@ class JSession implements IteratorAggregate * @since 12.2 */ private $_dispatcher = null; + /** + * Internal data store for the session data + * + * @var \Joomla\Registry\Registry + */ + protected $data; /** * Constructor * @@ -263,7 +269,7 @@ public static function getFormToken($forceNew = false) */ public function getIterator() { - return new ArrayIterator($_SESSION); + return new ArrayIterator($this->getData()); } /** * Checks for a form token in the request. @@ -331,6 +337,17 @@ public function getId() } return session_id(); } + + /** + * Returns a clone of the internal data pointer + * + * @return \Joomla\Registry\Registry + */ + public function getData() + { + return clone $this->data; + } + /** * Get the session handlers * @@ -427,11 +444,8 @@ public function get($name, $default = null, $namespace = 'default') $error = null; return $error; } - if (isset($_SESSION[$namespace][$name])) - { - return $_SESSION[$namespace][$name]; - } - return $default; + + return $this->data->get($namespace . '.' . $name, $default); } /** * Set data into the session store. @@ -453,16 +467,7 @@ public function set($name, $value = null, $namespace = 'default') // @TODO :: generated error here return null; } - $old = isset($_SESSION[$namespace][$name]) ? $_SESSION[$namespace][$name] : null; - if (null === $value) - { - unset($_SESSION[$namespace][$name]); - } - else - { - $_SESSION[$namespace][$name] = $value; - } - return $old; + return $this->data->set($namespace . '.' . $name, $value); } /** * Check whether data exists in the session store @@ -483,7 +488,7 @@ public function has($name, $namespace = 'default') // @TODO :: generated error here return null; } - return isset($_SESSION[$namespace][$name]); + return !is_null($this->data->get($namespace . '.' . $name, null)); } /** * Unset data from the session store @@ -504,13 +509,7 @@ public function clear($name, $namespace = 'default') // @TODO :: generated error here return null; } - $value = null; - if (isset($_SESSION[$namespace][$name])) - { - $value = $_SESSION[$namespace][$name]; - unset($_SESSION[$namespace][$name]); - } - return $value; + return $this->data->set($namespace . '.' . $name, null); } /** * Start a session. @@ -575,16 +574,50 @@ protected function _start() * * Replace with session_register_shutdown() when dropping compatibility with PHP 5.3 */ - register_shutdown_function('session_write_close'); + register_shutdown_function(array($this, 'close')); session_cache_limiter('none'); session_start(); + + // Ok let's unserialize the whole thing + $this->data = new \Joomla\Registry\Registry; + + // Try loading data from the session + if (isset($_SESSION['joomla']) && !empty($_SESSION['joomla'])) + { + $data = $_SESSION['joomla']; + $data = base64_decode($data); + $this->data = unserialize($data); + } + + // Migrate existing session data to avoid logout on update from J < 3.4.7 + if (isset($_SESSION['__default'])) + { + $migratableKeys = array("user", "session.token", "session.counter", "session.timer.start", "session.timer.last", "session.timer.now"); + + foreach ($migratableKeys as $migratableKey) + { + if (!empty($_SESSION['__default'][$migratableKey])) + { + // Don't overwrite existing session data + if(!is_null($this->data->get('__default.' . $migratableKey, null))) + { + continue; + } + + $this->data->set('__default.' . $migratableKey, $_SESSION['__default'][$migratableKey]); + + unset($_SESSION['__default'][$migratableKey]); + } + } + } + return true; } /** * Frees all session variables and destroys all data registered to a session * - * This method resets the $_SESSION variable and destroys all of the data associated - * with the current session in its storage (file or DB). It forces new session to be + * This method resets the data pointer and destroys all of the data associated + * with the current session in its storage (file or DB). It forces a new session to be * started after this method is called. It does not unset the session cookie. * * @return boolean True on success @@ -612,6 +645,7 @@ public function destroy() $cookie_path = $config->get('cookie_path', '/'); setcookie(session_name(), '', time() - 42000, $cookie_path, $cookie_domain); } + $this->data = new \Joomla\Registry\Registry; session_unset(); session_destroy(); $this->_state = 'destroyed'; @@ -682,14 +716,28 @@ public function fork() * frames by ending the session as soon as all changes to session variables are * done. * - * @return void + * @return boolean * * @see session_write_close() * @since 11.1 */ public function close() { + if ($this->_state !== 'active') + { + // @TODO :: generated error here + return false; + } + + $session = JFactory::getSession(); + $data = $session->getData(); + + // Before storing it, let's serialize and encode the JRegistry object + $_SESSION['joomla'] = base64_encode(serialize($data)); + session_write_close(); + + return true; } /** * Set session cookie parameters diff --git a/libraries/legacy/model/admin.php b/libraries/legacy/model/admin.php index 8070264385467..daed3b861ea2c 100644 --- a/libraries/legacy/model/admin.php +++ b/libraries/legacy/model/admin.php @@ -1205,10 +1205,13 @@ public function save($data) { $associations = $data['associations']; + // Unset any invalid associations + $associations = Joomla\Utilities\ArrayHelper::toInteger($associations); + // Unset any invalid associations foreach ($associations as $tag => $id) { - if (!(int) $id) + if (!$id) { unset($associations[$tag]); } @@ -1244,7 +1247,7 @@ public function save($data) foreach ($associations as $id) { - $query->values($id . ',' . $db->quote($this->associationsContext) . ',' . $db->quote($key)); + $query->values(((int) $id) . ',' . $db->quote($this->associationsContext) . ',' . $db->quote($key)); } $db->setQuery($query); diff --git a/plugins/system/debug/debug.php b/plugins/system/debug/debug.php index 5e0ddbf0347a2..41d057e2ce909 100644 --- a/plugins/system/debug/debug.php +++ b/plugins/system/debug/debug.php @@ -393,7 +393,7 @@ protected function displaySession($key = '', $session = null, $id = 0) { if (!$session) { - $session = $_SESSION; + $session = JFactory::getSession()->getData(); } $html = array(); From b49650ddf61b410021d6e10fcf2d79ce92ecfa42 Mon Sep 17 00:00:00 2001 From: photodude Date: Tue, 22 Dec 2015 12:41:50 -0700 Subject: [PATCH 083/104] Force the Travis badge to the staging branch Current Travis badge will show failing if any branch is failing. (which just looks wrong and like the whole project is a failure) this fixes the issue by only showing the staging branch status. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e2ec940906c6b..2019f350cc7c2 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Joomla! CMS™ [![Analytics](https://ga-beacon.appspot.com/UA-544070-3/joomla-cm Build Status --------------------- -Travis-CI: [![Build Status](https://travis-ci.org/joomla/joomla-cms.png)](https://travis-ci.org/joomla/joomla-cms) +Travis-CI: [![Build Status](https://travis-ci.org/joomla/joomla-cms.svg?branch=staging)](https://travis-ci.org/joomla/joomla-cms) Jenkins: [![Build Status](http://build.joomla.org/job/cms/badge/icon)](http://build.joomla.org/job/cms/) What is this? From fb3a4cb92237033bf8948c950882c4e8dcca3ec9 Mon Sep 17 00:00:00 2001 From: Thomas Hunziker Date: Tue, 22 Dec 2015 21:06:16 +0100 Subject: [PATCH 084/104] Adding Dzongkha (Bhutan) installation language and updating nb-NO and nn-NO. --- installation/language/dz-BT/dz-BT.ini | 321 ++++++++++++++++++++++++++ installation/language/dz-BT/dz-BT.xml | 21 ++ installation/language/nb-NO/nb-NO.ini | 2 +- installation/language/nn-NO/nn-NO.ini | 2 +- 4 files changed, 344 insertions(+), 2 deletions(-) create mode 100644 installation/language/dz-BT/dz-BT.ini create mode 100644 installation/language/dz-BT/dz-BT.xml diff --git a/installation/language/dz-BT/dz-BT.ini b/installation/language/dz-BT/dz-BT.ini new file mode 100644 index 0000000000000..38ff22f352cc3 --- /dev/null +++ b/installation/language/dz-BT/dz-BT.ini @@ -0,0 +1,321 @@ +; Joomla! Project +; Copyright (C) 2005 - 2015 Open Source Matters. All rights reserved. +; License GNU General Public License version 2 or later; see LICENSE.txt +; Note : All ini files need to be saved as UTF-8 + +;Stepbar +INSTL_STEP_COMPLETE_LABEL="མཇུག་བསྡུ།" +INSTL_STEP_DATABASE_LABEL="གནས་སྡུད་གཞི་མཛོད།" +INSTL_STEP_DEFAULTLANGUAGE_LABEL="སྔ་སྒྲིག་སྐད་ཡིག་འདི་གདམ་ཁ་རྐྱབ།" +INSTL_STEP_FTP_LABEL="ཨེབ་ཀྲི་པི་(FTP)" +INSTL_STEP_LANGUAGES_LABEL="སྐད་ཡིག་ཚུ་བཙུགས།" +INSTL_STEP_SITE_LABEL="རིམ་སྒྲིག" +INSTL_STEP_SUMMARY_LABEL="སྤྱིར་བཏང་མཐོང་སྣང༌།" + +;Language view +INSTL_SELECT_LANGUAGE_TITLE="སྐད་ཡིག་གདམ་ཁ་རྐྱབ།" +INSTL_WARNJAVASCRIPT="ཉེན་བརྡ། ཇུམ་ལ་ཚུལ་མཐུན་སྦེ་ བཙུགས་ནི་དོན་ལུ་ JavaScript འདི་འབད་ཚུགསཔ་བཟོ།" +INSTL_WARNJSON="ཇུམ་ལ་ བཙུགས་ནི་དོན་ལུ་ ཁྱོད་རའི་ PHP བཙུགས་སྒྲིག་འདི་ JSON འབད་ཚུགསཔ་བཟོ་འོང་དགོ།" + +;Preinstall view +INSTL_PRECHECK_TITLE="ཧེ་མའི་བཙུགས་སྒྲིག་འདི་ ཞིབ་དཔྱད་འབད།" +INSTL_PRECHECK_DESC="རྣམ་གྲངས་འདི་ཚུའི་གྲལ་ལས་ གཅིག་ཡང་རྒྱབ་རྟེན་མེད་པ་ཅིན་ (མེན། རྟགས་སྐྱེལ་) དེ་ལས་ འཛོལ་བ་མེདཔ་སྦེ་ བཟོ་ནིའི་དོན་ལུ་ བྱ་ལེན་འབད་གནང་།
འོག་གི་ དགོས་མཁོ་ཚུ་ མ་ཚངམ་ཚན་ཚད་ ཁྱོད་གི་ ཇུམ་ལ་(Joomla!) འདི་བཙུགས་མི་ཚུགས།" +INSTL_PRECHECK_RECOMMENDED_SETTINGS_TITLE="རྒྱབ་སྣོན་ཡོད་པའི་ བཟོ་བཀོད་ཚུ་:" +INSTL_PRECHECK_RECOMMENDED_SETTINGS_DESC="ཇུམ་ལ་(Joomla) དང་ཅིག་ཁར་ ལེགས་ཤོམ་སྦེ་སྒྲིག་བཏུབ་ནིའི་དོན་ལུ་ བཟོ་བཀོད་འདི་ཚུ་ རྒྱབ་སྣོན་ཡོད།
ཨིན་རུང་ ཁྱོད་ཀྱི་བཟོ་བཀོད་ཚུ་ རྒྱབ་སྣོན་ཡོད་པའི་རིམ་སྒྲིག་དང་ཅིག་ཁར་ མཐུན་འགྲིགས་མེད་རུང་ ཇུམ་ལ་(Joomla!) འདི་ལཱ་འབད་བཏུབ།" +INSTL_PRECHECK_DIRECTIVE="ལམ་སྟོན།" +INSTL_PRECHECK_RECOMMENDED="རྒྱབ་སྣོན་ཡོདཔ།" +INSTL_PRECHECK_ACTUAL="ངོ་མ།" + +; Database view +INSTL_DATABASE="གནས་སྡུད་གཞི་མཛོད་ཀྱི་རིམ་སྒྲིག" +INSTL_DATABASE_HOST_DESC="འདི་ ཨ་རྟག་བཟུམ་སྦེ་ "localhost" ཨིན།" +INSTL_DATABASE_HOST_LABEL="འགོ་འདྲེན་པའི་མིང་།" +INSTL_DATABASE_NAME_DESC="ལ་ལུ་འགོ་འདྲེན་པ་གི་ ས་ཁོངས་རེ་རེ་ལུ་ གནས་སྡུད་གཞི་མཛོད་ཀྱི་མིང་ འཚམས་ཅིག་རྐྱངམ་ཅིག་བཞག་བཅུག་འོང་། འ་ནི་ ཇུམ་ལ་(Joomla) ས་ཁོངས་སོ་སོའི་གནས་སྟངས་ཀྱི་དོན་ལུ་ རྫས་ཐོའི་སྔོན་ཚིག་ལག་ལེན་འཐབ།" +INSTL_DATABASE_NAME_LABEL="གནས་སྡུད་གཞི་མཛོད་ཀྱི་མིང་།" +INSTL_DATABASE_NO_SCHEMA="འ་ནི་ གནས་སྡུད་གཞི་མཛོད་དབྱེ་ཁག་གི་དོན་ལུ་ གནས་སྡུད་གཞི་མཛོད་ཀྱི་སྔོན་འགྲོའི་འཆར་གཞི་མིན་འདུག" +INSTL_DATABASE_OLD_PROCESS_DESC="ཧེ་མའི་ཇུམ་ལ་(Joomla) བཙུགས་བཞག་ལས་ རྫས་ཐོའི་རྒྱབ་སྣོན་ག་ཡོད་མི་འདི་ཚུ་ གསརཔ་བཙུགས་འོང་།" +INSTL_DATABASE_OLD_PROCESS_LABEL="གནས་སྡུད་གཞི་མཛོད་རྙིངམ་གྱི་ བྱ་རིམ།" +INSTL_DATABASE_PASSWORD_DESC="ས་ཁོངས་ཉེན་སྲུང་གི་དོན་ལུ་ གནས་སྡུད་གཞི་མཛོད་ཀྱི་རྩིས་ཁྲ་ལུ་ གསང་ཡིག་ ངེས་པར་དུ་ལག་ལེན་འཐབ་་དགོཔ་ཨིན།" +INSTL_DATABASE_PASSWORD_LABEL="གསང་ཡིག" +INSTL_DATABASE_PREFIX_DESC="རྫས་ཐོའི་སྔོན་ཚིག་འདི་འདམ་ཁ་རྐྱབ་ ཡང་ན་ རིམ་བྲལ་ལས་སྤེལ་མི་འདི་ལག་ལེན་འཐབ། འོས་འབབ་ལྡན་ཏོག་ཏོ་འདི་ ཁྱད་ཆོས་རིངམོ་ གསུམ་དང་བཞི་ དེ་ཡང་ ཨལ་ཕ་ནུ་མི་རིཊ(alphanumeric)ཀྱི་ཁྱོད་ཆོས་རྐྱངམ་ཅིག་འོང་ནི་དང་ མཇུག་འདི་འོག་ཐིག་གི་འབད་མཇུག་བསྡུ་དགོ། སྔོན་ཚིག་འདི་ རྫས་ཐོ་གཞན་གྱི་ ལག་ལེན་མ་འཐབ་མི་ཅིག་ གདམ་ཁ་གཏན་འཁེལ་བཟོ།." +INSTL_DATABASE_PREFIX_LABEL="རྫས་ཐོའི་སྔོན་ཚིག" +INSTL_DATABASE_PREFIX_MSG="རྫས་ཐོའི་སྔོན་ཚིག་འདི་ འགོ་ཡི་གུ་གི་འགོ་བཙུགས་ནི་ འདི་རྟིང་བདའ་སྟེ་ གདམ་ཁ་ཅན་གྱི་ ཨལ་ཕ་ནུ་མི་རིཊ(alphanumeric)ཁྱོད་ཆོས་བཙུགས་ནི་ དེ་ལས་ མཇུག་འདི་འོག་ཐིག་གི་འབད་མཇུག་བསྡུ་དགོ།" +INSTL_DATABASE_TYPE_DESC="འདི་ གཅིག་འབདན་ "MySQLi" འོང་།" +INSTL_DATABASE_TYPE_LABEL="གནས་སྡུད་གཞི་མཛོད་ཀྱི་དབྱེ་ཁག" +INSTL_DATABASE_USER_DESC="གང་རུང༌ "root" ཡང་ན་ ལག་ལེན་པའི་མིང་འདི་ འགོ་འདྲེན་པ་གི་བྱིན་འོང་།" +INSTL_DATABASE_USER_LABEL="ལག་ལེན་པའི་མིང་།" + +;FTP view +INSTL_AUTOFIND_FTP_PATH=" ངམ་ངམ་ཤུགས་ཀྱིས་འཐོབ་ནིའི་ FTP འབྲེལ་ལམ།" +INSTL_FTP="FTP རིམ་སྒྲིག" +INSTL_FTP_DESC="

ལ་ལུ་ སར་བར་(server)ལུ་ བཙུགས་བཞག་མཇུག་བསྡུ་ནི་དོན་ལུ་ FTP ཁྱད་ཚང༌ཚུ་ བྱིན་དགོ། ཁྱོད་ར་ འདི་ཁྱད་ཚང་མེད་པར་ བཙུགས་བཞག་འབད་ནིའི་དཀའ་ངལ་མཐོན་པ་ཅིན་ གལ་སྲིད་ ངེས་པར་དགོཔ་ཨིན་པ་ཅིན་ ཏན་ཏན་བཟོ་ནི་དོན་ལུ་ ཁྱོད་རའི་འགོ་འདྲེན་པ་དང་ཅིག་ཁར་ ཞིབ་དཔྱད་འབད།

ཉེན་སྲུང་གི་དོན་ལུ་ ཡོངས་འབྲེལ་འཆར་སྒོའི་སར་བར་(server) ག་ར་གི་དོན་ལུ་མེན་པར་ ཇུམ་ལ་(Joomla!) བཙུགས་བཞག་རྐྱངམ་ཅིག་ ལྷོད་ལམ་གྱི་དོན་ལུ་ FTP ལག་ལེན་པའི་རྩིས་ཁྲ་སོ་སོ་བཟོ་ནི་འདི་ གལ་ཆེ། ཁྱོད་རའི་འགོ་འདྲེན་པ་གི་ ཁྱོད་ལུ་ཆ་རོགས་འབད་ཚུག།

བརྗེད་ཐོ།: གལ་སྲིད་ Windows ལག་ལེན་རིམ་ལུགས་འདི་ བཙུགས་བཞག་འབད་བ་ཅིན་ FTP རིམ་པ་འདི་ མེད་ དགོ།

" +INSTL_FTP_ENABLE_LABEL="FTP རིམ་པ་ ལཱ་འབད་ཚུགསཔ་བཟོ།" +INSTL_FTP_HOST_LABEL="FTP གི་འགོ་འདྲེན་པ།" +INSTL_FTP_PASSWORD_LABEL="FTP གསང་ཡིག།" +INSTL_FTP_PORT_LABEL="FTP དོང་།" +INSTL_FTP_ROOT_LABEL="FTP རྩ་བའི་འབྲེལ་ལམ།" +INSTL_FTP_SAVE_LABEL="FTP གསང་ཡིག་བསག་བཞག་འབད།" +INSTL_FTP_TITLE="FTP རིམ་སྒྲིག་ (གདམ་ཁ་ཅན།- ལག་ལེན་པ་མང་ཤོས་ཅིག་གི་ར་ འདི་རིམ་པ་བཀོ་བཞག་འོང་། - བཀོ་བཞག་ནི་དོན་ལུ་ ཤུལ་མམ་ལུ་ཨེབ།)" +INSTL_FTP_USER_LABEL="FTP ལག་ལེན་པའི་མིང་།" +INSTL_VERIFY_FTP_SETTINGS="FTP བཟོ་བཀོད་ཚུ་ བདེན་དཔྱད་འབད།" +INSTL_FTP_SETTINGS_CORRECT="བཟོ་བཀོད་ཚུ་ཀྲིག་ཀྲི་འདུག" +INSTL_FTP_USER_DESC="ཉེན་བརྡ། འ་ནི་འདི་ ས་སྟོང་བཞག་སྟེ་ ཁྱོད་རའི་ ཡིག་སྣོད་སྤོ་སོར་འབད་བའི་སྐབས་ FTP ལག་ལེན་པའི་མིང་བཙུགས་ནི་ལུ་ རྒྱབ་སྣོན་ཡོད།" +INSTL_FTP_PASSWORD_DESC="ཉེན་བརྡ། འ་ནི་འདི་ ས་སྟོང་བཞག་སྟེ་ ཁྱོད་རའི་ ཡིག་སྣོད་སྤོ་སོར་འབད་བའི་སྐབས་ FTP ལག་ལེན་པའི་མིང་བཙུགས་ནི་ལུ་ རྒྱབ་སྣོན་ཡོད།" + +;Site View +INSTL_SITE="རིམ་སྒྲིག་ངོ་མ།" +INSTL_ADMIN_EMAIL_LABEL="བདག་སྐྱོང༌པའི་གློག་འཕྲིན།" +INSTL_ADMIN_EMAIL_DESC="གློག་འཕྲིན་ཁ་བྱང་བཙུགས། འ་ནི་འདི་ ཡོངས་འབྲེལ་འཆར་སྒོའི་རྩ་ལག་ལག་ལེན་པ་གྱི་ གློག་འཕྲིན་ཁ་བྱང་ཨིན།" +INSTL_ADMIN_PASSWORD_LABEL="བདག་སྐྱོང་པའི་གསང་ཡིག" +INSTL_ADMIN_PASSWORD_DESC="རྩ་ལག་ལག་ལེན་པའི་རྩིས་ཁྲ་གི་དོན་ལུ་ གསང་ཡིག་བཟོ་སྟེ་ འོག་གི་ས་ཁོངས་ཚུ་ གཏན་འཁེལ་བཟོ།" +INSTL_ADMIN_PASSWORD2_LABEL="བདག་སྐྱོང་པའི་གསང་ཡིག་ གཏན་འཁེལ་བཟོ།" +INSTL_ADMIN_USER_LABEL="བདག་སྐྱོང་ ལག་ལེན་པའི་མིང་།" +INSTL_ADMIN_USER_DESC="ཁྱོད་རའི་ རྩ་ལག་ལག་ལེན་པའི་རྩིས་ཁྲ་གི་དོན་ལུ་ ལག་ལེན་པའི་མིང་བཟོ།" +INSTL_SITE_NAME_LABEL="ས་ཁོངས་མིང་།" +INSTL_SITE_NAME_DESC="ཁྱོད་རའི་ ཇོམ་ལ་(Joomla) ས་ཁོངས་ཀྱི་མིང་བཙུགས།" +INSTL_SITE_METADESC_LABEL="བཤད་པ།" +INSTL_SITE_METADESC_TITLE_LABEL="འཚོལ་ཞིབ་འཕྲུལ་ཨམ་གི་ལག་ལེན་འཐབ་ནི་དོན་ལུ་ ཡོངས་འབྲེལ་འཆར་སྒོའི་སྤྱིར་བཏང་གི་བཤད་པ་བཙུགས། སྤྱིར་བཏང་ལུ་ མིང་ཚིག་ ༢༠ ལས་ མ་མངམ་ཅིག་བཙུགས།" +INSTL_SITE_OFFLINE_LABEL="ཡོངས་འབྲེལ་འབྲེལ་མེད་ཀྱི་ས་ཁོངས།" +INSTL_SITE_OFFLINE_TITLE_LABEL="བཙུགས་བཞག་འབད་བཞིནམ་ལས་ གདོང་ཤོག་གི་ས་ཁོངས་ ཡོངས་འབྲེལ་འབྲེལ་མེད་བཟོ། རྒྱལ་སྤྱིའི་རིམ་སྒྲིག་ཐོག་ལས་ ཤུལ་ལས་ ས་ཁོངས་འདི་ ཡོངས་འབྲེལ་ འབྲེལ་ཡོད་བཟོ་བཏུབ།" +INSTL_SITE_INSTALL_SAMPLE_LABEL="གནས་སྡུད་དཔེ་ཚད་བཙུགས།" +INSTL_SITE_INSTALL_SAMPLE_DESC="འགོ་བཙུགས་མི་ཚུ་གི་དོན་ལུ་ གནས་སྡུད་དཔེ་ཚད་བཙུགས་ནི་འདི་ རྒྱབ་སྣོན་སྦོམ་ཡོད།
འ་ནི་གི་ ཇུམ་ལ་ (Joomla) བཙུགས་བཞག་གི་ཡོངས་འཐུས་ནང་ལུ་ཡོད་མི་ བརྗོད་དོན་དཔེ་ཚད་འདི་བཙུགས་འོང་།" +INSTL_SITE_INSTALL_SAMPLE_NONE="ག་ཡང་མེནམ། (སྐྱེས་ལུང་གི་སྐད་སྣ་ལྡན་པའི་ས་ཁོངས་ གསར་བཙུགས་འབད་ནི་དོན་ལུ་དགོ།)" +INSTL_SAMPLE_BLOG_SET="དབྱིན་སྐད་(GB) བྲི་སྒོའི་ གནས་སྡུད་ཀྱི་དཔེ་ཚད།" +INSTL_SAMPLE_BROCHURE_SET="དབྱིན་སྐད་(GB) གནས་ཤོགའི་ གནས་སྡུད་ཀྱི་དཔེ་ཚད།" +INSTL_SAMPLE_DATA_SET="དབྱིན་སྐད་(GB) སྔ་སྒྲིགའི་ གནས་སྡུད་ཀྱི་དཔེ་ཚད།" +INSTL_SAMPLE_LEARN_SET="དབྱིན་སྐད་(GB) ཇུམ་ལ་གི་ གནས་སྡུད་ཀྱི་དཔེ་ཚད་འདི་ལྷབ།" +INSTL_SAMPLE_TESTING_SET="དབྱིན་སྐད་(GB)གི་ གནས་སྡུད་ཀྱི་དཔེ་ཚད་བརྟག་དཔྱད་འབད།" +INSTL_SITE_INSTALL_SAMPLE_NONE_DESC="ཇུམ་ལ་(Joomla) འདི་ བརྗོད་དོན་ག་ནི་ཡང་མེད་པར་ གློག་རིམ་དཀར་ཆག་དང་ ནང་སྐྱོད་བཀང་ཤོག་རྐྱངམ་ཅིག་སྦེ་ བཙུགས་བཞག་འབད།" +INSTL_SAMPLE_BLOG_SET_DESC="ཇུམ་ལ་(Joomla) འདི་ རྩོམ་བྲིས་དག་པ་ཅིག་ དེ་ལས་བྲི་སྒོ་དང་འབྲེལ་བ་ཡོད་པའི་རིམ་ཚན་ (དཔྱེ་འབད་བ་ཅིན་ གསལ་བསྒྲགས་རྙིངམ། བྲི་སྒོ་མིང་ཐོ། གསལ་བསྒྲགས་མངམ་ལྷག་མི་ཚུ།) ཚུ་དང་ཅིག་ཁར་ བཙུགས་བཞག་འབད།" +INSTL_SAMPLE_BROCHURE_SET_DESC="ཇུམ་ལ་(Joomla) འདི་ཤོག་ལེབ་དག་པ་ཅིག་ (གློག་རིམ་དཀར་ཆག་འདི་ གདོང་ཤོག་ཤོག་ལེབ། ང་བཅས་སྐོར་ལས། གནས་ཚུལ། འབྲེལ་བ་འཐབ་ས།) དང་ རིམ་ཚན་(དཔྱེ་འབད་བ་ཅིན་ འཚོལ་ཞིབ། གོམས་འདྲིས་ ནང་སྐྱོད་འབྲི་ཤོག) ཚུ་དང་ཅིག་ཁར་ བཙུགས་བཞག་འབད། " +INSTL_SAMPLE_DATA_SET_DESC="ཇུམ་ལ་(Joomla) འདི་ཤོག་ལེབ་ཅིག་ (འབྲེལ་ལམ་ཡོད་པའི་གློག་རིམ་དཀར་ཆག) དང་ གློག་རིག་གི་རིམ་ཚན་ (དཔྱེ་འབད་བ་ཅིན་ རྩོམ་བྲིས་གསརཔ། ནང་སྐྱོད་འབྲི་ཤོག) ཚུ་དང་ཅིག་ཁར་ བཙུགས་བཞག་འབད།" +INSTL_SAMPLE_LEARN_SET_DESC="ཇུམ་ལ་(Joomla)འདི་ ཇུམ་ལ་ག་དེ་སྦེ་ ལཱ་འབདཝ་ཨིན་ན་གི་སྐོར་ལས་ འགྲེལ་བཤད་རྐྱབ་ཡོད་མི་རྩོམ་བྲིས་དང་ཅིག་ཁར་ བཙུགས་བཞག་འབད།" +INSTL_SAMPLE_TESTING_SET_DESC="ཇུམ་ལ་(Joomla) བརྟག་ཞིབ་ལེགས་ཤོམ་འབད་ནིའི་དོན་ལུ་ རྣམ་གྲངས་དཀར་ཆག་ག་ར་ཡོད་མི་དང་ཅིག་ཁར་ ཇུམ་ལ་བཙུགས་བཞག་འབད།" + +;Summary view +INSTL_FINALISATION="མཇུག་བསྡུ་ནི།" +INSTL_SUMMARY_INSTALL="བཙུགས།" +INSTL_SUMMARY_EMAIL_LABEL="གློག་འཕྲིན་རིམ་སྒྲིག" +INSTL_SUMMARY_EMAIL_DESC="བཙུགས་བཞག་འབད་བཞིནམ་ལས་ གློག་འཕྲིན་ཐོག་ལས་ རིམ་སྒྲིག་བཟོ་བཀོད་འབད་ནི་དོན་ལུ་ %s ལུ་བསྐྱལ།" +INSTL_SUMMARY_EMAIL_PASSWORDS_LABEL="གློག་ཕྲིན་ནང་ལུ་ གསང་ཡིག་བཙུགས།" +INSTL_SUMMARY_EMAIL_PASSWORDS_DESC="ཉེན་བརྡ། ཁྱོད་རའི་ གློག་ཕྲིན་ནང་ལུ་ གསང་ཡིག་བསྐྱལ་ནི་དང་ གསང་ཡིག་གློག་ཕྲིན་ནང་ལུ་བཙུགས་ནི་ལུ་ རྒྱབ་སྣོན་མེད།" + +;Installing view +INSTL_INSTALLING="བཙུགས་བཞག་འབད་དོ་་་་་་་" +INSTL_INSTALLING_DATABASE_BACKUP="གནས་སྡུད་གཞི་མཛོད་ཀྱི་རྫས་ཐོ་རྙིངམ་ཚུ་ རྒྱབ་སྣོན་བཟོ་དོ།" +INSTL_INSTALLING_DATABASE_REMOVE="གནས་སྡུད་གཞི་མཛོད་ཀྱི་རྫས་ཐོ་རྙིངམ་ཚུ་ བཏོན་གཏང་དོ།" +INSTL_INSTALLING_DATABASE="གནས་སྡུད་གཞི་མཛོད་ཀྱི་རྫས་ཐོ་ཚུ་ གསརཔ་བཟོ་དོ།" +INSTL_INSTALLING_SAMPLE="གནས་སྡུད་ཀྱི་དཔེ་ཚད་ བཙུགས་བཞག་འབད་དོ།" +INSTL_INSTALLING_CONFIG="ཡིག་སྣོད་རིམ་སྒྲིག་ གསརཔ་བཟོ་དོ།" +INSTL_INSTALLING_EMAIL="གློག་ཕྲིན་ %s ལུ་བསྐྱལ་དོ།" + +;Email +INSTL_EMAIL_SUBJECT="རིམ་སྒྲིག་ཁ་གསལ: %s" +INSTL_EMAIL_HEADING="ཇུམ་ལ་(Joomla)འི་ཡོངས་འབྲེལ་འཆར་སྒོ་ གསརཔ་གསལ་བཙུགས་འབད་མི་དོན་ལུ་ རིམ་སྒྲིག་བཟོ་བཀོད་ཚུ་འོག་ལུ་ཐོབ་ཚུགས།" +INSTL_EMAIL_NOT_SENT="གློག་ཕྲིན་འདི་བསྐྱལ་མ་ཚུགས།" + +;Complete view +INSTL_COMPLETE_ADMINISTRATION_LOGIN_DETAILS="བདག་སྐྱོང༌ནང་སྐྱོད་ཀྱི་ཁ་གསལ།" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_ERROR_FOLDER_ALREADY_REMOVED="བཙུགས་བཞག་གི་ཡིག་སྣོད་འདི་ ཧེ་མ་ལས་བཏོན་གཏང་ནུག" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_ERROR_FOLDER_DELETE="བཙུགས་བཞག་གི་ཡིག་སྣོད་འདི་ བཏོན་གཏང་མི་ཚུགས་པས། ཡིག་སྣོད་འདི་ལག་ཐོག་ལས་བཏོན་གཏང་གནང་།" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_FOLDER_REMOVED="བཙུགས་བཞག་གི་ཡིག་སྣོད་འདི་ ལེགས་ཤོམ་སྦེ་་བཏོན་གཏང་ཡི།" +INSTL_COMPLETE_LANGUAGE_1="ཁྱོད་རའི་སྐད་ཡིག་དང་ སྐད་སྣ་ལྡན་པའི་ནང་ལུ་ ཇུམ་ལ་(Joomla)གི་ས་ཁོངས་ གསར་བཙུགས།" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_LANGUAGE_DESC="བཙུགས་བཞག་གི་ཡིག་སྣོད་འདི་ བཏོན་མ་གཏང་བའི་ཧེ་མ་ སྐད་ཡིག་ཁ་སྐོང་བཙུགས་བཏུབ། ཁྱོད་ར་ ཇུམ་ལའི་(Joomla) ལག་ལེན་ནང་ལུ་ སྐད་ཡིག་ཁ་སྐོང་བཀལ་ནི་ཨིན་པ་ཅིན་ འོག་གི་འཕྲུལ་རྟ་འདི་ གདམ་ཁ་རྐྱབ།" +INSTL_COMPLETE_LANGUAGE_DESC2="བརྗེད་ཐོ།: ཁྱོད་ར་ ཇུམ་ལ་(Joomla) གནས་སྡུད་སྤོ་ནི་དང་ སྐད་ཡིག་གསརཔ་ཚུ་བཙུགས་ནི་དོན་ལུ་ གློག་རིག་ཡོངས་འབྲེལ་གྱི་ལྷོད་ལམ་དགོ།
སར་བར་(server) རིམ་སྒྲིག་ལ་ལུ་ཅིག་གི་ ཇུམ་ལ་(Joomla)ལུ་ སྐད་ཡིག་ཚུ་བཙུགས་ནི་ལུ་ བཀག་ཆ་འབད་འོང་། ཁྱོད་ར་ འ་ནི་བཟུམ་གྱི་གནས་སྟངས་འབྱུང་སྲིད་པ་ཅིན་ ཚ་གྱང་མ་ལང་ ཤུལ་ལས་ ཇུམ་ལ་(Joomla) གི་བདག་སྐྱོང་པ་ལག་ལེན་འཐབ་ཏེ་ བཙུགས་བཞག་འབད་ཚུགས།" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_REMOVE_FOLDER="བཙུགས་བཞག་གི་ཡིག་སྣོད་འདི་ བཏོན་གཏང།" +; The word 'installation' should not be translated as it is a physical folder. +INSTL_COMPLETE_REMOVE_INSTALLATION="བཙུགས་བཞག་གི་ཡིག་སྣོད་འདི་ ཆ་ཚང་སྦེ་བཏོན་གཏང་ནི་ སེམས་ཁར་བཞག་གནང།
བཙུགས་བཞག་གི་ཡིག་སྣོད་འདི་ བཏོན་མ་གཏང་ཚུན་ཚད་ འདི་ལས་གལ་ཏེ་ འཕྲོ་མཐུད་འགྱོ་མི་ཚུགས། འ་ནི་འདི་ ཇུམ་ལ་(Joomla)གི་ ཉེན་སྲུང་རྣམ་པ་ཨིན།" +INSTL_COMPLETE_TITLE="བཀྲིས་བདེ་ལེགས། ཇུམ་ལ་(Joomla)འདི་ ད་ལྟོ་བཙུགས་བཞག་འབད་ཡོདཔ།" +INSTL_COMPLETE_INSTALL_LANGUAGES="གོ་རིམ་ལྷན་ཐབས། : སྐད་ཡིག་ཚུ་བཙུགས་བཞག་འབད།" + +;Languages view +INSTL_LANGUAGES="སྐད་ཡིག་ཆ་ཚང་བཙུགས།" +INSTL_LANGUAGES_COLUMN_HEADER_LANGUAGE="སྐད་ཡིག" +INSTL_LANGUAGES_COLUMN_HEADER_VERSION="ཐོན་རིམ།" +INSTL_LANGUAGES_DESC="ཇུམ་ལ་(Joomla)ངོ་བྱང་འདི་ སྐད་ཡིག་ལེ་ཤ་ཅིག་ནང་ལུ་ཐོབ་ཚུགས། ཁྱོད་ར་ གདམ་ཁ་ཅན་གྱི་སྐད་ཡིག་འདི་ གདམ་འཛིན་ནང་ལས་གདམ་ཁ་རྐྱབ་བཞིནམ་ལས་ ཤུལ་མམ་གྱི་འཕྲུལ་རྟ་འདི་ གདམ་ཁ་རྐྱབ་ཏེ་བཙུགས་བཞག་འབད།
བརྗེད་ཐོ།: འ་ནི་གློག་རིག་ལས་སྤྱོད་ཀྱི་ སྐད་ཡིག་གནས་སྡུད་སྤོ་ནི་དང་བཙུགས་ནི་དོན་ལུ་ སྐར་ཆ་ ༡༠ དེ་ཅིག་འགོར་འོང་། འདི་ དུས་ཚད་མ་ལང་པའི་དཀའ་ངལ་ལས་འཛེམ་ནི་དོན་ལུ་ སྐད་ཡིག་བཙུགས་ནི་ ༣ ལས་མངམ་ གདམ་ཁ་མ་རྐྱབ། " +INSTL_LANGUAGES_MESSAGE_PLEASE_WAIT="འ་ནི་གློག་རིག་ལས་སྤྱོད་ཀྱི་ སྐད་ཡིག་ཅིག་བཟོ་ནིའི་དོན་ལུ་ སྐར་ཆ་ ༡༠ ཚུན་ཚད་འགོར་འོང་།
སྐད་ཡིག་ཚུ་ གནས་སྡུད་སྤོ་བའི་སྐབས་དང་ བཙུགས་བཞག་འབད་བའི་སྐབས་ལུ་ སྒུག་གནང།" +INSTL_LANGUAGES_MORE_LANGUAGES="ཁྱོད་ར་ སྐད་ཡིག་ལེ་ཤ་བཙུགས་ནི་ཨིན་པ་ཅིན་ སྔོན་མའི་འཕྲུལ་རྟ་འདི་ ཨེབ་གནང།" +INSTL_LANGUAGES_NO_LANGUAGE_SELECTED="བཙུགས་བཞག་འབད་ནིའི་དོན་ལུ་ སྐད་ཡིག་གདམ་ཁ་མ་རྐྱབ་ནུག ཁྱོད་ར་ སྐད་ཡིག་ལེ་ཤ་བཙུགས་ནི་ཨིན་པ་ཅིན་ སྔོན་མའི་འཕྲུལ་རྟ་འདི་ ཨེབ་ཏེ་ ཐོ་ཡིག་ནང་ལས་ གདམ་ཁ་ཅན་གྱི་སྐད་ཡིག་འདི་གདམ་ཁ་རྐྱབ།" +INSTL_LANGUAGES_WARNING_NO_INTERNET="ཇུམ་ལ་(Joomla)འདི་ སྐད་ཡིག་གི་སར་བར་(server)ལུ་ འབྲེལ་མཐུད་མ་ཚུགས། བཙུགས་བཞག་གི་བྱ་རིམ་ རྫོགས་གནང།" +INSTL_LANGUAGES_WARNING_NO_INTERNET2="བརྗེད་ཐོ།: ཤུལ་ལས་ ཁྱོད་ར་ ཇུམ་ལ་(Joomla)གི་བདག་སྐྱོང་པ་ལག་ལེན་འཐབ་ཏེ་ སྐད་ཡིག་ཚུ་བཙུགས་བཞག་འབད་ཚུགས།" +INSTL_LANGUAGES_WARNING_BACK_BUTTON="བཙུགས་བཞག་གི་བྱ་རིམ་མཇུག་ལུ་ ལོག་འགྱོ།" + +;Default language view +INSTL_DEFAULTLANGUAGE_ACTIVATE_MULTILANGUAGE="སྐད་སྣ་ལྡན་པའི་ངོ་བྱང་འདི་ ལག་ལེན་འཐབ་བཏུབ་བཟོ།" +INSTL_DEFAULTLANGUAGE_ACTIVATE_MULTILANGUAGE_DESC="འདི་ལག་ལེན་འཐབ་བཏུབ་བཟོ་ཡོད་པ་ཅིན་ ཁྱོད་ཀྱི་ ཇུམ་ལ་(Joomla)ས་ཁོངས་འདི་ སྐད་ཡིག་བཙུགས་ཡོད་མི་རེ་རེ་ལུ་ གློག་རིམ་དཀར་ཆག་ས་གནས་ནང་མཁོད་དང་ཅིག་ཁར་ སྐད་སྣ་ལྡན་པའི་ངོ་བྱང་འབད་བཏུབ་བཟོ་དེ་འོང།" +INSTL_DEFAULTLANGUAGE_ACTIVATE_LANGUAGE_CODE_PLUGIN="སྐད་ཡིག་གསང་རྟགས་ཀྱི་པླག་ཨིན་(plugin)འདི་ འབད་ཚུགསཔ་བཟོ།" +INSTL_DEFAULTLANGUAGE_ACTIVATE_LANGUAGE_CODE_PLUGIN_DESC="འདི་འབད་ཚུགསཔ་བཟོ་ཡོད་པ་ཅིན་ SEO ཡར་དྲག་བཟོ་ནིའི་དོན་ལུ་ HTML ཡིག་ཆ་བཟོ་ཡོད་མི་ནང་ལུ་ སྐད་ཡིག་གསང་རྟགས་ཀྱི་པླག་ཨིན་(plugin)འདི་གི་ སྐད་ཡིག་གསང་རྟགས་སོར་ནི་ལུ་ ལྕོགས་གྲུབ་ཧེང་སྐལ་བཀལ་འོང་།" +INSTL_DEFAULTLANGUAGE_ADMINISTRATOR="བདག་སྐྱོང་པ་གི་ སྔོན་སྒྲིག་སྐད་ཡིག" +INSTL_DEFAULTLANGUAGE_ADMIN_COULDNT_SET_DEFAULT="ཇུམ་ལ་(Joomla)འདི་ལུ་ སྔོན་སྒྲིག་གི་སྐད་ཡིག་བཙུགས་མ་བཏུབ། རྒྱབ་གནས་ཀྱི་བདག་སྐྱོང་པའི་དོན་ལུ་ དབྱིན་སྐད་ཀྱི་སྐད་ཡིག་འདི་ སྔོན་སྒྲིག་འབད་ ལག་ལེན་འཐབ་འོང།" +INSTL_DEFAULTLANGUAGE_ADMIN_SET_DEFAULT="ཇུམ་ལ་(Joomla)དེ་གི་ སྐད་ཡིག་ %s འདི་བདག་སྐྱོང་གི་སྔོན་སྒྲིག་སྐད་ཡིག་འབད་བཙུགས་ཅིག" +INSTL_DEFAULTLANGUAGE_COLUMN_HEADER_SELECT="གདམ་ཁ་རྐྱབ།" +INSTL_DEFAULTLANGUAGE_COLUMN_HEADER_LANGUAGE="སྐད་ཡིག" +INSTL_DEFAULTLANGUAGE_COLUMN_HEADER_TAG="མིང་རྟགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_CREATE_CONTENT_LANGUAGE="ཇུམ་ལ་(Joomla)དེ་གི་ བརྗོད་དོན་སྐད་ཡིག་ %s འདི་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ གསརཔ་བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_CREATE_MENU="ཇུམ་ལ་(Joomla)དེ་གི་ གློག་རིམ་དཀར་ཆག་ %s འདི་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ གསརཔ་བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_CREATE_MENU_ITEM="ཇུམ་ལ་(Joomla)དེ་གི་ གདོང་ཤོག་གི་རྣམ་གྲངས་དཀར་ཆག་ %s འདི་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ གསརཔ་བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_CREATE_MENU_MODULE="ཇུམ་ལ་(Joomla)དེ་གི་ གློག་རིམ་དཀར་ཆག་གི་རིམ་ཚན་ %s འདི་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ གསརཔ་བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_CREATE_CATEGORY="ཇུམ་ལ་(Joomla)དེ་གི་ བརྗོད་དོན་དབྱེ་བ་ %s འདི་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ གསརཔ་བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_CREATE_ARTICLE="ཇུམ་ལ་(Joomla)དེ་གི་ ས་གནས་ནང་འཁོད་ཀྱི་རྩོམ་བྲིས་ %s འདི་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ གསརཔ་བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_ENABLE_MODULESWHITCHER_LANGUAGECODE="ཇུམ་ལ་(Joomla)དེ་གི་ སྐད་ཡིག་བརྗེ་སོར་གྱི་རིམ་ཚན་འདི ་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ དཔེ་སྐྲུན་འབད་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_ENABLE_PLG_LANGUAGECODE="ཇུམ་ལ་(Joomla)དེ་གི་ སྐད་ཡིག་གསང་རྟགས་ཀྱི་པླག་ཨིན་(plugin)འདི ་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ འབད་ཚུགསཔ་བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_ENABLE_PLG_LANGUAGEFILTER="ཇུམ་ལ་(Joomla)དེ་གི་ སྐད་ཡིག་སེལ་ཚགས་ཀྱི་པླག་ཨིན་(plugin)འདི ་ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ འབད་ཚུགསཔ་བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_INSTALL_LANGUAGE="ཇུམ་ལ་(Joomla)ལུ་ སྐད་ཡིག་ %s བཙུགས་བཞག་འབད་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_PUBLISH_MOD_MULTILANGSTATUS="ཇུམ་ལ་(Joomla)དེ་གི་ སྐད་ཡིག་གནས་རིམ་གྱི་རིམ་ཚན་འདི་ ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ དཔེ་སྐྲུན་འབད་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_COULD_NOT_UNPUBLISH_MOD_DEFAULTMENU="ཇུམ་ལ་(Joomla)དེ་གི་ སྔོན་སྒྲིག་གི་གློག་རིམ་དཀར་ཆག་རིམ་ཚན་འདི་ ངམ་ངམ་ཤུགས་ཀྱིས་འབད་ དཔེ་སྐྲུན་མ་འབདཝ་ བཟོ་མ་ཚུགས།" +INSTL_DEFAULTLANGUAGE_DESC="ཇུམ་ལ་(Joomla)ལུ་ འོག་གི་སྐད་ཡིག་འདི་ཚུ་ བཙུགས་བཞག་འབད་ནུག། ཇུམ་ལའིབདག་སྐྱོང་གི་དོན་ལུ་ གདམ་ཁ་ཅན་གྱི་སྐད་ཡིག་འདི་གདམ་ཁ་རྐྱབ་གནང།" +INSTL_DEFAULTLANGUAGE_DESC_FRONTEND="ཇུམ་ལ་(Joomla)ལུ་ འོག་གི་སྐད་ཡིག་འདི་ཚུ་ བཙུགས་བཞག་འབད་ནུག། ཇུམ་ལའི་གདོང་ཤོག་་གི་དོན་ལུ་ གདམ་ཁ་ཅན་གྱི་སྐད་ཡིག་འདི་གདམ་ཁ་རྐྱབ་གནང།" +INSTL_DEFAULTLANGUAGE_FRONTEND="ས་ཁོངས་ཀྱི་སྔོན་སྒྲིག་སྐད་ཡིག" +INSTL_DEFAULTLANGUAGE_FRONTEND_COULDNT_SET_DEFAULT="ཇུམ་ལ་(Joomla)འདི་ལུ་ སྔོན་སྒྲིག་གི་སྐད་ཡིག་བཙུགས་མ་བཏུབ། གདོང་ཤོག་གི་ས་ཁོངས་དོན་ལུ་ དབྱིན་སྐད་ཀྱི་སྐད་ཡིག་འདི་ སྔོན་སྒྲིག་འབད་ ལག་ལེན་འཐབ་འོང།" +INSTL_DEFAULTLANGUAGE_FRONTEND_SET_DEFAULT="ཇུམ་ལ་(Joomla)དེ་གི་ སྐད་ཡིག་ %s འདི་ས་ཁོངས་ཀྱི་སྔོན་སྒྲིག་སྐད་ཡིག་འབད་བཙུགས་ཅིག" +INSTL_DEFAULTLANGUAGE_INSTALL_LOCALISED_CONTENT="ས་གནས་ནང་འཁོད་ཀྱི་བརྗོད་དོན་འདི་བཙུགས།" +INSTL_DEFAULTLANGUAGE_INSTALL_LOCALISED_CONTENT_DESC="འདི་ལག་ལེན་འཐབ་བཏུབ་བཟོ་ཡོད་པ་ཅིན་ སྐད་ཡིག་བཙུགས་ཡོད་མི་རེ་རེ་ལུ་ བརྗོད་དོན་གྱི་དབྱེ་ཁག་གསརཔ་ ངམ་ངམ་ཤུགས་ཀྱི་བཟོ་འོང། འདི་ཅིག་ཁར་ དབྱེ་ཁག་རེ་རེ་ལུ་ རྩོམ་བྲིས་ངོ་བྱང་ཡོད་མི་ གཞི་དཔེ་གི་བརྗོད་དོན་འདི་ གསརཔ་བཟོ་འོང།" +INSTL_DEFAULTLANGUAGE_MULTILANGUAGE_TITLE="སྐད་སྣ།" +INSTL_DEFAULTLANGUAGE_MULTILANGUAGE_DESC="འ་ནི་ཚ་ཚན་འདི་གི་ ཇུམ་ལ་(Joomla)སྐད་སྣའི་ངོ་བྱང་ ངམ་ངམ་ཤུགས་ཀྱི་ལག་ལེན་འཐབ་བཏུབ་བཟོ་ནི་ལུ་ འབད་བཅུག་འོང།" +INSTL_DEFAULTLANGUAGE_TRY_LATER="ཤུལ་ལས་ ཁྱོད་ར་ཇུམ་ལ་(Joomla)གི་བདག་སྐྱོང་པ་ལག་ལེན་འཐབ་ཏེ་ བཙུགས་བཞག་འབད་ཚུགས།" + +; IMPORTANT NOTE FOR TRANSLATORS: Do not literally translate this line, instead add the localised name of the language. For example Spanish will be Español +INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME="རྫོང་ཁ་ (BT)" + +;Database Model +INSTL_DATABASE_COULD_NOT_CONNECT="གནས་སྡུད་གཞི་མཛོད་ལུ་ མཐུད་མ་ཚུགས། འབྲེལ་མཐུད་ལོག་མི་གྱངས་ཁ་ : %s" +INSTL_DATABASE_COULD_NOT_CREATE_DATABASE="བཙུགས་བཞག་འབད་མི་ གསལ་བཀོད་ཅན་གྱི་གནས་སྡུད་གཞི་མཛོད་ལུ་ མཐུད་མ་ཚུགསཔ་མ་ཚད་ གནས་སྡུད་གཞི་མཛོད་གསརཔ་ཡང་བཟོ་མ་ཚུགས། ཁྱོད་རའི་ བཟོ་བཀོད་འདི་བདེན་དཔྱད་འབད་ དེ་ལས་ གནས་སྡུད་གཞི་མཛོད་ངེས་པར་དུ་དགོཔ་ཡོད་པ་ཅིན་ གསརཔ་བཟོ་གནང།" +INSTL_DATABASE_COULD_NOT_REFRESH_MANIFEST_CACHE="ཡིག་སྣོད་བརྡ་ཡིག་དོན་ལུ་ གསལ་སྟོན་གྱི་དྲན་མཛོད་འདི་ ཁ་གསོ་མ་ཚུགས་ : %s" +INSTL_DATABASE_EMPTY_NAME="" +INSTL_DATABASE_ERROR_BACKINGUP="གནས་སྡུད་གཞི་མཛོད་ཀྱི་རྒྱབ་སྣོན་འབད་བའི་སྐབས་ འཛོལ་བ་དག་པ་ཅིག་མཐོན་ཡི།" +INSTL_DATABASE_ERROR_CREATE="གནས་སྡུད་གཞི་མཛོད་ %s བཟོ་ནི་འབད་བའི་སྐབས་ འཛོལ་བ་མཐོན་ཡོད།
ལག་ལེན་པ་འདི་ གནས་སྡུད་གཞི་མཛོད་གསརཔ་བཟོ་ནིའི་དོན་ལུ་ ཁེ་དབང་མེད་བཟུམ་འདུག། ཇུམ་ལ་(Joomla) བཙུགས་བཞག་མ་འབད་བའི་ཧེ་མ་ དགོས་མཁོ་ཅན་གྱི་གནས་སྡུད་གཞི་མཛོད་འདི་ གསརཔ་སོ་སོ་སྦེ་བཟོ་དགོཔ་འོང།" +INSTL_DATABASE_ERROR_DELETE="འཛོལ་བ་ལ་ལུ་ གནས་སྡུད་གཞི་མཛོད་བཏོན་གཏང་བའི་སྐབས་འབྱུང་ནུག" +INSTL_DATABASE_FIELD_VALUE_REMOVE="བཏོན་གཏང།" +INSTL_DATABASE_FIELD_VALUE_BACKUP="རྒྱབ་སྣོན།" +INSTL_DATABASE_FIX_TOO_LONG="མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL) རྫས་ཐོའི་སྔོན་ཚིག་འདི་ ཁྱད་ཆོས་མཐོ་ཤོས་ ༡༥ དགོ།" +INSTL_DATABASE_INVALID_DB_DETAILS="གནས་སྡུད་གཞི་མཛོད་ཀྱི་ཁ་གསལ་བཀལ་ཡོད་མི་འདི་ འཛོལ་བ་ ཡང་ན་ སྟོངམ་འདུག" +INSTL_DATABASE_INVALID_MYSQL_VERSION="ཁྱོད་ར་ བཙུགས་བཞག་འཕྲོ་མཐུད་འབད་ནིའི་དོན་ལུ་ མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL) ༥.༠.༤ ཡང་ན་ འདི་ལས་མཐོ་ཤོས་དགོ། ཁྱོད་ཀྱི་ ཐོན་རིམ་འདི་ %s" +INSTL_DATABASE_INVALID_MYSQLI_VERSION="ཁྱོད་ར་ བཙུགས་བཞག་འཕྲོ་མཐུད་འབད་ནིའི་དོན་ལུ་ མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL) ༥.༠.༤ ཡང་ན་ འདི་ལས་མཐོ་ཤོས་དགོ། ཁྱོད་ཀྱི་ ཐོན་རིམ་འདི་ %s" +INSTL_DATABASE_INVALID_PDOMYSQL_VERSION="ཁྱོད་ར་ བཙུགས་བཞག་འཕྲོ་མཐུད་འབད་ནིའི་དོན་ལུ་ མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL) ༥.༠.༤ ཡང་ན་ འདི་ལས་མཐོ་ཤོས་དགོ། ཁྱོད་ཀྱི་ ཐོན་རིམ་འདི་ %s" +INSTL_DATABASE_INVALID_POSTGRESQL_VERSION="ཁྱོད་ར་ བཙུགས་བཞག་འཕྲོ་མཐུད་འབད་ནིའི་དོན་ལུ་ PostgreSQL ༨.༣.༡༨ ཡང་ན་ འདི་ལས་མཐོ་ཤོས་དགོ། ཁྱོད་ཀྱི་ ཐོན་རིམ་འདི་ %s" +INSTL_DATABASE_INVALID_SQLSRV_VERSION="ཁྱོད་ར་ བཙུགས་བཞག་འཕྲོ་མཐུད་འབད་ནིའི་དོན་ལུ་ ཨེས་ཀིཝ་ཨེལ་སར་བར་(SQL Server) ༢༠༠༨ R2 (10.50.1600.1) ཡང་ན་ འདི་ལས་མཐོ་ཤོས་དགོ། ཁྱོད་ཀྱི་ ཐོན་རིམ་འདི་ %s" +INSTL_DATABASE_INVALID_SQLZURE_VERSION="ཁྱོད་ར་ བཙུགས་བཞག་འཕྲོ་མཐུད་འབད་ནིའི་དོན་ལུ་ ཨེས་ཀིཝ་ཨེལ་སར་བར་(SQL Server) ༢༠༠༨ R2 (10.50.1600.1) ཡང་ན་ འདི་ལས་མཐོ་ཤོས་དགོ། ཁྱོད་ཀྱི་ ཐོན་རིམ་འདི་ %s" +INSTL_DATABASE_INVALID_TYPE="གནས་སྡུད་གཞི་མཛོད་ཀྱི་དབྱེ་ཁག་ གདམ་ཁ་རྐྱབ་གནང།" +INSTL_DATABASE_NAME_TOO_LONG="མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL) གནས་སྡུད་གཞི་མཛོད་ཀྱི་མིང་འདི་ ཁྱོད་ཆོས་ མཐོ་ཤོས་ར་ ༦༤ དགོ།" +INSTL_DATABASE_INVALID_NAME="མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL)གི་ཐོན་རིམ་ ༥.༡.༦ གི་ཧེ་མམ་ཚུ་གི་ མིང་ནང་ལུ་ ཐུན་ཚད་ཀྱི་ཁྱོད་ཆོས་ ཡང་ན་ "རྩ་ཅན་" གྱི་ཁྱོད་ཆོས་ཚུ་ མེད་འོང་ནི་བཟུམ་ཅིག་ཨིན། ཁྱོད་ཀྱི་ཐོན་རིམ་འདི་ %s" +INSTL_DATABASE_NAME_INVALID_SPACES="མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL) གནས་སྡུད་གཞི་མཛོད་ཀྱི་མིང་དང་ རྫས་ཐོའི་མིང་ཚུ་ འགོ་དང་མཇུག་ལུ་ས་སྟོང༌བཞག་མ་ཆོགཔ་བཟུམ་ཨིན།" +INSTL_DATABASE_NAME_INVALID_CHAR="མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL) ངོ་སྟོན་འདི་ཚུ་ནང་ལུ་ སྟོང་པ(NULL ASCII(0x00)) འོང་ནི་མི་འོང།" +INSTL_DATABASE_FILE_DOES_NOT_EXIST="ཡིག་སྣོད་ %s འདི་མིན་འདུག" + +;controllers +INSTL_COOKIES_NOT_ENABLED="ཁྱོད་ཀྱི་ཡོངས་འབྲེལ་འཚོལ་སྒོའི་ལས་མགྲོན་ནང་ལུ་ ཀུ་ཀིས་(Cookies) འབད་ཚུགསཔ་བཟོ་ཡོདཔ་མེད་མཐོན་པས། ངོ་བྱང་འབད་མ་ཚུགསཔ་བཟོ་ཡོདཔ་ལས་སྟེན་ ཁྱོད་ཀྱི་འཇུག་ཐངས་འདི་ བཙུགས་བཞག་འབད་མི་ཚུགས་པས། གཞན་སོ་སོ་ཡང་ བར་སར་(server)གྱི་འབྲེལ་མཐུད་ session.save_path ལུ་ཡང་དཀའ་ངལ་ཡོདཔ་འོང། དེ་སྦེ་ཨིན་པའི་ཁར་ ཁྱོད་ར་གི་ ཉམས་བཅོས་འབད་མ་ཚུགས་པ་ཅིན་ ཡོངས་འབྲེལ་བྱིན་མི་འགོ་འདྲེན་པ་དང་ཅིག་ཁར་ འབྲེལ་བ་འཐབ་གནང།" +INSTL_HEADER_ERROR="འཛོལ་བ།" + +;Helpers +INSTL_PAGE_TITLE="ཇུམ་ལ་(Joomla!) ཡོངས་འབྲེལ་འཆར་སྒོ་བཙུགས་མི།" + +;Configuration model +INSTL_ERROR_CONNECT_DB="གནས་སྡུད་གཞི་མཛོད་ལུ་ མཐུད་མ་ཚུགས། འབྲེལ་མཐུད་ལོག་མི་གྱངས་ཁ་ : %s" +INSTL_STD_OFFLINE_MSG="ས་ཁོངས་ཉམས་བཅོས་ཀྱི་དོན་ལུ་ ལག་ལེན་འཐབ་མ་བཏུབ་བཟོ་ཡོད།
མགྱོགས་པར་ར་ ལོག་སྟེ་ཞིབ་དཔྱད་འབད་གནང།" + +;FTP model +INSTL_FTP_INVALIDROOT="གསལ་བཀོད་འབད་ཡོད་པའི་ ཨེབ་ཀྲི་པི་(FTP)གི་ཡིག་སྣོད་འདི་ ཇུམ་ལ་(Joomla)བཙུགས་བཞག་འབད་ནིའི་ཡིག་སྣོད་མེན་འབད།" +INSTL_FTP_NOCONNECT="ཨེབ་ཀྲི་པི་སར་བར་(FTP Server) ལུ་མཐུད་མི་ཚུགས་པས།" +INSTL_FTP_NODELE="ལས་རིམ་ "DELE" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_NODIRECTORYLISTING="ཨེབ་ཀྲི་པི་སར་བར་(FTP Server) ལས་ཐོ་བཀོད་འབད་ནི་ཡིག་སྣོད་འདི་ སླར་གསོ་འབད་མ་ཚུགས།" +INSTL_FTP_NOLIST="ལས་རིམ་ "LIST" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_NOLOGIN="ཨེབ་ཀྲི་པི་སར་བར་(FTP Server) ནང་ལུ་ནང་སྐྱོད་འབད་མ་ཚུགས་པས།" +INSTL_FTP_NOMKD="ལས་རིམ་ "MKD" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_NONLST="ལས་རིམ་ "NLST" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_NOPWD="ལས་རིམ་ "PWD" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_NORETR="ལས་རིམ་ "RETR" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_NORMD="ལས་རིམ་ "RMD" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_NOROOT="གསལ་བཀོད་འབད་ཡོད་པའི་ ཨེབ་ཀྲི་པི་(FTP)གི་ཡིག་སྣོད་འདི་ ལག་ལེན་འཐབ་མ་ཚུགས་པས།" +INSTL_FTP_NOSTOR="ལས་རིམ་ "STOR" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_NOSYST="ལས་རིམ་ "SYST" འདི་ མཐར་འཁྱོལ་མ་ཚུགས།" +INSTL_FTP_UNABLE_DETECT_ROOT_FOLDER="ཨེབ་ཀྲི་པི་(FTP)གི་རྩ་ལག་ཡིག་སྣོད་འདི་ ངམ་ཤུགས་ཀྱིས་མཐོང་ནི་བཟོ་མི་ཚུགས།" + +;others +INSTL_CONFPROBLEM="ཁྱོད་ཀྱི་ རིམ་སྒྲིག་གི་ཡིག་སྣོད་འདི་ བྲི་བཏུབ་མི་མེན་པས་ ཡང་ན་ རིམ་སྒྲིག་གི་ཡིག་སྣོད་བཟོ་བའི་སྐབས་ དཀའ་ངལ་སྡོད་ནུག། འོག་གི་གསང་ཡིག་འདི་ཚུ་ ཁྱོད་ར་ ལགཔ་གི་བཙུགས་དགོ། ཚིག་ཡིག་ས་ཁོངས་ནང་ལས་ གསང་ཡིག་འདི་གདམ་ཁ་རྐྱབ་ཏེ་ གཙོ་རྟགས་བཀལ་ དེ་ལས་ ཡིག་སྣོད་གསརཔ་ནང་ལུ་བཙུགས། ཡིག་སྣོད་ཀྱི་མིང་ 'configuration.php' བཟོ་སྟེ་ ས་ཁོངས་རྩ་ལག་གི་ཡིག་སྣོད་ནང་ལུ་བཙུགས།" +INSTL_DATABASE_SUPPORT="གནས་སྡུད་གཞི་མཛོད་ཀྱི་རྒྱབ་རྟེན།:" +INSTL_DISPLAY_ERRORS="འཛོལ་བ་ཚུ་གསལ་སྟོན་འབད།" +INSTL_ERROR_DB="འཛོལ་བ་ལ་ལུ་ གནས་སྡུད་གཞི་མཛོད་གསརཔ་བཟོ་བའི་སྐབས་འབྱུང་། : %s" +INSTL_ERROR_INITIALISE_SCHEMA="གནས་སྡུད་གཞི་མཛོད་དབྱེ་ཁག་ལུ་ གསརཔ་བཙུགས་མི་ཚུགས་པས།" +INSTL_FILE_UPLOADS="ཡིག་སྣོད་ཚུ་བཙུགས་ནི།" +INSTL_GNU_GPL_LICENSE="GNU སྤྱིར་བཏང་མི་སེར་གྱི་ཆོག་ཐམ།" +INSTL_JSON_SUPPORT_AVAILABLE="JSON རྒྱབ་རྟེན།" +INSTL_MAGIC_QUOTES_GPC="སྒྱུ་མའི་དཔེ་བཀོད་ GPC འདི་ངོས་ལེན་མེདཔ།" +INSTL_MAGIC_QUOTES_RUNTIME="སྒྱུ་མའི་དཔེ་བཀོད་རྒྱུ་ལམ་གྱི་དུས།" +INSTL_MB_LANGUAGE_IS_DEFAULT="སྐད་ཡིག་ MB འདི་སྔོན་སྒྲིག་ཨིན།" +INSTL_MB_STRING_OVERLOAD_OFF="རྗོད་ཚིག་ MB གི་མང་དྲགས་འདི་ ངོས་ལེན་མེདཔ།" +INSTL_NOTICEMBLANGNOTDEFAULT="སྐད་ཡིག་ PHP mbstring འདི་བར་གནས་ལུ་མ་བཟོ་ནུག། འ་ནི་འདི་ .htaccess གི་ཡིག་སྣོད་ནང་ལུ་ ས་གནས་ལས་ php_value mbstring.language བར་གནས་ འདི་བཙུགས་ཚུགས།" +INSTL_NOTICEMBSTRINGOVERLOAD="PHP mbstring ལས་རིམ་ལུ་ མང་དྲགས་འདི་བཟོ་ནུག། འ་ནི་འདི་ .htaccess གི་ཡིག་སྣོད་ནང་ལུ་ ས་གནས་ལས་ php_value mbstring.language བར་གནས་ འདི་ངོས་ལེན་མེདཔ་བཟོ་ཚུགས།" +INSTL_NOTICEYOUCANSTILLINSTALL="
རིམ་སྒྲིག་བཟོ་བཀོད་འདི་མཇུག་ལུ་གསལ་སྟོན་འབད་ནི་ཨིནམ་ལས་ ཁྱོད་ར་ བཙུགས་བཞག་འདི་ད་ལྟོ་ཡང༌འཕྲོ་མཐུད་འབད་ཚུགས། ཁྱོད་ར་ གསང་ཚིག་འདི་ལགཔ་གི་འབད་ བཙུགས་དགོ། ཚིག་ཡིག་ས་ཁོངས་ནང་ལས་ གསང་ཡིག་འདི་གདམ་ཁ་རྐྱབ་ཏེ་ གཙོ་རྟགས་བཀལ་ དེ་ལས་ ཡིག་སྣོད་གསརཔ་ནང་ལུ་བཙུགས། ཡིག་སྣོད་ཀྱི་མིང་ 'configuration.php' བཟོ་སྟེ་ ས་ཁོངས་རྩ་ལག་གི་ཡིག་སྣོད་ནང་ལུ་བཙུགས།" +INSTL_OUTPUT_BUFFERING="གྲུབ་འབྲསའི་བར་ཤུགས་བཟེད་མི།" +INSTL_PARSE_INI_FILE_AVAILABLE="INI པར་སར་(Parser) རྒྱབ་རྟེན།" +INSTL_PHP_VERSION="PHP ཐོན་རིམ།" +INSTL_PHP_VERSION_NEWER="PHP ཐོན་རིམ། >= %s" +INSTL_REGISTER_GLOBALS="རྒྱལ་སྤྱིའི་ཐོ་བཀོད་ཚུ་ ངོས་ལེན་མེདཔ་བཟོ།" +INSTL_SAFE_MODE="ཉེན་སྲུང་ཅན་གྱི་ལམ་ལུགས།" +INSTL_SESSION_AUTO_START="ནམ་དུས་ ངམ་ཤུགས་ཀྱི་འགོ་བཙུགས།" +INSTL_WRITABLE="%s འདི་བྲི་བཏུབ་མི།" +INSTL_XML_SUPPORT="XML རྒྱབ་རྟེན།" +INSTL_ZIP_SUPPORT_AVAILABLE="བྱུང་བའི་ ZIP གི་རྒྱབ་རྟེན།" +INSTL_ZLIB_COMPRESSION_SUPPORT="Zlib སྨན་རས་ཀྱི་རྒྱབ་རྟེན།" +INSTL_PROCESS_BUSY="བྱ་རིམ་འདི་ཡར་རྒྱས་འགྱོ་དེ་་། ཨ་ཙི་ཅིག་སྒུག་གནང།" + +;Global strings +JADMINISTRATOR="བདག་སྐྱོང་པ།" +JCHECK_AGAIN="ལོག་སྟེན་ཞིབ་དཔྱད་འབད།" +JERROR="འཛོལ་བ།" +JEMAIL="གློག་འཕྲིན།" +JGLOBAL_ISFREESOFTWARE="གློག་རིག་མཉེན་ཆས་ %s འདི་ %s གི་འོག་ལུ་གསར་བཏོན་འབད་ཡོདཔ།" +JGLOBAL_LANGUAGE_VERSION_NOT_PLATFORM="སྐད་ཡིག་ཆ་ཚང༌འདི་ འ་ནི་ཇུམ་ལ་(Joomla)གི་ཐོན་རིམ་དང་ཅིག་ཁར་ མཐུན་འགྲིགས་མིན་འདུག། རྗོད་ཚིག་ལ་ལུ་འདི་མ་ཚངམ་འོང།" +JGLOBAL_SELECT_AN_OPTION="གདམ་ཁ་ནང་ལས་གདམ་ཁ་རྐྱབ།" +JGLOBAL_SELECT_NO_RESULTS_MATCH="གྲུབ་འབྲས་གཅིག་ཡང་ མི་མཐུན་པས། " +JGLOBAL_SELECT_SOME_OPTIONS="གདམ་ཁ་ཚུ་ལས་ལ་ལུ་གདམ་ཁ་རྐྱབ།" +JINVALID_TOKEN="འཕྲལ་གྱི་ཞུ་བ་ནང་ལུ་ ཆ་གནས་མེད་པའི་ཉེན་སྲུང༌གི་བརྡ་མཚོན་ཡོདཔ་ལས་ ཁས་ལེན་མེད་འབད། ཤོག་ལེབ་འདི་ཁ་གསོ་བཞིནམ་ལས་ ལོག་སྟེ་དཔའ་བཅམ།" +JNEXT="ཤུལ་མམ།" +JNO="མེན།" +JNOTICE="གསལ་བསྒྲགས། " +JOFF="ངོས་ལེན་འབད་མ་ཚུགསཔ་བཟོ།" +JON="ངོས་ལེན་འབད་ཚུགསཔ་བཟོ།" +JPREVIOUS="ཧེ་མ།" +JSITE="ས་ཁོངས།" +JUSERNAME="ལག་ལེན་པའི་མིང།" +JYES="ཨིན།" + +; Framework strings necessary when no lang pack is available +JLIB_DATABASE_ERROR_CONNECT_MYSQL="མའི་ཨེས་ཀིཝ་ཨེལ་(MySQL) ལུ་མཐུད་མ་ཚུགས།" +JLIB_DATABASE_ERROR_DATABASE="གནས་སྡུད་གཞི་མཛོད་ལུ་འཛོལ་བ་འབྱུང་ཡི།" +JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="གནས་སྡུད་གཞི་མཛོད་ཀྱི་ ལྷག་འཛིནམ་འདི་བཙུགས་མ་ཚུགས། : %s" +JLIB_ENVIRONMENT_SESSION_EXPIRED="དུས་ཡུན་འདི་ཛོགས་སོ་ནུག་ ཤོག་ལེབ་འདི་ལོག་སྟེ་བཏོན་གནང།" +JLIB_FILESYSTEM_ERROR_COPY_FAILED="འདྲ་བཤུས་རྐྱབ་མ་ཚུགས།" +JLIB_FILESYSTEM_ERROR_PATH_IS_NOT_A_FOLDER_FILES="JFolder: :ཡིག་སྣོད་ཚུ་ : འབྲེལ་ལམ་འདི་ཡིག་སྣོད་མེན་པས། འབྲེལ་ལམ་ : %s" +JLIB_FORM_FIELD_INVALID="ཆ་གནས་མེད་པའི་སཁོངས་ : " +JLIB_FORM_VALIDATE_FIELD_INVALID="ཆ་གནས་མེད་པའི་སཁོངས་ : %s" +JLIB_FORM_VALIDATE_FIELD_REQUIRED="ས་ཁོངས་དགོཔ་ : %s" +JLIB_INSTALLER_ERROR_FAIL_COPY_FILE="JInstaller: :བཙུགས་བཞག་འབད་ : ཡིག་སྣོད་ %1$s ལས་ %2$s ལུ་ འདྲ་བཤུས་རྐྱབ་ནི་མཐར་འཁྱོལ་མ་ཚུགས།" +JLIB_INSTALLER_NOT_ERROR="འཛོལ་བ་འདི་ TinyMCE སྐད་ཡིག་གི་ཡིག་སྣོད་ཚུ་ བཙུགས་བཞག་འབད་སྐབས་ཀྱི་ཨིན་པ་ཅིན་ སྐད་ཡིག་བཙུགས་ནི་ལུ་ བྱེམ་མི་འབྱུང་། སྐད་ཡིག་གི་ཆ་ཚང་བཟོ་བའི་སྐབས་ ཇུམ་ལ་(Joomla) ༣.༢.༠ དང་ཅིག་ཁར་སྔ་གོང་སྟེ་བཟོ་ཡོདཔ་ལས་ TinyMCE སྐད་ཡིག་གི་ཡིག་སྣོད་ཚུ་སོ་སོ་འབད་ བཙུགས་བཞག་འབད། ད་འདི་ ནང་སྙིང་ནང་ལུ་བཙུགས་ཡོདཔ་ལས་ བཙུགས་བཞག་འབད་མེད་དགོ།" +JLIB_UTIL_ERROR_CONNECT_DATABASE="JDatabase: :getInstance: གནས་སྡུད་གཞི་མཛོད་ལུ་མཐུད་མ་ཚུགས།
joomla.library: %1$s - %2$s" + +; Strings for the language debugger +JDEBUG_LANGUAGE_FILES_IN_ERROR="སྐད་ཡིག་ཡིག་སྣོད་བཟོ་ནི་ལུ་ འཛོལ་བ་འབྱུང་ཡི།" +JDEBUG_LANGUAGE_UNTRANSLATED_STRING="སྐད་སྒྱུར་མ་རྐྱབ་ཡོད་མི་རྗོད་ཚིག་ཚུ།" +JNONE="ག་ཡང་མེནམ།" + +; Necessary for errors +ADMIN_EMAIL="བདག་སྐྱོང་པའི་གློག་འཕྲིན།" +ADMIN_PASSWORD="བདག་སྐྱོང་པའི་གསང་ཡིག།" +ADMIN_PASSWORD2="བདག་སྐྱོང་པའི་གསང་ཡིག་ཏན་ཏན་བཟོ།" +SITE_NAME="ས་ཁོངས་ཀྱི་མིང།" + +; Database types (allows for a more descriptive label than the internal name) +MYSQL="MySQL" +MYSQLI="MySQLi" +ORACLE="Oracle" +PDOMYSQL="MySQL (PDO)" +POSTGRESQL="PostgreSQL" +SQLAZURE="Microsoft SQL Azure" +SQLITE="SQLite" +SQLSRV="Microsoft SQL Server" \ No newline at end of file diff --git a/installation/language/dz-BT/dz-BT.xml b/installation/language/dz-BT/dz-BT.xml new file mode 100644 index 0000000000000..e543c31504b23 --- /dev/null +++ b/installation/language/dz-BT/dz-BT.xml @@ -0,0 +1,21 @@ + + + Dzongkha (Bhutan) + 3.5.0 + November 2015 + Dzongkha Translation Team + Copyright (C) 2005 - 2015 Open Source Matters. All rights reserved. + GNU General Public License version 2 or later; see LICENSE.txt + + + dz-BT.ini + + + Dzongkha (Bhutan) + dz-BT + 0 + + + diff --git a/installation/language/nb-NO/nb-NO.ini b/installation/language/nb-NO/nb-NO.ini index 81608a45358ac..f6964b39c0548 100644 --- a/installation/language/nb-NO/nb-NO.ini +++ b/installation/language/nb-NO/nb-NO.ini @@ -87,7 +87,7 @@ INSTL_SAMPLE_LEARN_SET="Engelsk eksempeldata - Lær Joomla!" INSTL_SAMPLE_TESTING_SET="Engelsk eksempeldata - Test" INSTL_SITE_INSTALL_SAMPLE_NONE_DESC="Installer Joomla med bare en meny og et innloggingsskjema, uten noe innhold." INSTL_SAMPLE_BLOG_SET_DESC="Installer Joomla med noen få artikler og blogg-relaterte moduler som 'Eldre innlegg', 'Bloggrull' og 'Mest lest'." -INSTL_SAMPLE_BROCHURE_SET_DESC="Installer Joomla med noen få sider (en meny med sidene 'Hjem', 'Om oss', 'Nyheter' og 'Kontakt oss'), samt moduler som 'Søk', 'Egendfinert' og 'Innlogging'." +INSTL_SAMPLE_BROCHURE_SET_DESC="Installer Joomla med noen få sider (en meny med sidene 'Hjem', 'Om oss', 'Nyheter' og 'Kontakt oss'), samt moduler som 'Søk', 'Egendefinert' og 'Innlogging'." INSTL_SAMPLE_DATA_SET_DESC="Installer Joomla med en side (en meny med en lenke), samt moduler som 'Siste nyheter' og 'Innlogging'." INSTL_SAMPLE_LEARN_SET_DESC="Installer Joomla med eksempelartikler som forklarer hvordan systemet fungerer." INSTL_SAMPLE_TESTING_SET_DESC="Installer Joomla med alle mulige menytyper, for rask og enkel hjelp til testing av hele systemet." diff --git a/installation/language/nn-NO/nn-NO.ini b/installation/language/nn-NO/nn-NO.ini index 15b802773a8db..49cf24e36fc22 100644 --- a/installation/language/nn-NO/nn-NO.ini +++ b/installation/language/nn-NO/nn-NO.ini @@ -87,7 +87,7 @@ INSTL_SAMPLE_LEARN_SET="Engelsk dømedata - Lær Joomla!" INSTL_SAMPLE_TESTING_SET="Engelsk dømedata - Test" INSTL_SITE_INSTALL_SAMPLE_NONE_DESC="Installer Joomla med berre ein meny og et innloggingsskjema, utan noko innhald." INSTL_SAMPLE_BLOG_SET_DESC="Installer Joomla med nokre få artiklar og blogg-relaterte modular som 'Eldre innlegg', 'Bloggrull' og 'Mest lest'." -INSTL_SAMPLE_BROCHURE_SET_DESC="Installer Joomla med nokre få sider (ein meny med sidene 'Heim', 'Om oss', 'Nyhende' og 'Kontakt oss'), og dessutan modular som 'Søk', 'Egendfinert' og 'Innlogging'." +INSTL_SAMPLE_BROCHURE_SET_DESC="Installer Joomla med nokre få sider (ein meny med sidene 'Heim', 'Om oss', 'Nyhende' og 'Kontakt oss'), og dessutan modular som 'Søk', 'Egendefinert' og 'Innlogging'." INSTL_SAMPLE_DATA_SET_DESC="Installer Joomla med ei side (ein meny med ei lenkje), og dessutan modular som 'Siste nyhende' og 'Innlogging'." INSTL_SAMPLE_LEARN_SET_DESC="Installer Joomla med dømeartiklar som forklarer korleis systemet fungerer." INSTL_SAMPLE_TESTING_SET_DESC="Installer Joomla med alle moglege menytypar, for rask og enkel hjelp til testing av heile systemet." From 5a81e94df8a16a7e1887d98915a3bb0c4ba89dda Mon Sep 17 00:00:00 2001 From: Thomas Hunziker Date: Wed, 23 Dec 2015 10:56:05 +0100 Subject: [PATCH 085/104] Adding Dzonga flag. --- media/mod_languages/images/dz_bt.gif | Bin 0 -> 925 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/mod_languages/images/dz_bt.gif diff --git a/media/mod_languages/images/dz_bt.gif b/media/mod_languages/images/dz_bt.gif new file mode 100644 index 0000000000000000000000000000000000000000..515a3ac00774b17bdbc8f2eb3fa234a5a6083c8f GIT binary patch literal 925 zcmZ?wbhEHb6k_0E_|Cxa-%seDzwkeQk-vfBe}g3cgh>Ahllvbj{J&cKZ>{XF1npl5 zIzQ9RerA~eDsuf)7yf^R^v{OyH?!-%cBg;q&;8Y&@O@JL=ShX1rxt%+U-bW!{GZFJ z|F0_iyQ28-s?y&ps=u%3{kfv?_p0WfD_Xy<+kL(2_5D`-$MfYMZx+8^Ir;UP>95w! ze7Se_=OvvVmvz40vHZ){1@G=ndw+k{mrKnb?zDZl+xzz5#y5wzKEJ)}+3jtwuWkQ+ zc+=a58{RzL^Xl}0_oolMIe+x^^|Nm-o&0k5+RG>B-abF|^2wt&PanO0`S9h-7q4Eu zVi*OZA%HssbU;#|yuiTG#9+xGq$ba1m5MJGg)SZaVuEo(Ulg3%yXD>VL<~-DT)?4ZrorQ( z$asut5wqih6C0gcS^L=9LK;pjJj}zxC&G~Eu;tA`7N!mFI0B|=9NAXj%f`ZB4FE3Y B%q9Q; literal 0 HcmV?d00001 From 5da4af4394898a0805ac6a69d46735edee9f3dab Mon Sep 17 00:00:00 2001 From: Davide Tampellini Date: Wed, 23 Dec 2015 19:54:41 +0100 Subject: [PATCH 086/104] Initialize the data variable in object constructor, to avoid fatal calls if the session is not correctly started --- libraries/joomla/session/session.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index f90aa1af180d6..7cd7d7230e951 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -106,6 +106,9 @@ class JSession implements IteratorAggregate */ public function __construct($store = 'none', array $options = array()) { + // Initialize the data variable, let's avoid fatal error if the session is not corretly started (ie in CLI). + $this->data = new \Joomla\Registry\Registry; + // Need to destroy any existing sessions started with session.auto_start if (session_id()) { @@ -579,8 +582,6 @@ protected function _start() session_start(); // Ok let's unserialize the whole thing - $this->data = new \Joomla\Registry\Registry; - // Try loading data from the session if (isset($_SESSION['joomla']) && !empty($_SESSION['joomla'])) { From 9af45e625bd3a4fc4032e546da7a74caa131c346 Mon Sep 17 00:00:00 2001 From: Davide Tampellini Date: Wed, 23 Dec 2015 19:57:25 +0100 Subject: [PATCH 087/104] Using tabs instead of spaces --- libraries/joomla/session/session.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index 7cd7d7230e951..272e8f6027b22 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -106,8 +106,8 @@ class JSession implements IteratorAggregate */ public function __construct($store = 'none', array $options = array()) { - // Initialize the data variable, let's avoid fatal error if the session is not corretly started (ie in CLI). - $this->data = new \Joomla\Registry\Registry; + // Initialize the data variable, let's avoid fatal error if the session is not corretly started (ie in CLI). + $this->data = new \Joomla\Registry\Registry; // Need to destroy any existing sessions started with session.auto_start if (session_id()) From 1557ddc4c9d152e018cee7cfbb3afc08ee11d576 Mon Sep 17 00:00:00 2001 From: Davide Tampellini Date: Wed, 23 Dec 2015 20:14:44 +0100 Subject: [PATCH 088/104] Attempt to check the connection only if we truly have one --- libraries/joomla/database/driver/mysqli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/joomla/database/driver/mysqli.php b/libraries/joomla/database/driver/mysqli.php index 71d524cddd7a3..91a613ed8aa43 100644 --- a/libraries/joomla/database/driver/mysqli.php +++ b/libraries/joomla/database/driver/mysqli.php @@ -199,7 +199,7 @@ public function connect() public function disconnect() { // Close the connection. - if ($this->connection->stat() !== false) + if (!empty($this->connection) && $this->connection->stat() !== false) { foreach ($this->disconnectHandlers as $h) { From 94227c7078834cb1acf9c514e4f0c479e3f8fbcf Mon Sep 17 00:00:00 2001 From: Davide Tampellini Date: Wed, 23 Dec 2015 20:16:00 +0100 Subject: [PATCH 089/104] Better parenthesis usage --- libraries/joomla/database/driver/mysqli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/joomla/database/driver/mysqli.php b/libraries/joomla/database/driver/mysqli.php index 91a613ed8aa43..c9aaf14bf86bb 100644 --- a/libraries/joomla/database/driver/mysqli.php +++ b/libraries/joomla/database/driver/mysqli.php @@ -199,7 +199,7 @@ public function connect() public function disconnect() { // Close the connection. - if (!empty($this->connection) && $this->connection->stat() !== false) + if (!empty($this->connection) && ($this->connection->stat() !== false)) { foreach ($this->disconnectHandlers as $h) { From a99c586d050faa0de159fab7311e9670467f2a1e Mon Sep 17 00:00:00 2001 From: wilsonge Date: Wed, 23 Dec 2015 19:15:45 +0000 Subject: [PATCH 090/104] Fix additional conflict --- libraries/cms/version/version.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/libraries/cms/version/version.php b/libraries/cms/version/version.php index 9320f92ca1a2d..3ad9244829819 100644 --- a/libraries/cms/version/version.php +++ b/libraries/cms/version/version.php @@ -64,14 +64,13 @@ final class JVersion */ const CODENAME = 'Ember'; -<<<<<<< HEAD /** * Release date. * * @var string * @since 3.5 */ - const RELDATE = '15-December-2015'; + const RELDATE = '21-December-2015'; /** * Release time. @@ -79,7 +78,7 @@ final class JVersion * @var string * @since 3.5 */ - const RELTIME = '11:11'; + const RELTIME = '16:00'; /** * Release timezone. @@ -104,13 +103,6 @@ final class JVersion * @since 3.5 */ const URL = 'Joomla! is Free Software released under the GNU General Public License.'; -======= - /** @var string Release date. */ - public $RELDATE = '21-December-2015'; - - /** @var string Release time. */ - public $RELTIME = '16:00'; ->>>>>>> 3.4.7 /** * Magic getter providing access to constants previously defined as class member vars. From 84d7dd7c19c77df3c375db4c50ec70e462b5161d Mon Sep 17 00:00:00 2001 From: Davide Tampellini Date: Wed, 23 Dec 2015 20:38:57 +0100 Subject: [PATCH 091/104] Always save session data inside the database --- libraries/joomla/session/session.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index f90aa1af180d6..6a4ca40a6b17a 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -571,8 +571,6 @@ protected function _start() * Write and Close handlers are called after destructing objects since PHP 5.0.5. * Thus destructors can use sessions but session handler can't use objects. * So we are moving session closure before destructing objects. - * - * Replace with session_register_shutdown() when dropping compatibility with PHP 5.3 */ register_shutdown_function(array($this, 'close')); session_cache_limiter('none'); @@ -723,12 +721,6 @@ public function fork() */ public function close() { - if ($this->_state !== 'active') - { - // @TODO :: generated error here - return false; - } - $session = JFactory::getSession(); $data = $session->getData(); From 34960986bfea71ab4c6d9c1053ccf14d955f364d Mon Sep 17 00:00:00 2001 From: Davide Tampellini Date: Wed, 23 Dec 2015 21:45:42 +0100 Subject: [PATCH 092/104] If needed (after the installation completely succeeded), flush all the sessions coming from before the migration --- administrator/components/com_admin/script.php | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 9dca887b02a79..6d78074afc1cd 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -36,6 +36,10 @@ public function update($installer) $this->updateDatabase(); $this->clearRadCache(); $this->updateAssets(); + + // VERY IMPORTANT! THIS METHOD SHOULD BE CALLED LAST, SINCE IT COULD + // LOGOUT ALL THE USERS + $this->flushSessions(); } /** @@ -1478,4 +1482,35 @@ public function updateAssets() return true; } + + /** + * If we migrated the session from the previous system, flush all the active sessions. + * Otherwise users will be logged in, but not able to do anything since they don't have + * a valid session + * + * @return boolean + */ + public function flushSessions() + { + // No default namespace? No need to flush the sessions + if(!isset($_SESSION['__default'])) + { + return true; + } + + $db = JFactory::getDbo(); + + try + { + $db->truncateTable($db->qn('#__sessions')); + } + catch(Exception $e) + { + echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
'; + + return false; + } + + return true; + } } From ea33ccfbe75bb16ec3ad66a242368366cb929e7d Mon Sep 17 00:00:00 2001 From: "Nicholas K. Dionysopoulos" Date: Wed, 23 Dec 2015 23:07:47 +0200 Subject: [PATCH 093/104] Make the session migration code remotely resemble something sane --- libraries/joomla/session/session.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index f90aa1af180d6..9211f69871909 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -589,8 +589,8 @@ protected function _start() $this->data = unserialize($data); } - // Migrate existing session data to avoid logout on update from J < 3.4.7 - if (isset($_SESSION['__default'])) + // Temporary, PARTIAL, data migration of existing session data to avoid logout on update from J < 3.4.7 + if (isset($_SESSION['__default']) && !empty($_SESSION['__default'])) { $migratableKeys = array("user", "session.token", "session.counter", "session.timer.start", "session.timer.last", "session.timer.now"); @@ -609,6 +609,11 @@ protected function _start() unset($_SESSION['__default'][$migratableKey]); } } + + // Finally, empty the __default key since we no longer need it. Don't unset it completely, we need this + // for the administrator/components/com_admin/script.php to detect upgraded sessions and perform a full + // session cleanup. + $_SESSION['__default'] = array(); } return true; From e7d020f5c41dbfa3e5f5d5ec8967edf467bd7e3f Mon Sep 17 00:00:00 2001 From: "Nicholas K. Dionysopoulos" Date: Wed, 23 Dec 2015 23:08:10 +0200 Subject: [PATCH 094/104] Flush sessions after installation, redux --- administrator/components/com_admin/script.php | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 6d78074afc1cd..46591d63e216a 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -1492,8 +1492,12 @@ public function updateAssets() */ public function flushSessions() { - // No default namespace? No need to flush the sessions - if(!isset($_SESSION['__default'])) + // The session may have not been started yet (e.g. CLI-based Joomla! update scripts). Let's make sure we do + // have a valid session. + JFactory::getSession()->restart(); + + // If $_SESSION['__default'] is no longer set we do not have a migrated session, therefore we can quit. + if (!isset($_SESSION['__default'])) { return true; } @@ -1502,7 +1506,22 @@ public function flushSessions() try { - $db->truncateTable($db->qn('#__sessions')); + switch ($db->name) + { + // MySQL database, use TRUNCATE (faster, more resilient) + case 'pdomysql': + case 'mysql': + case 'mysqli': + $db->truncateTable($db->qn('#__sessions')); + break; + + // Non-MySQL databases, use a simple DELETE FROM query + default: + $query = $db->getQuery(true) + ->delete($db->qn('#__sessions')); + $db->setQuery($query)->execute(); + break; + } } catch(Exception $e) { From efddcbed47c046cc558c2979e2652d008e4784ec Mon Sep 17 00:00:00 2001 From: Davide Tampellini Date: Wed, 23 Dec 2015 23:15:29 +0100 Subject: [PATCH 095/104] If the session is not valid, let's destroy it, forcing the user to logout and login again --- libraries/joomla/session/session.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index 6a4ca40a6b17a..407d182c46908 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -529,8 +529,14 @@ public function start() // Initialise the session $this->_setCounter(); $this->_setTimers(); + // Perform security checks - $this->_validate(); + if(!$this->_validate()) + { + // Destroy the session if it's not valid + $this->destroy(); + } + if ($this->_dispatcher instanceof JEventDispatcher) { $this->_dispatcher->trigger('onAfterSessionStart'); @@ -672,8 +678,14 @@ public function restart() session_regenerate_id(true); $this->_start(); $this->_state = 'active'; - $this->_validate(); - $this->_setCounter(); + + if(!$this->_validate()) + { + // Destroy the session if it's not valid + $this->destroy(); + } + + $this->_setCounter(); return true; } /** From f9fdb1f269756d803d548a5d954da2756c6f5fd7 Mon Sep 17 00:00:00 2001 From: George Wilson Date: Thu, 24 Dec 2015 11:20:46 +0000 Subject: [PATCH 096/104] Code style --- administrator/components/com_admin/script.php | 90 ++++++------- .../com_templates/models/template.php | 1 - .../views/template/tmpl/default.php | 2 +- .../html/com_templates/template/default.php | 2 +- libraries/joomla/session/session.php | 124 ++++++++++++++++-- 5 files changed, 164 insertions(+), 55 deletions(-) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 46591d63e216a..7b370dc9df649 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -37,9 +37,9 @@ public function update($installer) $this->clearRadCache(); $this->updateAssets(); - // VERY IMPORTANT! THIS METHOD SHOULD BE CALLED LAST, SINCE IT COULD - // LOGOUT ALL THE USERS - $this->flushSessions(); + // VERY IMPORTANT! THIS METHOD SHOULD BE CALLED LAST, SINCE IT COULD + // LOGOUT ALL THE USERS + $this->flushSessions(); } /** @@ -1483,53 +1483,55 @@ public function updateAssets() return true; } - /** - * If we migrated the session from the previous system, flush all the active sessions. - * Otherwise users will be logged in, but not able to do anything since they don't have - * a valid session - * - * @return boolean - */ - public function flushSessions() - { - // The session may have not been started yet (e.g. CLI-based Joomla! update scripts). Let's make sure we do - // have a valid session. - JFactory::getSession()->restart(); + /** + * If we migrated the session from the previous system, flush all the active sessions. + * Otherwise users will be logged in, but not able to do anything since they don't have + * a valid session + * + * @return boolean + */ + public function flushSessions() + { + /** + * The session may have not been started yet (e.g. CLI-based Joomla! update scripts). Let's make sure we do + * have a valid session. + */ + JFactory::getSession()->restart(); - // If $_SESSION['__default'] is no longer set we do not have a migrated session, therefore we can quit. - if (!isset($_SESSION['__default'])) - { - return true; - } + // If $_SESSION['__default'] is no longer set we do not have a migrated session, therefore we can quit. + if (!isset($_SESSION['__default'])) + { + return true; + } - $db = JFactory::getDbo(); + $db = JFactory::getDbo(); - try - { - switch ($db->name) - { - // MySQL database, use TRUNCATE (faster, more resilient) - case 'pdomysql': - case 'mysql': - case 'mysqli': - $db->truncateTable($db->qn('#__sessions')); - break; + try + { + switch ($db->name) + { + // MySQL database, use TRUNCATE (faster, more resilient) + case 'pdomysql': + case 'mysql': + case 'mysqli': + $db->truncateTable($db->qn('#__sessions')); + break; - // Non-MySQL databases, use a simple DELETE FROM query - default: + // Non-MySQL databases, use a simple DELETE FROM query + default: $query = $db->getQuery(true) - ->delete($db->qn('#__sessions')); + ->delete($db->qn('#__sessions')); $db->setQuery($query)->execute(); - break; - } - } - catch(Exception $e) - { - echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
'; + break; + } + } + catch (Exception $e) + { + echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
'; - return false; - } + return false; + } - return true; - } + return true; + } } diff --git a/administrator/components/com_templates/models/template.php b/administrator/components/com_templates/models/template.php index 9fa40bb9d10c1..76d790ea0e2e8 100644 --- a/administrator/components/com_templates/models/template.php +++ b/administrator/components/com_templates/models/template.php @@ -440,7 +440,6 @@ public function &getSource() $fileName = base64_decode($input->get('file')); $client = JApplicationHelper::getClientInfo($this->template->client_id); - try { $filePath = JPath::check($client->path . '/templates/' . $this->template->element . '/' . $fileName); diff --git a/administrator/components/com_templates/views/template/tmpl/default.php b/administrator/components/com_templates/views/template/tmpl/default.php index a46093226d631..f7d260f36c89f 100644 --- a/administrator/components/com_templates/views/template/tmpl/default.php +++ b/administrator/components/com_templates/views/template/tmpl/default.php @@ -432,7 +432,7 @@ function clearCoords() - + diff --git a/administrator/templates/hathor/html/com_templates/template/default.php b/administrator/templates/hathor/html/com_templates/template/default.php index a33b6ef523025..b0525e157e031 100644 --- a/administrator/templates/hathor/html/com_templates/template/default.php +++ b/administrator/templates/hathor/html/com_templates/template/default.php @@ -146,7 +146,7 @@ function clearCoords() - + diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index c4b0d0ea6023a..295efe5d2e966 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -28,6 +28,7 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_state = 'inactive'; + /** * Maximum age of unused session in minutes * @@ -35,6 +36,7 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_expire = 15; + /** * The session store object. * @@ -42,6 +44,7 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_store = null; + /** * Security policy. * List of checks that will be done. @@ -54,6 +57,7 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_security = array('fix_browser'); + /** * Force cookies to be SSL only * Default false @@ -62,6 +66,7 @@ class JSession implements IteratorAggregate * @since 11.1 */ protected $_force_ssl = false; + /** * JSession instances container. * @@ -69,6 +74,7 @@ class JSession implements IteratorAggregate * @since 11.3 */ protected static $instance; + /** * The type of storage for the session. * @@ -76,6 +82,7 @@ class JSession implements IteratorAggregate * @since 12.2 */ protected $storeName; + /** * Holds the JInput object * @@ -83,6 +90,7 @@ class JSession implements IteratorAggregate * @since 12.2 */ private $_input = null; + /** * Holds the event dispatcher object * @@ -90,12 +98,14 @@ class JSession implements IteratorAggregate * @since 12.2 */ private $_dispatcher = null; + /** * Internal data store for the session data * * @var \Joomla\Registry\Registry */ protected $data; + /** * Constructor * @@ -115,18 +125,23 @@ public function __construct($store = 'none', array $options = array()) session_unset(); session_destroy(); } + // Disable transparent sid support ini_set('session.use_trans_sid', '0'); + // Only allow the session ID to come from cookies and nothing else. ini_set('session.use_only_cookies', '1'); + // Create handler $this->_store = JSessionStorage::getInstance($store, $options); $this->storeName = $store; + // Set options $this->_setOptions($options); $this->_setCookieParams(); $this->_state = 'inactive'; } + /** * Magic method to get read-only access to properties. * @@ -148,6 +163,7 @@ public function __get($name) return $this->$property; } } + /** * Returns the global Session object, only creating it * if it doesn't already exist. @@ -165,6 +181,7 @@ public static function getInstance($handler, $options) { self::$instance = new JSession($handler, $options); } + return self::$instance; } /** @@ -178,6 +195,7 @@ public function getState() { return $this->_state; } + /** * Get expiration time in minutes * @@ -189,6 +207,7 @@ public function getExpire() { return $this->_expire; } + /** * Get a session token, if a token isn't set yet one will be generated. * @@ -205,14 +224,17 @@ public function getExpire() public function getToken($forceNew = false) { $token = $this->get('session.token'); + // Create a token if ($token === null || $forceNew) { $token = $this->_createToken(12); $this->set('session.token', $token); } + return $token; } + /** * Method to determine if a token exists in the session. If not the * session will be set to expired @@ -228,6 +250,7 @@ public function hasToken($tCheck, $forceExpire = true) { // Check if a token exists in the session $tStored = $this->get('session.token'); + // Check token if (($tStored !== $tCheck)) { @@ -235,10 +258,13 @@ public function hasToken($tCheck, $forceExpire = true) { $this->_state = 'expired'; } + return false; } + return true; } + /** * Method to determine a hash for anti-spoofing variable names * @@ -252,6 +278,7 @@ public static function getFormToken($forceNew = false) { $user = JFactory::getUser(); $session = JFactory::getSession(); + // TODO: Decouple from legacy JApplication class. if (is_callable(array('JApplication', 'getHash'))) { @@ -261,6 +288,7 @@ public static function getFormToken($forceNew = false) { $hash = md5(JFactory::getApplication()->get('secret') . $user->get('id', 0) . $session->getToken($forceNew)); } + return $hash; } /** @@ -274,6 +302,7 @@ public function getIterator() { return new ArrayIterator($this->getData()); } + /** * Checks for a form token in the request. * @@ -289,9 +318,11 @@ public static function checkToken($method = 'post') { $token = self::getFormToken(); $app = JFactory::getApplication(); + if (!$app->input->$method->get($token, '', 'alnum')) { $session = JFactory::getSession(); + if ($session->isNew()) { // Redirect to login screen. @@ -308,6 +339,7 @@ public static function checkToken($method = 'post') return true; } } + /** * Get session name * @@ -322,8 +354,10 @@ public function getName() // @TODO : raise error return null; } + return session_name(); } + /** * Get session id * @@ -338,6 +372,7 @@ public function getId() // @TODO : raise error return null; } + return session_id(); } @@ -361,24 +396,30 @@ public function getData() public static function getStores() { $connectors = array(); + // Get an iterator and loop trough the driver classes. $iterator = new DirectoryIterator(__DIR__ . '/storage'); + /* @type $file DirectoryIterator */ foreach ($iterator as $file) { $fileName = $file->getFilename(); + // Only load for php files. if (!$file->isFile() || $file->getExtension() != 'php') { continue; } + // Derive the class name from the type. $class = str_ireplace('.php', '', 'JSessionStorage' . ucfirst(trim($fileName))); + // If the class doesn't exist we have nothing left to do but look at the next type. We did our best. if (!class_exists($class)) { continue; } + // Sweet! Our class exists, so now we just need to know if it passes its test method. if ($class::isSupported()) { @@ -386,8 +427,10 @@ public static function getStores() $connectors[] = str_ireplace('.php', '', $fileName); } } + return $connectors; } + /** * Shorthand to check if the session is active * @@ -399,6 +442,7 @@ public function isActive() { return (bool) ($this->_state == 'active'); } + /** * Check whether this session is currently created * @@ -409,8 +453,10 @@ public function isActive() public function isNew() { $counter = $this->get('session.counter'); + return (bool) ($counter === 1); } + /** * Check whether this session is currently created * @@ -426,6 +472,7 @@ public function initialise(JInput $input, JEventDispatcher $dispatcher = null) $this->_input = $input; $this->_dispatcher = $dispatcher; } + /** * Get data from the session store * @@ -441,6 +488,7 @@ public function get($name, $default = null, $namespace = 'default') { // Add prefix to namespace to avoid collisions $namespace = '__' . $namespace; + if ($this->_state === 'destroyed') { // @TODO :: generated error here @@ -450,6 +498,7 @@ public function get($name, $default = null, $namespace = 'default') return $this->data->get($namespace . '.' . $name, $default); } + /** * Set data into the session store. * @@ -465,13 +514,16 @@ public function set($name, $value = null, $namespace = 'default') { // Add prefix to namespace to avoid collisions $namespace = '__' . $namespace; + if ($this->_state !== 'active') { // @TODO :: generated error here return null; } + return $this->data->set($namespace . '.' . $name, $value); } + /** * Check whether data exists in the session store * @@ -486,13 +538,16 @@ public function has($name, $namespace = 'default') { // Add prefix to namespace to avoid collisions. $namespace = '__' . $namespace; + if ($this->_state !== 'active') { // @TODO :: generated error here return null; } + return !is_null($this->data->get($namespace . '.' . $name, null)); } + /** * Unset data from the session store * @@ -507,13 +562,16 @@ public function clear($name, $namespace = 'default') { // Add prefix to namespace to avoid collisions $namespace = '__' . $namespace; + if ($this->_state !== 'active') { // @TODO :: generated error here return null; } + return $this->data->set($namespace . '.' . $name, null); } + /** * Start a session. * @@ -527,24 +585,27 @@ public function start() { return; } + $this->_start(); $this->_state = 'active'; + // Initialise the session $this->_setCounter(); $this->_setTimers(); // Perform security checks - if(!$this->_validate()) + if (!$this->_validate()) { - // Destroy the session if it's not valid - $this->destroy(); - } + // Destroy the session if it's not valid + $this->destroy(); + } if ($this->_dispatcher instanceof JEventDispatcher) { $this->_dispatcher->trigger('onAfterSessionStart'); } } + /** * Start a session. * @@ -564,11 +625,14 @@ protected function _start() else { $session_name = session_name(); + // Get the JInputCookie object $cookie = $this->_input->cookie; + if (is_null($cookie->get($session_name))) { $session_clean = $this->_input->get($session_name, false, 'string'); + if ($session_clean) { session_id($session_clean); @@ -576,6 +640,7 @@ protected function _start() } } } + /** * Write and Close handlers are called after destructing objects since PHP 5.0.5. * Thus destructors can use sessions but session handler can't use objects. @@ -604,7 +669,7 @@ protected function _start() if (!empty($_SESSION['__default'][$migratableKey])) { // Don't overwrite existing session data - if(!is_null($this->data->get('__default.' . $migratableKey, null))) + if (!is_null($this->data->get('__default.' . $migratableKey, null))) { continue; } @@ -643,6 +708,7 @@ public function destroy() { return true; } + /* * In order to kill the session altogether, such as to log the user out, the session id * must also be unset. If a cookie is used to propagate the session id (default behavior), @@ -655,12 +721,14 @@ public function destroy() $cookie_path = $config->get('cookie_path', '/'); setcookie(session_name(), '', time() - 42000, $cookie_path, $cookie_domain); } + $this->data = new \Joomla\Registry\Registry; session_unset(); session_destroy(); $this->_state = 'destroyed'; return true; } + /** * Restart an expired or locked session. * @@ -672,14 +740,17 @@ public function destroy() public function restart() { $this->destroy(); + if ($this->_state !== 'destroyed') { // @TODO :: generated error here return false; } + // Re-register the session handler after a session has been destroyed, to avoid PHP bug $this->_store->register(); $this->_state = 'restart'; + // Regenerate session id session_regenerate_id(true); $this->_start(); @@ -692,8 +763,10 @@ public function restart() } $this->_setCounter(); + return true; } + /** * Create a new session and copy variables from the old one * @@ -708,19 +781,26 @@ public function fork() // @TODO :: generated error here return false; } + // Keep session config $cookie = session_get_cookie_params(); + // Kill session session_destroy(); + // Re-register the session store after a session has been destroyed, to avoid PHP bug $this->_store->register(); + // Restore config session_set_cookie_params($cookie['lifetime'], $cookie['path'], $cookie['domain'], $cookie['secure'], true); + // Restart session with new id session_regenerate_id(true); session_start(); + return true; } + /** * Writes session data and ends session * @@ -749,6 +829,7 @@ public function close() return true; } + /** * Set session cookie parameters * @@ -759,21 +840,27 @@ public function close() protected function _setCookieParams() { $cookie = session_get_cookie_params(); + if ($this->_force_ssl) { $cookie['secure'] = true; } + $config = JFactory::getConfig(); + if ($config->get('cookie_domain', '') != '') { $cookie['domain'] = $config->get('cookie_domain'); } + if ($config->get('cookie_path', '') != '') { $cookie['path'] = $config->get('cookie_path'); } + session_set_cookie_params($cookie['lifetime'], $cookie['path'], $cookie['domain'], $cookie['secure'], true); } + /** * Create a token-string * @@ -789,12 +876,15 @@ protected function _createToken($length = 32) $max = strlen($chars) - 1; $token = ''; $name = session_name(); + for ($i = 0; $i < $length; ++$i) { $token .= $chars[(rand(0, $max))]; } + return md5($token . $name); } + /** * Set counter of session usage * @@ -807,8 +897,10 @@ protected function _setCounter() $counter = $this->get('session.counter', 0); ++$counter; $this->set('session.counter', $counter); + return true; } + /** * Set the session timers * @@ -825,10 +917,13 @@ protected function _setTimers() $this->set('session.timer.last', $start); $this->set('session.timer.now', $start); } + $this->set('session.timer.last', $this->get('session.timer.now')); $this->set('session.timer.now', time()); + return true; } + /** * Set additional session options * @@ -845,29 +940,36 @@ protected function _setOptions(array $options) { session_name(md5($options['name'])); } + // Set id if (isset($options['id'])) { session_id($options['id']); } + // Set expire time if (isset($options['expire'])) { $this->_expire = $options['expire']; } + // Get security options if (isset($options['security'])) { $this->_security = explode(',', $options['security']); } + if (isset($options['force_ssl'])) { $this->_force_ssl = (bool) $options['force_ssl']; } + // Sync the session maxlifetime ini_set('session.gc_maxlifetime', $this->_expire); + return true; } + /** * Do some checks for security reason * @@ -895,22 +997,26 @@ protected function _validate($restart = false) $this->set('session.client.browser', null); $this->set('session.token', null); } + // Check if session has expired if ($this->_expire) { $curTime = $this->get('session.timer.now', 0); $maxTime = $this->get('session.timer.last', 0) + $this->_expire; + // Empty session variables if ($maxTime < $curTime) { $this->_state = 'expired'; + return false; } } + // Check for client address if (in_array('fix_adress', $this->_security) - && isset($_SERVER['REMOTE_ADDR']) - && filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP) !== false) + && isset($_SERVER['REMOTE_ADDR']) + && filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP) !== false) { $ip = $this->get('session.client.address'); if ($ip === null) @@ -923,11 +1029,13 @@ protected function _validate($restart = false) return false; } } + // Record proxy forwarded for in the session in case we need it later if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && filter_var($_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP) !== false) { $this->set('session.client.forwarded', $_SERVER['HTTP_X_FORWARDED_FOR']); } + return true; } -} \ No newline at end of file +} From 5dae7dc681f539c5ad457d840d2126305c81ef15 Mon Sep 17 00:00:00 2001 From: George Wilson Date: Thu, 24 Dec 2015 11:28:58 +0000 Subject: [PATCH 097/104] Codestyle round 2 --- libraries/joomla/session/session.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index 295efe5d2e966..d8485f241c9ca 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -595,7 +595,7 @@ public function start() // Perform security checks if (!$this->_validate()) - { + { // Destroy the session if it's not valid $this->destroy(); } @@ -680,9 +680,11 @@ protected function _start() } } - // Finally, empty the __default key since we no longer need it. Don't unset it completely, we need this - // for the administrator/components/com_admin/script.php to detect upgraded sessions and perform a full - // session cleanup. + /** + * Finally, empty the __default key since we no longer need it. Don't unset it completely, we need this + * for the administrator/components/com_admin/script.php to detect upgraded sessions and perform a full + * session cleanup. + */ $_SESSION['__default'] = array(); } @@ -756,13 +758,13 @@ public function restart() $this->_start(); $this->_state = 'active'; - if(!$this->_validate()) - { - // Destroy the session if it's not valid - $this->destroy(); - } + if (!$this->_validate()) + { + // Destroy the session if it's not valid + $this->destroy(); + } - $this->_setCounter(); + $this->_setCounter(); return true; } From 3b9b82b528cde642985258109e8f30c311351f94 Mon Sep 17 00:00:00 2001 From: George Wilson Date: Thu, 24 Dec 2015 11:40:52 +0000 Subject: [PATCH 098/104] Tag 3.4.8 Release Candidate --- administrator/manifests/files/joomla.xml | 2 +- libraries/cms/version/version.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/administrator/manifests/files/joomla.xml b/administrator/manifests/files/joomla.xml index ce72def969457..c4fb200abccd7 100644 --- a/administrator/manifests/files/joomla.xml +++ b/administrator/manifests/files/joomla.xml @@ -6,7 +6,7 @@ www.joomla.org (C) 2005 - 2015 Open Source Matters. All rights reserved GNU General Public License version 2 or later; see LICENSE.txt - 3.4.7 + 3.4.8-rc December 2015 FILES_JOOMLA_XML_DESCRIPTION diff --git a/libraries/cms/version/version.php b/libraries/cms/version/version.php index cd2c40e36d47a..91daf9e8bc998 100644 --- a/libraries/cms/version/version.php +++ b/libraries/cms/version/version.php @@ -23,10 +23,10 @@ final class JVersion public $RELEASE = '3.4'; /** @var string Maintenance version. */ - public $DEV_LEVEL = '7'; + public $DEV_LEVEL = '8-rc'; /** @var string Development STATUS. */ - public $DEV_STATUS = 'Stable'; + public $DEV_STATUS = 'Release Candidate'; /** @var string Build number. */ public $BUILD = ''; @@ -35,10 +35,10 @@ final class JVersion public $CODENAME = 'Ember'; /** @var string Release date. */ - public $RELDATE = '21-December-2015'; + public $RELDATE = '24-December-2015'; /** @var string Release time. */ - public $RELTIME = '16:00'; + public $RELTIME = '12:00'; /** @var string Release timezone. */ public $RELTZ = 'GMT'; From 3289e7de69fd6b13359e69b0614c67913cdf431a Mon Sep 17 00:00:00 2001 From: George Wilson Date: Thu, 24 Dec 2015 15:48:12 +0000 Subject: [PATCH 099/104] Fix the driver sometimes throwing Fatal Errors. Thanks @mbabker --- libraries/joomla/database/driver/mysqli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/joomla/database/driver/mysqli.php b/libraries/joomla/database/driver/mysqli.php index c9aaf14bf86bb..ed544fe01dbf0 100644 --- a/libraries/joomla/database/driver/mysqli.php +++ b/libraries/joomla/database/driver/mysqli.php @@ -199,7 +199,7 @@ public function connect() public function disconnect() { // Close the connection. - if (!empty($this->connection) && ($this->connection->stat() !== false)) + if ($this->connection instanceof mysqli && $this->connection->stat() !== false) { foreach ($this->disconnectHandlers as $h) { From e33857bbe74ea8e062613902869415bfd4afcb2b Mon Sep 17 00:00:00 2001 From: wilsonge Date: Thu, 24 Dec 2015 18:51:58 +0000 Subject: [PATCH 100/104] Prepare Joomla 3.4.8 --- administrator/manifests/files/joomla.xml | 2 +- libraries/cms/version/version.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/administrator/manifests/files/joomla.xml b/administrator/manifests/files/joomla.xml index c4fb200abccd7..f70871196044a 100644 --- a/administrator/manifests/files/joomla.xml +++ b/administrator/manifests/files/joomla.xml @@ -6,7 +6,7 @@ www.joomla.org (C) 2005 - 2015 Open Source Matters. All rights reserved GNU General Public License version 2 or later; see LICENSE.txt - 3.4.8-rc + 3.4.8 December 2015 FILES_JOOMLA_XML_DESCRIPTION diff --git a/libraries/cms/version/version.php b/libraries/cms/version/version.php index 91daf9e8bc998..d10f5048c75f3 100644 --- a/libraries/cms/version/version.php +++ b/libraries/cms/version/version.php @@ -23,10 +23,10 @@ final class JVersion public $RELEASE = '3.4'; /** @var string Maintenance version. */ - public $DEV_LEVEL = '8-rc'; + public $DEV_LEVEL = '8'; /** @var string Development STATUS. */ - public $DEV_STATUS = 'Release Candidate'; + public $DEV_STATUS = 'Stable'; /** @var string Build number. */ public $BUILD = ''; @@ -38,7 +38,7 @@ final class JVersion public $RELDATE = '24-December-2015'; /** @var string Release time. */ - public $RELTIME = '12:00'; + public $RELTIME = '19:30'; /** @var string Release timezone. */ public $RELTZ = 'GMT'; From d0c5cd73ba2ab471d74224f84acce12811d570e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20Smoli=C5=84ski?= Date: Sat, 26 Dec 2015 04:42:49 +0100 Subject: [PATCH 101/104] Syntax errors in file /com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql PR fot issue #8786 Original issue description >IMHO file https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql contains MySQL syntax errors : >is >````SQL >ALTER TABLE `#__redirect_links` ADD header smallint(3) NOT NULL DEFAULT 301; >ALTER TABLE `#__redirect_links` MODIFY new_url varchar(255); >```` >should be >````sql >ALTER TABLE `#__redirect_links` ADD `header` smallint(3) NOT NULL DEFAULT 301; >ALTER TABLE `#__redirect_links` MODIFY `new_url` varchar(255); >```` >related: https://github.com/joomla/joomla-cms/issues/6333 --- .../com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql b/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql index ae45c099bc09f..ce502aac31cff 100644 --- a/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql +++ b/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql @@ -1,2 +1,2 @@ -ALTER TABLE `#__redirect_links` ADD header smallint(3) NOT NULL DEFAULT 301; -ALTER TABLE `#__redirect_links` MODIFY new_url varchar(255); +ALTER TABLE `#__redirect_links` ADD `header` smallint(3) NOT NULL DEFAULT 301; +ALTER TABLE `#__redirect_links` MODIFY `new_url` varchar(255); From d4696c7a6f4a18ddd5cd267a2c5035ab6cda4d2a Mon Sep 17 00:00:00 2001 From: wojsmol Date: Sat, 26 Dec 2015 07:11:33 +0100 Subject: [PATCH 102/104] ADD `header` to ADD COLUMN `header` --- .../components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql b/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql index ce502aac31cff..375684f9288d5 100644 --- a/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql +++ b/administrator/components/com_admin/sql/updates/mysql/3.4.0-2014-09-16.sql @@ -1,2 +1,2 @@ -ALTER TABLE `#__redirect_links` ADD `header` smallint(3) NOT NULL DEFAULT 301; +ALTER TABLE `#__redirect_links` ADD COLUMN `header` smallint(3) NOT NULL DEFAULT 301; ALTER TABLE `#__redirect_links` MODIFY `new_url` varchar(255); From ea1abff73885def195d5bbe30b34b0a9d117013f Mon Sep 17 00:00:00 2001 From: George Wilson Date: Sat, 26 Dec 2015 13:23:31 +0000 Subject: [PATCH 103/104] Fix additional conflict from merging in 3.4.8 --- libraries/joomla/session/session.php | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/libraries/joomla/session/session.php b/libraries/joomla/session/session.php index d829a3815be5e..d17006d393c3e 100644 --- a/libraries/joomla/session/session.php +++ b/libraries/joomla/session/session.php @@ -687,25 +687,9 @@ public function destroy() return true; } -<<<<<<< HEAD $this->_handler->clear(); // Create new data storage -======= - /* - * In order to kill the session altogether, such as to log the user out, the session id - * must also be unset. If a cookie is used to propagate the session id (default behavior), - * then the session cookie must be deleted. - */ - if (isset($_COOKIE[session_name()])) - { - $config = JFactory::getConfig(); - $cookie_domain = $config->get('cookie_domain', ''); - $cookie_path = $config->get('cookie_path', '/'); - setcookie(session_name(), '', time() - 42000, $cookie_path, $cookie_domain); - } - ->>>>>>> 3.4.8 $this->data = new \Joomla\Registry\Registry; $this->_state = 'destroyed'; From 6accace61ad7d66efe3b3490d1da29bb8d119bec Mon Sep 17 00:00:00 2001 From: George Wilson Date: Sat, 26 Dec 2015 20:55:38 +0000 Subject: [PATCH 104/104] Remove dead code --- .../controller/application/refreshhelp.php | 57 ------------------- .../com_config/controllers/application.php | 16 ------ 2 files changed, 73 deletions(-) delete mode 100644 administrator/components/com_config/controller/application/refreshhelp.php diff --git a/administrator/components/com_config/controller/application/refreshhelp.php b/administrator/components/com_config/controller/application/refreshhelp.php deleted file mode 100644 index 539d7ac483e5e..0000000000000 --- a/administrator/components/com_config/controller/application/refreshhelp.php +++ /dev/null @@ -1,57 +0,0 @@ -app->enqueueMessage(JText::_('COM_CONFIG_ERROR_HELPREFRESH_FETCH'), 'error'); - $this->app->redirect(JRoute::_('index.php?option=com_config', false)); - } - elseif (!JFile::write(JPATH_BASE . '/help/helpsites.xml', $data)) - { - $this->app->enqueueMessage(JText::_('COM_CONFIG_ERROR_HELPREFRESH_ERROR_STORE'), 'error'); - $this->app->redirect(JRoute::_('index.php?option=com_config', false)); - } - else - { - $this->app->enqueueMessage(JText::_('COM_CONFIG_HELPREFRESH_SUCCESS'), 'error'); - $this->app->redirect(JRoute::_('index.php?option=com_config', false)); - } - } -} diff --git a/administrator/components/com_config/controllers/application.php b/administrator/components/com_config/controllers/application.php index 450c2866924a1..39673a3c23cad 100644 --- a/administrator/components/com_config/controllers/application.php +++ b/administrator/components/com_config/controllers/application.php @@ -66,22 +66,6 @@ public function cancel() return $controller->execute(); } - /** - * Method to refresh the help display. - * - * @return void - * - * @deprecated 4.0 Use ConfigControllerApplicationRefreshhelp instead. - */ - public function refreshHelp() - { - JLog::add('ConfigControllerApplication is deprecated. Use ConfigControllerApplicationRefreshhelp instead.', JLog::WARNING, 'deprecated'); - - $controller = new ConfigControllerApplicationRefreshhelp; - - $controller->execute(); - } - /** * Method to remove the root property from the configuration. *