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: /**
   4:  *
   5:  * Lets you create custom menus and place them on your theme pages.
   6:  *
   7:  * Use the <var>Menu</var> tab to create your menus. Use <var>printCustomMenu()</var> to place them on your pages.
   8:  *
   9:  * This plugin is recommend for customized themes only that do not use the standard Zenphoto
  10:  * display structure. Standard Zenphoto functions like the breadcrumb functions or the <var>next_album()</var>
  11:  * loop for example will <b>NOT</b> take care of this menu's structure!
  12:  *
  13:  * @author Stephen Billard (sbillard), Malte Müller (acrylian)
  14:  * @package plugins
  15:  */
  16: $plugin_is_filter = 5 | ADMIN_PLUGIN | THEME_PLUGIN;
  17: $plugin_description = gettext("A menu creation facility. The <em>Menu</em> tab admin interface lets you create arbitrary menu trees.");
  18: $plugin_author = "Malte Müller (acrylian), Stephen Billard (sbillard)";
  19: 
  20: $option_interface = 'menu_manager';
  21: 
  22: if (OFFSET_PATH) {
  23:     require_once(dirname(dirname(__FILE__)) . '/template-functions.php');
  24:     zp_register_filter('admin_tabs', 'menu_tabs');
  25: } else {
  26:     zp_register_filter('admin_toolbox_global', 'menu_admin_toolbox_global');
  27: }
  28: 
  29: if (!defined('MENU_TRUNCATE_STRING'))
  30:     define('MENU_TRUNCATE_STRING', getOption('menu_truncate_string'));
  31: if (!defined('MENU_TRUNCATE_INDICATOR'))
  32:     define('MENU_TRUNCATE_INDICATOR', getOption('menu_truncate_indicator'));
  33: 
  34: /**
  35:  *
  36:  * option handler
  37:  * @author Stephen
  38:  *
  39:  */
  40: class menu_manager {
  41: 
  42:     /**
  43:      *
  44:      * class instantiator
  45:      */
  46:     function __construct() {
  47:         setOptionDefault('menu_truncate_string', 0);
  48:         setOptionDefault('menu_truncate_indicator', '');
  49:     }
  50: 
  51:     function getOptionsSupported() {
  52:         global $_common_truncate_handler;
  53: 
  54:         $options = array(
  55:                         gettext('Truncate indicator*') => array('key'            => 'menu_truncate_indicator', 'type'        => OPTION_TYPE_TEXTBOX,
  56:                                         'order'      => 2,
  57:                                         'disabled' => $_common_truncate_handler,
  58:                                         'desc'       => gettext('Append this string to truncated titles.')),
  59:                         gettext('Truncate titles*')      => array('key'      => 'menu_truncate_string', 'type'   => OPTION_TYPE_TEXTBOX,
  60:                                         'order'  => 1,
  61:                                         'desc'   => gettext('Limit titles to this many characters. Zero means no limit.'))
  62:         );
  63:         if ($_common_truncate_handler) {
  64:             $options['note'] = array('key'       => 'menu_truncate_note', 'type'     => OPTION_TYPE_NOTE,
  65:                             'order'  => 8,
  66:                             'desc'   => '<p class="notebox">' . $_common_truncate_handler . '</p>');
  67:         } else {
  68:             $_common_truncate_handler = gettext('* These options may be set via the <a href="javascript:gotoName(\'menu_manager\');"><em>menu_manager</em></a> plugin options.');
  69:             $options['note'] = array('key'       => 'menu_truncate_note',
  70:                             'type'   => OPTION_TYPE_NOTE,
  71:                             'order'  => 8,
  72:                             'desc'   => gettext('<p class="notebox">*<strong>Note:</strong> The setting of these options are shared with other plugins.</p>'));
  73:         }
  74:         return $options;
  75:     }
  76: 
  77:     function handleOption($option, $currentValue) {
  78: 
  79:     }
  80: 
  81: }
  82: 
  83: /**
  84:  *
  85:  * Add menu to the admin toolbox
  86:  */
  87: function menu_admin_toolbox_global($zf) {
  88:     if (zp_loggedin(ADMIN_RIGHTS)) {
  89:         echo "<li>";
  90:         printLinkHTML($zf . '/' . PLUGIN_FOLDER . '/menu_manager/menu_tab.php', gettext("Menu"), NULL, NULL, NULL);
  91:         echo "</li>\n";
  92:     }
  93: }
  94: 
  95: /**
  96:  * Adds menu manager to admin tabs
  97:  *
  98:  * @param $tabs array Admin tabs
  99:  * @param string $current current tab
 100:  * @return unknown
 101:  */
 102: function menu_tabs($tabs) {
 103:     if (zp_loggedin()) {
 104:         $newtabs = array();
 105:         foreach ($tabs as $key => $tab) {
 106:             if ($key == 'tags') {
 107:                 $newtabs['menu'] = array('text'      => gettext("menu"),
 108:                                 'link'       => WEBPATH . "/" . ZENFOLDER . '/' . PLUGIN_FOLDER . '/menu_manager/menu_tab.php?page=menu&amp;tab=menu',
 109:                                 'default'    => 'menu',
 110:                                 'subtabs'    => NULL);
 111:             }
 112:             $newtabs[$key] = $tab;
 113:         }
 114:         return $newtabs;
 115:     }
 116:     return $tabs;
 117: }
 118: 
 119: /*
 120:  *
 121:  * Common functions
 122:  *
 123:  */
 124: 
 125: $_menu_manager_items = array();
 126: 
 127: /**
 128:  * Gets the menu items
 129:  *
 130:  * @param string $menuset the menu tree desired
 131:  * @param string $visible
 132:  * @return array
 133:  */
 134: function getMenuItems($menuset, $visible) {
 135:     global $_menu_manager_items;
 136:     if (array_key_exists($menuset, $_menu_manager_items) &&
 137:                     array_key_exists($visible, $_menu_manager_items[$menuset])) {
 138:         return $_menu_manager_items[$menuset][$visible];
 139:     }
 140:     switch ($visible) {
 141:         case 'visible':
 142:             $where = " WHERE `show` = 1 AND menuset = " . db_quote($menuset);
 143:             break;
 144:         case 'hidden':
 145:             $where = " WHERE `show` = 0 AND menuset = " . db_quote($menuset);
 146:             break;
 147:         default:
 148:             $where = " WHERE menuset = " . db_quote($menuset);
 149:             $visible = 'all';
 150:             break;
 151:     }
 152:     $result = query_full_array("SELECT * FROM " . prefix('menu') . $where . " ORDER BY sort_order", false, 'sort_order');
 153:     $_menu_manager_items[$menuset][$visible] = $result;
 154:     return $_menu_manager_items[$menuset][$visible];
 155: }
 156: 
 157: /**
 158:  * Gets a menu item by its id
 159:  *
 160:  * @param integer $id id of the item
 161:  * @return array
 162:  */
 163: function getItem($id) {
 164:     $menuset = checkChosenMenuset();
 165:     $result = query_single_row("SELECT * FROM " . prefix('menu') . " WHERE menuset = " . db_quote($menuset) . " AND id = " . $id);
 166:     return $result;
 167: }
 168: 
 169: /**
 170:  * Checks which menu set is chosen via $_GET. If none is explicity chosen the "default" one (create initially) is used.
 171:  *
 172:  * @return string
 173:  */
 174: function checkChosenMenuset($default = 'default') {
 175:     if (isset($_GET['menuset'])) {
 176:         $menuset = sanitize($_GET['menuset']);
 177:     } else if (isset($_POST['menuset'])) {
 178:         $menuset = sanitize($_POST['menuset']);
 179:     } else {
 180:         $menuset = $default;
 181:     }
 182:     return $menuset;
 183: }
 184: 
 185: /**
 186:  * Checks if the menu item is set visible or not
 187:  *
 188:  * @return string
 189:  */
 190: function checkChosenItemStatus() {
 191:     if (isset($_GET['visible'])) {
 192:         return sanitize($_GET['visible']);
 193:     } else {
 194:         return 'all';
 195:     }
 196: }
 197: 
 198: /**
 199:  * Gets the title, url and name of a menu item
 200:  *
 201:  * @return array
 202:  */
 203: function getItemTitleAndURL($item) {
 204:     global $_zp_gallery;
 205:     $themename = $_zp_gallery->getCurrentTheme();
 206:     $array = array("title" => '', "url" => '', "name" => '', 'protected' => false, 'theme' => $themename);
 207:     $valid = true;
 208:     $title = get_language_string($item['title']);
 209:     switch ($item['type']) {
 210:         case "galleryindex":
 211:             $array = array("title" => get_language_string($item['title']), "url" => WEBPATH, "name" => WEBPATH, 'protected' => false, 'theme' => $themename);
 212:             break;
 213:         case "album":
 214:             $folderFS = internalToFilesystem($item['link']);
 215:             $localpath = ALBUM_FOLDER_SERVERPATH . $folderFS;
 216:             $dynamic = hasDynamicAlbumSuffix($folderFS) && !is_dir($folderFS);
 217:             $valid = file_exists($localpath) && ($dynamic || is_dir($localpath));
 218:             if (!$valid || strpos($localpath, '..') !== false) {
 219:                 $valid = false;
 220:                 $url = '';
 221:                 $protected = 0;
 222:             } else {
 223:                 $obj = newAlbum($item['link']);
 224:                 $url = $obj->getLink(0);
 225:                 $protected = $obj->isProtected();
 226:                 $title = $obj->getTitle();
 227:             }
 228:             $array = array("title" => $title, "url" => $url, "name" => $item['link'], 'protected' => $protected, 'theme' => $themename);
 229:             break;
 230:         case "zenpagepage":
 231:             if(class_exists('zenpage')) {
 232:                 $sql = 'SELECT * FROM ' . prefix('pages') . ' WHERE `titlelink`="' . $item['link'] . '"';
 233:                 $result = query_single_row($sql);
 234:                 if (is_array($result)) {
 235:                     $obj = new ZenpagePage($item['link']);
 236:                     $url = $obj->getLink(0);
 237:                     $protected = $obj->isProtected();
 238:                     $title = $obj->getTitle();
 239:                 } else {
 240:                     $valid = false;
 241:                     $url = '';
 242:                     $protected = 0;
 243:                 }
 244:                 $array = array("title" => $title, "url" => $url, "name" => $item['link'], 'protected' => $protected, 'theme' => $themename);
 245:             }
 246:             break;
 247:         case "zenpagenewsindex":
 248:             if(class_exists('zenpage')) {
 249:                 $url = getNewsIndexURL();
 250:                 $array = array("title" => get_language_string($item['title']), "url" => $url, "name" => $url, 'protected' => false);
 251:             }
 252:             break;
 253:         case "zenpagecategory":
 254:             if(class_exists('zenpage')) {
 255:                 $sql = "SELECT title FROM " . prefix('news_categories') . " WHERE titlelink = '" . $item['link'] . "'";
 256:                 $obj = query_single_row($sql, false);
 257:                 if ($obj) {
 258:                     $obj = new ZenpageCategory($item['link']);
 259:                     $title = $obj->getTitle();
 260:                     $protected = $obj->isProtected();
 261:                     $url = $obj->getLink(0);
 262:                 } else {
 263:                     $valid = false;
 264:                     $url = '';
 265:                     $protected = 0;
 266:                 }
 267:                 $array = array("title" => $title, "url" => $url, "name" => $item['link'], 'protected' => $protected, 'theme' => $themename);
 268:             }
 269:             break;
 270:         case "custompage":
 271:             $root = SERVERPATH . '/' . THEMEFOLDER . '/' . $themename . '/';
 272:             if (file_exists($root . $item['link'] . '.php')) {
 273:                 $url = zp_apply_filter('getLink', rewrite_path(_PAGE_ . '/' . $item['link'], "/index.php?p=" . $item['link']), $item['link'] . '.php', NULL);
 274:             } else {
 275:                 $valid = false;
 276:                 $url = '';
 277:             }
 278:             $array = array("title" => $title, "url" => $url, "name" => $item['link'], 'protected' => false, 'theme' => $themename);
 279:             break;
 280:         case "customlink":
 281:             $array = array("title" => get_language_string($item['title']), "url" => $item['link'], "name" => $item['link'], 'protected' => false, 'theme' => $themename);
 282:             break;
 283:         case 'menulabel':
 284:             $array = array("title" => get_language_string($item['title']), "url" => NULL, 'name' => $item['title'], 'protected' => false, 'theme' => $themename);
 285:             break;
 286:         default:
 287:             $array = array("title" => get_language_string($item['title']), "url" => $item['link'], "name" => $item['link'], 'protected' => false, 'theme' => $themename);
 288:             break;
 289:     }
 290:     $limit = MENU_TRUNCATE_STRING;
 291:     $array['valid'] = $valid;
 292:     if ($limit) {
 293:         $array['title'] = shortenContent($array['title'], $limit, MENU_TRUNCATE_INDICATOR);
 294:     }
 295:     return $array;
 296: }
 297: 
 298: /* * *****************
 299:  * Theme functions
 300:  * ***************** */
 301: 
 302: /**
 303:  * Gets the menu visibility
 304:  * @return string
 305:  */
 306: function getMenuVisibility() {
 307:     if (zp_loggedin(VIEW_ALL_RIGHTS)) {
 308:         return "all";
 309:     } else {
 310:         return "visible";
 311:     }
 312: }
 313: 
 314: /**
 315:  * "invents" a menu item for the current page (for when one does not exist)
 316:  * Adds the item to the current menuset and modifies its "parent" as needed
 317:  *
 318:  * returns a contrived sort_order for the item.
 319:  *
 320:  * @param string $menuset
 321:  * @param string $visibility
 322:  * return string
 323:  */
 324: function inventMenuItem($menuset, $visibility) {
 325:     global $_zp_gallery_page, $_zp_current_album, $_zp_current_image, $_zp_current_search, $_menu_manager_items,
 326:     $_zp_current_zenpage_news, $_zp_current_zenpage_page;
 327:     $currentkey = $insertpoint = NULL;
 328:     $newitems = array();
 329:     switch ($_zp_gallery_page) {
 330:         case 'image.php':
 331:             $name = '';
 332:             if (in_context(ZP_SEARCH_LINKED) && !in_context(ZP_ALBUM_LINKED)) {
 333:                 $dynamic = $_zp_current_search->getDynamicAlbum();
 334:                 if (empty($dynamic)) { //   smple search
 335:                     foreach ($_menu_manager_items[$menuset][$visibility] as $key => $item) {
 336:                         if ($item['type'] == 'custompage' && $item['link'] == 'search') {
 337:                             $insertpoint = $item['sort_order'];
 338:                             $currentkey = $insertpoint . '-9999';
 339:                             break;
 340:                         }
 341:                     }
 342:                 }
 343:             } else {
 344:                 $name = $_zp_current_album->name;
 345:             }
 346:             if (!empty($name)) {
 347:                 foreach ($_menu_manager_items[$menuset][$visibility] as $key => $item) {
 348:                     if ($item['type'] == 'album' && $item['title'] == $name) {
 349:                         $insertpoint = $item['sort_order'];
 350:                         $currentkey = $insertpoint . '-9999';
 351:                         break;
 352:                     }
 353:                 }
 354:             }
 355:             if (!empty($currentkey)) {
 356:                 $item = array('id'               => 9999, 'sort_order' => $currentkey, 'parentid'    => $item['id'], 'type'          => 'image',
 357:                                 'include_li' => true, 'title'            => $_zp_current_image->getTitle(),
 358:                                 'show'           => 1, 'link'            => '', 'menuset'        => $menuset);
 359:             }
 360:             break;
 361:         case 'news.php':
 362:             if (in_context(ZP_SEARCH_LINKED)) {
 363:                 foreach ($_menu_manager_items[$menuset][$visibility] as $key => $item) {
 364:                     if ($item['type'] == 'custompage' && $item['link'] == 'search') {
 365:                         $insertpoint = $item['sort_order'];
 366:                         $currentkey = $insertpoint . '-9999';
 367:                         break;
 368:                     }
 369:                 }
 370:             } else {
 371:                 foreach ($_menu_manager_items[$menuset][$visibility] as $key => $item) {
 372:                     if ($item['type'] == 'zenpagenewsindex') {
 373:                         $insertpoint = $item['sort_order'];
 374:                         $currentkey = $insertpoint . '-9999';
 375:                         break;
 376:                     }
 377:                 }
 378:             }
 379:             if (!empty($currentkey)) {
 380:                 if (is_NewsArticle()) {
 381:                     $item = array('id'               => 9999, 'sort_order' => $currentkey, 'parentid'    => $item['id'], 'type'          => 'zenpagenews',
 382:                                     'include_li' => true, 'title'            => $_zp_current_zenpage_news->getTitle(),
 383:                                     'show'           => 1, 'link'            => '', 'menuset'        => $menuset);
 384:                 } else {
 385:                     $currentkey = false; // not a news page, must be the index?
 386:                 }
 387:             }
 388:             break;
 389:         case 'pages.php':
 390:             if (in_context(ZP_SEARCH_LINKED)) {
 391:                 foreach ($_menu_manager_items[$menuset][$visibility] as $key => $item) {
 392:                     if ($item['type'] == 'custompage' && $item['link'] == 'search') {
 393:                         $insertpoint = $item['sort_order'];
 394:                         $currentkey = $insertpoint . '-9999';
 395:                         $item = array('id'               => 9999, 'sort_order' => $currentkey, 'parentid'    => $item['id'], 'type'          => 'zenpagepage',
 396:                                         'include_li' => true, 'title'            => $_zp_current_zenpage_page->getTitle(),
 397:                                         'show'           => 1, 'link'            => '', 'menuset'        => $menuset);
 398:                         break;
 399:                     }
 400:                 }
 401:             }
 402:             break;
 403:     }
 404:     if (!empty($currentkey)) {
 405:         foreach ($_menu_manager_items[$menuset][$visibility] as $key => $olditem) {
 406:             $newitems[$key] = $olditem;
 407:             if ($olditem['sort_order'] == $insertpoint) {
 408:                 $newitems[$currentkey] = $item;
 409:             }
 410:         }
 411:         $_menu_manager_items[$menuset][$visibility] = $newitems;
 412:     }
 413:     return $currentkey;
 414: }
 415: 
 416: /**
 417:  * Returns the sort_order of the current menu item
 418:  * @param string $menuset current menu set
 419:  * @return int
 420:  */
 421: function getCurrentMenuItem($menuset) {
 422:     $currentpageURL = rtrim(str_replace('\\', '/', html_encode(getRequestURI())), '/');
 423: 
 424:     if (isset($_GET['page'])) { // must strip out page numbers, all "pages" are equal
 425:         if (MOD_REWRITE) {
 426:             if (isset($_GET['album'])) {
 427:                 $target = '/' . _PAGE_ . '/' . sanitize($_GET['page']);
 428:             } else {
 429:                 $target = '/' . sanitize($_GET['page']);
 430:             }
 431:             $i = strrpos($currentpageURL, $target);
 432:             if ($i == (strlen($currentpageURL) - strlen($target))) {
 433:                 $currentpageURL = substr($currentpageURL, 0, $i);
 434:             }
 435:         } else {
 436:             $target = '&amp;page=' . sanitize($_GET['page']);
 437:             $i = strpos($currentpageURL, $target);
 438:             if ($i !== false) {
 439:                 $currentpageURL = substr($currentpageURL, 0, $i) . substr($currentpageURL, $i + strlen($target));
 440:             }
 441:         }
 442:     }
 443:     $visibility = 'all';
 444:     $items = getMenuItems($menuset, $visibility);
 445:     $currentkey = NULL;
 446:     foreach ($items as $key => $item) {
 447:         switch ($item['type']) {
 448:             case 'menulabel':
 449:             case 'menufunction':
 450:             case 'html':
 451:                 break;
 452:             default:
 453:                 $checkitem = getItemTitleAndURL($item);
 454:                 if ($currentpageURL == html_encode(rtrim($checkitem['url'], '/'))) {
 455:                     $currentkey = $key;
 456:                     break 2;
 457:                 }
 458:                 break;
 459:         }
 460:     }
 461:     if (is_null($currentkey)) {
 462:         $currentkey = inventMenuItem($menuset, $visibility);
 463:     }
 464:     return $currentkey;
 465: }
 466: 
 467: /**
 468:  * Returns the link to the predicessor of the current menu item
 469:  * @param string $menuset current menu set
 470:  * @return string
 471:  */
 472: function getMenumanagerPredicessor($menuset = 'default') {
 473:     $sortorder = getCurrentMenuItem($menuset);
 474:     $items = getMenuItems($menuset, getMenuVisibility());
 475:     if (count($items) == 0)
 476:         return NULL;
 477:     if (empty($sortorder))
 478:         return NULL;
 479:     $order = explode('-', $sortorder);
 480:     $next = array_pop($order) - 1;
 481:     $saveorder = $order;
 482:     while ($next >= 0) {
 483:         $order = $saveorder;
 484:         array_push($order, sprintf('%03u', $next));
 485:         $sortorder = implode('-', $order);
 486:         if (array_key_exists($sortorder, $items) && $items[$sortorder]['type'] != 'menulabel') { // omit the menulabels
 487:             return getItemTitleAndURL($items[$sortorder]);
 488:         }
 489:         $next--;
 490:     }
 491:     return NULL;
 492: }
 493: 
 494: /**
 495:  * Prints the previous link of the current menu item
 496:  * @param string  $text
 497:  * @param string  $menuset
 498:  * @param string  $title
 499:  * @param string  $class
 500:  * @param string  $id
 501:  */
 502: function printMenumanagerPrevLink($text, $menuset = 'default', $title = NULL, $class = NULL, $id = NULL) {
 503:     $itemarray = getMenumanagerPredicessor($menuset);
 504:     if (is_array($itemarray)) {
 505:         if (is_null($title))
 506:             $title = $itemarray['title'];
 507:         printLinkHTML($itemarray['url'], $text, $title, $class, $id);
 508:     } else {
 509:         echo '<span class="disabledlink">' . html_encode($text) . '</span>';
 510:     }
 511: }
 512: 
 513: /**
 514:  * Returns the successor link of the current menu item
 515:  * @param string $menuset
 516:  * @return string
 517:  */
 518: function getMenumanagerSuccessor($menuset = 'default') {
 519:     $sortorder = getCurrentMenuItem($menuset);
 520:     $items = getMenuItems($menuset, getMenuVisibility());
 521:     if (count($items) == 0)
 522:         return NULL;
 523:     if (empty($sortorder))
 524:         return NULL;
 525:     $order = explode('-', $sortorder);
 526:     $next = array_pop($order) + 1;
 527:     $short_order = $order;
 528:     array_push($order, sprintf('%03u', $next));
 529:     $sortorder = implode('-', $order);
 530:     while ($next <= 999) {
 531:         $order = $short_order;
 532:         array_push($order, sprintf('%03u', $next));
 533:         $sortorder = implode('-', $order);
 534:         if (array_key_exists($sortorder, $items)) {
 535:             if ($items[$sortorder]['type'] != 'menulabel') { // omit the menulabels
 536:                 return getItemTitleAndURL($items[$sortorder]);
 537:             }
 538:         }
 539:         $next++;
 540:     }
 541:     return NULL;
 542: }
 543: 
 544: /**
 545:  * Gets the link to the next menu item
 546:  * @param string $text
 547:  * @param string $menuset current menu set
 548:  * @param string $title
 549:  * @param string $class
 550:  * @param string $id
 551:  */
 552: function printMenumanagerNextLink($text, $menuset = 'default', $title = NULL, $class = NULL, $id = NULL) {
 553:     $itemarray = getMenumanagerSuccessor($menuset);
 554:     if (is_array($itemarray)) {
 555:         if (is_null($title))
 556:             $title = $itemarray['title'];
 557:         printLinkHTML($itemarray['url'], $text, $title, $class, $id);
 558:     } else {
 559:         echo '<span class="disabledlink">' . html_encode($text) . '</span>';
 560:     }
 561: }
 562: 
 563: /**
 564:  * Prints a list of all pages.
 565:  *
 566:  * @param string $prevtext Insert here the linktext like 'previous page'
 567:  * @param string $menuset current menu set
 568:  * @param string $menuset current menu set
 569:  * @param string $class the css class to use, "pagelist" by default
 570:  * @param string $nextprev set to true to get the 'next' and 'prev' links printed
 571:  * @param string $id the css id to use
 572:  * @param bool $firstlast Add links to the first and last pages of you gallery
 573:  * @param int $navlen Number of navigation links to show (0 for all pages). Works best if the number is odd.
 574:  */
 575: function printMenuemanagerPageListWithNav($prevtext, $nexttext, $menuset = 'default', $class = 'pagelist', $nextprev = true, $id = NULL, $firstlast = true, $navlen = 9) {
 576:     $currentitem = getMenuFromLink(html_encode(urldecode(getRequestURI())), $menuset);
 577:     if (is_null($currentitem))
 578:         return; // we are not in menuset
 579:     $orders = explode('-', $currentitem['sort_order']);
 580:     array_pop($orders);
 581:     $lookfor = implode('-', $orders) . '-';
 582:     $sql = 'SELECT `sort_order` FROM ' . prefix('menu') . ' WHERE `sort_order` LIKE "' . $lookfor . '%" ORDER BY `sort_order` ASC';
 583:     $result = query_full_array($sql, false, 'sort_order');
 584:     if (is_array($result)) {
 585:         $l = strlen($lookfor) + 3;
 586:         foreach ($result as $key => $item) { // discard next level items
 587:             if (strlen($key) > $l)
 588:                 unset($result[$key]);
 589:         }
 590:         $itemlist = array_keys($result);
 591:         $total = count($itemlist);
 592:         $current = array_search($currentitem['sort_order'], $itemlist) + 1;
 593:         if ($total < 2) {
 594:             $class .= ' disabled_nav';
 595:         }
 596:         if ($navlen == 0)
 597:             $navlen = $total;
 598:         $extralinks = 2;
 599:         if ($firstlast)
 600:             $extralinks = $extralinks + 2;
 601:         $len = floor(($navlen - $extralinks) / 2);
 602:         $j = max(round($extralinks / 2), min($current - $len - (2 - round($extralinks / 2)), $total - $navlen + $extralinks - 1));
 603:         $ilim = min($total, max($navlen - round($extralinks / 2), $current + floor($len)));
 604:         $k1 = round(($j - 2) / 2) + 1;
 605:         $k2 = $total - round(($total - $ilim) / 2);
 606:         $items = getMenuItems($menuset, getMenuVisibility());
 607:         echo "<div" . (($id) ? " id=\"$id\"" : "") . " class=\"$class\">\n";
 608:         echo "<ul class=\"$class\">\n";
 609:         if ($nextprev) {
 610:             echo "<li class=\"prev\">";
 611:             printMenumanagerPrevLink($prevtext, $menuset, $prevtext, gettext("Previous Page"));
 612:             echo "</li>\n";
 613:         }
 614:         if ($firstlast) {
 615:             echo '<li class="' . ($current == 1 ? 'current' : 'first') . '">';
 616:             $itemarray = getItemTitleAndURL($items[$itemlist[0]]);
 617:             printLinkHTML($itemarray['url'], 1, gettext("Page 1"));
 618:             echo "</li>\n";
 619:             if ($j > 2) {
 620:                 echo "<li>";
 621:                 $itemarray = getItemTitleAndURL($items[$itemlist[$k1 - 1]]);
 622:                 printLinkHTML($itemarray['url'], ($j - 1 > 2) ? '...' : $k1, sprintf(ngettext('Page %u', 'Page %u', $k1), $k1));
 623:                 echo "</li>\n";
 624:             }
 625:         }
 626:         for ($i = $j; $i <= $ilim; $i++) {
 627:             echo "<li" . (($i == $current) ? " class=\"current\"" : "") . ">";
 628:             $itemarray = getItemTitleAndURL($items[$itemlist[$i - 1]]);
 629:             if ($i == $current) {
 630:                 $title = sprintf(ngettext('Page %1$u (Current Page)', 'Page %1$u (Current Page)', $i), $i);
 631:             } else {
 632:                 $title = sprintf(ngettext('Page %1$u', 'Page %1$u', $i), $i);
 633:             }
 634:             printLinkHTML($itemarray['url'], $i, $title);
 635:             echo "</li>\n";
 636:         }
 637:         if ($i < $total) {
 638:             echo "<li>";
 639:             $itemarray = getItemTitleAndURL($items[$itemlist[$k2 - 1]]);
 640:             printLinkHTML($itemarray['url'], ($total - $i > 1) ? '...' : $k2, sprintf(ngettext('Page %u', 'Page %u', $k2), $k2));
 641:             echo "</li>\n";
 642:         }
 643:         if ($firstlast && $i <= $total) {
 644:             echo "\n  <li class=\"last\">";
 645:             $itemarray = getItemTitleAndURL($items[$itemlist[$total - 1]]);
 646:             printLinkHTML($itemarray['url'], $total, sprintf(ngettext('Page {%u}', 'Page {%u}', $total), $total));
 647:             echo "</li>";
 648:         }
 649:         if ($nextprev) {
 650:             echo "<li class=\"next\">";
 651:             printMenumanagerNextLink($nexttext, gettext("Next Page"));
 652:             echo "</li>\n";
 653:         }
 654:         echo "</ul>\n";
 655:         echo "</div>\n";
 656:     }
 657: }
 658: 
 659: /**
 660:  * Prints a full page navigation including previous and next page links with a list of all pages in between.
 661:  *
 662:  * @param string $nexttext Insert here the linktext like 'next page'
 663:  * @param string $class Insert here the CSS-class name you want to style the link with (default is "pagelist")
 664:  * @param string $id Insert here the CSS-ID name if you want to style the link with this
 665:  * @param bool $firstlast Add links to the first and last pages of you gallery
 666:  * @param int $navlen Number of navigation links to show (0 for all pages). Works best if the number is odd.
 667:  */
 668: function printMenuemanagerPageList($menuset = 'default', $class = 'pagelist', $id = NULL, $firstlast = true, $navlen = 9) {
 669:     printMenuemanagerPageListWithNav(null, null, $menuset, false, $class, $id, false, $navlen);
 670: }
 671: 
 672: /**
 673:  * Gets the parent menu items of the current menu item. Returns the array of the items or false.
 674:  * @param string $menuset current menu set
 675:  * @return array|false
 676:  */
 677: function getParentMenuItems($menuset = 'default') {
 678:     $sortorder = getCurrentMenuItem($menuset);
 679:     $items = getMenuItems($menuset, getMenuVisibility());
 680:     if (count($items) > 0) {
 681:         if ($sortorder) {
 682:             $parents = array();
 683:             $order = explode('-', $sortorder);
 684:             array_pop($order);
 685:             $look = array();
 686:             while (count($order) > 0) {
 687:                 $look = implode('-', $order);
 688:                 array_pop($order);
 689:                 if (array_key_exists($look, $items)) {
 690:                     array_unshift($parents, $items[$look]);
 691:                 }
 692:             }
 693:             if (!empty($parents)) {
 694:                 sortMultiArray($parents, 'sort_order', $descending = false, $natsort = false, $case_sensitive = false);
 695:                 return $parents;
 696:             }
 697:         }
 698:     }
 699:     return false;
 700: }
 701: 
 702: /**
 703:  * Prints the breadcrumbs of the current page
 704:  *
 705:  * NOTE: this function is entirely dependedn on the menu tree you have
 706:  * generated. It will work only with static menu trees. That is, if the page
 707:  * upon which you call this function is not present in your menu tree it will
 708:  * not have any parent pages. Thus, menu items generated for instance by function
 709:  * calls cannot have parents in the printMenumanagerBreadcrumb sense.
 710:  *
 711:  * Likewise if you have non exclusive menu links to a page the parentage of that
 712:  * page with respect to breadcrumbs may not reflect on the menu transitions that
 713:  * the user used to arrive on the page.
 714:  *
 715:  * @param string $menuset current menu set
 716:  * @param string $before before text
 717:  * @param string $between between text
 718:  * @param string $after after text
 719:  */
 720: function printMenumanagerBreadcrumb($menuset = 'default', $before = '', $between = ' | ', $after = ' | ') {
 721:     $parents = getParentMenuItems($menuset);
 722:     if ($parents) {
 723:         if ($before) {
 724:             echo '<span class="beforetext">' . html_encode($before) . '</span>';
 725:         }
 726:         if ($between) {
 727:             $between = '<span class="betweentext">' . html_encode($between) . '</span>';
 728:         }
 729:         $i = 0;
 730:         foreach ($parents as $item) {
 731:             if ($i > 0) {
 732:                 echo $between;
 733:             }
 734:             $itemarray = getItemTitleAndURL($item);
 735:             if ($item['type'] == 'menulabel') {
 736:                 echo html_encode($itemarray['title']);
 737:             } else {
 738:                 printLinkHTML($itemarray['url'], $itemarray['title'], $itemarray['title']);
 739:             }
 740:             $i++;
 741:         }
 742:         if ($after) {
 743:             echo '<span class="aftertext">' . html_encode($after) . '</span>';
 744:         }
 745:     }
 746: }
 747: 
 748: /**
 749:  * Returns the menu item corresponding to $link
 750:  * @param string $link
 751:  * @param string $menuset
 752:  * @return array
 753:  */
 754: function getMenuFromLink($link, $menuset = 'default') {
 755:     $link = rtrim(str_replace('\\', '/', $link), '/');
 756:     $items = getMenuItems($menuset, getMenuVisibility());
 757:     foreach ($items as $item) {
 758:         $itemarray = getItemTitleAndURL($item);
 759:         if ($itemarray['url'] == $link)
 760:             return $item;
 761:     }
 762:     return NULL;
 763: }
 764: 
 765: /**
 766:  * Returns true if the current menu item is a sub item of $link
 767:  * @param string $link possible parent
 768:  * @param string $menuset current menuset
 769:  * @return bool
 770:  */
 771: function submenuOf($link, $menuset = 'default') {
 772:     $link_menu = getMenuFromLink($link, $menuset);
 773:     if (is_array($link_menu)) {
 774:         $current = getCurrentMenuItem($menuset);
 775:         $items = getMenuItems($menuset, getMenuVisibility());
 776:         if (!is_null($current)) {
 777:             $sortorder = $link_menu['sort_order'];
 778:             if (strlen($current) > strlen($sortorder)) {
 779:                 $p = strpos($current, $sortorder);
 780:                 return $p === 0;
 781:             }
 782:         }
 783:     }
 784:     return false;
 785: }
 786: 
 787: /**
 788:  * Creates a menu set from the items passed. But only if the menu set does not already exist
 789:  * @param array $menuitems items for the menuset
 790:  *      array elements:
 791:  *          'type'=>menuset type
 792:  *          'title'=>title for the menu item
 793:  *          'link'=>URL or other data for the item link
 794:  *          'show'=>set to 1:"visible" or 0:"hidden",
 795:  *          'nesting'=>nesting level of this item in the menu heirarchy
 796:  *
 797:  * @param string $menuset current menuset
 798:  */
 799: function createMenuIfNotExists($menuitems, $menuset = 'default') {
 800:     $count = db_count('menu', 'WHERE menuset=' . db_quote($menuset));
 801:     if ($count == 0) { // there was not an existing menu set
 802:         require_once(dirname(__FILE__) . '/menu_manager/menu_manager-admin-functions.php');
 803:         $success = 1;
 804:         $orders = array();
 805:         foreach ($menuitems as $key => $result) {
 806:             if (array_key_exists('nesting', $result)) {
 807:                 $nesting = $result['nesting'];
 808:             } else {
 809:                 $nesting = 0;
 810:             }
 811:             while ($nesting + 1 < count($orders))
 812:                 array_pop($orders);
 813:             while ($nesting + 1 > count($orders))
 814:                 array_push($orders, -1);
 815:             $result['id'] = 0;
 816:             if (isset($result['include_li'])) {
 817:                 $includeli = $result['include_li'];
 818:             } else {
 819:                 $includeli = 1;
 820:             }
 821:             $type = $result['type'];
 822:             switch ($type) {
 823:                 case 'all_items':
 824:                     $orders[$nesting] ++;
 825:                     query("INSERT INTO " . prefix('menu') . " (`title`,`link`,`type`,`show`,`menuset`,`sort_order`) " .
 826:                                     "VALUES ('" . gettext('Home') . "', '" . WEBPATH . '/' . "','galleryindex','1'," . db_quote($menuset) . ',' . db_quote($orders), true);
 827:                     $orders[$nesting] = addAlbumsToDatabase($menuset, $orders);
 828:                     if (extensionEnabled('zenpage')) {
 829:                         $orders[$nesting] ++;
 830:                         query("INSERT INTO " . prefix('menu') . " (title`,`link`,`type`,`show`,`menuset`,`sort_order`) " .
 831:                                         "VALUES ('" . gettext('News index') . "', '" . getNewsIndexURL() . "','zenpagenewsindex','1'," . db_quote($menuset) . ',' . db_quote(sprintf('%03u', $base + 1)), true);
 832:                         $orders[$nesting] = addPagesToDatabase($menuset, $orders) + 1;
 833:                         $orders[$nesting] = addCategoriesToDatabase($menuset, $orders);
 834:                     }
 835:                     $type = false;
 836:                     break;
 837:                 case 'all_albums':
 838:                     $orders[$nesting] ++;
 839:                     $orders[$nesting] = addAlbumsToDatabase($menuset, $orders);
 840:                     $type = false;
 841:                     break;
 842:                 case 'all_zenpagepages':
 843:                     $orders[$nesting] ++;
 844:                     $orders[$nesting] = addPagesToDatabase($menuset, $orders);
 845:                     $type = false;
 846:                     break;
 847:                 case 'all_zenpagecategorys':
 848:                     $orders[$nesting] ++;
 849:                     $orders[$nesting] = addCategoriesToDatabase($menuset, $orders);
 850:                     $type = false;
 851:                     break;
 852:                 case 'album':
 853:                     $result['title'] = NULL;
 854:                     if (empty($result['link'])) {
 855:                         $success = -1;
 856:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty link.'), $key));
 857:                     }
 858:                     break;
 859:                 case 'galleryindex':
 860:                     $result['link'] = NULL;
 861:                     if (empty($result['title'])) {
 862:                         $success = -1;
 863:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty title.'), $key));
 864:                     }
 865:                     break;
 866:                 case 'zenpagepage':
 867:                     $result['title'] = NULL;
 868:                     if (empty($result['link'])) {
 869:                         $success = -1;
 870:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty link.'), $key));
 871:                     }
 872:                     break;
 873:                 case 'zenpagenewsindex':
 874:                     $result['link'] = NULL;
 875:                     if (empty($result['title'])) {
 876:                         $success = -1;
 877:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty title.'), $key));
 878:                     }
 879:                     break;
 880:                 case 'zenpagecategory':
 881:                     $result['title'] = NULL;
 882:                     if (empty($result['link'])) {
 883:                         $success = -1;
 884:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty link.'), $key));
 885:                     }
 886:                     break;
 887:                 case 'custompage':
 888:                     if (empty($result['title']) || empty($result['link'])) {
 889:                         $success = -1;
 890:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty title or link.'), $key));
 891:                     }
 892:                     break;
 893:                 case 'customlink':
 894:                     if (empty($result['title'])) {
 895:                         $success = -1;
 896:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty title.'), $key));
 897:                     } else if (empty($result['link'])) {
 898:                         $result['link'] = seoFriendly(get_language_string($result['title']));
 899:                     }
 900:                     break;
 901:                 case 'menulabel':
 902:                     if (empty($result['title'])) {
 903:                         $success = -1;
 904:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty title.'), $key));
 905:                     }
 906:                     $result['link'] = sha1($result['title']);
 907:                     break;
 908:                 case 'menufunction':
 909:                     if (empty($result['title']) || empty($result['link'])) {
 910:                         $success = -1;
 911:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty title or link.'), $key));
 912:                     }
 913:                     break;
 914:                 case 'html':
 915:                     if (empty($result['title']) || empty($result['link'])) {
 916:                         $success = -1;
 917:                         debugLog(sprintf(gettext('createMenuIfNotExists item %s has an empty title or link.'), $key));
 918:                     }
 919:                     break;
 920:                 default:
 921:                     $success = -1;
 922:                     debugLog(sprintf(gettext('createMenuIfNotExists item %s has an invalid type.'), $key));
 923:                     break;
 924:             }
 925:             if ($success > 0 && $type) {
 926:                 $orders[$nesting] ++;
 927:                 $sort_order = '';
 928:                 for ($i = 0; $i < count($orders); $i++) {
 929:                     $sort_order .= sprintf('%03u', $orders[$i]) . '-';
 930:                 }
 931:                 $sort_order = substr($sort_order, 0, -1);
 932:                 $sql = "INSERT INTO " . prefix('menu') . " (`title`,`link`,`type`,`show`,`menuset`,`sort_order`,`include_li`) " .
 933:                                 "VALUES (" . db_quote($result['title']) .
 934:                                 ", " . db_quote($result['link']) .
 935:                                 "," . db_quote($result['type']) . "," . $result['show'] .
 936:                                 "," . db_quote($menuset) . "," . db_quote($sort_order) . ",$includeli)";
 937:                 if (!query($sql, false)) {
 938:                     $success = -2;
 939:                     debugLog(sprintf(gettext('createMenuIfNotExists item %1$s query (%2$s) failed: %3$s.'), $key, $sql, db_error()));
 940:                 }
 941:             }
 942:         }
 943:     } else {
 944:         $success = 0;
 945:     }
 946:     if ($success < 0) {
 947:         trigger_error(gettext('createMenuIfNotExists has posted processing errors to your debug log.'), E_USER_NOTICE);
 948:     }
 949:     return $success;
 950: }
 951: 
 952: /**
 953:  * Gets the direct child menu items of the current menu item. Returns the array of the items or false.
 954:  * @param string $menuset current menu set
 955:  * @param bool $allchilds Set to false (default) for the next level childs, true for childs of all further levels
 956:  * @return array|false
 957:  */
 958: function getMenuItemChilds($menuset = 'default', $allchilds = false) {
 959:   $sortorder = getCurrentMenuItem($menuset);
 960:   $items = getMenuItems($menuset, getMenuVisibility());
 961:   if (count($items) > 0) {
 962:     if ($sortorder) {
 963:       $length = strlen($sortorder);
 964:       $level = explode('-', $sortorder);
 965:       $level = count($level);
 966:       $childs = array();
 967:       foreach ($items as $item) {
 968:         $itemlevel = explode('-', $item['sort_order']);
 969:         $itemlevel = count($itemlevel);
 970:         if ($allchilds) {
 971:           $is_validchild = true;
 972:         } else {
 973:           if ($itemlevel == $level + 1) {
 974:             $is_validchild = true;
 975:           } else {
 976:             $is_validchild = false;
 977:           }
 978:         }
 979:         if (substr($item['sort_order'], 0, $length) == $sortorder && $item['sort_order'] != $sortorder && $is_validchild) {
 980:           array_push($childs, $item);
 981:         }
 982:       }
 983:       if (!empty($childs)) {
 984:         return $childs;
 985:       }
 986:     }
 987:   }
 988:   return false;
 989: }
 990: 
 991: /**
 992:  * Prints a context sensitive menu of all pages as a unordered html list
 993:  *
 994:  * @param string $menuset the menu tree to output
 995:  * @param string $option The mode for the menu:
 996:  *                                              "list" context sensitive toplevel plus sublevel pages,
 997:  *                                              "list-top" only top level pages,
 998:  *                                              "omit-top" only sub level pages
 999:  *                                              "list-sub" lists only the current pages direct offspring
1000:  * @param string $css_id CSS id of the top level list
1001:  * @param string $css_class_topactive class of the active item in the top level list
1002:  * @param string $css_class CSS class of the sub level list(s)
1003:  * @param string $css_class_active CSS class of the sub level list(s)
1004:  * @param string $indexname insert the name (default "Gallery Index") how you want to call the link to the gallery index, insert "" (default) if you don't use it, it is not printed then.
1005:  * @param int $showsubs Set to depth of sublevels that should be shown always. 0 by default. To show all, set to a true! Only valid if option=="list".
1006:  * @param bool $counter TRUE (FALSE default) if you want the count of articles for Zenpage news categories or images/subalbums for albums.
1007: 
1008:  * @return string
1009:  */
1010: function printCustomMenu($menuset = 'default', $option = 'list', $css_id = '', $css_class_topactive = '', $css_class = '', $css_class_active = '', $showsubs = 0, $counter = false) {
1011:     global $_zp_zenpage, $_zp_gallery_page, $_zp_current_zenpage_page, $_zp_current_category;
1012:     $itemcounter = '';
1013:     if ($css_id != "") {
1014:         $css_id = " id='" . $css_id . "'";
1015:     }
1016:     if ($showsubs === true)
1017:         $showsubs = 9999999999;
1018: 
1019:     $sortorder = getCurrentMenuItem($menuset);
1020:     $items = getMenuItems($menuset, getMenuVisibility());
1021: 
1022:     if (count($items) == 0)
1023:         return; // nothing to do
1024:     $currentitem_parentid = @$items[$sortorder]['parentid'];
1025:     if ($startlist = !($option == 'omit-top' || $option == 'list-sub')) {
1026:         echo "<ul$css_id>";
1027:     }
1028:     $pageid = @$items[$sortorder]['id'];
1029:     $baseindent = max(1, count(explode("-", $sortorder)));
1030:     $indent = 1;
1031:     $open = array($indent => 0);
1032:     $parents = array(NULL);
1033:     $order = explode('-', $sortorder);
1034:     $mylevel = count($order);
1035:     $myparentsort = array_shift($order);
1036: 
1037:     for ($c = 0; $c <= $mylevel; $c++) {
1038:         $parents[$c] = NULL;
1039:     }
1040:     foreach ($items as $item) {
1041:         $itemarray = getItemTitleAndURL($item);
1042:         $itemURL = $itemarray['url'];
1043:         $itemtitle = $itemarray['title'];
1044:         $level = max(1, count(explode('-', $item['sort_order'])));
1045:         $process = (($level <= $showsubs && $option == "list") // user wants all the pages whose level is <= to the parameter
1046:                         || ($option == 'list' || $option == 'list-top') && $level == 1 // show the top level
1047:                         || (($option == 'list' || ($option == 'omit-top' && $level > 1)) && (($item['id'] == $pageid) // current page
1048:                         || ($item['parentid'] == $pageid) // offspring of current page
1049:                         || ($level < $mylevel && $level > 1 && strpos($item['sort_order'], $myparentsort) === 0)) // direct ancestor
1050:                         || (($level == $mylevel) && ($currentitem_parentid == $item['parentid'])) // sibling
1051:                         ) || ($option == 'list-sub' && ($item['parentid'] == $pageid) // offspring of the current page
1052:                         )
1053:                         );
1054:         if ($process) {
1055:             if ($level > $indent) {
1056:                 echo "\n" . str_pad("\t", $indent, "\t") . "<ul class=\"$css_class menu_{$item['type']}\">\n";
1057:                 $indent++;
1058:                 $parents[$indent] = NULL;
1059:                 $open[$indent] = 0;
1060:             } else if ($level < $indent) {
1061:                 $parents[$indent] = NULL;
1062:                 while ($indent > $level) {
1063:                     if ($open[$indent]) {
1064:                         $open[$indent] --;
1065:                         echo "</li>\n";
1066:                     }
1067:                     $indent--;
1068:                     echo str_pad("\t", $indent, "\t") . "</ul>\n";
1069:                 }
1070:             } else { // level == indent, have not changed
1071:                 if ($open[$indent]) { // level = indent
1072:                     echo str_pad("\t", $indent, "\t") . "</li>\n";
1073:                     $open[$indent] --;
1074:                 } else {
1075:                     echo "\n";
1076:                 }
1077:             }
1078: 
1079:             if ($open[$indent]) { // close an open LI if it exists
1080:                 echo "</li>\n";
1081:                 $open[$indent] --;
1082:             }
1083: 
1084:             echo str_pad("\t", $indent - 1, "\t");
1085:             $open[$indent] += $item['include_li'];
1086:             $parents[$indent] = $item['id'];
1087:             if ($counter) {
1088:                 switch ($item['type']) {
1089:                     case'album':
1090:                         $albumobj = newAlbum($item['link']);
1091:                         $numimages = $albumobj->getNumImages();
1092:                         $numsubalbums = $albumobj->getNumAlbums();
1093:                         $itemcounter = ' <span style="white-space:nowrap;"><small>(';
1094:                         if ($numsubalbums != 0) {
1095:                             $itemcounter .= sprintf(ngettext('%u album', '%u albums', $numsubalbums), $numsubalbums);
1096:                         }
1097:                         if ($numimages != 0) {
1098:                             if ($numsubalbums != 0) {
1099:                                 $itemcounter .= ' ';
1100:                             }
1101:                             $itemcounter .= sprintf(ngettext('%u image', '%u images', $numimages), $numimages);
1102:                         }
1103:                         $itemcounter .= ')</small></span>';
1104: 
1105:                         break;
1106:                     case'zenpagecategory':
1107:                         if ((zp_loggedin(ZENPAGE_NEWS_RIGHTS | ALL_NEWS_RIGHTS))) {
1108:                             $published = "all";
1109:                         } else {
1110:                             $published = "published";
1111:                         }
1112:                         $catobj = new ZenpageCategory($item['link']);
1113:                         $catcount = count($catobj->getArticles(0, $published));
1114:                         $itemcounter = "<small> (" . $catcount . ")</small>";
1115:                         break;
1116:                 }
1117:             }
1118:             if ($item['id'] == $pageid && !is_null($pageid)) {
1119:                 if ($level == 1) { // top level
1120:                     $class = $css_class_topactive;
1121:                 } else {
1122:                     $class = $css_class_active;
1123:                 }
1124:                 echo '<li class="menu_' . trim($item['type'] . ' ' . $class) . '">' . $itemtitle . $itemcounter;
1125:             } else {
1126:                 if (strpos($sortorder, $item['sort_order']) === 0) { // we are in the heritage chain
1127:                     $class = ' ' . $css_class_active . '-' . ($mylevel - $level);
1128:                 } else {
1129:                     $class = '';
1130:                 }
1131:                 if ($item['include_li']) {
1132:                     echo '<li class="menu_' . $item['type'] . $class . '">';
1133:                 }
1134:                 if ($item['span_id'] || $item['span_class']) {
1135:                     echo '<span';
1136:                     if ($item['span_id'])
1137:                         echo ' id="' . $item['span_id'] . '"';
1138:                     if ($item['span_class'])
1139:                         echo ' class="' . $item['span_class'] . '"';
1140:                     echo '>';
1141:                 }
1142:                 switch ($item['type']) {
1143:                     case 'html':
1144:                         echo $item['link'];
1145:                         break;
1146:                     case 'menufunction':
1147:                         $i = strpos($itemURL, '(');
1148:                         if ($i) {
1149:                             if (function_exists(trim(substr($itemURL, 0, $i)))) {
1150:                                 eval($itemURL);
1151:                             }
1152:                         }
1153:                         break;
1154:                     case 'menulabel':
1155:                         echo $itemtitle;
1156:                         break;
1157:                     default:
1158:                         if (empty($itemURL)) {
1159:                             $itemURL = FULLWEBPATH;
1160:                         }
1161:                         echo '<a href="' . $itemURL . '" title="' . getBare($itemtitle) . '">' . $itemtitle . '</a>' . $itemcounter;
1162:                         break;
1163:                 }
1164:                 if ($item['span_id'] || $item['span_class']) {
1165:                     echo '</span>';
1166:                 }
1167:             }
1168:         }
1169:     }
1170:     // cleanup any hanging list elements
1171:     while ($indent > 1) {
1172:         if ($open[$indent]) {
1173:             echo "</li>\n";
1174:             $open[$indent] --;
1175:         }
1176:         $indent--;
1177:         echo str_pad("\t", $indent, "\t") . "</ul>";
1178:     }
1179:     if ($open[$indent]) {
1180:         echo "</li>\n";
1181:         $open[$indent] --;
1182:     } else {
1183:         echo "\n";
1184:     }
1185:     if ($startlist) {
1186:         echo "</ul>\n";
1187:     }
1188: }
1189: 
1190: ?>
1191: 
Zenphoto doc API documentation generated by ApiGen