JOOMLA中国
  • Joomla中国首页
  • 社区
  • 教程
  • 应用市场
  • B计划
Joomla! Framework TM
  • Namespace
  • Class
  • Tree
  • Deprecated

Namespaces

  • Composer
    • Autoload
  • Joomla
    • Application
      • Cli
        • Output
          • Processor
      • Web
    • Data
    • DI
      • Exception
    • Event
    • Filter
    • Input
    • Ldap
    • Registry
      • Format
    • Session
      • Storage
    • String
    • Uri
    • Utilities
  • None
  • PasswordCompat
    • binary
  • PHP
  • Psr
    • Log
  • Symfony
    • Component
      • Yaml
        • Exception
    • Polyfill
      • Util

Classes

  • CallbackFilterIterator
  • ComposerAutoloaderInit205c915b9c7d3e718e7c95793ee67ffe
  • easyparse
  • EasyPeasyICS
  • FOFAutoloaderComponent
  • FOFAutoloaderFof
  • FOFConfigDomainDispatcher
  • FOFConfigDomainTables
  • FOFConfigDomainViews
  • FOFConfigProvider
  • FOFController
  • FOFDatabase
  • FOFDatabaseDriver
  • FOFDatabaseDriverJoomla
  • FOFDatabaseDriverMysql
  • FOFDatabaseDriverMysqli
  • FOFDatabaseDriverOracle
  • FOFDatabaseDriverPdo
  • FOFDatabaseDriverPdomysql
  • FOFDatabaseDriverPostgresql
  • FOFDatabaseDriverSqlazure
  • FOFDatabaseDriverSqlite
  • FOFDatabaseDriverSqlsrv
  • FOFDatabaseFactory
  • FOFDatabaseInstaller
  • FOFDatabaseIterator
  • FOFDatabaseIteratorAzure
  • FOFDatabaseIteratorMysql
  • FOFDatabaseIteratorMysqli
  • FOFDatabaseIteratorOracle
  • FOFDatabaseIteratorPdo
  • FOFDatabaseIteratorPdomysql
  • FOFDatabaseIteratorPostgresql
  • FOFDatabaseIteratorSqlite
  • FOFDatabaseIteratorSqlsrv
  • FOFDatabaseQuery
  • FOFDatabaseQueryElement
  • FOFDatabaseQueryMysql
  • FOFDatabaseQueryMysqli
  • FOFDatabaseQueryOracle
  • FOFDatabaseQueryPdo
  • FOFDatabaseQueryPdomysql
  • FOFDatabaseQueryPostgresql
  • FOFDatabaseQuerySqlazure
  • FOFDatabaseQuerySqlite
  • FOFDatabaseQuerySqlsrv
  • FOFDispatcher
  • FOFDownload
  • FOFDownloadAdapterAbstract
  • FOFDownloadAdapterCurl
  • FOFDownloadAdapterFopen
  • FOFEncryptAes
  • FOFEncryptAesAbstract
  • FOFEncryptAesMcrypt
  • FOFEncryptAesOpenssl
  • FOFEncryptBase32
  • FOFEncryptRandval
  • FOFEncryptTotp
  • FOFForm
  • FOFFormFieldAccesslevel
  • FOFFormFieldActions
  • FOFFormFieldButton
  • FOFFormFieldCachehandler
  • FOFFormFieldCalendar
  • FOFFormFieldCaptcha
  • FOFFormFieldCheckbox
  • FOFFormFieldCheckboxes
  • FOFFormFieldComponents
  • FOFFormFieldEditor
  • FOFFormFieldEmail
  • FOFFormFieldGroupedbutton
  • FOFFormFieldGroupedlist
  • FOFFormFieldHidden
  • FOFFormFieldImage
  • FOFFormFieldImagelist
  • FOFFormFieldInteger
  • FOFFormFieldLanguage
  • FOFFormFieldList
  • FOFFormFieldMedia
  • FOFFormFieldModel
  • FOFFormFieldOrdering
  • FOFFormFieldPassword
  • FOFFormFieldPlugins
  • FOFFormFieldPublished
  • FOFFormFieldRadio
  • FOFFormFieldRelation
  • FOFFormFieldRules
  • FOFFormFieldSelectrow
  • FOFFormFieldSessionhandler
  • FOFFormFieldSpacer
  • FOFFormFieldSql
  • FOFFormFieldTag
  • FOFFormFieldTel
  • FOFFormFieldText
  • FOFFormFieldTextarea
  • FOFFormFieldTimezone
  • FOFFormFieldTitle
  • FOFFormFieldUrl
  • FOFFormFieldUser
  • FOFFormFieldUsergroup
  • FOFFormHeader
  • FOFFormHeaderAccesslevel
  • FOFFormHeaderField
  • FOFFormHeaderFielddate
  • FOFFormHeaderFieldfilterable
  • FOFFormHeaderFieldsearchable
  • FOFFormHeaderFieldselectable
  • FOFFormHeaderFieldsql
  • FOFFormHeaderFilterdate
  • FOFFormHeaderFilterfilterable
  • FOFFormHeaderFiltersearchable
  • FOFFormHeaderFilterselectable
  • FOFFormHeaderFiltersql
  • FOFFormHeaderLanguage
  • FOFFormHeaderModel
  • FOFFormHeaderOrdering
  • FOFFormHeaderPublished
  • FOFFormHeaderRowselect
  • FOFFormHelper
  • FOFHalDocument
  • FOFHalLink
  • FOFHalLinks
  • FOFHalRenderJson
  • FOFInflector
  • FOFInput
  • FOFIntegrationJoomlaFilesystem
  • FOFIntegrationJoomlaPlatform
  • FOFLayoutFile
  • FOFLayoutHelper
  • FOFLess
  • FOFLessFormatterClassic
  • FOFLessFormatterCompressed
  • FOFLessFormatterJoomla
  • FOFLessFormatterLessjs
  • FOFLessParser
  • FOFModel
  • FOFModelBehavior
  • FOFModelBehaviorAccess
  • FOFModelBehaviorEmptynonzero
  • FOFModelBehaviorEnabled
  • FOFModelBehaviorFilters
  • FOFModelBehaviorLanguage
  • FOFModelBehaviorPrivate
  • FOFModelDispatcherBehavior
  • FOFModelField
  • FOFModelFieldBoolean
  • FOFModelFieldDate
  • FOFModelFieldNumber
  • FOFModelFieldText
  • FOFPlatform
  • FOFPlatformFilesystem
  • FOFQueryAbstract
  • FOFRenderAbstract
  • FOFRenderJoomla
  • FOFRenderJoomla3
  • FOFRenderStrapper
  • FOFStringUtils
  • FOFTable
  • FOFTableBehavior
  • FOFTableBehaviorAssets
  • FOFTableBehaviorContenthistory
  • FOFTableBehaviorTags
  • FOFTableDispatcherBehavior
  • FOFTableNested
  • FOFTableRelations
  • FOFTemplateUtils
  • FOFToolbar
  • FOFUtilsArray
  • FOFUtilsCacheCleaner
  • FOFUtilsConfigHelper
  • FOFUtilsFilescheck
  • FOFUtilsIniParser
  • FOFUtilsInstallscript
  • FOFUtilsIp
  • FOFUtilsObject
  • FOFUtilsObservableDispatcher
  • FOFUtilsObservableEvent
  • FOFUtilsPhpfunc
  • FOFUtilsTimer
  • FOFUtilsUpdate
  • FOFUtilsUpdateCollection
  • FOFUtilsUpdateExtension
  • FOFUtilsUpdateJoomla
  • FOFView
  • FOFViewCsv
  • FOFViewForm
  • FOFViewHtml
  • FOFViewJson
  • FOFViewRaw
  • idna_convert
  • JAccess
  • JAccessRule
  • JAccessRules
  • JAccessWrapperAccess
  • JAdapter
  • JAdapterInstance
  • JApplication
  • JApplicationAdministrator
  • JApplicationBase
  • JApplicationCli
  • JApplicationCms
  • JApplicationDaemon
  • JApplicationHelper
  • JApplicationSite
  • JApplicationWeb
  • JApplicationWebRouter
  • JApplicationWebRouterBase
  • JApplicationWebRouterRest
  • JArchive
  • JArchiveBzip2
  • JArchiveGzip
  • JArchiveTar
  • JArchiveWrapperArchive
  • JArchiveZip
  • JArrayHelper
  • JAssociationExtensionHelper
  • JAuthentication
  • JAuthenticationHelper
  • JAuthenticationResponse
  • JBrowser
  • JBuffer
  • JButton
  • JCache
  • JCacheController
  • JCacheControllerCallback
  • JCacheControllerOutput
  • JCacheControllerPage
  • JCacheControllerView
  • JCacheStorage
  • JCacheStorageApc
  • JCacheStorageApcu
  • JCacheStorageCachelite
  • JCacheStorageFile
  • JCacheStorageHelper
  • JCacheStorageMemcache
  • JCacheStorageMemcached
  • JCacheStorageRedis
  • JCacheStorageWincache
  • JCacheStorageXcache
  • JCaptcha
  • JCategories
  • JCategoryNode
  • JClassLoader
  • JCli
  • JClientFtp
  • JClientHelper
  • JClientLdap
  • JClientWrapperHelper
  • JComponentHelper
  • JComponentRecord
  • JComponentRouterBase
  • JComponentRouterLegacy
  • JComponentRouterRulesMenu
  • JComponentRouterRulesNomenu
  • JComponentRouterRulesStandard
  • JComponentRouterView
  • JComponentRouterViewconfiguration
  • JControllerAdmin
  • JControllerBase
  • JControllerForm
  • JControllerLegacy
  • JCrypt
  • JCryptCipher3Des
  • JCryptCipherBlowfish
  • JCryptCipherCrypto
  • JCryptCipherMcrypt
  • JCryptCipherRijndael256
  • JCryptCipherSimple
  • JCryptKey
  • JCryptPasswordSimple
  • JDaemon
  • JDatabase
  • JDatabaseDriver
  • JDatabaseDriverMysql
  • JDatabaseDriverMysqli
  • JDatabaseDriverOracle
  • JDatabaseDriverPdo
  • JDatabaseDriverPdomysql
  • JDatabaseDriverPostgresql
  • JDatabaseDriverSqlazure
  • JDatabaseDriverSqlite
  • JDatabaseDriverSqlsrv
  • JDatabaseExporter
  • JDatabaseExporterMysql
  • JDatabaseExporterMysqli
  • JDatabaseExporterPdomysql
  • JDatabaseExporterPostgresql
  • JDatabaseFactory
  • JDatabaseImporter
  • JDatabaseImporterMysql
  • JDatabaseImporterMysqli
  • JDatabaseImporterPdomysql
  • JDatabaseImporterPostgresql
  • JDatabaseInterface
  • JDatabaseIterator
  • JDatabaseIteratorMysql
  • JDatabaseIteratorMysqli
  • JDatabaseIteratorOracle
  • JDatabaseIteratorPdo
  • JDatabaseIteratorPdomysql
  • JDatabaseIteratorPostgresql
  • JDatabaseIteratorSqlazure
  • JDatabaseIteratorSqlite
  • JDatabaseIteratorSqlsrv
  • JDatabaseMysql
  • JDatabaseMysqli
  • JDatabaseQuery
  • JDatabaseQueryElement
  • JDatabaseQueryLimitable
  • JDatabaseQueryMysql
  • JDatabaseQueryMysqli
  • JDatabaseQueryOracle
  • JDatabaseQueryPdo
  • JDatabaseQueryPdomysql
  • JDatabaseQueryPostgresql
  • JDatabaseQueryPreparable
  • JDatabaseQuerySqlazure
  • JDatabaseQuerySqlite
  • JDatabaseQuerySqlsrv
  • JDatabaseSqlazure
  • JDatabaseSqlsrv
  • JDate
  • JDispatcher
  • JDocument
  • JDocumentError
  • JDocumentFeed
  • JDocumentHtml
  • JDocumentImage
  • JDocumentJson
  • JDocumentOpensearch
  • JDocumentRaw
  • JDocumentRenderer
  • JDocumentRendererAtom
  • JDocumentRendererComponent
  • JDocumentRendererFeedAtom
  • JDocumentRendererFeedRss
  • JDocumentRendererHead
  • JDocumentRendererHtmlComponent
  • JDocumentRendererHtmlHead
  • JDocumentRendererHtmlMessage
  • JDocumentRendererHtmlModule
  • JDocumentRendererHtmlModules
  • JDocumentRendererMessage
  • JDocumentRendererModule
  • JDocumentRendererModules
  • JDocumentRendererRSS
  • JDocumentXml
  • JEditor
  • JError
  • JErrorPage
  • JEvent
  • JEventDispatcher
  • JExtension
  • JFacebook
  • JFacebookAlbum
  • JFacebookCheckin
  • JFacebookComment
  • JFacebookEvent
  • JFacebookGroup
  • JFacebookLink
  • JFacebookNote
  • JFacebookOAuth
  • JFacebookObject
  • JFacebookPhoto
  • JFacebookPost
  • JFacebookStatus
  • JFacebookUser
  • JFacebookVideo
  • JFactory
  • JFeed
  • JFeedEnclosure
  • JFeedEntry
  • JFeedFactory
  • JFeedImage
  • JFeedItem
  • JFeedLink
  • JFeedParser
  • JFeedParserAtom
  • JFeedParserRss
  • JFeedParserRssItunes
  • JFeedParserRssMedia
  • JFeedPerson
  • JFile
  • JFilesystemHelper
  • JFilesystemPatcher
  • JFilesystemWrapperFile
  • JFilesystemWrapperFolder
  • JFilesystemWrapperPath
  • JFilterInput
  • JFilterOutput
  • JFilterWrapperOutput
  • JFolder
  • JForm
  • JFormField
  • JFormFieldAccessLevel
  • JFormFieldAliastag
  • JFormFieldAuthor
  • JFormFieldCacheHandler
  • JFormFieldCalendar
  • JFormFieldCaptcha
  • JFormFieldCategory
  • JFormFieldCheckbox
  • JFormFieldCheckboxes
  • JFormFieldChromeStyle
  • JFormFieldColor
  • JFormFieldCombo
  • JFormFieldComponentlayout
  • JFormFieldComponents
  • JFormFieldContenthistory
  • JFormFieldContentlanguage
  • JFormFieldContenttype
  • JFormFieldDatabaseConnection
  • JFormFieldEditor
  • JFormFieldEMail
  • JFormFieldFile
  • JFormFieldFileList
  • JFormFieldFolderList
  • JFormFieldFrontend_Language
  • JFormFieldGroupedList
  • JFormFieldHeadertag
  • JFormFieldHelpsite
  • JFormFieldHidden
  • JFormFieldImageList
  • JFormFieldInteger
  • JFormFieldLanguage
  • JFormFieldLastvisitDateRange
  • JFormFieldLimitbox
  • JFormFieldList
  • JFormFieldMedia
  • JFormFieldMenu
  • JFormFieldMenuitem
  • JFormFieldMeter
  • JFormFieldModulelayout
  • JFormFieldModuleOrder
  • JFormFieldModulePosition
  • JFormFieldModuletag
  • JFormFieldNote
  • JFormFieldNumber
  • JFormFieldOrdering
  • JFormFieldPassword
  • JFormFieldPlugin_Status
  • JFormFieldPlugins
  • JFormFieldPredefinedList
  • JFormFieldRadio
  • JFormFieldRange
  • JFormFieldRegistrationDateRange
  • JFormFieldRepeatable
  • JFormFieldRules
  • JFormFieldSessionHandler
  • JFormFieldSpacer
  • JFormFieldSQL
  • JFormFieldStatus
  • JFormFieldSubform
  • JFormFieldTag
  • JFormFieldTel
  • JFormFieldTemplatestyle
  • JFormFieldText
  • JFormFieldTextarea
  • JFormFieldTimezone
  • JFormFieldUrl
  • JFormFieldUser
  • JFormFieldUserActive
  • JFormFieldUsergroup
  • JFormFieldUserGroupList
  • JFormFieldUserState
  • JFormHelper
  • JFormRule
  • JFormRuleBoolean
  • JFormRuleCalendar
  • JFormRuleCaptcha
  • JFormRuleColor
  • JFormRuleEmail
  • JFormRuleEquals
  • JFormRuleNotequals
  • JFormRuleNumber
  • JFormRuleOptions
  • JFormRulePassword
  • JFormRuleRules
  • JFormRuleTel
  • JFormRuleUrl
  • JFormRuleUsername
  • JFormWrapperHelper
  • JFTP
  • JGithub
  • JGithubAccount
  • JGithubCommits
  • JGithubForks
  • JGithubHooks
  • JGithubHttp
  • JGithubMeta
  • JGithubMilestones
  • JGithubObject
  • JGithubPackage
  • JGithubPackageActivity
  • JGithubPackageActivityEvents
  • JGithubPackageActivityNotifications
  • JGithubPackageActivityStarring
  • JGithubPackageActivityWatching
  • JGithubPackageAuthorization
  • JGithubPackageData
  • JGithubPackageDataBlobs
  • JGithubPackageDataCommits
  • JGithubPackageDataRefs
  • JGithubPackageDataTags
  • JGithubPackageDataTrees
  • JGithubPackageGists
  • JGithubPackageGistsComments
  • JGithubPackageGitignore
  • JGithubPackageIssues
  • JGithubPackageIssuesAssignees
  • JGithubPackageIssuesComments
  • JGithubPackageIssuesEvents
  • JGithubPackageIssuesLabels
  • JGithubPackageIssuesMilestones
  • JGithubPackageMarkdown
  • JGithubPackageOrgs
  • JGithubPackageOrgsMembers
  • JGithubPackageOrgsTeams
  • JGithubPackagePulls
  • JGithubPackagePullsComments
  • JGithubPackageRepositories
  • JGithubPackageRepositoriesCollaborators
  • JGithubPackageRepositoriesComments
  • JGithubPackageRepositoriesCommits
  • JGithubPackageRepositoriesContents
  • JGithubPackageRepositoriesDownloads
  • JGithubPackageRepositoriesForks
  • JGithubPackageRepositoriesHooks
  • JGithubPackageRepositoriesKeys
  • JGithubPackageRepositoriesMerging
  • JGithubPackageRepositoriesStatistics
  • JGithubPackageRepositoriesStatuses
  • JGithubPackageSearch
  • JGithubPackageUsers
  • JGithubPackageUsersEmails
  • JGithubPackageUsersFollowers
  • JGithubPackageUsersKeys
  • JGithubRefs
  • JGithubStatuses
  • JGoogle
  • JGoogleAuth
  • JGoogleAuthOauth2
  • JGoogleData
  • JGoogleDataAdsense
  • JGoogleDataCalendar
  • JGoogleDataPicasa
  • JGoogleDataPicasaAlbum
  • JGoogleDataPicasaPhoto
  • JGoogleDataPlus
  • JGoogleDataPlusActivities
  • JGoogleDataPlusComments
  • JGoogleDataPlusPeople
  • JGoogleEmbed
  • JGoogleEmbedAnalytics
  • JGoogleEmbedMaps
  • JGrid
  • JHelp
  • JHelper
  • JHelperContent
  • JHelperContenthistory
  • JHelperMedia
  • JHelperRoute
  • JHelperTags
  • JHelperUsergroups
  • JHtml
  • JHtmlAccess
  • JHtmlActionsDropdown
  • JHtmlBatch
  • JHtmlBehavior
  • JHtmlBootstrap
  • JHtmlCategory
  • JHtmlContent
  • JHtmlContentLanguage
  • JHtmlDate
  • JHtmlDebug
  • JHtmlDropdown
  • JHtmlEmail
  • JHtmlForm
  • JHtmlFormbehavior
  • JHtmlGrid
  • JHtmlIcons
  • JHtmlJGrid
  • JHtmlJquery
  • JHtmlLinks
  • JHtmlList
  • JHtmlMenu
  • JHtmlNumber
  • JHtmlRules
  • JHtmlSearchtools
  • JHtmlSelect
  • JHtmlSidebar
  • JHtmlSliders
  • JHtmlSortablelist
  • JHtmlString
  • JHtmlTabs
  • JHtmlTag
  • JHtmlTel
  • JHtmlUser
  • JHttp
  • JHttpFactory
  • JHttpResponse
  • JHttpTransportCurl
  • JHttpTransportSocket
  • JHttpTransportStream
  • JHttpWrapperFactory
  • JImage
  • JImageFilter
  • JImageFilterBackgroundfill
  • JImageFilterBrightness
  • JImageFilterContrast
  • JImageFilterEdgedetect
  • JImageFilterEmboss
  • JImageFilterGrayscale
  • JImageFilterNegate
  • JImageFilterSketchy
  • JImageFilterSmooth
  • JInput
  • JInputCli
  • JInputCookie
  • JInputFiles
  • JInputJSON
  • JInstaller
  • JInstallerAdapter
  • JInstallerAdapterComponent
  • JInstallerAdapterFile
  • JInstallerAdapterLanguage
  • JInstallerAdapterLibrary
  • JInstallerAdapterModule
  • JInstallerAdapterPackage
  • JInstallerAdapterPlugin
  • JInstallerAdapterTemplate
  • JInstallerComponent
  • JInstallerExtension
  • JInstallerFile
  • JInstallerHelper
  • JInstallerLanguage
  • JInstallerLibrary
  • JInstallerManifest
  • JInstallerManifestLibrary
  • JInstallerManifestPackage
  • JInstallerModule
  • JInstallerPackage
  • JInstallerPlugin
  • JInstallerScript
  • JInstallerTemplate
  • JKeychain
  • JLanguage
  • JLanguageAssociations
  • JLanguageHelper
  • JLanguageMultilang
  • JLanguageStemmer
  • JLanguageStemmerPorteren
  • JLanguageTransliterate
  • JLanguageWrapperHelper
  • JLanguageWrapperText
  • JLanguageWrapperTransliterate
  • JLayoutBase
  • JLayoutFile
  • JLayoutHelper
  • JLDAP
  • JLess
  • JLessFormatterJoomla
  • JLibraryHelper
  • JLinkedin
  • JLinkedinCommunications
  • JLinkedinCompanies
  • JLinkedinGroups
  • JLinkedinJobs
  • JLinkedinOauth
  • JLinkedinObject
  • JLinkedinPeople
  • JLinkedinStream
  • JLoader
  • JLog
  • JLogEntry
  • JLogger
  • JLogLogger
  • JLogLoggerCallback
  • JLogLoggerDatabase
  • JLogLoggerEcho
  • JLogLoggerFormattedtext
  • JLogLoggerMessagequeue
  • JLogLoggerSyslog
  • JLogLoggerW3c
  • JMail
  • JMailHelper
  • JMailWrapperHelper
  • JMediawiki
  • JMediawikiCategories
  • JMediawikiHttp
  • JMediawikiImages
  • JMediawikiLinks
  • JMediawikiObject
  • JMediawikiPages
  • JMediawikiSearch
  • JMediawikiSites
  • JMediawikiUsers
  • JMenu
  • JMenuAdministrator
  • JMenuItem
  • JMenuSite
  • JMicrodata
  • JModelAdmin
  • JModelBase
  • JModelDatabase
  • JModelForm
  • JModelItem
  • JModelLegacy
  • JModelList
  • JModuleHelper
  • JNode
  • JOAuth1Client
  • JOAuth2Client
  • JObject
  • JObservable
  • JObserver
  • JObserverMapper
  • JObserverUpdater
  • JObserverWrapperMapper
  • JOpenSearchImage
  • JOpenSearchUrl
  • JOpenstreetmap
  • JOpenstreetmapChangesets
  • JOpenstreetmapElements
  • JOpenstreetmapGps
  • JOpenstreetmapInfo
  • JOpenstreetmapOauth
  • JOpenstreetmapObject
  • JOpenstreetmapUser
  • JPagination
  • JPaginationObject
  • JPath
  • JPathway
  • JPathwaySite
  • JPlatform
  • JPlugin
  • JPluginHelper
  • JProfiler
  • JRequest
  • JResponse
  • JResponseJson
  • JRoute
  • JRouter
  • JRouterAdministrator
  • JRouterSite
  • JRouteWrapperRoute
  • JRule
  • JRules
  • JSchemaChangeitem
  • JSchemaChangeitemMysql
  • JSchemaChangeitemPostgresql
  • JSchemaChangeitemSqlsrv
  • JSchemaChangeset
  • JSearchHelper
  • JSession
  • JSessionHandlerJoomla
  • JSessionHandlerNative
  • JSessionStorage
  • JSessionStorageApc
  • JSessionStorageDatabase
  • JSessionStorageMemcache
  • JSessionStorageMemcached
  • JSessionStorageNone
  • JSessionStorageWincache
  • JSessionStorageXcache
  • JSimplecrypt
  • JSimplepieFactory
  • JStream
  • JStreamString
  • JString
  • JStringController
  • JStringPunycode
  • JStringWrapperNormalise
  • JStringWrapperPunycode
  • JTable
  • JTableAsset
  • JTableCategory
  • JTableContent
  • JTableContenthistory
  • JTableContenttype
  • JTableCorecontent
  • JTableExtension
  • JTableInterface
  • JTableLanguage
  • JTableMenu
  • JTableMenuType
  • JTableModule
  • JTableNested
  • JTableObserver
  • JTableObserverContenthistory
  • JTableObserverTags
  • JTableSession
  • JTableUcm
  • JTableUpdate
  • JTableUpdatesite
  • JTableUser
  • JTableUsergroup
  • JTableViewlevel
  • JText
  • JToolbar
  • JToolbarButton
  • JToolbarButtonConfirm
  • JToolbarButtonCustom
  • JToolbarButtonHelp
  • JToolbarButtonLink
  • JToolbarButtonPopup
  • JToolbarButtonSeparator
  • JToolbarButtonSlider
  • JToolbarButtonStandard
  • JTree
  • JTwitter
  • JTwitterBlock
  • JTwitterDirectmessages
  • JTwitterFavorites
  • JTwitterFriends
  • JTwitterHelp
  • JTwitterLists
  • JTwitterOAuth
  • JTwitterObject
  • JTwitterPlaces
  • JTwitterProfile
  • JTwittersearch
  • JTwitterStatuses
  • JTwitterTrends
  • JTwitterUsers
  • JUcmBase
  • JUcmContent
  • JUcmType
  • JUpdate
  • JUpdateAdapter
  • JUpdater
  • JUpdaterCollection
  • JUpdaterExtension
  • JUri
  • JUser
  • JUserHelper
  • JUserWrapperHelper
  • JUtility
  • JVersion
  • JViewBase
  • JViewCategories
  • JViewCategory
  • JViewCategoryfeed
  • JViewHtml
  • JViewLegacy
  • JWeb
  • JWebClient
  • JXMLElement
  • lessc
  • lessc_formatter_classic
  • lessc_formatter_compressed
  • lessc_formatter_lessjs
  • lessc_parser
  • lessify
  • Net_IDNA_php4
  • nodecounter
  • ntlm_sasl_client_class
  • PHPMailer
  • PHPMailerOAuth
  • PHPMailerOAuthGoogle
  • POP3
  • SimplePie
  • SimplePie_Author
  • SimplePie_Autoloader
  • SimplePie_Cache
  • SimplePie_Cache_DB
  • SimplePie_Cache_File
  • SimplePie_Cache_Memcache
  • SimplePie_Cache_MySQL
  • SimplePie_Caption
  • SimplePie_Category
  • SimplePie_Content_Type_Sniffer
  • SimplePie_Copyright
  • SimplePie_Core
  • SimplePie_Credit
  • SimplePie_Decode_HTML_Entities
  • SimplePie_Enclosure
  • SimplePie_File
  • SimplePie_gzdecode
  • SimplePie_HTTP_Parser
  • SimplePie_IRI
  • SimplePie_Item
  • SimplePie_Locator
  • SimplePie_Misc
  • SimplePie_Net_IPv6
  • SimplePie_Parse_Date
  • SimplePie_Parser
  • SimplePie_Rating
  • SimplePie_Registry
  • SimplePie_Restriction
  • SimplePie_Sanitize
  • SimplePie_Source
  • SimplePie_XML_Declaration_Parser
  • SMTP
  • tagparse
  • TypeError

Interfaces

  • FOFConfigDomainInterface
  • FOFDatabaseInterface
  • FOFDatabaseQueryLimitable
  • FOFDatabaseQueryPreparable
  • FOFDownloadInterface
  • FOFEncryptAesInterface
  • FOFEncryptRandvalinterface
  • FOFFormField
  • FOFHalRenderInterface
  • FOFPlatformFilesystemInterface
  • FOFPlatformInterface
  • JArchiveExtractable
  • JAssociationExtensionInterface
  • JCacheException
  • JComponentRouterInterface
  • JComponentRouterRulesInterface
  • JController
  • JCryptCipher
  • JCryptPassword
  • JFeedParserNamespace
  • JHttpTransport
  • JLayout
  • JModel
  • JObservableInterface
  • JObserverInterface
  • JObserverUpdaterInterface
  • JSessionHandlerInterface
  • JsonSerializable
  • JUcm
  • JView
  • SimplePie_Cache_Base

Exceptions

  • Error
  • JAccessExceptionNotallowed
  • JCacheExceptionConnecting
  • JCacheExceptionUnsupported
  • JComponentExceptionMissing
  • JDatabaseException
  • JDatabaseExceptionConnecting
  • JDatabaseExceptionExecuting
  • JDatabaseExceptionUnsupported
  • JException
  • JSessionExceptionUnsupported
  • LogException
  • phpmailerException
  • SimplePie_Exception

Constants

  • JERROR_CALLBACK_NOT_CALLABLE
  • JERROR_ILLEGAL_MODE
  • JERROR_ILLEGAL_OPTIONS
  • JREQUEST_ALLOWHTML
  • JREQUEST_ALLOWRAW
  • JREQUEST_NOTRIM
  • JROUTER_MODE_RAW
  • JROUTER_MODE_SEF

Functions

  • __autoload
  • array_column
  • boolval
  • composerRequire205c915b9c7d3e718e7c95793ee67ffe
  • gzopen
  • gzseek
  • gztell
  • hash_equals
  • hash_pbkdf2
  • HTMLFilter
  • jexit
  • jimport
  • json_last_error_msg
  • ldap_escape
  • password_get_info
  • password_hash
  • password_needs_rehash
  • password_verify
  • PHPMailerAutoload
  • random_bytes
  • random_int
  • RandomCompat_intval
  • RandomCompat_strlen
  • RandomCompat_substr
  • tln_body2div
  • tln_casenormalize
  • tln_deent
  • tln_defang
  • tln_findnxreg
  • tln_findnxstr
  • tln_fixatts
  • tln_fixstyle
  • tln_fixurl
  • tln_getnxtag
  • tln_sanitize
  • tln_skipspace
  • tln_tagprint
  • tln_unspace
  • utf8_accents_to_ascii
  • utf8_bad_explain
  • utf8_bad_find
  • utf8_bad_findall
  • utf8_bad_identify
  • utf8_bad_replace
  • utf8_bad_strip
  • utf8_byte_position
  • utf8_compliant
  • utf8_from_unicode
  • utf8_ireplace
  • utf8_is_ascii
  • utf8_is_ascii_ctrl
  • utf8_is_valid
  • utf8_is_word_chars
  • utf8_locate_current_chr
  • utf8_locate_next_chr
  • utf8_ltrim
  • utf8_ord
  • utf8_rtrim
  • utf8_specials_pattern
  • utf8_str_pad
  • utf8_str_split
  • utf8_strcasecmp
  • utf8_strcspn
  • utf8_strip_ascii_ctrl
  • utf8_strip_non_ascii
  • utf8_strip_non_ascii_ctrl
  • utf8_strip_specials
  • utf8_stristr
  • utf8_strlen
  • utf8_strpos
  • utf8_strrev
  • utf8_strrpos
  • utf8_strspn
  • utf8_strtolower
  • utf8_strtoupper
  • utf8_substr
  • utf8_substr_replace
  • utf8_to_unicode
  • utf8_trim
  • utf8_ucfirst
  • utf8_ucwords
  • utf8_ucwords_callback
   1 <?php
   2 /**
   3  * SimplePie
   4  *
   5  * A PHP-Based RSS and Atom Feed Framework.
   6  * Takes the hard work out of managing a complete RSS/Atom solution.
   7  *
   8  * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
   9  * All rights reserved.
  10  *
  11  * Redistribution and use in source and binary forms, with or without modification, are
  12  * permitted provided that the following conditions are met:
  13  *
  14  *  * Redistributions of source code must retain the above copyright notice, this list of
  15  *    conditions and the following disclaimer.
  16  *
  17  *  * Redistributions in binary form must reproduce the above copyright notice, this list
  18  *    of conditions and the following disclaimer in the documentation and/or other materials
  19  *    provided with the distribution.
  20  *
  21  *  * Neither the name of the SimplePie Team nor the names of its contributors may be used
  22  *    to endorse or promote products derived from this software without specific prior
  23  *    written permission.
  24  *
  25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
  26  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  27  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
  28  * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  29  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  32  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  33  * POSSIBILITY OF SUCH DAMAGE.
  34  *
  35  * @package SimplePie
  36  * @version 1.3.1
  37  * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
  38  * @author Ryan Parman
  39  * @author Geoffrey Sneddon
  40  * @author Ryan McCue
  41  * @link http://simplepie.org/ SimplePie
  42  * @license http://www.opensource.org/licenses/bsd-license.php BSD License
  43  */
  44 
  45 
  46 /**
  47  * Manages all item-related data
  48  *
  49  * Used by {@see SimplePie::get_item()} and {@see SimplePie::get_items()}
  50  *
  51  * This class can be overloaded with {@see SimplePie::set_item_class()}
  52  *
  53  * @package SimplePie
  54  * @subpackage API
  55  */
  56 class SimplePie_Item
  57 {
  58     /**
  59      * Parent feed
  60      *
  61      * @access private
  62      * @var SimplePie
  63      */
  64     var $feed;
  65 
  66     /**
  67      * Raw data
  68      *
  69      * @access private
  70      * @var array
  71      */
  72     var $data = array();
  73 
  74     /**
  75      * Registry object
  76      *
  77      * @see set_registry
  78      * @var SimplePie_Registry
  79      */
  80     protected $registry;
  81 
  82     /**
  83      * Create a new item object
  84      *
  85      * This is usually used by {@see SimplePie::get_items} and
  86      * {@see SimplePie::get_item}. Avoid creating this manually.
  87      *
  88      * @param SimplePie $feed Parent feed
  89      * @param array $data Raw data
  90      */
  91     public function __construct($feed, $data)
  92     {
  93         $this->feed = $feed;
  94         $this->data = $data;
  95     }
  96 
  97     /**
  98      * Set the registry handler
  99      *
 100      * This is usually used by {@see SimplePie_Registry::create}
 101      *
 102      * @since 1.3
 103      * @param SimplePie_Registry $registry
 104      */
 105     public function set_registry(SimplePie_Registry $registry)
 106     {
 107         $this->registry = $registry;
 108     }
 109 
 110     /**
 111      * Get a string representation of the item
 112      *
 113      * @return string
 114      */
 115     public function __toString()
 116     {
 117         return md5(serialize($this->data));
 118     }
 119 
 120     /**
 121      * Remove items that link back to this before destroying this object
 122      */
 123     public function __destruct()
 124     {
 125         if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode'))
 126         {
 127             unset($this->feed);
 128         }
 129     }
 130 
 131     /**
 132      * Get data for an item-level element
 133      *
 134      * This method allows you to get access to ANY element/attribute that is a
 135      * sub-element of the item/entry tag.
 136      *
 137      * See {@see SimplePie::get_feed_tags()} for a description of the return value
 138      *
 139      * @since 1.0
 140      * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
 141      * @param string $namespace The URL of the XML namespace of the elements you're trying to access
 142      * @param string $tag Tag name
 143      * @return array
 144      */
 145     public function get_item_tags($namespace, $tag)
 146     {
 147         if (isset($this->data['child'][$namespace][$tag]))
 148         {
 149             return $this->data['child'][$namespace][$tag];
 150         }
 151         else
 152         {
 153             return null;
 154         }
 155     }
 156 
 157     /**
 158      * Get the base URL value from the parent feed
 159      *
 160      * Uses `<xml:base>`
 161      *
 162      * @param array $element
 163      * @return string
 164      */
 165     public function get_base($element = array())
 166     {
 167         return $this->feed->get_base($element);
 168     }
 169 
 170     /**
 171      * Sanitize feed data
 172      *
 173      * @access private
 174      * @see SimplePie::sanitize()
 175      * @param string $data Data to sanitize
 176      * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants
 177      * @param string $base Base URL to resolve URLs against
 178      * @return string Sanitized data
 179      */
 180     public function sanitize($data, $type, $base = '')
 181     {
 182         return $this->feed->sanitize($data, $type, $base);
 183     }
 184 
 185     /**
 186      * Get the parent feed
 187      *
 188      * Note: this may not work as you think for multifeeds!
 189      *
 190      * @link http://simplepie.org/faq/typical_multifeed_gotchas#missing_data_from_feed
 191      * @since 1.0
 192      * @return SimplePie
 193      */
 194     public function get_feed()
 195     {
 196         return $this->feed;
 197     }
 198 
 199     /**
 200      * Get the unique identifier for the item
 201      *
 202      * This is usually used when writing code to check for new items in a feed.
 203      *
 204      * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute
 205      * for RDF. If none of these are supplied (or `$hash` is true), creates an
 206      * MD5 hash based on the permalink and title. If either of those are not
 207      * supplied, creates a hash based on the full feed data.
 208      *
 209      * @since Beta 2
 210      * @param boolean $hash Should we force using a hash instead of the supplied ID?
 211      * @return string
 212      */
 213     public function get_id($hash = false)
 214     {
 215         if (!$hash)
 216         {
 217             if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
 218             {
 219                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 220             }
 221             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
 222             {
 223                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 224             }
 225             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
 226             {
 227                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 228             }
 229             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
 230             {
 231                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 232             }
 233             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
 234             {
 235                 return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 236             }
 237             elseif (isset($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about']))
 238             {
 239                 return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT);
 240             }
 241             elseif (($return = $this->get_permalink()) !== null)
 242             {
 243                 return $return;
 244             }
 245             elseif (($return = $this->get_title()) !== null)
 246             {
 247                 return $return;
 248             }
 249         }
 250         if ($this->get_permalink() !== null || $this->get_title() !== null)
 251         {
 252             return md5($this->get_permalink() . $this->get_title());
 253         }
 254         else
 255         {
 256             return md5(serialize($this->data));
 257         }
 258     }
 259 
 260     /**
 261      * Get the title of the item
 262      *
 263      * Uses `<atom:title>`, `<title>` or `<dc:title>`
 264      *
 265      * @since Beta 2 (previously called `get_item_title` since 0.8)
 266      * @return string|null
 267      */
 268     public function get_title()
 269     {
 270         if (!isset($this->data['title']))
 271         {
 272             if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
 273             {
 274                 $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
 275             }
 276             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
 277             {
 278                 $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
 279             }
 280             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
 281             {
 282                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 283             }
 284             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
 285             {
 286                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 287             }
 288             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
 289             {
 290                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 291             }
 292             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
 293             {
 294                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 295             }
 296             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
 297             {
 298                 $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 299             }
 300             else
 301             {
 302                 $this->data['title'] = null;
 303             }
 304         }
 305         return $this->data['title'];
 306     }
 307 
 308     /**
 309      * Get the content for the item
 310      *
 311      * Prefers summaries over full content , but will return full content if a
 312      * summary does not exist.
 313      *
 314      * To prefer full content instead, use {@see get_content}
 315      *
 316      * Uses `<atom:summary>`, `<description>`, `<dc:description>` or
 317      * `<itunes:subtitle>`
 318      *
 319      * @since 0.8
 320      * @param boolean $description_only Should we avoid falling back to the content?
 321      * @return string|null
 322      */
 323     public function get_description($description_only = false)
 324     {
 325         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
 326         {
 327             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
 328         }
 329         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
 330         {
 331             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
 332         }
 333         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
 334         {
 335             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 336         }
 337         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
 338         {
 339             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
 340         }
 341         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
 342         {
 343             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 344         }
 345         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
 346         {
 347             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 348         }
 349         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
 350         {
 351             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
 352         }
 353         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
 354         {
 355             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 356         }
 357         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
 358         {
 359             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
 360         }
 361 
 362         elseif (!$description_only)
 363         {
 364             return $this->get_content(true);
 365         }
 366         else
 367         {
 368             return null;
 369         }
 370     }
 371 
 372     /**
 373      * Get the content for the item
 374      *
 375      * Prefers full content over summaries, but will return a summary if full
 376      * content does not exist.
 377      *
 378      * To prefer summaries instead, use {@see get_description}
 379      *
 380      * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module)
 381      *
 382      * @since 1.0
 383      * @param boolean $content_only Should we avoid falling back to the description?
 384      * @return string|null
 385      */
 386     public function get_content($content_only = false)
 387     {
 388         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
 389         {
 390             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
 391         }
 392         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
 393         {
 394             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
 395         }
 396         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
 397         {
 398             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
 399         }
 400         elseif (!$content_only)
 401         {
 402             return $this->get_description(true);
 403         }
 404         else
 405         {
 406             return null;
 407         }
 408     }
 409 
 410     /**
 411      * Get a category for the item
 412      *
 413      * @since Beta 3 (previously called `get_categories()` since Beta 2)
 414      * @param int $key The category that you want to return.  Remember that arrays begin with 0, not 1
 415      * @return SimplePie_Category|null
 416      */
 417     public function get_category($key = 0)
 418     {
 419         $categories = $this->get_categories();
 420         if (isset($categories[$key]))
 421         {
 422             return $categories[$key];
 423         }
 424         else
 425         {
 426             return null;
 427         }
 428     }
 429 
 430     /**
 431      * Get all categories for the item
 432      *
 433      * Uses `<atom:category>`, `<category>` or `<dc:subject>`
 434      *
 435      * @since Beta 3
 436      * @return array|null List of {@see SimplePie_Category} objects
 437      */
 438     public function get_categories()
 439     {
 440         $categories = array();
 441 
 442         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
 443         {
 444             $term = null;
 445             $scheme = null;
 446             $label = null;
 447             if (isset($category['attribs']['']['term']))
 448             {
 449                 $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
 450             }
 451             if (isset($category['attribs']['']['scheme']))
 452             {
 453                 $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
 454             }
 455             if (isset($category['attribs']['']['label']))
 456             {
 457                 $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
 458             }
 459             $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
 460         }
 461         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
 462         {
 463             // This is really the label, but keep this as the term also for BC.
 464             // Label will also work on retrieving because that falls back to term.
 465             $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 466             if (isset($category['attribs']['']['domain']))
 467             {
 468                 $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
 469             }
 470             else
 471             {
 472                 $scheme = null;
 473             }
 474             $categories[] = $this->registry->create('Category', array($term, $scheme, null));
 475         }
 476         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
 477         {
 478             $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
 479         }
 480         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
 481         {
 482             $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
 483         }
 484 
 485         if (!empty($categories))
 486         {
 487             return array_unique($categories);
 488         }
 489         else
 490         {
 491             return null;
 492         }
 493     }
 494 
 495     /**
 496      * Get an author for the item
 497      *
 498      * @since Beta 2
 499      * @param int $key The author that you want to return.  Remember that arrays begin with 0, not 1
 500      * @return SimplePie_Author|null
 501      */
 502     public function get_author($key = 0)
 503     {
 504         $authors = $this->get_authors();
 505         if (isset($authors[$key]))
 506         {
 507             return $authors[$key];
 508         }
 509         else
 510         {
 511             return null;
 512         }
 513     }
 514 
 515     /**
 516      * Get a contributor for the item
 517      *
 518      * @since 1.1
 519      * @param int $key The contrbutor that you want to return.  Remember that arrays begin with 0, not 1
 520      * @return SimplePie_Author|null
 521      */
 522     public function get_contributor($key = 0)
 523     {
 524         $contributors = $this->get_contributors();
 525         if (isset($contributors[$key]))
 526         {
 527             return $contributors[$key];
 528         }
 529         else
 530         {
 531             return null;
 532         }
 533     }
 534 
 535     /**
 536      * Get all contributors for the item
 537      *
 538      * Uses `<atom:contributor>`
 539      *
 540      * @since 1.1
 541      * @return array|null List of {@see SimplePie_Author} objects
 542      */
 543     public function get_contributors()
 544     {
 545         $contributors = array();
 546         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
 547         {
 548             $name = null;
 549             $uri = null;
 550             $email = null;
 551             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
 552             {
 553                 $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 554             }
 555             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
 556             {
 557                 $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
 558             }
 559             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
 560             {
 561                 $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 562             }
 563             if ($name !== null || $email !== null || $uri !== null)
 564             {
 565                 $contributors[] = $this->registry->create('Author', array($name, $uri, $email));
 566             }
 567         }
 568         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
 569         {
 570             $name = null;
 571             $url = null;
 572             $email = null;
 573             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
 574             {
 575                 $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 576             }
 577             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
 578             {
 579                 $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
 580             }
 581             if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
 582             {
 583                 $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 584             }
 585             if ($name !== null || $email !== null || $url !== null)
 586             {
 587                 $contributors[] = $this->registry->create('Author', array($name, $url, $email));
 588             }
 589         }
 590 
 591         if (!empty($contributors))
 592         {
 593             return array_unique($contributors);
 594         }
 595         else
 596         {
 597             return null;
 598         }
 599     }
 600 
 601     /**
 602      * Get all authors for the item
 603      *
 604      * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
 605      *
 606      * @since Beta 2
 607      * @return array|null List of {@see SimplePie_Author} objects
 608      */
 609     public function get_authors()
 610     {
 611         $authors = array();
 612         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
 613         {
 614             $name = null;
 615             $uri = null;
 616             $email = null;
 617             if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
 618             {
 619                 $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 620             }
 621             if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
 622             {
 623                 $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
 624             }
 625             if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
 626             {
 627                 $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 628             }
 629             if ($name !== null || $email !== null || $uri !== null)
 630             {
 631                 $authors[] = $this->registry->create('Author', array($name, $uri, $email));
 632             }
 633         }
 634         if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
 635         {
 636             $name = null;
 637             $url = null;
 638             $email = null;
 639             if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
 640             {
 641                 $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 642             }
 643             if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
 644             {
 645                 $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
 646             }
 647             if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
 648             {
 649                 $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 650             }
 651             if ($name !== null || $email !== null || $url !== null)
 652             {
 653                 $authors[] = $this->registry->create('Author', array($name, $url, $email));
 654             }
 655         }
 656         if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author'))
 657         {
 658             $authors[] = $this->registry->create('Author', array(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)));
 659         }
 660         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
 661         {
 662             $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
 663         }
 664         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
 665         {
 666             $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
 667         }
 668         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
 669         {
 670             $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
 671         }
 672 
 673         if (!empty($authors))
 674         {
 675             return array_unique($authors);
 676         }
 677         elseif (($source = $this->get_source()) && ($authors = $source->get_authors()))
 678         {
 679             return $authors;
 680         }
 681         elseif ($authors = $this->feed->get_authors())
 682         {
 683             return $authors;
 684         }
 685         else
 686         {
 687             return null;
 688         }
 689     }
 690 
 691     /**
 692      * Get the copyright info for the item
 693      *
 694      * Uses `<atom:rights>` or `<dc:rights>`
 695      *
 696      * @since 1.1
 697      * @return string
 698      */
 699     public function get_copyright()
 700     {
 701         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
 702         {
 703             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
 704         }
 705         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
 706         {
 707             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 708         }
 709         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
 710         {
 711             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
 712         }
 713         else
 714         {
 715             return null;
 716         }
 717     }
 718 
 719     /**
 720      * Get the posting date/time for the item
 721      *
 722      * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`,
 723      * `<atom:modified>`, `<pubDate>` or `<dc:date>`
 724      *
 725      * Note: obeys PHP's timezone setting. To get a UTC date/time, use
 726      * {@see get_gmdate}
 727      *
 728      * @since Beta 2 (previously called `get_item_date` since 0.8)
 729      *
 730      * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
 731      * @return int|string|null
 732      */
 733     public function get_date($date_format = 'j F Y, g:i a')
 734     {
 735         if (!isset($this->data['date']))
 736         {
 737             if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
 738             {
 739                 $this->data['date']['raw'] = $return[0]['data'];
 740             }
 741             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
 742             {
 743                 $this->data['date']['raw'] = $return[0]['data'];
 744             }
 745             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
 746             {
 747                 $this->data['date']['raw'] = $return[0]['data'];
 748             }
 749             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
 750             {
 751                 $this->data['date']['raw'] = $return[0]['data'];
 752             }
 753             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
 754             {
 755                 $this->data['date']['raw'] = $return[0]['data'];
 756             }
 757             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate'))
 758             {
 759                 $this->data['date']['raw'] = $return[0]['data'];
 760             }
 761             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
 762             {
 763                 $this->data['date']['raw'] = $return[0]['data'];
 764             }
 765             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
 766             {
 767                 $this->data['date']['raw'] = $return[0]['data'];
 768             }
 769 
 770             if (!empty($this->data['date']['raw']))
 771             {
 772                 $parser = $this->registry->call('Parse_Date', 'get');
 773                 $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']);
 774             }
 775             else
 776             {
 777                 $this->data['date'] = null;
 778             }
 779         }
 780         if ($this->data['date'])
 781         {
 782             $date_format = (string) $date_format;
 783             switch ($date_format)
 784             {
 785                 case '':
 786                     return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
 787 
 788                 case 'U':
 789                     return $this->data['date']['parsed'];
 790 
 791                 default:
 792                     return date($date_format, $this->data['date']['parsed']);
 793             }
 794         }
 795         else
 796         {
 797             return null;
 798         }
 799     }
 800 
 801     /**
 802      * Get the update date/time for the item
 803      *
 804      * Uses `<atom:updated>`
 805      *
 806      * Note: obeys PHP's timezone setting. To get a UTC date/time, use
 807      * {@see get_gmdate}
 808      *
 809      * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
 810      * @return int|string|null
 811      */
 812     public function get_updated_date($date_format = 'j F Y, g:i a')
 813     {
 814         if (!isset($this->data['updated']))
 815         {
 816             if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
 817             {
 818                 $this->data['updated']['raw'] = $return[0]['data'];
 819             }
 820 
 821             if (!empty($this->data['updated']['raw']))
 822             {
 823                 $parser = $this->registry->call('Parse_Date', 'get');
 824                 $this->data['updated']['parsed'] = $parser->parse($this->data['date']['raw']);
 825             }
 826             else
 827             {
 828                 $this->data['updated'] = null;
 829             }
 830         }
 831         if ($this->data['updated'])
 832         {
 833             $date_format = (string) $date_format;
 834             switch ($date_format)
 835             {
 836                 case '':
 837                     return $this->sanitize($this->data['updated']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
 838 
 839                 case 'U':
 840                     return $this->data['updated']['parsed'];
 841 
 842                 default:
 843                     return date($date_format, $this->data['updated']['parsed']);
 844             }
 845         }
 846         else
 847         {
 848             return null;
 849         }
 850     }
 851 
 852     /**
 853      * Get the localized posting date/time for the item
 854      *
 855      * Returns the date formatted in the localized language. To display in
 856      * languages other than the server's default, you need to change the locale
 857      * with {@link http://php.net/setlocale setlocale()}. The available
 858      * localizations depend on which ones are installed on your web server.
 859      *
 860      * @since 1.0
 861      *
 862      * @param string $date_format Supports any PHP date format from {@see http://php.net/strftime} (empty for the raw data)
 863      * @return int|string|null
 864      */
 865     public function get_local_date($date_format = '%c')
 866     {
 867         if (!$date_format)
 868         {
 869             return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
 870         }
 871         elseif (($date = $this->get_date('U')) !== null && $date !== false)
 872         {
 873             return strftime($date_format, $date);
 874         }
 875         else
 876         {
 877             return null;
 878         }
 879     }
 880 
 881     /**
 882      * Get the posting date/time for the item (UTC time)
 883      *
 884      * @see get_date
 885      * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
 886      * @return int|string|null
 887      */
 888     public function get_gmdate($date_format = 'j F Y, g:i a')
 889     {
 890         $date = $this->get_date('U');
 891         if ($date === null)
 892         {
 893             return null;
 894         }
 895 
 896         return gmdate($date_format, $date);
 897     }
 898 
 899     /**
 900      * Get the update date/time for the item (UTC time)
 901      *
 902      * @see get_updated_date
 903      * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
 904      * @return int|string|null
 905      */
 906     public function get_updated_gmdate($date_format = 'j F Y, g:i a')
 907     {
 908         $date = $this->get_updated_date('U');
 909         if ($date === null)
 910         {
 911             return null;
 912         }
 913 
 914         return gmdate($date_format, $date);
 915     }
 916 
 917     /**
 918      * Get the permalink for the item
 919      *
 920      * Returns the first link available with a relationship of "alternate".
 921      * Identical to {@see get_link()} with key 0
 922      *
 923      * @see get_link
 924      * @since 0.8
 925      * @return string|null Permalink URL
 926      */
 927     public function get_permalink()
 928     {
 929         $link = $this->get_link();
 930         $enclosure = $this->get_enclosure(0);
 931         if ($link !== null)
 932         {
 933             return $link;
 934         }
 935         elseif ($enclosure !== null)
 936         {
 937             return $enclosure->get_link();
 938         }
 939         else
 940         {
 941             return null;
 942         }
 943     }
 944 
 945     /**
 946      * Get a single link for the item
 947      *
 948      * @since Beta 3
 949      * @param int $key The link that you want to return.  Remember that arrays begin with 0, not 1
 950      * @param string $rel The relationship of the link to return
 951      * @return string|null Link URL
 952      */
 953     public function get_link($key = 0, $rel = 'alternate')
 954     {
 955         $links = $this->get_links($rel);
 956         if ($links[$key] !== null)
 957         {
 958             return $links[$key];
 959         }
 960         else
 961         {
 962             return null;
 963         }
 964     }
 965 
 966     /**
 967      * Get all links for the item
 968      *
 969      * Uses `<atom:link>`, `<link>` or `<guid>`
 970      *
 971      * @since Beta 2
 972      * @param string $rel The relationship of links to return
 973      * @return array|null Links found for the item (strings)
 974      */
 975     public function get_links($rel = 'alternate')
 976     {
 977         if (!isset($this->data['links']))
 978         {
 979             $this->data['links'] = array();
 980             foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
 981             {
 982                 if (isset($link['attribs']['']['href']))
 983                 {
 984                     $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
 985                     $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
 986 
 987                 }
 988             }
 989             foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
 990             {
 991                 if (isset($link['attribs']['']['href']))
 992                 {
 993                     $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
 994                     $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
 995                 }
 996             }
 997             if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
 998             {
 999                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1000             }
1001             if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
1002             {
1003                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1004             }
1005             if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
1006             {
1007                 $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1008             }
1009             if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
1010             {
1011                 if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true')
1012                 {
1013                     $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1014                 }
1015             }
1016 
1017             $keys = array_keys($this->data['links']);
1018             foreach ($keys as $key)
1019             {
1020                 if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key)))
1021                 {
1022                     if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
1023                     {
1024                         $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
1025                         $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
1026                     }
1027                     else
1028                     {
1029                         $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
1030                     }
1031                 }
1032                 elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
1033                 {
1034                     $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
1035                 }
1036                 $this->data['links'][$key] = array_unique($this->data['links'][$key]);
1037             }
1038         }
1039         if (isset($this->data['links'][$rel]))
1040         {
1041             return $this->data['links'][$rel];
1042         }
1043         else
1044         {
1045             return null;
1046         }
1047     }
1048 
1049     /**
1050      * Get an enclosure from the item
1051      *
1052      * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
1053      *
1054      * @since Beta 2
1055      * @todo Add ability to prefer one type of content over another (in a media group).
1056      * @param int $key The enclosure that you want to return.  Remember that arrays begin with 0, not 1
1057      * @return SimplePie_Enclosure|null
1058      */
1059     public function get_enclosure($key = 0, $prefer = null)
1060     {
1061         $enclosures = $this->get_enclosures();
1062         if (isset($enclosures[$key]))
1063         {
1064             return $enclosures[$key];
1065         }
1066         else
1067         {
1068             return null;
1069         }
1070     }
1071 
1072     /**
1073      * Get all available enclosures (podcasts, etc.)
1074      *
1075      * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
1076      *
1077      * At this point, we're pretty much assuming that all enclosures for an item
1078      * are the same content.  Anything else is too complicated to
1079      * properly support.
1080      *
1081      * @since Beta 2
1082      * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
1083      * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
1084      * @return array|null List of SimplePie_Enclosure items
1085      */
1086     public function get_enclosures()
1087     {
1088         if (!isset($this->data['enclosures']))
1089         {
1090             $this->data['enclosures'] = array();
1091 
1092             // Elements
1093             $captions_parent = null;
1094             $categories_parent = null;
1095             $copyrights_parent = null;
1096             $credits_parent = null;
1097             $description_parent = null;
1098             $duration_parent = null;
1099             $hashes_parent = null;
1100             $keywords_parent = null;
1101             $player_parent = null;
1102             $ratings_parent = null;
1103             $restrictions_parent = null;
1104             $thumbnails_parent = null;
1105             $title_parent = null;
1106 
1107             // Let's do the channel and item-level ones first, and just re-use them if we need to.
1108             $parent = $this->get_feed();
1109 
1110             // CAPTIONS
1111             if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
1112             {
1113                 foreach ($captions as $caption)
1114                 {
1115                     $caption_type = null;
1116                     $caption_lang = null;
1117                     $caption_startTime = null;
1118                     $caption_endTime = null;
1119                     $caption_text = null;
1120                     if (isset($caption['attribs']['']['type']))
1121                     {
1122                         $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1123                     }
1124                     if (isset($caption['attribs']['']['lang']))
1125                     {
1126                         $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1127                     }
1128                     if (isset($caption['attribs']['']['start']))
1129                     {
1130                         $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1131                     }
1132                     if (isset($caption['attribs']['']['end']))
1133                     {
1134                         $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1135                     }
1136                     if (isset($caption['data']))
1137                     {
1138                         $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1139                     }
1140                     $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1141                 }
1142             }
1143             elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
1144             {
1145                 foreach ($captions as $caption)
1146                 {
1147                     $caption_type = null;
1148                     $caption_lang = null;
1149                     $caption_startTime = null;
1150                     $caption_endTime = null;
1151                     $caption_text = null;
1152                     if (isset($caption['attribs']['']['type']))
1153                     {
1154                         $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1155                     }
1156                     if (isset($caption['attribs']['']['lang']))
1157                     {
1158                         $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1159                     }
1160                     if (isset($caption['attribs']['']['start']))
1161                     {
1162                         $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1163                     }
1164                     if (isset($caption['attribs']['']['end']))
1165                     {
1166                         $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1167                     }
1168                     if (isset($caption['data']))
1169                     {
1170                         $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1171                     }
1172                     $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1173                 }
1174             }
1175             if (is_array($captions_parent))
1176             {
1177                 $captions_parent = array_values(array_unique($captions_parent));
1178             }
1179 
1180             // CATEGORIES
1181             foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
1182             {
1183                 $term = null;
1184                 $scheme = null;
1185                 $label = null;
1186                 if (isset($category['data']))
1187                 {
1188                     $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1189                 }
1190                 if (isset($category['attribs']['']['scheme']))
1191                 {
1192                     $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1193                 }
1194                 else
1195                 {
1196                     $scheme = 'http://search.yahoo.com/mrss/category_schema';
1197                 }
1198                 if (isset($category['attribs']['']['label']))
1199                 {
1200                     $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1201                 }
1202                 $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1203             }
1204             foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
1205             {
1206                 $term = null;
1207                 $scheme = null;
1208                 $label = null;
1209                 if (isset($category['data']))
1210                 {
1211                     $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1212                 }
1213                 if (isset($category['attribs']['']['scheme']))
1214                 {
1215                     $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1216                 }
1217                 else
1218                 {
1219                     $scheme = 'http://search.yahoo.com/mrss/category_schema';
1220                 }
1221                 if (isset($category['attribs']['']['label']))
1222                 {
1223                     $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1224                 }
1225                 $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1226             }
1227             foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
1228             {
1229                 $term = null;
1230                 $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
1231                 $label = null;
1232                 if (isset($category['attribs']['']['text']))
1233                 {
1234                     $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
1235                 }
1236                 $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1237 
1238                 if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
1239                 {
1240                     foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
1241                     {
1242                         if (isset($subcategory['attribs']['']['text']))
1243                         {
1244                             $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
1245                         }
1246                         $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1247                     }
1248                 }
1249             }
1250             if (is_array($categories_parent))
1251             {
1252                 $categories_parent = array_values(array_unique($categories_parent));
1253             }
1254 
1255             // COPYRIGHT
1256             if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
1257             {
1258                 $copyright_url = null;
1259                 $copyright_label = null;
1260                 if (isset($copyright[0]['attribs']['']['url']))
1261                 {
1262                     $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1263                 }
1264                 if (isset($copyright[0]['data']))
1265                 {
1266                     $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1267                 }
1268                 $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1269             }
1270             elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
1271             {
1272                 $copyright_url = null;
1273                 $copyright_label = null;
1274                 if (isset($copyright[0]['attribs']['']['url']))
1275                 {
1276                     $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1277                 }
1278                 if (isset($copyright[0]['data']))
1279                 {
1280                     $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1281                 }
1282                 $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1283             }
1284 
1285             // CREDITS
1286             if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
1287             {
1288                 foreach ($credits as $credit)
1289                 {
1290                     $credit_role = null;
1291                     $credit_scheme = null;
1292                     $credit_name = null;
1293                     if (isset($credit['attribs']['']['role']))
1294                     {
1295                         $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
1296                     }
1297                     if (isset($credit['attribs']['']['scheme']))
1298                     {
1299                         $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1300                     }
1301                     else
1302                     {
1303                         $credit_scheme = 'urn:ebu';
1304                     }
1305                     if (isset($credit['data']))
1306                     {
1307                         $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1308                     }
1309                     $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
1310                 }
1311             }
1312             elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
1313             {
1314                 foreach ($credits as $credit)
1315                 {
1316                     $credit_role = null;
1317                     $credit_scheme = null;
1318                     $credit_name = null;
1319                     if (isset($credit['attribs']['']['role']))
1320                     {
1321                         $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
1322                     }
1323                     if (isset($credit['attribs']['']['scheme']))
1324                     {
1325                         $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1326                     }
1327                     else
1328                     {
1329                         $credit_scheme = 'urn:ebu';
1330                     }
1331                     if (isset($credit['data']))
1332                     {
1333                         $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1334                     }
1335                     $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
1336                 }
1337             }
1338             if (is_array($credits_parent))
1339             {
1340                 $credits_parent = array_values(array_unique($credits_parent));
1341             }
1342 
1343             // DESCRIPTION
1344             if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
1345             {
1346                 if (isset($description_parent[0]['data']))
1347                 {
1348                     $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1349                 }
1350             }
1351             elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
1352             {
1353                 if (isset($description_parent[0]['data']))
1354                 {
1355                     $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1356                 }
1357             }
1358 
1359             // DURATION
1360             if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
1361             {
1362                 $seconds = null;
1363                 $minutes = null;
1364                 $hours = null;
1365                 if (isset($duration_parent[0]['data']))
1366                 {
1367                     $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1368                     if (sizeof($temp) > 0)
1369                     {
1370                         $seconds = (int) array_pop($temp);
1371                     }
1372                     if (sizeof($temp) > 0)
1373                     {
1374                         $minutes = (int) array_pop($temp);
1375                         $seconds += $minutes * 60;
1376                     }
1377                     if (sizeof($temp) > 0)
1378                     {
1379                         $hours = (int) array_pop($temp);
1380                         $seconds += $hours * 3600;
1381                     }
1382                     unset($temp);
1383                     $duration_parent = $seconds;
1384                 }
1385             }
1386 
1387             // HASHES
1388             if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
1389             {
1390                 foreach ($hashes_iterator as $hash)
1391                 {
1392                     $value = null;
1393                     $algo = null;
1394                     if (isset($hash['data']))
1395                     {
1396                         $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1397                     }
1398                     if (isset($hash['attribs']['']['algo']))
1399                     {
1400                         $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
1401                     }
1402                     else
1403                     {
1404                         $algo = 'md5';
1405                     }
1406                     $hashes_parent[] = $algo.':'.$value;
1407                 }
1408             }
1409             elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
1410             {
1411                 foreach ($hashes_iterator as $hash)
1412                 {
1413                     $value = null;
1414                     $algo = null;
1415                     if (isset($hash['data']))
1416                     {
1417                         $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1418                     }
1419                     if (isset($hash['attribs']['']['algo']))
1420                     {
1421                         $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
1422                     }
1423                     else
1424                     {
1425                         $algo = 'md5';
1426                     }
1427                     $hashes_parent[] = $algo.':'.$value;
1428                 }
1429             }
1430             if (is_array($hashes_parent))
1431             {
1432                 $hashes_parent = array_values(array_unique($hashes_parent));
1433             }
1434 
1435             // KEYWORDS
1436             if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
1437             {
1438                 if (isset($keywords[0]['data']))
1439                 {
1440                     $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1441                     foreach ($temp as $word)
1442                     {
1443                         $keywords_parent[] = trim($word);
1444                     }
1445                 }
1446                 unset($temp);
1447             }
1448             elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
1449             {
1450                 if (isset($keywords[0]['data']))
1451                 {
1452                     $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1453                     foreach ($temp as $word)
1454                     {
1455                         $keywords_parent[] = trim($word);
1456                     }
1457                 }
1458                 unset($temp);
1459             }
1460             elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
1461             {
1462                 if (isset($keywords[0]['data']))
1463                 {
1464                     $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1465                     foreach ($temp as $word)
1466                     {
1467                         $keywords_parent[] = trim($word);
1468                     }
1469                 }
1470                 unset($temp);
1471             }
1472             elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
1473             {
1474                 if (isset($keywords[0]['data']))
1475                 {
1476                     $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1477                     foreach ($temp as $word)
1478                     {
1479                         $keywords_parent[] = trim($word);
1480                     }
1481                 }
1482                 unset($temp);
1483             }
1484             if (is_array($keywords_parent))
1485             {
1486                 $keywords_parent = array_values(array_unique($keywords_parent));
1487             }
1488 
1489             // PLAYER
1490             if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
1491             {
1492                 if (isset($player_parent[0]['attribs']['']['url']))
1493                 {
1494                     $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1495                 }
1496             }
1497             elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
1498             {
1499                 if (isset($player_parent[0]['attribs']['']['url']))
1500                 {
1501                     $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1502                 }
1503             }
1504 
1505             // RATINGS
1506             if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
1507             {
1508                 foreach ($ratings as $rating)
1509                 {
1510                     $rating_scheme = null;
1511                     $rating_value = null;
1512                     if (isset($rating['attribs']['']['scheme']))
1513                     {
1514                         $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1515                     }
1516                     else
1517                     {
1518                         $rating_scheme = 'urn:simple';
1519                     }
1520                     if (isset($rating['data']))
1521                     {
1522                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1523                     }
1524                     $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1525                 }
1526             }
1527             elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
1528             {
1529                 foreach ($ratings as $rating)
1530                 {
1531                     $rating_scheme = 'urn:itunes';
1532                     $rating_value = null;
1533                     if (isset($rating['data']))
1534                     {
1535                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1536                     }
1537                     $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1538                 }
1539             }
1540             elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
1541             {
1542                 foreach ($ratings as $rating)
1543                 {
1544                     $rating_scheme = null;
1545                     $rating_value = null;
1546                     if (isset($rating['attribs']['']['scheme']))
1547                     {
1548                         $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1549                     }
1550                     else
1551                     {
1552                         $rating_scheme = 'urn:simple';
1553                     }
1554                     if (isset($rating['data']))
1555                     {
1556                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1557                     }
1558                     $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1559                 }
1560             }
1561             elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
1562             {
1563                 foreach ($ratings as $rating)
1564                 {
1565                     $rating_scheme = 'urn:itunes';
1566                     $rating_value = null;
1567                     if (isset($rating['data']))
1568                     {
1569                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1570                     }
1571                     $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1572                 }
1573             }
1574             if (is_array($ratings_parent))
1575             {
1576                 $ratings_parent = array_values(array_unique($ratings_parent));
1577             }
1578 
1579             // RESTRICTIONS
1580             if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
1581             {
1582                 foreach ($restrictions as $restriction)
1583                 {
1584                     $restriction_relationship = null;
1585                     $restriction_type = null;
1586                     $restriction_value = null;
1587                     if (isset($restriction['attribs']['']['relationship']))
1588                     {
1589                         $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
1590                     }
1591                     if (isset($restriction['attribs']['']['type']))
1592                     {
1593                         $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1594                     }
1595                     if (isset($restriction['data']))
1596                     {
1597                         $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1598                     }
1599                     $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1600                 }
1601             }
1602             elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
1603             {
1604                 foreach ($restrictions as $restriction)
1605                 {
1606                     $restriction_relationship = 'allow';
1607                     $restriction_type = null;
1608                     $restriction_value = 'itunes';
1609                     if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
1610                     {
1611                         $restriction_relationship = 'deny';
1612                     }
1613                     $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1614                 }
1615             }
1616             elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
1617             {
1618                 foreach ($restrictions as $restriction)
1619                 {
1620                     $restriction_relationship = null;
1621                     $restriction_type = null;
1622                     $restriction_value = null;
1623                     if (isset($restriction['attribs']['']['relationship']))
1624                     {
1625                         $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
1626                     }
1627                     if (isset($restriction['attribs']['']['type']))
1628                     {
1629                         $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1630                     }
1631                     if (isset($restriction['data']))
1632                     {
1633                         $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1634                     }
1635                     $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1636                 }
1637             }
1638             elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
1639             {
1640                 foreach ($restrictions as $restriction)
1641                 {
1642                     $restriction_relationship = 'allow';
1643                     $restriction_type = null;
1644                     $restriction_value = 'itunes';
1645                     if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
1646                     {
1647                         $restriction_relationship = 'deny';
1648                     }
1649                     $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1650                 }
1651             }
1652             if (is_array($restrictions_parent))
1653             {
1654                 $restrictions_parent = array_values(array_unique($restrictions_parent));
1655             }
1656             else
1657             {
1658                 $restrictions_parent = array(new SimplePie_Restriction('allow', null, 'default'));
1659             }
1660 
1661             // THUMBNAILS
1662             if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
1663             {
1664                 foreach ($thumbnails as $thumbnail)
1665                 {
1666                     if (isset($thumbnail['attribs']['']['url']))
1667                     {
1668                         $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1669                     }
1670                 }
1671             }
1672             elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
1673             {
1674                 foreach ($thumbnails as $thumbnail)
1675                 {
1676                     if (isset($thumbnail['attribs']['']['url']))
1677                     {
1678                         $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1679                     }
1680                 }
1681             }
1682 
1683             // TITLES
1684             if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
1685             {
1686                 if (isset($title_parent[0]['data']))
1687                 {
1688                     $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1689                 }
1690             }
1691             elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
1692             {
1693                 if (isset($title_parent[0]['data']))
1694                 {
1695                     $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1696                 }
1697             }
1698 
1699             // Clear the memory
1700             unset($parent);
1701 
1702             // Attributes
1703             $bitrate = null;
1704             $channels = null;
1705             $duration = null;
1706             $expression = null;
1707             $framerate = null;
1708             $height = null;
1709             $javascript = null;
1710             $lang = null;
1711             $length = null;
1712             $medium = null;
1713             $samplingrate = null;
1714             $type = null;
1715             $url = null;
1716             $width = null;
1717 
1718             // Elements
1719             $captions = null;
1720             $categories = null;
1721             $copyrights = null;
1722             $credits = null;
1723             $description = null;
1724             $hashes = null;
1725             $keywords = null;
1726             $player = null;
1727             $ratings = null;
1728             $restrictions = null;
1729             $thumbnails = null;
1730             $title = null;
1731 
1732             // If we have media:group tags, loop through them.
1733             foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
1734             {
1735                 if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
1736                 {
1737                     // If we have media:content tags, loop through them.
1738                     foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
1739                     {
1740                         if (isset($content['attribs']['']['url']))
1741                         {
1742                             // Attributes
1743                             $bitrate = null;
1744                             $channels = null;
1745                             $duration = null;
1746                             $expression = null;
1747                             $framerate = null;
1748                             $height = null;
1749                             $javascript = null;
1750                             $lang = null;
1751                             $length = null;
1752                             $medium = null;
1753                             $samplingrate = null;
1754                             $type = null;
1755                             $url = null;
1756                             $width = null;
1757 
1758                             // Elements
1759                             $captions = null;
1760                             $categories = null;
1761                             $copyrights = null;
1762                             $credits = null;
1763                             $description = null;
1764                             $hashes = null;
1765                             $keywords = null;
1766                             $player = null;
1767                             $ratings = null;
1768                             $restrictions = null;
1769                             $thumbnails = null;
1770                             $title = null;
1771 
1772                             // Start checking the attributes of media:content
1773                             if (isset($content['attribs']['']['bitrate']))
1774                             {
1775                                 $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
1776                             }
1777                             if (isset($content['attribs']['']['channels']))
1778                             {
1779                                 $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
1780                             }
1781                             if (isset($content['attribs']['']['duration']))
1782                             {
1783                                 $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
1784                             }
1785                             else
1786                             {
1787                                 $duration = $duration_parent;
1788                             }
1789                             if (isset($content['attribs']['']['expression']))
1790                             {
1791                                 $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
1792                             }
1793                             if (isset($content['attribs']['']['framerate']))
1794                             {
1795                                 $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
1796                             }
1797                             if (isset($content['attribs']['']['height']))
1798                             {
1799                                 $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
1800                             }
1801                             if (isset($content['attribs']['']['lang']))
1802                             {
1803                                 $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1804                             }
1805                             if (isset($content['attribs']['']['fileSize']))
1806                             {
1807                                 $length = ceil($content['attribs']['']['fileSize']);
1808                             }
1809                             if (isset($content['attribs']['']['medium']))
1810                             {
1811                                 $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
1812                             }
1813                             if (isset($content['attribs']['']['samplingrate']))
1814                             {
1815                                 $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
1816                             }
1817                             if (isset($content['attribs']['']['type']))
1818                             {
1819                                 $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1820                             }
1821                             if (isset($content['attribs']['']['width']))
1822                             {
1823                                 $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
1824                             }
1825                             $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1826 
1827                             // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
1828 
1829                             // CAPTIONS
1830                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
1831                             {
1832                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
1833                                 {
1834                                     $caption_type = null;
1835                                     $caption_lang = null;
1836                                     $caption_startTime = null;
1837                                     $caption_endTime = null;
1838                                     $caption_text = null;
1839                                     if (isset($caption['attribs']['']['type']))
1840                                     {
1841                                         $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1842                                     }
1843                                     if (isset($caption['attribs']['']['lang']))
1844                                     {
1845                                         $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1846                                     }
1847                                     if (isset($caption['attribs']['']['start']))
1848                                     {
1849                                         $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1850                                     }
1851                                     if (isset($caption['attribs']['']['end']))
1852                                     {
1853                                         $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1854                                     }
1855                                     if (isset($caption['data']))
1856                                     {
1857                                         $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1858                                     }
1859                                     $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1860                                 }
1861                                 if (is_array($captions))
1862                                 {
1863                                     $captions = array_values(array_unique($captions));
1864                                 }
1865                             }
1866                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
1867                             {
1868                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
1869                                 {
1870                                     $caption_type = null;
1871                                     $caption_lang = null;
1872                                     $caption_startTime = null;
1873                                     $caption_endTime = null;
1874                                     $caption_text = null;
1875                                     if (isset($caption['attribs']['']['type']))
1876                                     {
1877                                         $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1878                                     }
1879                                     if (isset($caption['attribs']['']['lang']))
1880                                     {
1881                                         $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1882                                     }
1883                                     if (isset($caption['attribs']['']['start']))
1884                                     {
1885                                         $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1886                                     }
1887                                     if (isset($caption['attribs']['']['end']))
1888                                     {
1889                                         $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1890                                     }
1891                                     if (isset($caption['data']))
1892                                     {
1893                                         $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1894                                     }
1895                                     $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1896                                 }
1897                                 if (is_array($captions))
1898                                 {
1899                                     $captions = array_values(array_unique($captions));
1900                                 }
1901                             }
1902                             else
1903                             {
1904                                 $captions = $captions_parent;
1905                             }
1906 
1907                             // CATEGORIES
1908                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
1909                             {
1910                                 foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
1911                                 {
1912                                     $term = null;
1913                                     $scheme = null;
1914                                     $label = null;
1915                                     if (isset($category['data']))
1916                                     {
1917                                         $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1918                                     }
1919                                     if (isset($category['attribs']['']['scheme']))
1920                                     {
1921                                         $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1922                                     }
1923                                     else
1924                                     {
1925                                         $scheme = 'http://search.yahoo.com/mrss/category_schema';
1926                                     }
1927                                     if (isset($category['attribs']['']['label']))
1928                                     {
1929                                         $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1930                                     }
1931                                     $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
1932                                 }
1933                             }
1934                             if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
1935                             {
1936                                 foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
1937                                 {
1938                                     $term = null;
1939                                     $scheme = null;
1940                                     $label = null;
1941                                     if (isset($category['data']))
1942                                     {
1943                                         $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1944                                     }
1945                                     if (isset($category['attribs']['']['scheme']))
1946                                     {
1947                                         $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1948                                     }
1949                                     else
1950                                     {
1951                                         $scheme = 'http://search.yahoo.com/mrss/category_schema';
1952                                     }
1953                                     if (isset($category['attribs']['']['label']))
1954                                     {
1955                                         $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1956                                     }
1957                                     $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
1958                                 }
1959                             }
1960                             if (is_array($categories) && is_array($categories_parent))
1961                             {
1962                                 $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
1963                             }
1964                             elseif (is_array($categories))
1965                             {
1966                                 $categories = array_values(array_unique($categories));
1967                             }
1968                             elseif (is_array($categories_parent))
1969                             {
1970                                 $categories = array_values(array_unique($categories_parent));
1971                             }
1972 
1973                             // COPYRIGHTS
1974                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
1975                             {
1976                                 $copyright_url = null;
1977                                 $copyright_label = null;
1978                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
1979                                 {
1980                                     $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1981                                 }
1982                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
1983                                 {
1984                                     $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1985                                 }
1986                                 $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1987                             }
1988                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
1989                             {
1990                                 $copyright_url = null;
1991                                 $copyright_label = null;
1992                                 if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
1993                                 {
1994                                     $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1995                                 }
1996                                 if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
1997                                 {
1998                                     $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1999                                 }
2000                                 $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
2001                             }
2002                             else
2003                             {
2004                                 $copyrights = $copyrights_parent;
2005                             }
2006 
2007                             // CREDITS
2008                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2009                             {
2010                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2011                                 {
2012                                     $credit_role = null;
2013                                     $credit_scheme = null;
2014                                     $credit_name = null;
2015                                     if (isset($credit['attribs']['']['role']))
2016                                     {
2017                                         $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2018                                     }
2019                                     if (isset($credit['attribs']['']['scheme']))
2020                                     {
2021                                         $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2022                                     }
2023                                     else
2024                                     {
2025                                         $credit_scheme = 'urn:ebu';
2026                                     }
2027                                     if (isset($credit['data']))
2028                                     {
2029                                         $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2030                                     }
2031                                     $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2032                                 }
2033                                 if (is_array($credits))
2034                                 {
2035                                     $credits = array_values(array_unique($credits));
2036                                 }
2037                             }
2038                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2039                             {
2040                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2041                                 {
2042                                     $credit_role = null;
2043                                     $credit_scheme = null;
2044                                     $credit_name = null;
2045                                     if (isset($credit['attribs']['']['role']))
2046                                     {
2047                                         $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2048                                     }
2049                                     if (isset($credit['attribs']['']['scheme']))
2050                                     {
2051                                         $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2052                                     }
2053                                     else
2054                                     {
2055                                         $credit_scheme = 'urn:ebu';
2056                                     }
2057                                     if (isset($credit['data']))
2058                                     {
2059                                         $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2060                                     }
2061                                     $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2062                                 }
2063                                 if (is_array($credits))
2064                                 {
2065                                     $credits = array_values(array_unique($credits));
2066                                 }
2067                             }
2068                             else
2069                             {
2070                                 $credits = $credits_parent;
2071                             }
2072 
2073                             // DESCRIPTION
2074                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2075                             {
2076                                 $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2077                             }
2078                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2079                             {
2080                                 $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2081                             }
2082                             else
2083                             {
2084                                 $description = $description_parent;
2085                             }
2086 
2087                             // HASHES
2088                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2089                             {
2090                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2091                                 {
2092                                     $value = null;
2093                                     $algo = null;
2094                                     if (isset($hash['data']))
2095                                     {
2096                                         $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2097                                     }
2098                                     if (isset($hash['attribs']['']['algo']))
2099                                     {
2100                                         $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2101                                     }
2102                                     else
2103                                     {
2104                                         $algo = 'md5';
2105                                     }
2106                                     $hashes[] = $algo.':'.$value;
2107                                 }
2108                                 if (is_array($hashes))
2109                                 {
2110                                     $hashes = array_values(array_unique($hashes));
2111                                 }
2112                             }
2113                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2114                             {
2115                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2116                                 {
2117                                     $value = null;
2118                                     $algo = null;
2119                                     if (isset($hash['data']))
2120                                     {
2121                                         $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2122                                     }
2123                                     if (isset($hash['attribs']['']['algo']))
2124                                     {
2125                                         $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2126                                     }
2127                                     else
2128                                     {
2129                                         $algo = 'md5';
2130                                     }
2131                                     $hashes[] = $algo.':'.$value;
2132                                 }
2133                                 if (is_array($hashes))
2134                                 {
2135                                     $hashes = array_values(array_unique($hashes));
2136                                 }
2137                             }
2138                             else
2139                             {
2140                                 $hashes = $hashes_parent;
2141                             }
2142 
2143                             // KEYWORDS
2144                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2145                             {
2146                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2147                                 {
2148                                     $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2149                                     foreach ($temp as $word)
2150                                     {
2151                                         $keywords[] = trim($word);
2152                                     }
2153                                     unset($temp);
2154                                 }
2155                                 if (is_array($keywords))
2156                                 {
2157                                     $keywords = array_values(array_unique($keywords));
2158                                 }
2159                             }
2160                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2161                             {
2162                                 if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2163                                 {
2164                                     $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2165                                     foreach ($temp as $word)
2166                                     {
2167                                         $keywords[] = trim($word);
2168                                     }
2169                                     unset($temp);
2170                                 }
2171                                 if (is_array($keywords))
2172                                 {
2173                                     $keywords = array_values(array_unique($keywords));
2174                                 }
2175                             }
2176                             else
2177                             {
2178                                 $keywords = $keywords_parent;
2179                             }
2180 
2181                             // PLAYER
2182                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2183                             {
2184                                 $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2185                             }
2186                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2187                             {
2188                                 $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2189                             }
2190                             else
2191                             {
2192                                 $player = $player_parent;
2193                             }
2194 
2195                             // RATINGS
2196                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2197                             {
2198                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2199                                 {
2200                                     $rating_scheme = null;
2201                                     $rating_value = null;
2202                                     if (isset($rating['attribs']['']['scheme']))
2203                                     {
2204                                         $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2205                                     }
2206                                     else
2207                                     {
2208                                         $rating_scheme = 'urn:simple';
2209                                     }
2210                                     if (isset($rating['data']))
2211                                     {
2212                                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2213                                     }
2214                                     $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2215                                 }
2216                                 if (is_array($ratings))
2217                                 {
2218                                     $ratings = array_values(array_unique($ratings));
2219                                 }
2220                             }
2221                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2222                             {
2223                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2224                                 {
2225                                     $rating_scheme = null;
2226                                     $rating_value = null;
2227                                     if (isset($rating['attribs']['']['scheme']))
2228                                     {
2229                                         $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2230                                     }
2231                                     else
2232                                     {
2233                                         $rating_scheme = 'urn:simple';
2234                                     }
2235                                     if (isset($rating['data']))
2236                                     {
2237                                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2238                                     }
2239                                     $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2240                                 }
2241                                 if (is_array($ratings))
2242                                 {
2243                                     $ratings = array_values(array_unique($ratings));
2244                                 }
2245                             }
2246                             else
2247                             {
2248                                 $ratings = $ratings_parent;
2249                             }
2250 
2251                             // RESTRICTIONS
2252                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2253                             {
2254                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2255                                 {
2256                                     $restriction_relationship = null;
2257                                     $restriction_type = null;
2258                                     $restriction_value = null;
2259                                     if (isset($restriction['attribs']['']['relationship']))
2260                                     {
2261                                         $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2262                                     }
2263                                     if (isset($restriction['attribs']['']['type']))
2264                                     {
2265                                         $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2266                                     }
2267                                     if (isset($restriction['data']))
2268                                     {
2269                                         $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2270                                     }
2271                                     $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2272                                 }
2273                                 if (is_array($restrictions))
2274                                 {
2275                                     $restrictions = array_values(array_unique($restrictions));
2276                                 }
2277                             }
2278                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2279                             {
2280                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2281                                 {
2282                                     $restriction_relationship = null;
2283                                     $restriction_type = null;
2284                                     $restriction_value = null;
2285                                     if (isset($restriction['attribs']['']['relationship']))
2286                                     {
2287                                         $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2288                                     }
2289                                     if (isset($restriction['attribs']['']['type']))
2290                                     {
2291                                         $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2292                                     }
2293                                     if (isset($restriction['data']))
2294                                     {
2295                                         $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2296                                     }
2297                                     $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2298                                 }
2299                                 if (is_array($restrictions))
2300                                 {
2301                                     $restrictions = array_values(array_unique($restrictions));
2302                                 }
2303                             }
2304                             else
2305                             {
2306                                 $restrictions = $restrictions_parent;
2307                             }
2308 
2309                             // THUMBNAILS
2310                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2311                             {
2312                                 foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2313                                 {
2314                                     $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2315                                 }
2316                                 if (is_array($thumbnails))
2317                                 {
2318                                     $thumbnails = array_values(array_unique($thumbnails));
2319                                 }
2320                             }
2321                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2322                             {
2323                                 foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2324                                 {
2325                                     $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2326                                 }
2327                                 if (is_array($thumbnails))
2328                                 {
2329                                     $thumbnails = array_values(array_unique($thumbnails));
2330                                 }
2331                             }
2332                             else
2333                             {
2334                                 $thumbnails = $thumbnails_parent;
2335                             }
2336 
2337                             // TITLES
2338                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2339                             {
2340                                 $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2341                             }
2342                             elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2343                             {
2344                                 $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2345                             }
2346                             else
2347                             {
2348                                 $title = $title_parent;
2349                             }
2350 
2351                             $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width));
2352                         }
2353                     }
2354                 }
2355             }
2356 
2357             // If we have standalone media:content tags, loop through them.
2358             if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
2359             {
2360                 foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
2361                 {
2362                     if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2363                     {
2364                         // Attributes
2365                         $bitrate = null;
2366                         $channels = null;
2367                         $duration = null;
2368                         $expression = null;
2369                         $framerate = null;
2370                         $height = null;
2371                         $javascript = null;
2372                         $lang = null;
2373                         $length = null;
2374                         $medium = null;
2375                         $samplingrate = null;
2376                         $type = null;
2377                         $url = null;
2378                         $width = null;
2379 
2380                         // Elements
2381                         $captions = null;
2382                         $categories = null;
2383                         $copyrights = null;
2384                         $credits = null;
2385                         $description = null;
2386                         $hashes = null;
2387                         $keywords = null;
2388                         $player = null;
2389                         $ratings = null;
2390                         $restrictions = null;
2391                         $thumbnails = null;
2392                         $title = null;
2393 
2394                         // Start checking the attributes of media:content
2395                         if (isset($content['attribs']['']['bitrate']))
2396                         {
2397                             $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
2398                         }
2399                         if (isset($content['attribs']['']['channels']))
2400                         {
2401                             $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
2402                         }
2403                         if (isset($content['attribs']['']['duration']))
2404                         {
2405                             $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
2406                         }
2407                         else
2408                         {
2409                             $duration = $duration_parent;
2410                         }
2411                         if (isset($content['attribs']['']['expression']))
2412                         {
2413                             $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
2414                         }
2415                         if (isset($content['attribs']['']['framerate']))
2416                         {
2417                             $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
2418                         }
2419                         if (isset($content['attribs']['']['height']))
2420                         {
2421                             $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
2422                         }
2423                         if (isset($content['attribs']['']['lang']))
2424                         {
2425                             $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
2426                         }
2427                         if (isset($content['attribs']['']['fileSize']))
2428                         {
2429                             $length = ceil($content['attribs']['']['fileSize']);
2430                         }
2431                         if (isset($content['attribs']['']['medium']))
2432                         {
2433                             $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
2434                         }
2435                         if (isset($content['attribs']['']['samplingrate']))
2436                         {
2437                             $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
2438                         }
2439                         if (isset($content['attribs']['']['type']))
2440                         {
2441                             $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2442                         }
2443                         if (isset($content['attribs']['']['width']))
2444                         {
2445                             $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
2446                         }
2447                         if (isset($content['attribs']['']['url']))
2448                         {
2449                             $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2450                         }
2451                         // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
2452 
2453                         // CAPTIONS
2454                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
2455                         {
2456                             foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
2457                             {
2458                                 $caption_type = null;
2459                                 $caption_lang = null;
2460                                 $caption_startTime = null;
2461                                 $caption_endTime = null;
2462                                 $caption_text = null;
2463                                 if (isset($caption['attribs']['']['type']))
2464                                 {
2465                                     $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2466                                 }
2467                                 if (isset($caption['attribs']['']['lang']))
2468                                 {
2469                                     $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
2470                                 }
2471                                 if (isset($caption['attribs']['']['start']))
2472                                 {
2473                                     $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
2474                                 }
2475                                 if (isset($caption['attribs']['']['end']))
2476                                 {
2477                                     $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
2478                                 }
2479                                 if (isset($caption['data']))
2480                                 {
2481                                     $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2482                                 }
2483                                 $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
2484                             }
2485                             if (is_array($captions))
2486                             {
2487                                 $captions = array_values(array_unique($captions));
2488                             }
2489                         }
2490                         else
2491                         {
2492                             $captions = $captions_parent;
2493                         }
2494 
2495                         // CATEGORIES
2496                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
2497                         {
2498                             foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
2499                             {
2500                                 $term = null;
2501                                 $scheme = null;
2502                                 $label = null;
2503                                 if (isset($category['data']))
2504                                 {
2505                                     $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2506                                 }
2507                                 if (isset($category['attribs']['']['scheme']))
2508                                 {
2509                                     $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2510                                 }
2511                                 else
2512                                 {
2513                                     $scheme = 'http://search.yahoo.com/mrss/category_schema';
2514                                 }
2515                                 if (isset($category['attribs']['']['label']))
2516                                 {
2517                                     $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
2518                                 }
2519                                 $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
2520                             }
2521                         }
2522                         if (is_array($categories) && is_array($categories_parent))
2523                         {
2524                             $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
2525                         }
2526                         elseif (is_array($categories))
2527                         {
2528                             $categories = array_values(array_unique($categories));
2529                         }
2530                         elseif (is_array($categories_parent))
2531                         {
2532                             $categories = array_values(array_unique($categories_parent));
2533                         }
2534                         else
2535                         {
2536                             $categories = null;
2537                         }
2538 
2539                         // COPYRIGHTS
2540                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
2541                         {
2542                             $copyright_url = null;
2543                             $copyright_label = null;
2544                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
2545                             {
2546                                 $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
2547                             }
2548                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
2549                             {
2550                                 $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2551                             }
2552                             $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
2553                         }
2554                         else
2555                         {
2556                             $copyrights = $copyrights_parent;
2557                         }
2558 
2559                         // CREDITS
2560                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2561                         {
2562                             foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2563                             {
2564                                 $credit_role = null;
2565                                 $credit_scheme = null;
2566                                 $credit_name = null;
2567                                 if (isset($credit['attribs']['']['role']))
2568                                 {
2569                                     $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2570                                 }
2571                                 if (isset($credit['attribs']['']['scheme']))
2572                                 {
2573                                     $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2574                                 }
2575                                 else
2576                                 {
2577                                     $credit_scheme = 'urn:ebu';
2578                                 }
2579                                 if (isset($credit['data']))
2580                                 {
2581                                     $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2582                                 }
2583                                 $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2584                             }
2585                             if (is_array($credits))
2586                             {
2587                                 $credits = array_values(array_unique($credits));
2588                             }
2589                         }
2590                         else
2591                         {
2592                             $credits = $credits_parent;
2593                         }
2594 
2595                         // DESCRIPTION
2596                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2597                         {
2598                             $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2599                         }
2600                         else
2601                         {
2602                             $description = $description_parent;
2603                         }
2604 
2605                         // HASHES
2606                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2607                         {
2608                             foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2609                             {
2610                                 $value = null;
2611                                 $algo = null;
2612                                 if (isset($hash['data']))
2613                                 {
2614                                     $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2615                                 }
2616                                 if (isset($hash['attribs']['']['algo']))
2617                                 {
2618                                     $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2619                                 }
2620                                 else
2621                                 {
2622                                     $algo = 'md5';
2623                                 }
2624                                 $hashes[] = $algo.':'.$value;
2625                             }
2626                             if (is_array($hashes))
2627                             {
2628                                 $hashes = array_values(array_unique($hashes));
2629                             }
2630                         }
2631                         else
2632                         {
2633                             $hashes = $hashes_parent;
2634                         }
2635 
2636                         // KEYWORDS
2637                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2638                         {
2639                             if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2640                             {
2641                                 $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2642                                 foreach ($temp as $word)
2643                                 {
2644                                     $keywords[] = trim($word);
2645                                 }
2646                                 unset($temp);
2647                             }
2648                             if (is_array($keywords))
2649                             {
2650                                 $keywords = array_values(array_unique($keywords));
2651                             }
2652                         }
2653                         else
2654                         {
2655                             $keywords = $keywords_parent;
2656                         }
2657 
2658                         // PLAYER
2659                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2660                         {
2661                             $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2662                         }
2663                         else
2664                         {
2665                             $player = $player_parent;
2666                         }
2667 
2668                         // RATINGS
2669                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2670                         {
2671                             foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2672                             {
2673                                 $rating_scheme = null;
2674                                 $rating_value = null;
2675                                 if (isset($rating['attribs']['']['scheme']))
2676                                 {
2677                                     $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2678                                 }
2679                                 else
2680                                 {
2681                                     $rating_scheme = 'urn:simple';
2682                                 }
2683                                 if (isset($rating['data']))
2684                                 {
2685                                     $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2686                                 }
2687                                 $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2688                             }
2689                             if (is_array($ratings))
2690                             {
2691                                 $ratings = array_values(array_unique($ratings));
2692                             }
2693                         }
2694                         else
2695                         {
2696                             $ratings = $ratings_parent;
2697                         }
2698 
2699                         // RESTRICTIONS
2700                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2701                         {
2702                             foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2703                             {
2704                                 $restriction_relationship = null;
2705                                 $restriction_type = null;
2706                                 $restriction_value = null;
2707                                 if (isset($restriction['attribs']['']['relationship']))
2708                                 {
2709                                     $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2710                                 }
2711                                 if (isset($restriction['attribs']['']['type']))
2712                                 {
2713                                     $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2714                                 }
2715                                 if (isset($restriction['data']))
2716                                 {
2717                                     $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2718                                 }
2719                                 $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2720                             }
2721                             if (is_array($restrictions))
2722                             {
2723                                 $restrictions = array_values(array_unique($restrictions));
2724                             }
2725                         }
2726                         else
2727                         {
2728                             $restrictions = $restrictions_parent;
2729                         }
2730 
2731                         // THUMBNAILS
2732                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2733                         {
2734                             foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2735                             {
2736                                 $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2737                             }
2738                             if (is_array($thumbnails))
2739                             {
2740                                 $thumbnails = array_values(array_unique($thumbnails));
2741                             }
2742                         }
2743                         else
2744                         {
2745                             $thumbnails = $thumbnails_parent;
2746                         }
2747 
2748                         // TITLES
2749                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2750                         {
2751                             $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2752                         }
2753                         else
2754                         {
2755                             $title = $title_parent;
2756                         }
2757 
2758                         $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width));
2759                     }
2760                 }
2761             }
2762 
2763             foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
2764             {
2765                 if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
2766                 {
2767                     // Attributes
2768                     $bitrate = null;
2769                     $channels = null;
2770                     $duration = null;
2771                     $expression = null;
2772                     $framerate = null;
2773                     $height = null;
2774                     $javascript = null;
2775                     $lang = null;
2776                     $length = null;
2777                     $medium = null;
2778                     $samplingrate = null;
2779                     $type = null;
2780                     $url = null;
2781                     $width = null;
2782 
2783                     $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
2784                     if (isset($link['attribs']['']['type']))
2785                     {
2786                         $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2787                     }
2788                     if (isset($link['attribs']['']['length']))
2789                     {
2790                         $length = ceil($link['attribs']['']['length']);
2791                     }
2792 
2793                     // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2794                     $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2795                 }
2796             }
2797 
2798             foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
2799             {
2800                 if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
2801                 {
2802                     // Attributes
2803                     $bitrate = null;
2804                     $channels = null;
2805                     $duration = null;
2806                     $expression = null;
2807                     $framerate = null;
2808                     $height = null;
2809                     $javascript = null;
2810                     $lang = null;
2811                     $length = null;
2812                     $medium = null;
2813                     $samplingrate = null;
2814                     $type = null;
2815                     $url = null;
2816                     $width = null;
2817 
2818                     $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
2819                     if (isset($link['attribs']['']['type']))
2820                     {
2821                         $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2822                     }
2823                     if (isset($link['attribs']['']['length']))
2824                     {
2825                         $length = ceil($link['attribs']['']['length']);
2826                     }
2827 
2828                     // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2829                     $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2830                 }
2831             }
2832 
2833             if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure'))
2834             {
2835                 if (isset($enclosure[0]['attribs']['']['url']))
2836                 {
2837                     // Attributes
2838                     $bitrate = null;
2839                     $channels = null;
2840                     $duration = null;
2841                     $expression = null;
2842                     $framerate = null;
2843                     $height = null;
2844                     $javascript = null;
2845                     $lang = null;
2846                     $length = null;
2847                     $medium = null;
2848                     $samplingrate = null;
2849                     $type = null;
2850                     $url = null;
2851                     $width = null;
2852 
2853                     $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
2854                     if (isset($enclosure[0]['attribs']['']['type']))
2855                     {
2856                         $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2857                     }
2858                     if (isset($enclosure[0]['attribs']['']['length']))
2859                     {
2860                         $length = ceil($enclosure[0]['attribs']['']['length']);
2861                     }
2862 
2863                     // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2864                     $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2865                 }
2866             }
2867 
2868             if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width))
2869             {
2870                 // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2871                 $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2872             }
2873 
2874             $this->data['enclosures'] = array_values(array_unique($this->data['enclosures']));
2875         }
2876         if (!empty($this->data['enclosures']))
2877         {
2878             return $this->data['enclosures'];
2879         }
2880         else
2881         {
2882             return null;
2883         }
2884     }
2885 
2886     /**
2887      * Get the latitude coordinates for the item
2888      *
2889      * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
2890      *
2891      * Uses `<geo:lat>` or `<georss:point>`
2892      *
2893      * @since 1.0
2894      * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
2895      * @link http://www.georss.org/ GeoRSS
2896      * @return string|null
2897      */
2898     public function get_latitude()
2899     {
2900         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
2901         {
2902             return (float) $return[0]['data'];
2903         }
2904         elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
2905         {
2906             return (float) $match[1];
2907         }
2908         else
2909         {
2910             return null;
2911         }
2912     }
2913 
2914     /**
2915      * Get the longitude coordinates for the item
2916      *
2917      * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
2918      *
2919      * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
2920      *
2921      * @since 1.0
2922      * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
2923      * @link http://www.georss.org/ GeoRSS
2924      * @return string|null
2925      */
2926     public function get_longitude()
2927     {
2928         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
2929         {
2930             return (float) $return[0]['data'];
2931         }
2932         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
2933         {
2934             return (float) $return[0]['data'];
2935         }
2936         elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
2937         {
2938             return (float) $match[2];
2939         }
2940         else
2941         {
2942             return null;
2943         }
2944     }
2945 
2946     /**
2947      * Get the `<atom:source>` for the item
2948      *
2949      * @since 1.1
2950      * @return SimplePie_Source|null
2951      */
2952     public function get_source()
2953     {
2954         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source'))
2955         {
2956             return $this->registry->create('Source', array($this, $return[0]));
2957         }
2958         else
2959         {
2960             return null;
2961         }
2962     }
2963 }
2964 
2965 
Joomla! Framework TM API documentation generated by ApiGen 2.8.0
Joomla!® and Joomla! Framework™ are trademarks of Open Source Matters, Inc. in the United States and other countries.