Overview

Packages

  • admin
  • classes
    • media
  • CodeIgniter
    • Libraries
  • core
  • functions
  • JSMin
  • None
  • OpenID
  • PHP
  • PHPMailer
  • plugins
    • admin
    • development
    • feed
    • mail
    • media
    • misc
    • seo
    • spam
    • uploader
    • users
    • zenpage
    • zenphoto
      • news
  • Services
    • JSON

Classes

  • _zp_captcha
  • _zp_HTML_cache
  • admin_approval
  • Album
  • AlbumBase
  • AlbumZip
  • AMFReader
  • AMFStream
  • AnyFile
  • AnyFile_Options
  • Auth_OpenID
  • Auth_OpenID_AlreadySigned
  • Auth_OpenID_AssociateRequest
  • Auth_OpenID_Association
  • Auth_OpenID_AuthRequest
  • Auth_OpenID_AX
  • Auth_OpenID_AX_AttrInfo
  • Auth_OpenID_AX_Error
  • Auth_OpenID_AX_FetchRequest
  • Auth_OpenID_AX_FetchResponse
  • Auth_OpenID_AX_KeyValueMessage
  • Auth_OpenID_AX_Message
  • Auth_OpenID_AX_StoreRequest
  • Auth_OpenID_AX_StoreResponse
  • Auth_OpenID_BcMathWrapper
  • Auth_OpenID_CancelResponse
  • Auth_OpenID_CheckAuthRequest
  • Auth_OpenID_CheckIDRequest
  • Auth_OpenID_Consumer
  • Auth_OpenID_ConsumerResponse
  • Auth_OpenID_CryptUtil
  • Auth_OpenID_DatabaseConnection
  • Auth_OpenID_Decoder
  • Auth_OpenID_DiffieHellman
  • Auth_OpenID_DiffieHellmanSHA1ConsumerSession
  • Auth_OpenID_DiffieHellmanSHA1ServerSession
  • Auth_OpenID_DiffieHellmanSHA256ConsumerSession
  • Auth_OpenID_DiffieHellmanSHA256ServerSession
  • Auth_OpenID_DumbStore
  • Auth_OpenID_Encoder
  • Auth_OpenID_EncodingError
  • Auth_OpenID_Extension
  • Auth_OpenID_FailureResponse
  • Auth_OpenID_FileStore
  • Auth_OpenID_GenericConsumer
  • Auth_OpenID_GmpMathWrapper
  • Auth_OpenID_KVForm
  • Auth_OpenID_MalformedReturnURL
  • Auth_OpenID_MalformedTrustRoot
  • Auth_OpenID_Mapping
  • Auth_OpenID_MathLibrary
  • Auth_OpenID_MDB2Store
  • Auth_OpenID_MemcachedStore
  • Auth_OpenID_Message
  • Auth_OpenID_MySQLStore
  • Auth_OpenID_NamespaceMap
  • Auth_OpenID_NoReturnToError
  • Auth_OpenID_OpenIDStore
  • Auth_OpenID_PAPE_Request
  • Auth_OpenID_PAPE_Response
  • Auth_OpenID_Parse
  • Auth_OpenID_PlainTextConsumerSession
  • Auth_OpenID_PlainTextServerSession
  • Auth_OpenID_PostgreSQLStore
  • Auth_OpenID_Request
  • Auth_OpenID_Server
  • Auth_OpenID_ServerError
  • Auth_OpenID_ServerErrorContainer
  • Auth_OpenID_ServerRequest
  • Auth_OpenID_ServerResponse
  • Auth_OpenID_ServiceEndpoint
  • Auth_OpenID_ServiceEndpointLoader
  • Auth_OpenID_SessionNegotiator
  • Auth_OpenID_SetupNeededResponse
  • Auth_OpenID_Signatory
  • Auth_OpenID_SigningEncoder
  • Auth_OpenID_SQLiteStore
  • Auth_OpenID_SQLStore
  • Auth_OpenID_SRegBase
  • Auth_OpenID_SRegRequest
  • Auth_OpenID_SRegResponse
  • Auth_OpenID_SuccessResponse
  • Auth_OpenID_TrustRoot
  • Auth_OpenID_TypeURIMismatch
  • Auth_OpenID_UntrustedReturnURL
  • Auth_OpenID_WebResponse
  • Auth_Yadis_Discovery
  • Auth_Yadis_DiscoveryResult
  • Auth_Yadis_dom
  • Auth_Yadis_domxml
  • Auth_Yadis_HTTPFetcher
  • Auth_Yadis_HTTPResponse
  • Auth_Yadis_Manager
  • Auth_Yadis_ManagerLoader
  • Auth_Yadis_ParanoidHTTPFetcher
  • Auth_Yadis_ParseHTML
  • Auth_Yadis_PHPSession
  • Auth_Yadis_PlainHTTPFetcher
  • Auth_Yadis_ProxyResolver
  • Auth_Yadis_Service
  • Auth_Yadis_SessionLoader
  • Auth_Yadis_XMLParser
  • Auth_Yadis_XRDS
  • Auth_Yadis_Yadis
  • auto_backup
  • AVCSequenceParameterSetReader
  • bxslider
  • cacheManager
  • cacheManagerFeed
  • CI_jsmin
  • CI_load
  • cloneZenphoto
  • codeIgniter_kludge
  • colorbox
  • Comment
  • comment_form
  • contactformOptions
  • crop_image
  • cycle
  • defaultCodeblocks
  • deprecated_functions
  • DownloadList
  • dynamic_locale
  • dynamicAlbum
  • elFinder_options
  • email_new_user
  • exampleMacros
  • external_auth
  • ExternalFeed
  • externalFeed_options
  • favorites
  • favoritesOptions
  • federated_logon
  • feed
  • fieldExtender
  • flag_thumbnail
  • Gallery
  • galleryArticles
  • getID3
  • getid3_aac
  • getid3_apetag
  • getid3_flv
  • getid3_handler
  • getid3_id3v1
  • getid3_id3v2
  • getid3_lib
  • getid3_lyrics3
  • getid3_mp3
  • getid3_mpeg
  • getid3_quicktime
  • getid3_swf
  • GoogleMap
  • Googlemaps
  • googleVerifyOptions
  • hitcounter
  • HTML
  • htmlmetatags
  • http_auth
  • Image
  • image_effects
  • internal_deprecations
  • ipBlocker
  • jcarousel
  • jPlayer
  • jplayer_options
  • jquery_rating
  • JSMin
  • lib_GD_Options
  • lib_Imagick_Options
  • lib_NoGraphics
  • MediaObject
  • menu_manager
  • MergedRSS
  • MergedRSSOptions
  • mobile
  • Mobile_Detect
  • mobileTheme
  • multipleLayoutOptions
  • null_seo
  • OAuthConsumer
  • OAuthDataStore
  • OAuthRequest
  • OAuthServer
  • OAuthSignatureMethod
  • OAuthSignatureMethod_HMAC_SHA1
  • OAuthSignatureMethod_PLAINTEXT
  • OAuthSignatureMethod_RSA_SHA1
  • OAuthToken
  • OAuthUtil
  • pagedThumbsNav
  • pagedthumbsOptions
  • PclZip
  • PersistentObject
  • PHPMailer
  • PlainText
  • POP3
  • print_album_menu
  • pseudoPlayer
  • publishContent
  • quota_manager
  • reCaptcha
  • ReCaptchaResponse
  • register_user
  • rewriteRules
  • rewriteTokens
  • RSS
  • RSS_internal_deprecations
  • rss_options
  • search_statistics
  • SearchEngine
  • security_logger
  • seo_locale
  • Services_JSON
  • Services_JSON_Error
  • setupexternalFeed
  • setupRSS
  • show_not_loggedin
  • sitemap
  • slideshow
  • SMTP
  • static_html_cache
  • tagsuggest
  • TextObject
  • TextObject_internal_deprecations
  • TextObject_Options
  • ThemeObject
  • themeSwitcher
  • tinymce4Options
  • tinyURL
  • Transientimage
  • tweet
  • TwitterOAuth
  • UploadHandler
  • user_expiry
  • user_groups
  • user_logout_options
  • userAddressFields
  • utf8
  • Video
  • Video_internal_deprecations
  • VideoObject_Options
  • viewer_size_image_options
  • WEBdocs
  • WEBdocs_Options
  • xmpMetadata
  • Zenpage
  • Zenpage_internal_deprecations
  • ZenpageCategory
  • zenpagecms
  • ZenpageItems
  • ZenpageNews
  • ZenpagePage
  • ZenpageRoot
  • Zenphoto_Administrator
  • Zenphoto_Authority
  • zenphoto_org_news
  • zenphoto_seo
  • zenphotoDonate
  • ZipStream
  • zp_PHPMailer
  • zpCaptcha
  • zpFunctions
  • zpLegacySpam
  • zpMutex
  • zpSimpleSpam
  • zpTrivialSpam

Exceptions

  • BadFunctionCallException
  • BadMethodCallException
  • Exception
  • getid3_exception
  • JSMin_UnterminatedCommentException
  • JSMin_UnterminatedRegExpException
  • JSMin_UnterminatedStringException
  • LogicException
  • OAuthExcept
  • phpmailerException

Functions

  • __autoload
  • _escape_xref
  • _recaptcha_aes_encrypt
  • _recaptcha_aes_pad
  • _recaptcha_http_post
  • _recaptcha_mailhide_email_parts
  • _recaptcha_mailhide_urlbase64
  • _recaptcha_qsencode
  • accessAllAlbums
  • add_context
  • addalbumsToDatabase
  • addCategoriesToDatabase
  • addGeoCoord
  • addItem
  • addPagesToDatabase
  • addPluginScript
  • addPluginType
  • addSubalbumMenus
  • admin_album_list
  • admin_securityChecks
  • admin_showupdate
  • adminPageNav
  • adminToolbox
  • albumNumber
  • applyMacros
  • Auth_OpenID_arrangeByType
  • Auth_OpenID_AX_checkAlias
  • Auth_OpenID_AX_toTypeURIs
  • Auth_OpenID_bestMatchingService
  • Auth_OpenID_checkFieldName
  • Auth_OpenID_checkSessionType
  • Auth_OpenID_checkTimestamp
  • Auth_OpenID_detectMathLibrary
  • Auth_OpenID_discover
  • Auth_OpenID_discoverURI
  • Auth_OpenID_discoverWithoutYadis
  • Auth_OpenID_discoverWithYadis
  • Auth_OpenID_discoverXRI
  • Auth_OpenID_extractReturnURL
  • Auth_OpenID_findOPLocalIdentifier
  • Auth_OpenID_getAllAssociationTypes
  • Auth_OpenID_getAllowedReturnURLs
  • Auth_OpenID_getAuthorityPattern
  • Auth_OpenID_getAvailableSessionTypes
  • Auth_OpenID_getDefaultAssociationOrder
  • Auth_OpenID_getDefaultGen
  • Auth_OpenID_getDefaultMod
  • Auth_OpenID_getDefaultNegotiator
  • Auth_OpenID_getEncodedPattern
  • Auth_OpenID_getEncryptedNegotiator
  • Auth_OpenID_getEscapeRE
  • Auth_OpenID_getMathLib
  • Auth_OpenID_getOnlyEncryptedOrder
  • Auth_OpenID_getOpenIDConsumerTypeURIs
  • Auth_OpenID_getOpenIDTypeName
  • Auth_OpenID_getOpenIDTypeURIs
  • Auth_OpenID_getOPOrUserServices
  • Auth_OpenID_getSecretSize
  • Auth_OpenID_getSessionTypes
  • Auth_OpenID_getSupportedAssociationTypes
  • Auth_OpenID_getUnreserved
  • Auth_OpenID_getURIPattern
  • Auth_OpenID_getURLIllegalCharRE
  • Auth_OpenID_HMACSHA1
  • Auth_OpenID_HMACSHA256
  • Auth_OpenID_include_init
  • Auth_OpenID_isError
  • Auth_OpenID_isOpenID1
  • Auth_OpenID_legacy_discover
  • Auth_OpenID_makeOpenIDEndpoints
  • Auth_OpenID_math_extensions
  • Auth_OpenID_mkNonce
  • Auth_OpenID_noMathSupport
  • Auth_OpenID_pct_encoded_replace
  • Auth_OpenID_pct_encoded_replace_unreserved
  • Auth_OpenID_registerNamespaceAlias
  • Auth_OpenID_remove_dot_segments
  • Auth_OpenID_removeNamespaceAlias
  • Auth_OpenID_returnToMatches
  • Auth_OpenID_setNoMathSupport
  • Auth_OpenID_SHA1
  • Auth_OpenID_SHA256
  • Auth_OpenID_splitNonce
  • Auth_OpenID_supportsSReg
  • Auth_OpenID_urinorm
  • Auth_OpenID_verifyReturnTo
  • Auth_Yadis_array_scramble
  • Auth_Yadis_escapeForIRI
  • Auth_Yadis_getCanonicalID
  • Auth_Yadis_getDefaultProxy
  • Auth_Yadis_getEscapeRE
  • Auth_Yadis_getIPrivateChars
  • Auth_Yadis_getNSMap
  • Auth_Yadis_getServiceEndpoints
  • Auth_Yadis_getSupportedExtensions
  • Auth_Yadis_getUCSChars
  • Auth_Yadis_getXMLParser
  • Auth_Yadis_getXRDExpiration
  • Auth_Yadis_getXrefRE
  • Auth_Yadis_getXRIAuthorities
  • Auth_Yadis_identifierScheme
  • Auth_Yadis_iriToURI
  • Auth_Yadis_pct_escape_unicode
  • Auth_Yadis_providerIsAuthoritative
  • Auth_Yadis_rootAuthority
  • Auth_Yadis_setDefaultParser
  • Auth_Yadis_startswith
  • Auth_Yadis_toIRINormal
  • Auth_Yadis_toURINormal
  • Auth_Yadis_XRI
  • Auth_Yadis_XRIAppendArgs
  • authorSelector
  • build_query
  • build_url
  • bulkActionRedirect
  • bulkTags
  • byteConvert
  • cacheImage
  • checkAccess
  • checkAlbumimagesort
  • checkAlbumParentid
  • checkAlbumPassword
  • checkChosenItemStatus
  • checkChosenMenuset
  • checked
  • checkFolder
  • checkForEmptyTitle
  • checkForGuest
  • checkForPage
  • checkForPassword
  • checkForUpdate
  • checkHitcounterDisplay
  • checkIfChecked
  • checkIfLockedNews
  • checkIfLockedPage
  • checkIfNew
  • checkInstall
  • checkLayoutUseForImages
  • checkNewsAccess
  • checkNewsCategoryPassword
  • checkObjectsThumb
  • checkPagePassword
  • checkPageValidity
  • checkParentLayouts
  • checkPublishDates
  • checkRequiredField
  • checkSelectedAlbum
  • checkSignature
  • cleanAlbum
  • cleanHTML
  • clearSitemapCache
  • clonedFrom
  • codeblocktabsJS
  • comment_form_addComment
  • comment_form_handle_comment
  • comment_form_PaginationJS
  • comment_form_postcomment
  • comment_form_print10Most
  • comment_form_visualEditor
  • commentFormUseCaptcha
  • commentReply
  • commentsAllowed
  • consolidatedEditMessages
  • copyLayoutSelection
  • copyThemeDirectory
  • countArticles
  • countCombiNews
  • createMenuIfNotExists
  • createRelatedItemsResultArray
  • cron_starter
  • currentRelativeURL
  • customOptions
  • dateDiff
  • datepickerJS
  • dateTimeConvert
  • db_affected_rows
  • db_close
  • db_collation
  • db_connect
  • db_count
  • db_create
  • db_create_table
  • db_error
  • db_fetch_assoc
  • db_fetch_row
  • db_free_result
  • db_getSQLmode
  • db_insert_id
  • db_LIKE_escape
  • db_list_fields
  • db_name
  • db_num_rows
  • db_permissions
  • db_quote
  • db_setSQLmode
  • db_show
  • db_software
  • db_table_update
  • db_truncate_table
  • debug404
  • debugLog
  • debugLogBacktrace
  • debugLogVar
  • defaultCodeblocks_codebox
  • deleteArticle
  • deleteCategory
  • deleteItem
  • deleteLayoutSelection
  • deletePage
  • deleteThemeDirectory
  • detect_fetcher
  • detect_math
  • detect_query_corruption
  • detect_random
  • detect_stores
  • detect_xml
  • dircopy
  • displayError
  • doIncludes
  • elFinder_admin_tabs
  • elFinder_tinymce
  • enableExtension
  • escape
  • executeRSS
  • exitZP
  • exposeZenPhotoInformations
  • extensionEnabled
  • fetchComments
  • filesystemToInternal
  • filter_extractReturnURL
  • filter_MatchesAnyOpenIDConsumerType
  • filter_MatchesAnyOpenIDType
  • filterImageQuery
  • fix_path_redirect
  • formatList
  • fullText
  • galleryAlbumsPerPage
  • genAlbumList
  • generateCaptcha
  • generateLanguageList
  • generateListFromArray
  • generateListFromFiles
  • generateRadiobuttonsFromArray
  • generateSitemapCacheFile
  • generateSitemapIndexCacheFile
  • generateUnorderedListFromArray
  • get_AnyFile_suffixes
  • get_context
  • get_filterScript
  • get_instance
  • get_language_string
  • getAdminThumb
  • getAlbumArray
  • getAlbumBreadcrumb
  • getAlbumBreadcrumbAdmin
  • getAlbumCustomData
  • getAlbumData
  • getAlbumDate
  • getAlbumDesc
  • getAlbumFolder
  • getAlbumGeodata
  • getAlbumId
  • getAlbumInherited
  • getAlbumLinkURL
  • getAlbumLocation
  • getAlbumPage
  • getAlbumPlace
  • getAlbumStatistic
  • getAlbumThumb
  • getAlbumTitle
  • getAlbumURL
  • getAllAccessibleAlbums
  • getAllAlbums
  • getAllArticleDates
  • getAllCategories
  • getAllDates
  • getAllowedTags
  • getAllSubAlbumIDs
  • getAllSubalbums
  • getAllTagsCount
  • getAllTagsFromAlbum
  • getAllTagsFromAlbum_multi_unique
  • getAllTagsFromZenpage
  • getAllTagsUnique
  • getAllTranslations
  • getAnnotatedAlbumTitle
  • getAnnotatedImageTitle
  • getArticles
  • getAuthor
  • getBare
  • getBareAlbumDesc
  • getBareAlbumTitle
  • getBareGalleryDesc
  • getBareGalleryTitle
  • getBareImageDesc
  • getBareImageTitle
  • getBareNewsAlbumTitle
  • getBareNewsTitle
  • getBarePageTitle
  • getCategory
  • getCategoryID
  • getCategoryLink
  • getCategoryParentID
  • getCategorySortOrder
  • getCategoryTitle
  • getCheckboxState
  • getCodeblock
  • getCombiNews
  • getCommentAddress
  • getCommentAuthorEmail
  • getCommentAuthorLink
  • getCommentAuthorName
  • getCommentAuthorSite
  • getCommentBody
  • getCommentCount
  • getCommentDate
  • getCommentDateTime
  • getCommentErrors
  • getCommentsAllowed
  • getCommentStored
  • getCommentTime
  • getConsumer
  • getContentShorten
  • getCurrentMenuItem
  • getCurrentNewsArchive
  • getCurrentNewsCategory
  • getCurrentNewsCategoryID
  • getCurrentNewsCategoryParentID
  • getCurrentNewsPage
  • getCurrentPage
  • getCurrentTheme
  • getCustomAlbumThumb
  • getCustomAlbumThumbMaxSpace
  • getCustomImageURL
  • getCustomPageURL
  • getCustomSizedImageMaxSpace
  • getCustomSizedImageThumbMaxSpace
  • getDefaultHeight
  • getDefaultSizedImage
  • getDefaultWidth
  • getDownloadLink
  • getdownloadList
  • getDownloadURL
  • getE
  • getEnabledPlugins
  • getExpiryDatePost
  • getFavoritesURL
  • getField
  • getFirstImageURL
  • getFullHeight
  • getFullImageURL
  • getFullNewsImage
  • getFullWidth
  • getGalleryDesc
  • getGalleryIndexURL
  • getGalleryTitle
  • getGeoCoord
  • getHeadTitle
  • getHitcounter
  • getImageArgs
  • getImageCacheFilename
  • getImageCachePostfix
  • getImageCity
  • getImageCountry
  • getImageCustomData
  • getImageData
  • getImageDate
  • getImageDesc
  • getImageEXIFData
  • getImageGeodata
  • getImageID
  • getImageLinkURL
  • getImageLocation
  • getImageMetaData
  • getImageParameters
  • getImageProcessorURI
  • getImageProcessorURIFromCacheName
  • getImageRotation
  • getImageSortOrder
  • getImageState
  • getImageStatistic
  • getImageThumb
  • getImageTitle
  • getImageURI
  • getImageURL
  • getItem
  • getItemByID
  • getItemTitleAndURL
  • getjPlayerSkinCSS
  • getjPlayerSkins
  • getLanguageArray
  • getLanguageFlag
  • getLastImageURL
  • getLatestComments
  • getLatestNews
  • getLatestZenpageComments
  • getLayout
  • getLayoutSelector
  • getLink
  • getLinkHTML
  • getLogTabs
  • getMacros
  • getMainSiteName
  • getMainSiteURL
  • getManagedAlbumList
  • getMaxSpaceContainer
  • getMenuFromLink
  • getMenuItemChilds
  • getMenuItems
  • getMenumanagerPredicessor
  • getMenumanagerSuccessor
  • getMenuSetSelector
  • getMenuVisibility
  • getMimeString
  • getNestedAlbumList
  • getNewsAdminOption
  • getNewsAdminOptionPath
  • getNewsAlbumName
  • getNewsAlbumTitle
  • getNewsAlbumURL
  • getNewsArchivePath
  • getNewsArchiveURL
  • getNewsAuthor
  • getNewsCategories
  • getNewsCategoryCustomData
  • getNewsCategoryDesc
  • getNewsCategoryPath
  • getNewsCategoryURL
  • getNewsContent
  • getNewsContentShorten
  • getNewsCustomData
  • getNewsDate
  • getNewsExtraContent
  • getNewsID
  • getNewsImageTags
  • getNewsIndexURL
  • getNewsLink
  • getNewsPagesStatistic
  • getNewsPathNav
  • getNewsReadMore
  • getNewsTitle
  • getNewsTitleLink
  • getNewsTitlePath
  • getNewsType
  • getNewsURL
  • getNewsVideoContent
  • getNextAlbum
  • getNextAlbumURL
  • getNextImageThumb
  • getNextImageURL
  • getNextNewsPageURL
  • getNextNewsURL
  • getNextPageURL
  • getNextPrevNews
  • getNotViewableAlbums
  • getNotViewableImages
  • getNumAlbums
  • getNumAllSubalbums
  • getNumImages
  • getNumNews
  • getNumPages
  • getNumSubalbums
  • getOpenIDURL
  • getOption
  • getOptionFromDB
  • getOptionList
  • getPageAuthor
  • getPageContent
  • getPageCustomData
  • getPageDate
  • getPageExtraContent
  • getPageID
  • getPageLastChangeDate
  • getPageLinkPath
  • getPageLinkURL
  • getPageNavList
  • getPageNumURL
  • getPageParentID
  • getPageRedirect
  • getPages
  • getPageSelector
  • getPageSortorder
  • getPageTitle
  • getPageTitleLink
  • getPageURL
  • getParentAlbums
  • getParentAlbumsAdmin
  • getParentBreadcrumb
  • getParentItems
  • getParentMenuItems
  • getParentNewsCategories
  • getParentPages
  • getPasswordProtectImage
  • getPHPFiles
  • getPlugin
  • getPluginFiles
  • getPluginTabs
  • getPrevAlbum
  • getPrevAlbumURL
  • getPrevImageThumb
  • getPrevImageURL
  • getPrevNewsPageURL
  • getPrevNewsURL
  • getPrevPageURL
  • getProtectedImageURL
  • getRandomImages
  • getRandomImagesAlbum
  • getRating
  • getRelatedItems
  • getRequestURI
  • getReturnTo
  • getRSSHeaderLink
  • getRSSLink
  • getScheme
  • getSearchDate
  • getSearchURL
  • getSearchWords
  • getSelectedLayout
  • getSerializedArray
  • getSetClause
  • getSiteHomeURL
  • getSitemapAlbumList
  • getSitemapAlbums
  • getSitemapGoogleImageVideoExtras
  • getSitemapGoogleLoopIndex
  • getSitemapImages
  • getSitemapIndexLinks
  • getSitemapZenpageNewsArticles
  • getSitemapZenpageNewsCategories
  • getSitemapZenpageNewsIndex
  • getSitemapZenpagePages
  • getSizeCustomImage
  • getSizeDefaultImage
  • getSizeDefaultThumb
  • getSizedImageURL
  • getSizeFullImage
  • getStore
  • getSubCategories
  • getSubtabs
  • getSuffix
  • getTagCountByAccess
  • getTagOrder
  • getTags
  • gettext_pl
  • gettext_th
  • getTheme
  • getThemeFiles
  • getThemeOption
  • getTimezones
  • getTinyMCE4ConfigFiles
  • getTitle
  • getTotalArticles
  • getTotalImagesIn
  • getTotalNewsPages
  • getTotalPages
  • getTrustRoot
  • getUnprotectedImageURL
  • getUrAlbum
  • getURL
  • getUserIP
  • getUserLocale
  • getVersion
  • getViewerImageSize
  • getWatermarkParam
  • getWatermarkPath
  • getWatermarks
  • getWhereClause
  • getXSRFToken
  • getZenpageHitcounter
  • getZenpageRSSHeaderLink
  • getZenpageRSSLink
  • getZenpageStatistic
  • googleVerifyHead
  • handleSearchParms
  • hasDynamicAlbumSuffix
  • hasNextImage
  • hasNextPage
  • hasPrevImage
  • hasPrevPage
  • hitcounter
  • html_decode
  • html_encode
  • html_encodeTagged
  • httpsRedirect
  • httpUploadHandler
  • httpUploadHandler_admin_tabs
  • i18nSetLocale
  • imageBlurGD
  • imageDebug
  • imageError
  • imageNumber
  • imgSrcURI
  • in_context
  • inNewsCategory
  • inProtectedNewsCategory
  • installSignature
  • instrument
  • inSubNewsCategoryOf
  • internalToFilesystem
  • inventMenuItem
  • iptc_make_tag
  • is_AdminEditPage
  • is_connected
  • is_GalleryNewsType
  • is_News
  • is_NewsArchive
  • is_NewsArticle
  • is_NewsCategory
  • is_NewsPage
  • is_NewsType
  • is_Pages
  • is_valid_email_zp
  • is_valid_image
  • is_valid_other_type
  • is_zip
  • isAlbumClass
  • isAlbumPage
  • isArchive
  • isHandledAlbum
  • isImageClass
  • isImagePage
  • isImagePhoto
  • isImageVideo
  • isLandscape
  • isMyAlbum
  • isMyNews
  • isMyPage
  • isolate
  • isProtectedAlbum
  • isProtectedNewsCategory
  • isProtectedPage
  • isSubNewsCategoryOf
  • isValidURL
  • jQueryUpload_head
  • jQueryUpload_headers
  • jQueryUploadHandler
  • jQueryUploadHandler_admin_tabs
  • js_encode
  • json_decode
  • json_encode
  • kses
  • kses_array_lc
  • kses_attr
  • kses_bad_protocol
  • kses_bad_protocol_once
  • kses_bad_protocol_once2
  • kses_check_attr_val
  • kses_decode_entities
  • kses_hair
  • kses_hook
  • kses_html_error
  • kses_js_entities
  • kses_no_null
  • kses_normalize_entities
  • kses_normalize_entities2
  • kses_split
  • kses_split2
  • kses_stripslashes
  • kses_version
  • ksesProcess
  • layoutSelector
  • layoutSelector_album
  • listDBUses
  • listDirectoryFiles
  • listUses
  • load_zenpage_news
  • load_zenpage_pages
  • loadLocalOptions
  • log_message
  • lookupSortKey
  • macro_admin_tabs
  • macroList_show
  • makeAlbumCurrent
  • makeImageCurrent
  • makeSpecialImageName
  • markRelease_button
  • mb_strlen
  • mb_strpos
  • mb_strrpos
  • mb_strtolower
  • mb_strtoupper
  • mb_substr
  • mb_substr_count
  • menu_admin_toolbox_global
  • menu_tabs
  • minDiff
  • mkdir_recursive
  • my_truncate_string
  • myts_date
  • newAlbum
  • newImage
  • next_album
  • next_comment
  • next_image
  • next_news
  • next_page
  • ngettext_pl
  • ngettext_th
  • normalizeColumns
  • omsAdditions
  • openedForComments
  • parse_query
  • parse_size
  • parseAllowedTags
  • parseHttpAcceptLanguage
  • passAlbums
  • passImages
  • pathurlencode
  • PclZipUtilCopyBlock
  • PclZipUtilOptionText
  • PclZipUtilPathInclusion
  • PclZipUtilPathReduction
  • PclZipUtilRename
  • PclZipUtilTranslateWinPath
  • PHPMailerAutoload
  • populateManagedObjectsList
  • postAlbumSort
  • postIndexDecode
  • postIndexEncode
  • prefix
  • prepareAlbumPage
  • prepareCustomPage
  • prepareImagePage
  • prepareIndexPage
  • print404status
  • print_language_string_list
  • printAddToFavorites
  • printAdminFooter
  • printAdminHeader
  • printAdminRightsTable
  • printAdminToolbox
  • printAlbumBreadcrumb
  • printAlbumButtons
  • printAlbumCustomData
  • printAlbumData
  • printAlbumDate
  • printAlbumDesc
  • printAlbumEditForm
  • printAlbumEditRow
  • printAlbumLegend
  • printAlbumLink
  • printAlbumLocation
  • printAlbumMap
  • printAlbumMenu
  • printAlbumMenuJump
  • printAlbumMenuList
  • printAlbumMenuListAlbum
  • printAlbumPlace
  • printAlbumRating
  • printAlbumsSelector
  • printAlbumStatistic
  • printAlbumStatisticItem
  • printAlbumThumbImage
  • printAlbumTitle
  • printAlbumURL
  • printAlbumZip
  • printAllDates
  • printAllNewsCategories
  • printAllTags
  • printAllTagsAs
  • printAllTagsFromAlbum
  • printAllTagsFromZenpage
  • printAnnotatedAlbumTitle
  • printAnnotatedImageTitle
  • printArticleCategories
  • printArticleDatesDropdown
  • printArticlesPerPageDropdown
  • printBareAlbumDesc
  • printBareAlbumTitle
  • printBareGalleryDesc
  • printBareGalleryTitle
  • printBareImageDesc
  • printBareImageTitle
  • printBareNewsTitle
  • printBarePageTitle
  • printBulkActions
  • printCaptcha
  • printCategoriesStatistic
  • printCategoryCheckboxListEntry
  • printCategoryDropdown
  • printCategoryListSortableTable
  • printCategorySelection
  • printCodeblock
  • printCodeblockEdit
  • printCommentAuthorLink
  • printCommentErrors
  • printCommentForm
  • printContactForm
  • printCurrentNewsArchive
  • printCurrentNewsCategory
  • printCustomAlbumThumbImage
  • printCustomAlbumThumbMaxSpace
  • printCustomMenu
  • printCustomPageSelector
  • printCustomPageURL
  • printCustomSizedImage
  • printCustomSizedImageMaxHeight
  • printCustomSizedImageMaxSpace
  • printCustomSizedImageThumbMaxSpace
  • printDefaultSizedImage
  • printDownloadAlbumZipURL
  • printDownloadLink
  • printDownloadLinkAlbumZip
  • printdownloadList
  • printDownloadURL
  • printEditable
  • printEditCommentLink
  • printEditDropdown
  • printExpired
  • printFavoritesLink
  • printFavoritesURL
  • printField
  • printGalleryDesc
  • printGalleryIndexURL
  • printGalleryTitle
  • printGoogleMap
  • printHeadTitle
  • printHomeLink
  • printImageCustomData
  • printImageData
  • printImageDate
  • printImageDesc
  • printImageDiv
  • printImageEXIFData
  • printImageID
  • printImageLink
  • printImageMap
  • printImageMetadata
  • printImageRating
  • printImageSortOrder
  • printImageStatistic
  • printImageThumb
  • printImageTitle
  • printImageURL
  • printItemEditLink
  • printItemsList
  • printItemsListTable
  • printItemStatusDropdown
  • printjCarouselThumbNav
  • printjPlayerPlaylist
  • printLanguageSelector
  • printLatestAlbums
  • printLatestComments
  • printLatestImages
  • printLatestImagesByDate
  • printLatestImagesByMtime
  • printLatestNews
  • printLatestUpdatedAlbums
  • printLatestZenpageComments
  • printLink
  • printLinkHTML
  • printLogoAndLinks
  • printManagedObjects
  • printMenuemanagerPageList
  • printMenuemanagerPageListWithNav
  • printMenumanagerBreadcrumb
  • printMenumanagerNextLink
  • printMenumanagerPrevLink
  • printMostPopularItems
  • printMostRatedAlbums
  • printMostRatedImages
  • printMostRatedItems
  • printNestedAlbumsList
  • printNestedItemsList
  • printNestedMenu
  • printNews
  • printNewsArchive
  • printNewsAuthor
  • printNewsCategories
  • printNewsCategoryCustomData
  • printNewsCategoryDesc
  • printNewsCategoryURL
  • printNewsContent
  • printNewsCustomData
  • printNewsDate
  • printNewsExtraContent
  • printNewsImageTags
  • printNewsIndexURL
  • printNewsLink
  • printNewsPageList
  • printNewsPageListWithNav
  • printNewsReadMoreLink
  • printNewsStatistic
  • printNewsTitle
  • printNewsTitleLink
  • printNewsURL
  • printNextNewsLink
  • printNextNewsPageLink
  • printNextPageLink
  • printNextPageURL
  • printPageArticleTags
  • printPageAuthor
  • printPageContent
  • printPageCustomData
  • printPageDate
  • printPagedThumbsNav
  • printPageExtraContent
  • printPageID
  • printPageLastChangeDate
  • printPageLinkURL
  • printPageList
  • printPageListWithNav
  • printPageMenu
  • printPageNav
  • printPageSelector
  • printPagesListTable
  • printPagesStatistic
  • printPageTitle
  • printPageTitleLink
  • printPageURL
  • printParentBreadcrumb
  • printParentPagesBreadcrumb
  • printPasswordForm
  • printPopularAlbums
  • printPopularImages
  • printPreloadScript
  • printPrevNewsLink
  • printPrevNewsPageLink
  • printPrevPageLink
  • printPrevPageURL
  • printPublished
  • printPublishIconLink
  • printRandomImages
  • printRating
  • printRegisterURL
  • printRegistrationForm
  • printRelatedItems
  • printRSSHeaderLink
  • printRSSLink
  • printSearchBreadcrumb
  • printSearchForm
  • printSiteHomeURL
  • printSizedImageLink
  • printSizedImageURL
  • printSlideShow
  • printSlideShowJS
  • printSlideShowLink
  • printSortableHead
  • printSortOrderDropdown
  • printSubPagesExcerpts
  • printSubtabs
  • printTabs
  • printTags
  • printThumbNav
  • printTopRatedAlbums
  • printTopRatedImages
  • printTopRatedItems
  • printUnpublishedDropdown
  • printUserLogin_out
  • printUserSizeImage
  • printUserSizeSelector
  • printVersion
  • printZenJavascripts
  • printZenpageIconLegend
  • printZenpageItemsBreadcrumb
  • printZenpageNewsCategorySelector
  • printZenpagePagesSelector
  • printZenpageRSSHeaderLink
  • printZenpageRSSLink
  • printZenpageStatistic
  • printZenphotoLink
  • process_language_string_save
  • processAlbumBulkActions
  • processAlbumEdit
  • processCodeblockSave
  • processCommentBulkActions
  • processCredentials
  • processCustomOptionSave
  • processEditSelection
  • processExpired
  • processImageBulkActions
  • processImageEdit
  • processManagedObjects
  • processMenuBulkActions
  • processOrder
  • processRights
  • processTags
  • processZenpageBulkActions
  • propSizes
  • publishItem
  • purgeOption
  • query
  • query_full_array
  • query_single_row
  • rc4
  • read_exif_data_protected
  • readTags
  • recaptcha_check_answer
  • recaptcha_get_html
  • recaptcha_get_signup_url
  • recaptcha_mailhide_html
  • recaptcha_mailhide_url
  • reconfigureAction
  • reconfigureCS
  • reconfigurePage
  • recordMissing
  • rem_context
  • removeParentAlbumNames
  • resetCurrentAlbum
  • restore_context
  • reveal
  • rewrite_get_album_image
  • rewrite_path
  • rewrite_path_zenpage
  • RSS_Channel
  • RSS_Retrieve
  • RSS_Tags
  • rulesList
  • run
  • safe_fnmatch
  • safe_glob
  • sanitize
  • sanitize_numeric
  • sanitize_path
  • sanitize_script
  • sanitize_string
  • sanitizeRedirect
  • save_context
  • saveLayoutSelection
  • saveZenphotoLayoutSelection
  • search_quote
  • secureServer
  • seo_cleanup_button
  • seoFriendly
  • seoFriendlyJS
  • set_context
  • setAlbumCustomData
  • setAlbumSubtabs
  • setImageCustomData
  • setMainDomain
  • setOption
  • setOptionDefault
  • setPluginDomain
  • setThemeColumns
  • setThemeDomain
  • setThemeOption
  • setThemeOptionDefault
  • setupAllowedMaps
  • setupCurrentLocale
  • setupDomain
  • setupTheme
  • shortenContent
  • showOrNotShowField
  • shuffle_assoc
  • signatureChange
  • site_upgrade_button
  • site_upgrade_status
  • sitemap_echonl
  • sitemap_getChangefreq
  • sitemap_getDateformat
  • sitemap_getDBLimit
  • sitemap_getISO8601Date
  • skipScheduledPublishing
  • sortByKey
  • sortByMultilingual
  • sortMultiArray
  • standardScripts
  • standardThemeOptions
  • stickyNews
  • storeConfig
  • storeTags
  • stripSuffix
  • submenuOf
  • switchLog
  • tagSelector
  • tagSuggestJS
  • tagSuggestJS_admin
  • tagSuggestJS_frontend
  • themeIsEditable
  • themeSetup
  • timezoneDiff
  • tinymce4ConfigJS
  • truncate_string
  • unpublishedZenphotoItemCheck
  • unpublishSubalbums
  • unQuote
  • unzip
  • updateArticle
  • updateCacheName
  • updateCategory
  • updateConfigItem
  • updateItemSortorder
  • updateItemsSortorder
  • updateMenuItem
  • updatePage
  • upload_extra
  • upload_form
  • upload_head
  • user_mailing_list_button
  • validateLocale
  • wordpress_import_button
  • wp_prefix
  • wp_query_full_array
  • wpimport_TryAgainError
  • XSRFdefender
  • XSRFToken
  • zenJavascript
  • zenpageAlbumImage
  • zenpageBulkActionMessage
  • zenpageHitcounter
  • zenpageJSCSS
  • zenpageOpenedForComments
  • zenpagePublish
  • zenphoto_PHPMailer
  • zenphoto_sendmail
  • zenPhotoTheme
  • zp_apply_filter
  • zp_clearCookie
  • zp_colorAllocate
  • zp_cookieEncode
  • zp_copyCanvas
  • zp_createImage
  • zp_drawRectangle
  • zp_error
  • zp_filter_slot
  • zp_filter_unique_id
  • zp_getCookie
  • zp_getFonts
  • zp_graphicsLibInfo
  • zp_handle_password
  • zp_handle_password_single
  • zp_has_filter
  • zp_image_types
  • zp_imageCanRotate
  • zp_imageColorTransparent
  • zp_imageDims
  • zp_imageFill
  • zp_imageFontHeight
  • zp_imageFontWidth
  • zp_imageFromString
  • zp_imageGet
  • zp_imageGray
  • zp_imageHeight
  • zp_imageIPTC
  • zp_imageKill
  • zp_imageLoadFont
  • zp_imageMerge
  • zp_imageOutput
  • zp_imageResizeAlpha
  • zp_imageUnsharpMask
  • zp_imageWidth
  • zp_load_album
  • zp_load_gallery
  • zp_load_image
  • zp_load_page
  • zp_load_request
  • zp_load_search
  • zp_loggedin
  • zp_mail
  • zp_register_filter
  • zp_remove_filter
  • zp_resampleImage
  • zp_rotateImage
  • zp_session_start
  • zp_setCookie
  • zp_writeString
  • zpErrorHandler
  • zpFormattedDate
  • zpRewriteURL
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  1: <?php
  2: /**
  3:  * This plugin handles <i>RSS</i> feeds:
  4:  *
  5:  * @author Stephen Billard (sbillard)
  6:  * @package plugins
  7:  * @subpackage feed
  8:  */
  9: // force UTF-8 Ø
 10: 
 11: $plugin_is_filter = 900 | FEATURE_PLUGIN;
 12: $plugin_description = gettext('The Zenphoto <em>RSS</em> handler.');
 13: $plugin_notice = gettext('This plugin must be enabled to supply <em>RSS</em> feeds.') . '<br />' . gettext('<strong>Note:</strong> Theme support is required to display RSS links.');
 14: 
 15: $plugin_author = "Stephen Billard (sbillard)";
 16: 
 17: $option_interface = 'rss_options';
 18: 
 19: class rss_options {
 20: 
 21:     function __construct() {
 22:         global $plugin_is_filter;
 23:         if (OFFSET_PATH == 2) {
 24:             setOptionDefault('zp_plugin_rss', $plugin_is_filter);
 25: //  migrate old RSS options
 26:             setOptionDefault('RSS_items', getOption('feed_items')); // options for standard images rss
 27:             setOptionDefault('RSS_imagesize', getOption('feed_imagesize'));
 28:             setOptionDefault('RSS_sortorder', getOption('feed_sortorder'));
 29:             setOptionDefault('RSS_items_albums', getOption('feed_items_albums')); // options for albums rss
 30:             setOptionDefault('RSS_imagesize_albums', getOption('feed_imagesize_albums'));
 31:             setOptionDefault('RSS_sortorder_albums', getOption('feed_sortorder_albums'));
 32:             setOptionDefault('RSS_enclosure', getOption('feed_enclosure'));
 33:             setOptionDefault('RSS_mediarss', getOption('feed_mediarss'));
 34:             setOptionDefault('RSS_cache', getOption('feed_cache'));
 35:             setOptionDefault('RSS_cache_expire', getOption('feed_cache_expire'));
 36:             setOptionDefault('RSS_hitcounter', getOption('feed_hitcounter'));
 37:             setOptionDefault('RSS_title', getOption('feed_title'));
 38:             setOptionDefault('RSS_truncate_length', getOption('zenpage_rss_length'));
 39:             setOptionDefault('RSS_zenpage_items', getOption('zenpage_rss_items'));
 40: 
 41: 
 42:             purgeOption('feed_items');
 43:             purgeOption('feed_imagesize');
 44:             purgeOption('feed_sortorder');
 45:             purgeOption('feed_items_albums');
 46:             purgeOption('feed_imagesize_albums');
 47:             purgeOption('feed_sortorder_albums');
 48:             purgeOption('feed_enclosure');
 49:             purgeOption('feed_mediarss');
 50:             purgeOption('feed_cache');
 51:             purgeOption('feed_cache_expire');
 52:             purgeOption('feed_hitcounter');
 53:             purgeOption('feed_title');
 54:             purgeOption('zenpage_rss_length');
 55:             purgeOption('zenpage_rss_items');
 56: 
 57:             setOptionDefault('RSS_truncate_length', '100');
 58:             setOptionDefault('RSS_zenpage_items', '10');
 59:             setOptionDefault('RSS_items', 10); // options for standard images rss
 60:             setOptionDefault('RSS_imagesize', 240);
 61:             setOptionDefault('RSS_sortorder', 'latest');
 62:             setOptionDefault('RSS_items_albums', 10); // options for albums rss
 63:             setOptionDefault('RSS_imagesize_albums', 240);
 64:             setOptionDefault('RSS_sortorder_albums', 'latest');
 65:             setOptionDefault('RSS_enclosure', '0');
 66:             setOptionDefault('RSS_mediarss', '0');
 67:             setOptionDefault('RSS_cache', '1');
 68:             setOptionDefault('RSS_cache_expire', 86400);
 69:             setOptionDefault('RSS_hitcounter', 1);
 70:             setOptionDefault('RSS_title', 'both');
 71:         }
 72:     }
 73: 
 74:     function getOptionsSupported() {
 75:         $options = array(gettext('RSS feeds enabled:')           => array('key'              => 'RSS_feed_list', 'type'          => OPTION_TYPE_CHECKBOX_ARRAY,
 76:                                         'order'          => 0,
 77:                                         'checkboxes' => array(gettext('Gallery')                         => 'RSS_album_image',
 78:                                                         gettext('Gallery Comments')      => 'RSS_comments',
 79:                                                         gettext('All News')                      => 'RSS_articles',
 80:                                                         gettext('All Pages')                     => 'RSS_pages',
 81:                                                         gettext('News/Page Comments')    => 'RSS_article_comments'
 82:                                         ),
 83:                                         'desc'           => gettext('Check each RSS feed you wish to activate.')),
 84:                         gettext('Image feed items:')             => array('key'      => 'RSS_items', 'type'  => OPTION_TYPE_TEXTBOX,
 85:                                         'order'  => 1,
 86:                                         'desc'   => gettext("The number of new images and comments you want to appear in your site’s RSS feed")),
 87:                         gettext('Album feed items:')             => array('key'      => 'RSS_items_albums', 'type'   => OPTION_TYPE_TEXTBOX,
 88:                                         'order'  => 2,
 89:                                         'desc'   => gettext("The number of new images and comments you want to appear in your site’s RSS feed")),
 90:                         gettext('Image size')                            => array('key'      => 'RSS_imagesize', 'type'  => OPTION_TYPE_TEXTBOX,
 91:                                         'order'  => 3,
 92:                                         'desc'   => gettext('Size of RSS image feed images:')),
 93:                         gettext('Album image size')              => array('key'      => 'RSS_imagesize_albums', 'type'   => OPTION_TYPE_TEXTBOX,
 94:                                         'order'  => 4,
 95:                                         'desc'   => gettext('Size of RSS album feed images :')),
 96:                         gettext('Image feed sort order:')    => array('key'              => 'RSS_sortorder', 'type'          => OPTION_TYPE_SELECTOR,
 97:                                         'order'          => 6,
 98:                                         'selections' => array(gettext('latest by id')                    => 'latest',
 99:                                                         gettext('latest by date')                => 'latest-date',
100:                                                         gettext('latest by mtime')           => 'latest-mtime',
101:                                                         gettext('latest by publishdate') => 'latest-publishdate'
102:                                         ),
103:                                         'desc'           => gettext("Choose between latest by id for the latest uploaded, latest by date for the latest uploaded fetched by date, or latest by mtime for the latest uploaded fetched by the file’ last change timestamp.")),
104:                         gettext('Album feed sort order:')    => array('key'              => 'RSS_sortorder_albums', 'type'           => OPTION_TYPE_SELECTOR,
105:                                         'selections' => array(gettext('latest by id')                    => 'latest',
106:                                                         gettext('latest by date')                => 'latest-date',
107:                                                         gettext('latest by mtime')           => 'latest-mtime',
108:                                                         gettext('latest by publishdate') => 'latest-publishdate',
109:                                                         gettext('latest updated')                => 'latestupdated'
110:                                         ),
111:                                         'order'          => 7,
112:                                         'desc'           => gettext('Choose between latest by id for the latest uploaded and latest updated')),
113:                         gettext('RSS enclosure:')                    => array('key'      => 'RSS_enclosure', 'type'  => OPTION_TYPE_CHECKBOX,
114:                                         'order'  => 8,
115:                                         'desc'   => gettext('Check if you want to enable the RSS enclosure feature which provides a direct download for full images, movies etc. from within certain RSS reader clients (only Images RSS).')),
116:                         gettext('Media RSS:')                            => array('key'      => 'RSS_mediarss', 'type'   => OPTION_TYPE_CHECKBOX,
117:                                         'order'  => 9,
118:                                         'desc'   => gettext('Check if media RSS support is to be enabled. This support is used by some services and programs (only Images RSS).')),
119:                         gettext('Cache')                                     => array('key'      => 'RSS_cache', 'type'  => OPTION_TYPE_CHECKBOX,
120:                                         'order'  => 10,
121:                                         'desc'   => sprintf(gettext('Check if you want to enable static RSS feed caching. The cached file will be placed within the <em>%s</em> folder.'), STATIC_CACHE_FOLDER)),
122:                         gettext('Cache expiration')              => array('key'      => 'RSS_cache_expire', 'type'   => OPTION_TYPE_TEXTBOX,
123:                                         'order'  => 11,
124:                                         'desc'   => gettext('Cache expire default is 86400 seconds (1 day = 24 hrs * 60 min * 60 sec).')),
125:                         gettext('Hitcounter')                            => array('key'      => 'RSS_hitcounter', 'type'     => OPTION_TYPE_CHECKBOX,
126:                                         'order'  => 12,
127:                                         'desc'   => gettext('Check if you want to store the hitcount on RSS feeds.')),
128:                         gettext('Title')                                     => array('key'          => 'RSS_title', 'type'      => OPTION_TYPE_RADIO,
129:                                         'order'      => 13,
130:                                         'buttons'    => array(gettext('Gallery title') => 'gallery', gettext('Website title') => 'website', gettext('Both') => 'both'),
131:                                         'desc'       => gettext("Select what you want to use as the main RSS feed (channel) title. “Both” means Website title followed by Gallery title")),
132:                         gettext('Portable RSS link')             => array('key'      => 'RSS_portable_link', 'type'  => OPTION_TYPE_CHECKBOX,
133:                                         'order'  => 14,
134:                                         'desc'   => gettext('If checked links generated for logged‑in users will include a token identifying the user. Use of that link when not logged‑in will give the same feed as if the user were logged‑in.'))
135:         );
136:         if (extensionEnabled('zenpage')) {
137:             $options[gettext('Feed text length')] = array('key'      => 'RSS_truncate_length', 'type'    => OPTION_TYPE_TEXTBOX,
138:                             'order'  => 5.5,
139:                             'desc'   => gettext("The text length of the Zenpage RSS feed items. No value for full length."));
140:             $options[gettext('Zenpage feed items')] = array('key'        => 'RSS_zenpage_items', 'type'  => OPTION_TYPE_TEXTBOX,
141:                             'order'  => 5,
142:                             'desc'   => gettext("The number of news articles you want to appear in your site’s News RSS feed."));
143:         }
144:         return $options;
145:     }
146: 
147:     function handleOption($option, $currentValue) {
148: 
149:     }
150: 
151:     function handleOptionSave() {
152:         if (isset($_POST['saverssoptions'])) {
153:             setOption('RSS_items', sanitize($_POST['RSS_items'], 3));
154:             setOption('RSS_imagesize', sanitize($_POST['RSS_imagesize'], 3));
155:             setOption('RSS_sortorder', sanitize($_POST['RSS_sortorder'], 3));
156:             setOption('RSS_items_albums', sanitize($_POST['RSS_items_albums'], 3));
157:             setOption('RSS_imagesize_albums', sanitize($_POST['RSS_imagesize_albums'], 3));
158:             setOption('RSS_sortorder_albums', sanitize($_POST['RSS_sortorder_albums'], 3));
159:             setOption('RSS_title', sanitize($_POST['RSS_title'], 3));
160:             setOption('RSS_cache_expire', sanitize($_POST['RSS_cache_expire'], 3));
161:             setOption('RSS_enclosure', (int) isset($_POST['RSS_enclosure']));
162:             setOption('RSS_mediarss', (int) isset($_POST['RSS_mediarss']));
163:             setOption('RSS_cache', (int) isset($_POST['RSS_cache']));
164:             setOption('RSS_album_image', (int) isset($_POST['RSS_album_image']));
165:             setOption('RSS_comments', (int) isset($_POST['RSS_comments']));
166:             setOption('RSS_articles', (int) isset($_POST['RSS_articles']));
167:             setOption('RSS_pages', (int) isset($_POST['RSS_pages']));
168:             setOption('RSS_article_comments', (int) isset($_POST['RSS_article_comments']));
169:             setOption('RSS_hitcounter', (int) isset($_POST['RSS_hitcounter']));
170:             setOption('RSS_portable_link', (int) isset($_POST['RSS_portable_link']));
171:             $returntab = "&tab=rss";
172:         }
173:     }
174: 
175: }
176: 
177: /**
178:  * Prints a RSS link for if (class_exists('RSS')) printRSSLink() and if (class_exists('RSS')) printRSSHeaderLink()
179:  *
180:  * @param string $option type of RSS: "Gallery" feed for latest images of the whole gallery
181:  *                                                                      "Album" for latest images only of the album it is called from
182:  *                                                                      "Collection" for latest images of the album it is called from and all of its subalbums
183:  *                                                                      "Comments" for all comments of all albums and images
184:  *                                                                      "Comments-image" for latest comments of only the image it is called from
185:  *                                                                      "Comments-album" for latest comments of only the album it is called from
186:  *                                                                      "AlbumsRSS" for latest albums
187:  *                                                                      "AlbumsRSScollection" only for latest subalbums with the album it is called from
188:  *                                                          or
189:  *                                                                      "News" feed for all news articles
190:  *                                                                      "Category" for only the news articles of the category that is currently selected
191:  *                                                                      "NewsWithImages" for all news articles and latest images
192:  *                                                                      "Comments" for all news articles and pages
193:  *                                                                      "Comments-news" for comments of only the news article it is called from
194:  *                                                                      "Comments-page" for comments of only the page it is called from
195:  *                                                                      "Comments-all" for comments from all albums, images, news articels and pages
196:  *                                                                      "Pages" feed for all pages
197:  * @param string $lang optional to display a feed link for a specific language. Enter the locale like "de_DE" (the locale must be installed on your Zenphoto to work of course). If empty the locale set in the admin option or the language selector (getOption('locale') is used.
198:  * @param string $addl provided additional data for feeds (e.g. album object for album feeds, $categorylink for zenpage categories
199:  */
200: function getRSSLink($option, $lang = NULL, $addl = NULL) {
201:     global $_zp_current_album, $_zp_current_image, $_zp_current_admin_obj, $_zp_current_category;
202:     if (strtolower($option) == 'newswithimages') {
203:         RSS_internal_deprecations::getRSSLink($option);
204:     }
205:     if (empty($lang)) {
206:         $lang = zpFunctions::getLanguageText(getOption('locale'));
207:     }
208:     $link = NULL;
209:     switch (strtolower($option)) {
210:         case 'gallery':
211:             if (getOption('RSS_album_image')) {
212:                 $link = array('rss' => 'gallery');
213:             }
214:             break;
215:         case 'album':
216:             if (getOption('RSS_album_image')) {
217:                 if (is_object($addl)) {
218:                     $album = $addl;
219:                 } else {
220:                     $album = $_zp_current_album;
221:                 }
222:                 $link = array('rss' => 'gallery', 'albumname' => $album->getFileName());
223:                 break;
224:             }
225:         case 'collection':
226:             if (getOption('RSS_album_image')) {
227:                 if (is_object($addl)) {
228:                     $album = $addl;
229:                 } else {
230:                     $album = $_zp_current_album;
231:                 }
232:                 $link = array('rss' => 'gallery', 'folder' => $album->getFileName());
233:             }
234:             break;
235:         case 'comments':
236:             if (getOption('RSS_comments')) {
237:                 $link = array('rss' => 'comments', 'type' => 'gallery');
238:             }
239:             break;
240:         case 'comments-image':
241:             if (getOption('RSS_comments')) {
242:                 $link = array('rss' => 'comments', 'id' => (string) $_zp_current_image->getID(), 'type' => 'image');
243:             }
244:             break;
245:         case 'comments-album':
246:             if (getOption('RSS_comments')) {
247:                 $link = array('rss' => 'comments', 'id' => (string) $_zp_current_album->getID(), 'type' => 'album');
248:             }
249:             break;
250:         case 'albumsrss':
251:             if (getOption('RSS_album_image')) {
252:                 $link = array('rss' => 'gallery', 'albumsmode' => '');
253:             }
254:             break;
255:         case 'albumsrsscollection':
256:             if (getOption('RSS_album_image')) {
257:                 $link = array('rss' => 'gallery', 'folder' => $_zp_current_album->getFileName(), 'albumsmode' => '');
258:             }
259:             break;
260:         case 'pages':
261:             if (getOption('RSS_pages')) {
262:                 $link = array('rss' => 'pages');
263:             }
264:             break;
265:         case 'news':
266:             if (getOption('RSS_articles')) {
267:                 $link = array('rss' => 'news');
268:             }
269:             break;
270:         case 'category':
271:             if (getOption('RSS_articles')) {
272:                 if (empty($addl) && !is_null($_zp_current_category)) {
273:                     $addl = $_zp_current_category->getTitlelink();
274:                 }
275:                 if (empty($addl)) {
276:                     $link = array('rss' => 'news');
277:                 } else {
278:                     $link = array('rss' => 'news', 'category' => $addl);
279:                 }
280:             }
281:             break;
282:         case 'newswithimages':
283:             if (getOption('RSS_articles')) {
284:                 $link = array('rss' => 'news', 'withimages' => '');
285:             }
286:             break;
287:         case 'comments':
288:             if (getOption('RSS_article_comments')) {
289:                 $link = array('comments' => 1, 'type' => 'zenpage');
290:             }
291:             break;
292:         case 'comments-news':
293:             if (getOption('RSS_article_comments')) {
294:                 $link = array('rss' => 'comments', 'id' => (string) getNewsID(), 'type' => 'news');
295:             }
296:             break;
297:         case 'comments-page':
298:             if (getOption('RSS_article_comments')) {
299:                 $link = array('rss' => 'comments', 'id' => (string) getPageID(), 'type' => 'page');
300:             }
301:             break;
302:         case 'comments-all':
303:             if (getOption('RSS_article_comments')) {
304:                 $link = array('rss' => 'comments', 'type' => 'allcomments');
305:             }
306:             break;
307:     }
308:     if (is_array($link)) {
309:         $link['lang'] = $lang;
310:         if (zp_loggedin() && getOption('RSS_portable_link')) {
311:             $link['user'] = (string) $_zp_current_admin_obj->getID();
312:             $link['token'] = Zenphoto_Authority::passwordHash(serialize($link), '');
313:         }
314:         $uri = WEBPATH . '/index.php?' . str_replace('=&', '&', http_build_query($link));
315:         return $uri;
316:     }
317:     return NULL;
318: }
319: 
320: /**
321:  * Prints an RSS link
322:  *
323:  * @param string $option type of RSS: See getRSSLink for details
324:  * @param string $prev text to before before the link
325:  * @param string $linktext title of the link
326:  * @param string $next text to appear after the link
327:  * @param bool $printIcon print an RSS icon beside it? if true, the icon is zp-core/images/rss.png
328:  * @param string $class css class
329:  * @param string $lang optional to display a feed link for a specific language. Enter the locale like "de_DE" (the locale must be installed on your Zenphoto to work of course). If empty the locale set in the admin option or the language selector (getOption('locale') is used.
330:  * @param string $addl provided additional data for feeds (e.g. album object for album feeds, $categorylink for zenpage categories
331:  */
332: function printRSSLink($option, $prev, $linktext, $next, $printIcon = true, $class = null, $lang = '', $addl = NULL) {
333:     if ($printIcon) {
334:         $icon = ' <img src="' . FULLWEBPATH . '/' . ZENFOLDER . '/images/rss.png" alt="RSS Feed" />';
335:     } else {
336:         $icon = '';
337:     }
338:     if (!is_null($class)) {
339:         $class = 'class="' . $class . '"';
340:     }
341:     if (empty($lang)) {
342:         $lang = zpFunctions::getLanguageText(getOption("locale"));
343:     }
344:     echo $prev . "<a $class href=\"" . html_encode(getRSSLink($option, $lang, $addl)) . "\" title=\"" . html_encode($linktext) . "\" rel=\"nofollow\">" . $linktext . "$icon</a>" . $next;
345: }
346: 
347: /**
348:  * Prints the RSS link for use in the HTML HEAD
349:  *
350:  * @param string $option type of RSS: "Gallery" feed for latest images of the whole gallery
351:  *                                                                      "Album" for latest images only of the album it is called from
352:  *                                                                      "Collection" for latest images of the album it is called from and all of its subalbums
353:  *                                                                      "Comments" for all comments of all albums and images
354:  *                                                                      "Comments-image" for latest comments of only the image it is called from
355:  *                                                                      "Comments-album" for latest comments of only the album it is called from
356:  *                                                                      "AlbumsRSS" for latest albums
357:  *                                                                      "AlbumsRSScollection" only for latest subalbums with the album it is called from
358:  * @param string $linktext title of the link
359:  * @param string $lang optional to display a feed link for a specific language. Enter the locale like "de_DE" (the locale must be installed on your Zenphoto to work of course). If empty the locale set in the admin option or the language selector (getOption('locale') is used.
360:  * @param string $addl provided additional data for feeds (e.g. album object for album feeds, $categorylink for zenpage categories
361:  *
362:  */
363: function printRSSHeaderLink($option, $linktext, $lang = '', $addl = NULL) {
364:     echo "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"" . html_encode(getBare($linktext)) . "\" href=\"" .
365:     PROTOCOL . '://' . html_encode($_SERVER["HTTP_HOST"]) . html_encode(getRSSLink($option, $lang, $addl)) . "\" />\n";
366: }
367: 
368: require_once(SERVERPATH . '/' . ZENFOLDER . '/class-feed.php');
369: require_once(SERVERPATH . '/' . ZENFOLDER . '/lib-MimeTypes.php');
370: 
371: class RSS extends feed {
372: 
373:     protected $feed = 'RSS';
374: 
375:     /**
376:      * Creates a feed object from the URL parameters fetched only
377:      *
378:      */
379:     function __construct($options = NULL) {
380:         global $_zp_gallery, $_zp_current_admin_obj, $_zp_loggedin;
381:         if (empty($options))
382:             self::feed404();
383: 
384:         $this->feedtype = $options['rss'];
385:         parent::__construct($options);
386: 
387:         if (isset($options['token'])) {
388: //  The link camed from a logged in user, see if it is valid
389:             $link = $options;
390:             unset($link['token']);
391:             $token = Zenphoto_Authority::passwordHash(serialize($link), '');
392:             if ($token == $options['token']) {
393:                 $adminobj = Zenphoto_Authority::getAnAdmin(array('`id`=' => (int) $link['user']));
394:                 if ($adminobj) {
395:                     $_zp_current_admin_obj = $adminobj;
396:                     $_zp_loggedin = $_zp_current_admin_obj->getRights();
397:                 }
398:             }
399:         }
400: // general feed setup
401:         $channeltitlemode = getOption('RSS_title');
402:         $this->host = html_encode($_SERVER["HTTP_HOST"]);
403: 
404: //channeltitle general
405:         switch ($channeltitlemode) {
406:             case 'gallery':
407:                 $this->channel_title = $_zp_gallery->getBareTitle($this->locale);
408:                 break;
409:             case 'website':
410:                 $this->channel_title = getBare($_zp_gallery->getWebsiteTitle($this->locale));
411:                 break;
412:             case 'both':
413:                 $website_title = $_zp_gallery->getWebsiteTitle($this->locale);
414:                 $this->channel_title = $_zp_gallery->getBareTitle($this->locale);
415:                 if (!empty($website_title)) {
416:                     $this->channel_title = $website_title . ' - ' . $this->channel_title;
417:                 }
418:                 break;
419:         }
420: 
421: // individual feedtype setup
422:         switch ($this->feedtype) {
423: 
424:             case 'gallery':
425:                 if (!getOption('RSS_album_image')) {
426:                     self::feed404();
427:                 }
428:                 $albumname = $this->getChannelTitleExtra();
429:                 if ($this->albumfolder) {
430:                     $alb = newAlbum($this->albumfolder, true, true);
431:                     if ($alb->exists) {
432:                         $albumtitle = $alb->getTitle();
433:                         if ($this->mode == 'albums' || $this->collection) {
434:                             $albumname = ' - ' . html_encode($albumtitle) . $this->getChannelTitleExtra();
435:                         }
436:                     } else {
437:                         self::feed404();
438:                     }
439:                 } else {
440:                     $albumtitle = '';
441:                 }
442:                 $albumname = $this->getChannelTitleExtra();
443: 
444:                 $this->channel_title = html_encode($this->channel_title . ' ' . getBare($albumname));
445:                 $this->imagesize = $this->getImageSize();
446:                 require_once(SERVERPATH . '/' . ZENFOLDER . '/' . PLUGIN_FOLDER . '/image_album_statistics.php');
447:                 break;
448: 
449:             case 'news': //Zenpage News RSS
450:                 if (!getOption('RSS_articles')) {
451:                     self::feed404();
452:                 }
453:                 $titleappendix = gettext(' (Latest news)');
454: 
455:                 switch ($this->newsoption) {
456:                     case 'withalbums':
457:                     case 'withalbums_mtime':
458:                     case 'withalbums_publishdate':
459:                     case 'withalbums_latestupdated':
460:                         $titleappendix = gettext(' (Latest news and albums)');
461:                         break;
462:                     case 'withimages':
463:                     case 'withimages_mtime':
464:                     case 'withimages_publishdate':
465:                         $titleappendix = gettext(' (Latest news and images)');
466:                         break;
467:                     default:
468:                         switch ($this->sortorder) {
469:                             case 'popular':
470:                                 $titleappendix = gettext(' (Most popular news)');
471:                                 break;
472:                             case 'mostrated':
473:                                 $titleappendix = gettext(' (Most rated news)');
474:                                 break;
475:                             case 'toprated':
476:                                 $titleappendix = gettext(' (Top rated news)');
477:                                 break;
478:                             case 'random':
479:                                 $titleappendix = gettext(' (Random news)');
480:                                 break;
481:                         }
482:                         break;
483:                 }
484:                 $this->channel_title = html_encode($this->channel_title . $this->cattitle . $titleappendix);
485:                 $this->imagesize = $this->getImageSize();
486:                 $this->itemnumber = getOption("RSS_zenpage_items"); // # of Items displayed on the feed
487:                 require_once(SERVERPATH . '/' . ZENFOLDER . '/' . PLUGIN_FOLDER . '/image_album_statistics.php');
488:                 require_once(SERVERPATH . '/' . ZENFOLDER . '/' . PLUGIN_FOLDER . '/zenpage/zenpage-template-functions.php');
489: 
490:                 break;
491:             case 'pages': //Zenpage News RSS
492:                 if (!getOption('RSS_pages')) {
493:                     self::feed404();
494:                 }
495:                 switch ($this->sortorder) {
496:                     case 'popular':
497:                         $titleappendix = gettext(' (Most popular pages)');
498:                         break;
499:                     case 'mostrated':
500:                         $titleappendix = gettext(' (Most rated pages)');
501:                         break;
502:                     case 'toprated':
503:                         $titleappendix = gettext(' (Top rated pages)');
504:                         break;
505:                     case 'random':
506:                         $titleappendix = gettext(' (Random pages)');
507:                         break;
508:                     default:
509:                         $titleappendix = gettext(' (Latest pages)');
510:                         break;
511:                 }
512:                 $this->channel_title = html_encode($this->channel_title . $titleappendix);
513:                 require_once(SERVERPATH . '/' . ZENFOLDER . '/' . PLUGIN_FOLDER . '/zenpage/zenpage-template-functions.php');
514:                 break;
515: 
516:             case 'comments': //Comments RSS
517:                 if (!getOption('RSS_comments')) {
518:                     self::feed404();
519:                 }
520:                 if ($this->id) {
521:                     switch ($this->commentfeedtype) {
522:                         case 'album':
523:                             $table = 'albums';
524:                             break;
525:                         case 'image':
526:                             $table = 'images';
527:                             break;
528:                         case 'news':
529:                             $table = 'news';
530:                             break;
531:                         case 'page':
532:                             $table = 'pages';
533:                             break;
534:                         default:
535:                             self::feed404();
536:                             break;
537:                     }
538:                     $this->itemobj = getItemByID($table, $this->id);
539:                     if ($this->itemobj) {
540:                         $title = ' - ' . $this->itemobj->getTitle();
541:                     } else {
542:                         self::feed404();
543:                     }
544:                 } else {
545:                     $this->itemobj = NULL;
546:                     $title = NULL;
547:                 }
548:                 $this->channel_title = html_encode($this->channel_title . $title . gettext(' (latest comments)'));
549:                 if (extensionEnabled('zenpage')) {
550:                     require_once(SERVERPATH . '/' . ZENFOLDER . '/' . PLUGIN_FOLDER . '/zenpage/zenpage-template-functions.php');
551:                 }
552:                 break;
553:             case 'null': //we just want the class instantiated
554:                 return;
555:         }
556:         $this->feeditems = $this->getitems();
557:     }
558: 
559:     /**
560:      * Updates the hitcoutner for RSS in the plugin_storage db table.
561:      *
562:      */
563:     protected function hitcounter() {
564:         if (!zp_loggedin() && getOption('RSS_hitcounter')) {
565:             $rssuri = $this->getCacheFilename();
566:             $type = 'rsshitcounter';
567:             $checkitem = query_single_row("SELECT `data` FROM " . prefix('plugin_storage') . " WHERE `aux` = " . db_quote($rssuri) . " AND `type` = '" . $type . "'", true);
568:             if ($checkitem) {
569:                 $hitcount = $checkitem['data'] + 1;
570:                 query("UPDATE " . prefix('plugin_storage') . " SET `data` = " . $hitcount . " WHERE `aux` = " . db_quote($rssuri) . " AND `type` = '" . $type . "'", true);
571:             } else {
572:                 query("INSERT INTO " . prefix('plugin_storage') . " (`type`,`aux`,`data`) VALUES ('" . $type . "'," . db_quote($rssuri) . ",1)", true);
573:             }
574:         }
575:     }
576: 
577:     /**
578:      * Gets the feed item data in a gallery feed
579:      *
580:      * @param object $item Object of an image or album
581:      * @return array
582:      */
583:     protected function getItemGallery($item) {
584:         if ($this->mode == "albums") {
585:             $albumobj = $item;
586:             $totalimages = $albumobj->getNumImages();
587:             $itemlink = $this->host . $albumobj->getLink();
588:             $thumb = $albumobj->getAlbumThumbImage();
589:             $thumburl = '<img border="0" src="' . PROTOCOL . '://' . $this->host . html_encode(pathurlencode($thumb->getCustomImage($this->imagesize, NULL, NULL, NULL, NULL, NULL, NULL, TRUE))) . '" alt="' . html_encode($albumobj->getTitle($this->locale)) . '" />';
590:             $title = $albumobj->getTitle($this->locale);
591:             if (true || $this->sortorder == "latestupdated") {
592:                 $filechangedate = filectime(ALBUM_FOLDER_SERVERPATH . internalToFilesystem($albumobj->name));
593:                 $latestimage = query_single_row("SELECT mtime FROM " . prefix('images') . " WHERE albumid = " . $albumobj->getID() . " AND `show` = 1 ORDER BY id DESC");
594:                 if ($latestimage && $this->sortorder == 'latestupdated') {
595:                     $count = db_count('images', "WHERE albumid = " . $albumobj->getID() . " AND mtime = " . $latestimage['mtime']);
596:                 } else {
597:                     $count = $totalimages;
598:                 }
599:                 if ($count != 0) {
600:                     $imagenumber = sprintf(ngettext('%s (%u image)', '%s (%u images)', $count), $title, $count);
601:                 } else {
602:                     $imagenumber = $title;
603:                 }
604:                 $feeditem['desc'] = '<a title="' . $title . '" href="' . PROTOCOL . '://' . $itemlink . '">' . $thumburl . '</a>' .
605:                                 '<p>' . html_encode($imagenumber) . '</p>' . $albumobj->getDesc($this->locale) . '<br />' . sprintf(gettext("Last update: %s"), zpFormattedDate(DATE_FORMAT, $filechangedate));
606:             } else {
607:                 if ($totalimages != 0) {
608:                     $imagenumber = sprintf(ngettext('%s (%u image)', '%s (%u images)', $totalimages), $title, $totalimages);
609:                 }
610:                 $feeditem['desc'] = '<a title="' . html_encode($title) . '" href="' . PROTOCOL . '://' . $itemlink . '">' . $thumburl . '</a>' . $item->getDesc($this->locale) . '<br />' . sprintf(gettext("Date: %s"), zpFormattedDate(DATE_FORMAT, $item->get('mtime')));
611:             }
612:             $ext = getSuffix($thumb->localpath);
613:         } else {
614:             $ext = getSuffix($item->localpath);
615:             $albumobj = $item->getAlbum();
616:             $itemlink = $this->host . $item->getLink();
617:             $fullimagelink = $this->host . html_encode(pathurlencode($item->getFullImageURL()));
618:             $thumburl = '<img border="0" src="' . PROTOCOL . '://' . $this->host . html_encode(pathurlencode($item->getCustomImage($this->imagesize, NULL, NULL, NULL, NULL, NULL, NULL, TRUE))) . '" alt="' . $item->getTitle($this->locale) . '" /><br />';
619:             $title = $item->getTitle($this->locale);
620:             $albumtitle = $albumobj->getTitle($this->locale);
621:             $datecontent = '<br />Date: ' . zpFormattedDate(DATE_FORMAT, $item->get('mtime'));
622:             if ((($ext == "flv") || ($ext == "mp3") || ($ext == "mp4") || ($ext == "3gp") || ($ext == "mov")) AND $this->mode != "album") {
623:                 $feeditem['desc'] = '<a title="' . html_encode($title) . ' in ' . html_encode($albumobj->getTitle($this->locale)) . '" href="' . PROTOCOL . '://' . $itemlink . '">' . $thumburl . '</a>' . $item->getDesc($this->locale) . $datecontent;
624:             } else {
625:                 $feeditem['desc'] = '<a title="' . html_encode($title) . ' in ' . html_encode($albumobj->getTitle($this->locale)) . '" href="' . PROTOCOL . '://' . $itemlink . '"><img src="' . PROTOCOL . '://' . $this->host . html_encode(pathurlencode($item->getCustomImage($this->imagesize, NULL, NULL, NULL, NULL, NULL, NULL, TRUE))) . '" alt="' . html_encode($title) . '" /></a>' . $item->getDesc($this->locale) . $datecontent;
626:             }
627:         }
628: // title
629:         if ($this->mode != "albums") {
630:             $feeditem['title'] = sprintf('%1$s (%2$s)', $item->getTitle($this->locale), $albumobj->getTitle($this->locale));
631:         } else {
632:             $feeditem['title'] = $imagenumber;
633:         }
634: //link
635:         $feeditem['link'] = PROTOCOL . '://' . $itemlink;
636: 
637: // enclosure
638:         $feeditem['enclosure'] = '';
639:         if (getOption("RSS_enclosure") AND $this->mode != "albums") {
640:             $feeditem['enclosure'] = '<enclosure url="' . PROTOCOL . '://' . $fullimagelink . '" type="' . getMimeString($ext) . '" length="' . filesize($item->localpath) . '" />';
641:         }
642: //category
643:         if ($this->mode != "albums") {
644:             $feeditem['category'] = html_encode($albumobj->getTitle($this->locale));
645:         } else {
646:             $feeditem['category'] = html_encode($albumobj->getTitle($this->locale));
647:         }
648: //media content
649:         $feeditem['media_content'] = '';
650:         $feeditem['media_thumbnail'] = '';
651:         if (getOption("RSS_mediarss") AND $this->mode != "albums") {
652:             $feeditem['media_content'] = '<media:content url="' . PROTOCOL . '://' . $fullimagelink . '" type="image/jpeg" />';
653:             $feeditem['media_thumbnail'] = '<media:thumbnail url="' . PROTOCOL . '://' . $fullimagelink . '" width="' . $this->imagesize . '"   height="' . $this->imagesize . '" />';
654:         }
655: //date
656:         if ($this->mode != "albums") {
657:             $feeditem['pubdate'] = date("r", strtotime($item->getDateTime()));
658:         } else {
659:             $feeditem['pubdate'] = date("r", strtotime($albumobj->getDateTime()));
660:         }
661:         return $feeditem;
662:     }
663: 
664:     /**
665:      * Gets the feed item data in a Zenpage news feed
666:      *
667:      * @param array $item Titlelink a Zenpage article or filename of an image if a combined feed
668:      * @return array
669:      */
670:     protected function getItemNews($item) {
671:         $categories = '';
672:         $feeditem['enclosure'] = '';
673:         $obj = new ZenpageNews($item['titlelink']);
674:         $title = $feeditem['title'] = get_language_string($obj->getTitle('all'), $this->locale);
675:         $link = $obj->getLink();
676:         $count2 = 0;
677:         $plaincategories = $obj->getCategories();
678:         $categories = '';
679:         foreach ($plaincategories as $cat) {
680:             $catobj = new ZenpageCategory($cat['titlelink']);
681:             $categories .= get_language_string($catobj->getTitle('all'), $this->locale) . ', ';
682:         }
683:         $categories = rtrim($categories, ', ');
684:         $feeditem['desc'] = shortenContent($obj->getContent($this->locale), getOption('RSS_truncate_length'), '...');
685: 
686:         if (!empty($categories)) {
687:             $feeditem['category'] = html_encode($categories);
688:             $feeditem['title'] = $title . ' (' . $categories . ')';
689:         }
690:         $feeditem['link'] = PROTOCOL . '://' . $this->host . $link;
691:         $feeditem['media_content'] = '';
692:         $feeditem['media_thumbnail'] = '';
693:         $feeditem['pubdate'] = date("r", strtotime($item['date']));
694: 
695:         return $feeditem;
696:     }
697: 
698:     /**
699:      * Prints the RSS feed xml
700:      *
701:      */
702:     public function printFeed() {
703:         global $_zp_gallery;
704:         $feeditems = $this->getitems();
705:         //NOTE: feeditems are complete HTML so necessarily must have been properly endoded by the server function!
706:         if (is_array($feeditems)) {
707:             header('Content-Type: application/xml');
708:             $this->hitcounter();
709:             $this->startCache();
710:             echo '<?xml-stylesheet type="text/css" href="' . WEBPATH . '/' . ZENFOLDER . '/' . PLUGIN_FOLDER . '/rss/rss.css" ?>' . "\n";
711:             ?>
712:             <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
713:                 <channel>
714:                     <title><![CDATA[<?php echo $this->channel_title; ?>]]></title>
715:                     <link><?php echo PROTOCOL . '://' . $this->host . WEBPATH; ?></link>
716:                     <atom:link href="<?php echo PROTOCOL; ?>://<?php echo $this->host; ?><?php echo html_encode(getRequestURI()); ?>" rel="self"    type="application/rss+xml" />
717:                     <description><![CDATA[<?php echo getBare($_zp_gallery->getDesc($this->locale)); ?>]]></description>
718:                     <language><?php echo $this->locale_xml; ?></language>
719:                     <pubDate><?php echo date("r", time()); ?></pubDate>
720:                     <lastBuildDate><?php echo date("r", time()); ?></lastBuildDate>
721:                     <docs>http://blogs.law.harvard.edu/tech/rss</docs>
722:                     <generator>Zenphoto RSS Generator</generator>
723:                     <?php
724:                     foreach ($feeditems as $feeditem) {
725:                         switch ($this->feedtype) {
726:                             case 'gallery':
727:                                 $item = $this->getItemGallery($feeditem);
728:                                 break;
729:                             case 'news':
730:                                 $item = $this->getItemNews($feeditem);
731:                                 break;
732:                             case 'pages':
733:                                 $item = $this->getitemPages($feeditem, getOption('RSS_truncate_length'));
734:                                 break;
735:                             case 'comments':
736:                                 $item = $this->getitemComments($feeditem);
737:                                 break;
738:                             default:
739:                                 $item = $feeditem;
740:                                 break;
741:                         }
742:                         ?>
743:                         <item>
744:                             <title><![CDATA[<?php echo $item['title']; ?>]]></title>
745:                             <link><?php echo html_encode($item['link']); ?></link>
746:                             <description><![CDATA[<?php echo $item['desc']; ?>]]></description>
747:                             <?php
748:                             if (!empty($item['enclosure'])) {
749:                                 echo $item['enclosure']; //prints xml as well
750:                             }
751:                             if (!empty($item['category'])) {
752:                                 ?>
753:                                 <category><![CDATA[<?php echo $item['category']; ?>]]></category>
754:                                 <?php
755:                             }
756:                             if (!empty($item['media_content'])) {
757:                                 echo $item['media_content']; //prints xml as well
758:                             }
759:                             if (!empty($item['media_thumbnail'])) {
760:                                 echo $item['media_thumbnail']; //prints xml as well
761:                             }
762:                             ?>
763:                             <guid><?php echo html_encode($item['link']); ?></guid>
764:                             <pubDate><?php echo html_encode($item['pubdate']); ?></pubDate>
765:                         </item>
766:                         <?php
767:                     } // foreach
768:                     ?>
769:                 </channel>
770:             </rss>
771:             <?php
772:             $this->endCache();
773:         }
774:     }
775: 
776: }
777: 
778: function executeRSS() {
779:     if (!$_GET['rss']) {
780:         $_GET['rss'] = 'gallery';
781:     }
782:     $_zp_gallery_page = 'rss.php';
783:     $rss = new RSS(sanitize($_GET));
784:     $rss->printFeed();
785:     exitZP();
786: }
787: 
788: // RSS feed calls before anything else
789: if (!OFFSET_PATH && isset($_GET['rss'])) {
790:     zp_register_filter('load_theme_script', 'executeRSS', 9999);
791: }
792: ?>
Zenphoto doc API documentation generated by ApiGen