We use cookies to improve your browsing experience, deliver advertisements or personalized content and analyze our traffic. By clicking "Accept All", you consent to our use of cookies.
Customize Consent Preferences
We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.
The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ...
Always Active
Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.
No cookies to display.
Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.
No cookies to display.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.
No cookies to display.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
No cookies to display.
Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.
ABSTRACT
The deadline for completing the Aidspan Strategy Survey has been extended to 18 February 2018.
Dear valued GFO reader,
We want to thank everyone who has completed the Aidspan Strategy Survey. For those who have not had the opportunity, we encourage you to do so. The deadline has been extended to Sunday, 18 February . The survey should take about five minutes and the responses will remain anonymous and confidential.
It is important that we hear from you, the readers of Global Fund Observer, about how you think Aidspan is performing and which issues you would like to see Aidspan focus on (in GFO and elsewhere).
Your valuable responses and comments will help us develop our new strategy for the 2018–2022 period.
Click here to access the Aidspan Strategy Survey.
Thank you.
Ida Hakizinka
Executive Director
⧉final public __construct(string $name, string $value = '', array $options = array()) Construct a new Cookie instance.
/**
* Construct a new Cookie instance.
*
* @param string $name The cookie's name
* @param string $value The cookie's value
* @param array<string, mixed> $options The cookie's options
*
* @throws CookieException
*/
Defined in <ROOT>/system/Cookie/Cookie.php:201
⧉public getId(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:248
⧉public getPrefix(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:256
⧉public getName(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:264
⧉public getPrefixedName(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:272
⧉public getValue(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:291
⧉public getExpiresTimestamp(): int {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:299
⧉public getExpiresString(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:307
⧉public isExpired(): bool {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:315
⧉public getMaxAge(): int {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:323
⧉public getPath(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:333
⧉public getDomain(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:341
⧉public isSecure(): bool {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:349
⧉public isHTTPOnly(): bool {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:357
⧉public getSameSite(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:365
⧉public isRaw(): bool {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:373
⧉public getOptions(): array {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:381
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:534
⧉public withRaw(bool $raw = true) {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:548
⧉public offsetExists($offset): bool Whether an offset exists.
/**
* Whether an offset exists.
*
* @param mixed $offset
*/
Defined in <ROOT>/system/Cookie/Cookie.php:568
⧉public offsetGet($offset): mixed Offset to retrieve.
/**
* Offset to retrieve.
*
* @param mixed $offset
*
* @throws InvalidArgumentException
*
* @return mixed
*/
Defined in <ROOT>/system/Cookie/Cookie.php:583
⧉public offsetSet($offset, $value): void Offset to set.
/**
* Offset to set.
*
* @param mixed $offset
* @param mixed $value
*
* @throws LogicException
*/
Defined in <ROOT>/system/Cookie/Cookie.php:600
⧉public offsetUnset($offset): void Offset to unset.
/**
* Offset to unset.
*
* @param mixed $offset
*
* @throws LogicException
*/
Defined in <ROOT>/system/Cookie/Cookie.php:612
⧉public toHeaderString(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:624
⧉public __toString(): string {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:632
⧉public toArray(): array {@inheritDoc}
/**
* {@inheritDoc}
*/
Defined in <ROOT>/system/Cookie/Cookie.php:683
⧉protected validateName(string $name, bool $raw): void Validates the cookie name per RFC 2616.
/**
* Validates the cookie name per RFC 2616.
*
* If `$raw` is true, names should not contain invalid characters
* as `setrawcookie()` will reject this.
*
* @throws CookieException
*/
Defined in <ROOT>/system/Cookie/Cookie.php:731
⧉protected validatePrefix(string $prefix, bool $secure, string $path, string $domain): void Validates the special prefixes if some attribute requirements are met.
/**
* Validates the special prefixes if some attribute requirements are met.
*
* @throws CookieException
*/
Defined in <ROOT>/system/Cookie/Cookie.php:747
⧉protected validateSameSite(string $samesite, bool $secure): void Validates the `SameSite` to be within the allowed types.
/**
* Validates the `SameSite` to be within the allowed types.
*
* @throws CookieException
*
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
*/
Defined in <ROOT>/system/Cookie/Cookie.php:765
⇄⧉public static setDefaults($config = array()): array<string, mixed> The old defaults array. Useful for resetting. Set the default attributes to a Cookie instance by injecting
the values from...
/**
* Set the default attributes to a Cookie instance by injecting
* the values from the `CookieConfig` config or an array.
*
* This method is called from Response::__construct().
*
* @param array<string, mixed>|CookieConfig $config
*
* @return array<string, mixed> The old defaults array. Useful for resetting.
*/
Defined in <ROOT>/system/Cookie/Cookie.php:128
⇄⧉public static fromHeaderString(string $cookie, bool $raw = false): static Create a new Cookie instance from a `Set-Cookie` header.
/**
* Create a new Cookie instance from a `Set-Cookie` header.
*
* @throws CookieException
*
* @return static
*/
Defined in <ROOT>/system/Cookie/Cookie.php:166
⧉protected static convertExpiresTimestamp($expires0): int Converts expires time to Unix format.
/**
* Converts expires time to Unix format.
*
* @param DateTimeInterface|int|string $expires
*/
Defined in <ROOT>/system/Cookie/Cookie.php:698
/**
* Constructor.
*
* @param \Config\Logger $config
*
* @throws RuntimeException
*/
Defined in <ROOT>/system/Log/Logger.php:119
⧉public emergency($message, array $context = array()): bool System is unusable.
/**
* System is unusable.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:157
⧉public alert($message, array $context = array()): bool Action must be taken immediately.
/**
* Action must be taken immediately.
*
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:170
⧉public error($message, array $context = array()): bool Runtime errors that do not require immediate action but should typically
be ...
/**
* Runtime errors that do not require immediate action but should typically
* be logged and monitored.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:193
⧉public warning($message, array $context = array()): bool Exceptional occurrences that are not errors.
/**
* Exceptional occurrences that are not errors.
*
* Example: Use of deprecated APIs, poor use of an API, undesirable things
* that are not necessarily wrong.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:206
⧉public notice($message, array $context = array()): bool Normal but significant events.
/**
* Normal but significant events.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:216
/**
* Detailed debug information.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:238
⧉public log($level, $message, array $context = array()): bool Logs with an arbitrary level.
/**
* Logs with an arbitrary level.
*
* @param mixed $level
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:249
⧉public determineFile(): array Determines the file and line that the logging call
was made from by analyzin...
/**
* Determines the file and line that the logging call
* was made from by analyzing the backtrace.
* Find the earliest stack frame that is part of our logging system.
*/
Defined in <ROOT>/system/Log/Logger.php:377
⧉protected interpolate($message, array $context = array()): mixed Replaces any placeholders in the message with variables
from the context, as...
/**
* Replaces any placeholders in the message with variables
* from the context, as well as a few special items like:
*
* {session_vars}
* {post_vars}
* {get_vars}
* {env}
* {env:foo}
* {file}
* {line}
*
* @param mixed $message
*
* @return mixed
*/
Defined in <ROOT>/system/Log/Logger.php:319
⧉protected cleanFileNames(string $file): string Cleans the paths of filenames by replacing APPPATH, SYSTEMPATH, FCPATH
with ...
/**
* Cleans the paths of filenames by replacing APPPATH, SYSTEMPATH, FCPATH
* with the actual var. i.e.
*
* /var/www/site/app/Controllers/Home.php
* becomes:
* APPPATH/Controllers/Home.php
*
* @deprecated Use dedicated `clean_path()` function.
*/
Defined in <ROOT>/system/Log/Logger.php:427
Defined in <ROOT>/system/Session/Handlers/FileHandler.php:65
⧉public open($path, $name): bool Re-initialize existing session, or creates a new one.
/**
* Re-initialize existing session, or creates a new one.
*
* @param string $path The path where to store/retrieve the session
* @param string $name The session name
*
* @throws SessionException
*/
Defined in <ROOT>/system/Session/Handlers/FileHandler.php:95
⧉public read($id): false|string Returns an encoded string of the read data. Reads the session data from the session storage, and returns the results.
/**
* Reads the session data from the session storage, and returns the results.
*
* @param string $id The session ID
*
* @return false|string Returns an encoded string of the read data.
* If nothing was read, it must return false.
*/
Defined in <ROOT>/system/Session/Handlers/FileHandler.php:122
⧉public write($id, $data): bool Writes the session data to the session storage.
/**
* Writes the session data to the session storage.
*
* @param string $id The session ID
* @param string $data The encoded session data
*/
Defined in <ROOT>/system/Session/Handlers/FileHandler.php:180
⧉public close(): bool Closes the current session.
/**
* Closes the current session.
*/
Defined in <ROOT>/system/Session/Handlers/FileHandler.php:225
⧉public destroy($id): bool Destroys a session
/**
* Destroys a session
*
* @param string $id The session ID being destroyed
*/
Defined in <ROOT>/system/Session/Handlers/FileHandler.php:243
⧉public gc($max_lifetime): false|int Returns the number of deleted sessions on success, or false on failure. Cleans up expired sessions.
/**
* Cleans up expired sessions.
*
* @param int $max_lifetime Sessions that have not updated
* for the last max_lifetime seconds will be removed.
*
* @return false|int Returns the number of deleted sessions on success, or false on failure.
*/
Defined in <ROOT>/system/Session/Handlers/FileHandler.php:271
⧉public setLogger(Psr\Log\LoggerInterface $logger) Sets a logger.
/**
* Sets a logger.
*
* @param LoggerInterface $logger
*/
Inherited from CodeIgniter\Session\Handlers\BaseHandler
Defined in <ROOT>/vendor/psr/log/Psr/Log/LoggerAwareTrait.php:22
⧉protected configureSessionIDRegex() Configure Session ID regular expression
/**
* Configure Session ID regular expression
*/
Defined in <ROOT>/system/Session/Handlers/FileHandler.php:312
⧉protected destroyCookie(): bool Internal method to force removal of a cookie by the client
when session_dest...
/**
* Internal method to force removal of a cookie by the client
* when session_destroy() is called.
*/
Inherited from CodeIgniter\Session\Handlers\BaseHandler
Defined in <ROOT>/system/Session/Handlers/BaseHandler.php:136
⧉protected lockSession(string $sessionID): bool A dummy method allowing drivers with no locking functionality
(databases oth...
/**
* A dummy method allowing drivers with no locking functionality
* (databases other than PostgreSQL and MySQL) to act as if they
* do acquire a lock.
*/
Inherited from CodeIgniter\Session\Handlers\BaseHandler
Defined in <ROOT>/system/Session/Handlers/BaseHandler.php:150
⧉protected releaseLock(): bool Releases the lock, if any.
/**
* Releases the lock, if any.
*/
Inherited from CodeIgniter\Session\Handlers\BaseHandler
Defined in <ROOT>/system/Session/Handlers/BaseHandler.php:160
⧉protected fail(): bool Drivers other than the 'files' one don't (need to) use the
session.save_path...
/**
* Drivers other than the 'files' one don't (need to) use the
* session.save_path INI setting, but that leads to confusing
* error messages emitted by PHP when open() or write() fail,
* as the message contains session.save_path ...
*
* To work around the problem, the drivers will call this method
* so that the INI is set just in time for the error message to
* be properly generated.
*/
Inherited from CodeIgniter\Session\Handlers\BaseHandler
Defined in <ROOT>/system/Session/Handlers/BaseHandler.php:177
/**
* Constructor.
*
* @param \Config\Logger $config
*
* @throws RuntimeException
*/
Defined in <ROOT>/system/Log/Logger.php:119
⧉public emergency($message, array $context = array()): bool System is unusable.
/**
* System is unusable.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:157
⧉public alert($message, array $context = array()): bool Action must be taken immediately.
/**
* Action must be taken immediately.
*
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:170
⧉public error($message, array $context = array()): bool Runtime errors that do not require immediate action but should typically
be ...
/**
* Runtime errors that do not require immediate action but should typically
* be logged and monitored.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:193
⧉public warning($message, array $context = array()): bool Exceptional occurrences that are not errors.
/**
* Exceptional occurrences that are not errors.
*
* Example: Use of deprecated APIs, poor use of an API, undesirable things
* that are not necessarily wrong.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:206
⧉public notice($message, array $context = array()): bool Normal but significant events.
/**
* Normal but significant events.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:216
/**
* Detailed debug information.
*
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:238
⧉public log($level, $message, array $context = array()): bool Logs with an arbitrary level.
/**
* Logs with an arbitrary level.
*
* @param mixed $level
* @param string $message
*/
Defined in <ROOT>/system/Log/Logger.php:249
⧉public determineFile(): array Determines the file and line that the logging call
was made from by analyzin...
/**
* Determines the file and line that the logging call
* was made from by analyzing the backtrace.
* Find the earliest stack frame that is part of our logging system.
*/
Defined in <ROOT>/system/Log/Logger.php:377
⧉protected interpolate($message, array $context = array()): mixed Replaces any placeholders in the message with variables
from the context, as...
/**
* Replaces any placeholders in the message with variables
* from the context, as well as a few special items like:
*
* {session_vars}
* {post_vars}
* {get_vars}
* {env}
* {env:foo}
* {file}
* {line}
*
* @param mixed $message
*
* @return mixed
*/
Defined in <ROOT>/system/Log/Logger.php:319
⧉protected cleanFileNames(string $file): string Cleans the paths of filenames by replacing APPPATH, SYSTEMPATH, FCPATH
with ...
/**
* Cleans the paths of filenames by replacing APPPATH, SYSTEMPATH, FCPATH
* with the actual var. i.e.
*
* /var/www/site/app/Controllers/Home.php
* becomes:
* APPPATH/Controllers/Home.php
*
* @deprecated Use dedicated `clean_path()` function.
*/
Defined in <ROOT>/system/Log/Logger.php:427
new \CodeIgniter\Session\Session(SessionHandlerInterface $driver, Config\App $config)
/**
* Constructor.
*
* Extract configuration settings and save them here.
*/
Defined in <ROOT>/system/Session/Session.php:169
⇄⧉public start(): mixed Initialize the session container and starts up the session.
$value->start()
/**
* Initialize the session container and starts up the session.
*
* @return mixed
*/
Defined in <ROOT>/system/Session/Session.php:208
⇄⧉public stop() Does a full stop of the session:
$value->stop()
/**
* Does a full stop of the session:
*
* - destroys the session
* - unsets the session id
* - destroys the session cookie
*/
Defined in <ROOT>/system/Session/Session.php:271
⇄⧉public regenerate(bool $destroy = false) Regenerates the session ID.
$value->regenerate(bool $destroy = false)
/**
* Regenerates the session ID.
*
* @param bool $destroy Should old session data be destroyed?
*/
Defined in <ROOT>/system/Session/Session.php:410
⇄⧉public destroy() Destroys the current session.
$value->destroy()
/**
* Destroys the current session.
*/
Defined in <ROOT>/system/Session/Session.php:419
⇄⧉public set($data, $value = null) Sets user data into the session.
$value->set($data, $value = null)
/**
* Sets user data into the session.
*
* If $data is a string, then it is interpreted as a session property
* key, and $value is expected to be non-null.
*
* If $data is an array, it is expected to be an array of key/value pairs
* to be set as session properties.
*
* @param array|string $data Property name or associative array of properties
* @param mixed $value Property value if single key provided
*/
Defined in <ROOT>/system/Session/Session.php:440
⇄⧉public get(?string $key = null): mixed The property value(s) Get user data that has been set in the session.
$value->get(?string $key = null)
/**
* Get user data that has been set in the session.
*
* If the property exists as "normal", returns it.
* Otherwise, returns an array of any temp or flash data values with the
* property key.
*
* Replaces the legacy method $session->userdata();
*
* @param string|null $key Identifier of the session property to retrieve
*
* @return mixed The property value(s)
*/
Defined in <ROOT>/system/Session/Session.php:470
⇄⧉public has(string $key): bool Returns whether an index exists in the session array.
$value->has(string $key)
/**
* Returns whether an index exists in the session array.
*
* @param string $key Identifier of the session property we are interested in.
*/
Defined in <ROOT>/system/Session/Session.php:503
⇄⧉public push(string $key, array $data) Push new value onto session value that is array.
$value->push(string $key, array $data)
/**
* Push new value onto session value that is array.
*
* @param string $key Identifier of the session property we are interested in.
* @param array $data value to be pushed to existing session key.
*/
Defined in <ROOT>/system/Session/Session.php:514
⇄⧉public remove($key) Remove one or more session properties.
$value->remove($key)
/**
* Remove one or more session properties.
*
* If $key is an array, it is interpreted as an array of string property
* identifiers to remove. Otherwise, it is interpreted as the identifier
* of a specific session property to remove.
*
* @param array|string $key Identifier of the session property or properties to remove.
*/
Defined in <ROOT>/system/Session/Session.php:530
⧉public __set(string $key, $value) Magic method to set variables in the session by simply calling
$session->foo...
/**
* Magic method to set variables in the session by simply calling
* $session->foo = bar;
*
* @param string $key Identifier of the session property to set.
* @param array|string $value
*/
Defined in <ROOT>/system/Session/Session.php:550
⧉public __get(string $key): string|null Magic method to get session variables by simply calling
$foo = $session->foo;
/**
* Magic method to get session variables by simply calling
* $foo = $session->foo;
*
* @param string $key Identifier of the session property to remove.
*
* @return string|null
*/
Defined in <ROOT>/system/Session/Session.php:563
⧉public __isset(string $key): bool Magic method to check for session variables.
Different from has() in that it...
/**
* Magic method to check for session variables.
* Different from has() in that it will validate 'session_id' as well.
* Mostly used by internal PHP functions, users should stick to has()
*
* @param string $key Identifier of the session property to remove.
*/
Defined in <ROOT>/system/Session/Session.php:585
⇄⧉public setFlashdata($data, $value = null) Sets data into the session that will only last for a single request.
Perfect...
$value->setFlashdata($data, $value = null)
/**
* Sets data into the session that will only last for a single request.
* Perfect for use with single-use status update messages.
*
* If $data is an array, it is interpreted as an associative array of
* key/value pairs for flashdata properties.
* Otherwise, it is interpreted as the identifier of a specific
* flashdata property, with $value containing the property value.
*
* @param array|string $data Property identifier or associative array of properties
* @param array|string $value Property value if $data is a scalar
*/
Defined in <ROOT>/system/Session/Session.php:602
⇄⧉public getFlashdata(?string $key = null): array|null The requested property value, or an associative array of them Retrieve one or more items of flash data from the session.
$value->getFlashdata(?string $key = null)
/**
* Retrieve one or more items of flash data from the session.
*
* If the item key is null, return all flashdata.
*
* @param string $key Property identifier
*
* @return array|null The requested property value, or an associative array of them
*/
Defined in <ROOT>/system/Session/Session.php:617
⇄⧉public keepFlashdata($key) Keeps a single piece of flash data alive for one more request.
$value->keepFlashdata($key)
/**
* Keeps a single piece of flash data alive for one more request.
*
* @param array|string $key Property identifier or array of them
*/
Defined in <ROOT>/system/Session/Session.php:642
⇄⧉public markAsFlashdata($key): bool Mark a session property or properties as flashdata.
$value->markAsFlashdata($key)
/**
* Mark a session property or properties as flashdata.
*
* @param array|string $key Property identifier or array of them
*
* @return bool False if any of the properties are not already set
*/
Defined in <ROOT>/system/Session/Session.php:654
⇄⧉public unmarkFlashdata($key) Unmark data in the session as flashdata.
$value->unmarkFlashdata($key)
/**
* Unmark data in the session as flashdata.
*
* @param mixed $key Property identifier or array of them
*/
Defined in <ROOT>/system/Session/Session.php:684
⇄⧉public getFlashKeys(): array Retrieve all of the keys for session data marked as flashdata.
$value->getFlashKeys()
/**
* Retrieve all of the keys for session data marked as flashdata.
*
* @return array The property names of all flashdata
*/
Defined in <ROOT>/system/Session/Session.php:710
⇄⧉public setTempdata($data, $value = null, int $ttl = 300) Sets new data into the session, and marks it as temporary data
with a set li...
$value->setTempdata($data, $value = null, int $ttl = 300)
/**
* Sets new data into the session, and marks it as temporary data
* with a set lifespan.
*
* @param array|string $data Session data key or associative array of items
* @param null $value Value to store
* @param int $ttl Time-to-live in seconds
*/
Defined in <ROOT>/system/Session/Session.php:735
⇄⧉public getTempdata(?string $key = null): mixed Session data value or null if not found. Returns either a single piece of tempdata, or all temp data currently
in the...
$value->getTempdata(?string $key = null)
/**
* Returns either a single piece of tempdata, or all temp data currently
* in the session.
*
* @param string $key Session data key
*
* @return mixed Session data value or null if not found.
*/
Defined in <ROOT>/system/Session/Session.php:749
⇄⧉public removeTempdata(string $key) Removes a single piece of temporary data from the session.
$value->removeTempdata(string $key)
/**
* Removes a single piece of temporary data from the session.
*
* @param string $key Session data key
*/
Defined in <ROOT>/system/Session/Session.php:774
⇄⧉public markAsTempdata($key, int $ttl = 300): bool Mark one of more pieces of data as being temporary, meaning that
it has a se...
$value->markAsTempdata($key, int $ttl = 300)
/**
* Mark one of more pieces of data as being temporary, meaning that
* it has a set lifespan within the session.
*
* @param array|string $key Property identifier or array of them
* @param int $ttl Time to live, in seconds
*
* @return bool False if any of the properties were not set
*/
Defined in <ROOT>/system/Session/Session.php:789
⇄⧉public unmarkTempdata($key) Unmarks temporary data in the session, effectively removing its
lifespan and...
$value->unmarkTempdata($key)
/**
* Unmarks temporary data in the session, effectively removing its
* lifespan and allowing it to live as long as the session does.
*
* @param array|string $key Property identifier or array of them
*/
Defined in <ROOT>/system/Session/Session.php:834
⇄⧉public getTempKeys(): array Retrieve the keys of all session data that have been marked as temporary data.
$value->getTempKeys()
/**
* Retrieve the keys of all session data that have been marked as temporary data.
*/
Defined in <ROOT>/system/Session/Session.php:858
⧉protected configure() Configuration.
/**
* Configuration.
*
* Handle input binds and configuration defaults.
*/
Defined in <ROOT>/system/Session/Session.php:287
⧉protected configureSidLength() Configure session ID length
/**
* Configure session ID length
*
* To make life easier, we used to force SHA-1 and 4 bits per
* character on everyone. And of course, someone was unhappy.
*
* Then PHP 7.1 broke backwards-compatibility because ext/session
* is such a mess that nobody wants to touch it with a pole stick,
* and the one guy who does, nobody has the energy to argue with.
*
* So we were forced to make changes, and OF COURSE something was
* going to break and now we have this pile of shit. -- Narf
*/
Defined in <ROOT>/system/Session/Session.php:341
⧉protected initVars() Handle temporary variables
/**
* Handle temporary variables
*
* Clears old "flash" data, marks the new one for deletion and handles
* "temp" data deletion.
*/
Defined in <ROOT>/system/Session/Session.php:382
⧉protected setSaveHandler() Sets the driver as the session handler in PHP.
Extracted for easier testing.
/**
* Sets the driver as the session handler in PHP.
* Extracted for easier testing.
*/
Defined in <ROOT>/system/Session/Session.php:879
⧉protected startSession() Starts the session.
Extracted for testing reasons.
/**
* Starts the session.
* Extracted for testing reasons.
*/
Defined in <ROOT>/system/Session/Session.php:888
⧉protected setCookie() Takes care of setting the cookie on the client side.
/**
* Takes care of setting the cookie on the client side.
*
* @codeCoverageIgnore
*/
Defined in <ROOT>/system/Session/Session.php:904
⇄⧉public __construct() Will attempt to get environment variables with names
that match the properti...
new \Config\App()
/**
* Will attempt to get environment variables with names
* that match the properties of the child class.
*
* The "shortPrefix" is the lowercase-only config class name.
*/
Inherited from CodeIgniter\Config\BaseConfig
Defined in <ROOT>/system/Config/BaseConfig.php:60
/**
* Retrieve an environment-specific configuration setting
*
* @return string|null
*/
Inherited from CodeIgniter\Config\BaseConfig
Defined in <ROOT>/system/Config/BaseConfig.php:128
⧉protected registerProperties() Provides external libraries a simple way to register one or more
options int...
/**
* Provides external libraries a simple way to register one or more
* options into a config file.
*
* @throws ReflectionException
*/
Inherited from CodeIgniter\Config\BaseConfig
Defined in <ROOT>/system/Config/BaseConfig.php:174
⧉public shouldDiscover(string $alias): bool Should the application auto-discover the requested resource.
/**
* Should the application auto-discover the requested resource.
*/
Inherited from CodeIgniter\Modules\Modules
Defined in <ROOT>/system/Modules/Modules.php:45
/**
* Constructor.
*
* @param string $uri
*
* @throws InvalidArgumentException
*/
Defined in <ROOT>/system/HTTP/URI.php:232
⇄⧉public setSilent(bool $silent = true): URI If $silent == true, then will not throw exceptions and will
attempt to conti...
$value->uri->setSilent(bool $silent = true)
/**
* If $silent == true, then will not throw exceptions and will
* attempt to continue gracefully.
*
* @return URI
*/
Defined in <ROOT>/system/HTTP/URI.php:245
⇄⧉public useRawQueryString(bool $raw = true): URI If $raw == true, then will use parseStr() method
instead of native parse_str...
$value->uri->useRawQueryString(bool $raw = true)
/**
* If $raw == true, then will use parseStr() method
* instead of native parse_str() function.
*
* @return URI
*/
Defined in <ROOT>/system/HTTP/URI.php:258
⇄⧉public setURI(?string $uri = null): URI Sets and overwrites any current URI information.
$value->uri->setURI(?string $uri = null)
/**
* Sets and overwrites any current URI information.
*
* @return URI
*/
Defined in <ROOT>/system/HTTP/URI.php:270
⇄⧉public getScheme(): string Retrieve the scheme component of the URI.
$value->uri->getScheme()
/**
* Retrieve the scheme component of the URI.
*
* If no scheme is present, this method MUST return an empty string.
*
* The value returned MUST be normalized to lowercase, per RFC 3986
* Section 3.1.
*
* The trailing ":" character is not part of the scheme and MUST NOT be
* added.
*
* @see https://tools.ietf.org/html/rfc3986#section-3.1
*
* @return string The URI scheme.
*/
Defined in <ROOT>/system/HTTP/URI.php:304
⇄⧉public getAuthority(bool $ignorePort = false): string Retrieve the authority component of the URI.
/**
* Retrieve the authority component of the URI.
*
* If no authority information is present, this method MUST return an empty
* string.
*
* The authority syntax of the URI is:
*
* <pre>
* [user-info@]host[:port]
* </pre>
*
* If the port component is not set or is the standard port for the current
* scheme, it SHOULD NOT be included.
*
* @see https://tools.ietf.org/html/rfc3986#section-3.2
*
* @return string The URI authority, in "[user-info@]host[:port]" format.
*/
Defined in <ROOT>/system/HTTP/URI.php:328
⇄⧉public getUserInfo(): string|null The URI user information, in "username[:password]" format. Retrieve the user information component of the URI.
$value->uri->getUserInfo()
/**
* Retrieve the user information component of the URI.
*
* If no user information is present, this method MUST return an empty
* string.
*
* If a user is present in the URI, this will return that value;
* additionally, if the password is also present, it will be appended to the
* user value, with a colon (":") separating the values.
*
* NOTE that be default, the password, if available, will NOT be shown
* as a security measure as discussed in RFC 3986, Section 7.5. If you know
* the password is not a security issue, you can force it to be shown
* with $this->showPassword();
*
* The trailing "@" character is not part of the user information and MUST
* NOT be added.
*
* @return string|null The URI user information, in "username[:password]" format.
*/
Defined in <ROOT>/system/HTTP/URI.php:371
⇄⧉public showPassword(bool $val = true): URI Temporarily sets the URI to show a password in userInfo. Will
reset itself a...
$value->uri->showPassword(bool $val = true)
/**
* Temporarily sets the URI to show a password in userInfo. Will
* reset itself after the first call to authority().
*
* @return URI
*/
Defined in <ROOT>/system/HTTP/URI.php:388
⇄⧉public getHost(): string Retrieve the host component of the URI.
$value->uri->getHost()
/**
* Retrieve the host component of the URI.
*
* If no host is present, this method MUST return an empty string.
*
* The value returned MUST be normalized to lowercase, per RFC 3986
* Section 3.2.2.
*
* @see http://tools.ietf.org/html/rfc3986#section-3.2.2
*
* @return string The URI host.
*/
Defined in <ROOT>/system/HTTP/URI.php:407
⇄⧉public getPort(): int|null The URI port. Retrieve the port component of the URI.
$value->uri->getPort()
/**
* Retrieve the port component of the URI.
*
* If a port is present, and it is non-standard for the current scheme,
* this method MUST return it as an integer. If the port is the standard port
* used with the current scheme, this method SHOULD return null.
*
* If no port is present, and no scheme is present, this method MUST return
* a null value.
*
* If no port is present, but a scheme is present, this method MAY return
* the standard port for that scheme, but SHOULD return null.
*
* @return int|null The URI port.
*/
Defined in <ROOT>/system/HTTP/URI.php:427
⇄⧉public getPath(): string Retrieve the path component of the URI.
$value->uri->getPath()
/**
* Retrieve the path component of the URI.
*
* The path can either be empty or absolute (starting with a slash) or
* rootless (not starting with a slash). Implementations MUST support all
* three syntaxes.
*
* Normally, the empty path "" and absolute path "/" are considered equal as
* defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically
* do this normalization because in contexts with a trimmed base path, e.g.
* the front controller, this difference becomes significant. It's the task
* of the user to handle both "" and "/".
*
* The value returned MUST be percent-encoded, but MUST NOT double-encode
* any characters. To determine what characters to encode, please refer to
* RFC 3986, Sections 2 and 3.3.
*
* As an example, if the value should include a slash ("/") not intended as
* delimiter between path segments, that value MUST be passed in encoded
* form (e.g., "%2F") to the instance.
*
* @see https://tools.ietf.org/html/rfc3986#section-2
* @see https://tools.ietf.org/html/rfc3986#section-3.3
*
* @return string The URI path.
*/
Defined in <ROOT>/system/HTTP/URI.php:458
⇄⧉public getQuery(array $options = array()): string Retrieve the query string
$value->uri->getQuery(array $options = array())
/**
* Retrieve the query string
*/
Defined in <ROOT>/system/HTTP/URI.php:466
⇄⧉public getFragment(): string Retrieve a URI fragment
$value->uri->getFragment()
/**
* Retrieve a URI fragment
*/
Defined in <ROOT>/system/HTTP/URI.php:500
⇄⧉public getSegments(): array Returns the segments of the path as an array.
$value->uri->getSegments()
/**
* Returns the segments of the path as an array.
*/
Defined in <ROOT>/system/HTTP/URI.php:508
⇄⧉public getSegment(int $number, string $default = ''): string Returns the value of a specific segment of the URI path.
/**
* Returns the value of a specific segment of the URI path.
*
* @param int $number Segment number
* @param string $default Default value
*
* @return string The value of the segment. If no segment is found,
* throws InvalidArgumentError
*/
Defined in <ROOT>/system/HTTP/URI.php:522
⇄⧉public setSegment(int $number, $value): $this Set the value of a specific segment of the URI path.
Allows to set only exis...
$value->uri->setSegment(int $number, $value)
/**
* Set the value of a specific segment of the URI path.
* Allows to set only existing segments or add new one.
*
* @param mixed $value (string or int)
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:543
⇄⧉public getTotalSegments(): int Returns the total number of segments.
$value->uri->getTotalSegments()
/**
* Returns the total number of segments.
*/
Defined in <ROOT>/system/HTTP/URI.php:566
⇄⧉public __toString(): string Formats the URI as a string.
(string) $value->uri
/**
* Formats the URI as a string.
*
* Warning: For backwards-compatability this method
* assumes URIs with the same host as baseURL should
* be relative to the project's configuration.
* This aspect of __toString() is deprecated and should be avoided.
*/
Defined in <ROOT>/system/HTTP/URI.php:579
⇄⧉public setAuthority(string $str): $this Parses the given string and saves the appropriate authority pieces.
$value->uri->setAuthority(string $str)
/**
* Parses the given string and saves the appropriate authority pieces.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:634
⇄⧉public setScheme(string $str): $this Sets the scheme for this URI.
$value->uri->setScheme(string $str)
/**
* Sets the scheme for this URI.
*
* Because of the large number of valid schemes we cannot limit this
* to only http or https.
*
* @see https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:662
⇄⧉public setUserInfo(string $user, string $pass): $this Sets the userInfo/Authority portion of the URI.
/**
* Sets the userInfo/Authority portion of the URI.
*
* @param string $user The user's username
* @param string $pass The user's password
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:680
⇄⧉public setHost(string $str): $this Sets the host name to use.
$value->uri->setHost(string $str)
/**
* Sets the host name to use.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:693
⇄⧉public setPort(?int $port = null): $this Sets the port portion of the URI.
$value->uri->setPort(?int $port = null)
/**
* Sets the port portion of the URI.
*
* @param int $port
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:707
⇄⧉public setPath(string $path): $this Sets the path portion of the URI.
$value->uri->setPath(string $path)
/**
* Sets the path portion of the URI.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:731
⇄⧉public refreshPath(): $this Sets the path portion of the URI based on segments.
$value->uri->refreshPath()
/**
* Sets the path portion of the URI based on segments.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:747
⇄⧉public setQuery(string $query): $this Sets the query portion of the URI, while attempting
to clean the various par...
$value->uri->setQuery(string $query)
/**
* Sets the query portion of the URI, while attempting
* to clean the various parts of the query keys and values.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:764
⇄⧉public setQueryArray(array $query): URI A convenience method to pass an array of items in as the Query
portion of th...
$value->uri->setQueryArray(array $query)
/**
* A convenience method to pass an array of items in as the Query
* portion of the URI.
*
* @return URI
*/
Defined in <ROOT>/system/HTTP/URI.php:794
⇄⧉public addQuery(string $key, $value = null): $this Adds a single new element to the query vars.
$value->uri->addQuery(string $key, $value = null)
/**
* Adds a single new element to the query vars.
*
* @param mixed $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:808
⇄⧉public stripQuery($params): $this Removes one or more query vars from the URI.
$value->uri->stripQuery($params)
/**
* Removes one or more query vars from the URI.
*
* @param string ...$params
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:822
⇄⧉public keepQuery($params): $this Filters the query variables so that only the keys passed in
are kept. The re...
$value->uri->keepQuery($params)
/**
* Filters the query variables so that only the keys passed in
* are kept. The rest are removed from the object.
*
* @param string ...$params
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:839
⇄⧉public setFragment(string $string): $this Sets the fragment portion of the URI.
$value->uri->setFragment(string $string)
/**
* Sets the fragment portion of the URI.
*
* @see https://tools.ietf.org/html/rfc3986#section-3.5
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/URI.php:863
⇄⧉public resolveRelativeURI(string $uri): URI Combines one URI string with this one based on the rules set out in
RFC 3986...
$value->uri->resolveRelativeURI(string $uri)
/**
* Combines one URI string with this one based on the rules set out in
* RFC 3986 Section 2
*
* @see http://tools.ietf.org/html/rfc3986#section-5.2
*
* @return URI
*/
Defined in <ROOT>/system/HTTP/URI.php:959
⧉protected filterPath(?string $path = null): string Encodes any dangerous characters, and removes dot segments.
While dot segmen...
/**
* Encodes any dangerous characters, and removes dot segments.
* While dot segments have valid uses according to the spec,
* this URI class does not allow them.
*/
Defined in <ROOT>/system/HTTP/URI.php:875
⧉protected applyParts(array $parts) Saves our parts from a parse_url call.
/**
* Saves our parts from a parse_url call.
*/
Defined in <ROOT>/system/HTTP/URI.php:907
⧉protected mergePaths(self $base, self $reference): string Given 2 paths, will merge them according to rules set out in RFC 2986,
Secti...
/**
* Given 2 paths, will merge them according to rules set out in RFC 2986,
* Section 5.2
*
* @see http://tools.ietf.org/html/rfc3986#section-5.2.3
*/
Defined in <ROOT>/system/HTTP/URI.php:1015
⧉protected parseStr(string $query): array This is equivalent to the native PHP parse_str() function.
This version allo...
/**
* This is equivalent to the native PHP parse_str() function.
* This version allows the dot to be used as a key of the query string.
*/
Defined in <ROOT>/system/HTTP/URI.php:1037
⧉private changeSchemeAndPath(string $scheme, string $path): array Change the path (and scheme) assuming URIs with the same host as baseURL
sho...
/**
* Change the path (and scheme) assuming URIs with the same host as baseURL
* should be relative to the project's configuration.
*
* @deprecated This method will be deleted.
*/
Defined in <ROOT>/system/HTTP/URI.php:602
⇄⧉public static createURIString(?string $scheme = null, ?string $authority = null, ?string $path = null, ?string $query = null, ?string $fragment = null): string Builds a representation of the string from the component parts.
/**
* Used when resolving and merging paths to correctly interpret and
* remove single and double dot segments from the path per
* RFC 3986 Section 5.2.4
*
* @see http://tools.ietf.org/html/rfc3986#section-5.2.4
*
* @internal
*/
Defined in <ROOT>/system/HTTP/URI.php:182
protected value -> string (23) "gzip, deflate, br, zstd"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Sec-Fetch-Dest => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (14) "Sec-Fetch-Dest"
protected value -> string (8) "document"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Sec-Fetch-User => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (14) "Sec-Fetch-User"
protected value -> string (2) "?1"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Sec-Fetch-Mode => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (14) "Sec-Fetch-Mode"
protected value -> string (8) "navigate"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Sec-Fetch-Site => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (14) "Sec-Fetch-Site"
protected value -> string (4) "none"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Accept => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (6) "Accept"
⧉protected value -> string (135) "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,...
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉User-Agent => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (10) "User-Agent"
⧉protected value -> string (103) "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0...
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
protected name -> string (25) "Upgrade-Insecure-Requests"
protected value -> string (1) "1"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
protected name -> string (18) "Sec-Ch-Ua-Platform"
protected value -> string (9) ""Windows""
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Sec-Ch-Ua-Mobile => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (16) "Sec-Ch-Ua-Mobile"
protected value -> string (2) "?0"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Sec-Ch-Ua => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (9) "Sec-Ch-Ua"
protected value -> string (65) ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129""
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Cache-Control => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (13) "Cache-Control"
protected value -> string (8) "no-cache"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Pragma => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (6) "Pragma"
protected value -> string (8) "no-cache"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Connection => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (10) "Connection"
protected value -> string (10) "keep-alive"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉Host => CodeIgniter\HTTP\Header (2)
Properties (2)
Available methods (9)
protected name -> string (4) "Host"
protected value -> string (11) "aidspan.org"
⧉public __construct(string $name, $value = null) Header constructor. name is mandatory, if a value is provided, it will be set.
/**
* Header constructor. name is mandatory, if a value is provided, it will be set.
*
* @param array|string|null $value
*/
Defined in <ROOT>/system/HTTP/Header.php:41
⧉public getName(): string Returns the name of the header, in the same case it was set.
/**
* Returns the name of the header, in the same case it was set.
*/
Defined in <ROOT>/system/HTTP/Header.php:50
⧉public getValue(): array|string Gets the raw value of the header. This may return either a string
of an arra...
/**
* Gets the raw value of the header. This may return either a string
* of an array, depending on whether the header has multiple values or not.
*
* @return array|string
*/
Defined in <ROOT>/system/HTTP/Header.php:61
⧉public setName(string $name): $this Sets the name of the header, overwriting any previous value.
/**
* Sets the name of the header, overwriting any previous value.
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:71
⧉public setValue($value = null): $this Sets the value of the header, overwriting any previous value(s).
/**
* Sets the value of the header, overwriting any previous value(s).
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:85
⧉public appendValue($value = null): $this Appends a value to the list of values for this header. If the
header is a si...
/**
* Appends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:100
⧉public prependValue($value = null): $this Prepends a value to the list of values for this header. If the
header is a s...
/**
* Prepends a value to the list of values for this header. If the
* header is a single value string, it will be converted to an array.
*
* @param array|string|null $value
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/Header.php:125
⧉public getValueLine(): string Retrieves a comma-separated string of the values for a single header.
/**
* Retrieves a comma-separated string of the values for a single header.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
*/
Defined in <ROOT>/system/HTTP/Header.php:149
⧉public __toString(): string Returns a representation of the entire header string, including
the header n...
/**
* Returns a representation of the entire header string, including
* the header name and all values converted to the proper format.
*/
Defined in <ROOT>/system/HTTP/Header.php:178
⧉public __construct() Will attempt to get environment variables with names
that match the properti...
/**
* Will attempt to get environment variables with names
* that match the properties of the child class.
*
* The "shortPrefix" is the lowercase-only config class name.
*/
Inherited from CodeIgniter\Config\BaseConfig
Defined in <ROOT>/system/Config/BaseConfig.php:60
/**
* Retrieve an environment-specific configuration setting
*
* @return string|null
*/
Inherited from CodeIgniter\Config\BaseConfig
Defined in <ROOT>/system/Config/BaseConfig.php:128
⧉protected registerProperties() Provides external libraries a simple way to register one or more
options int...
/**
* Provides external libraries a simple way to register one or more
* options into a config file.
*
* @throws ReflectionException
*/
Inherited from CodeIgniter\Config\BaseConfig
Defined in <ROOT>/system/Config/BaseConfig.php:174
⧉public shouldDiscover(string $alias): bool Should the application auto-discover the requested resource.
/**
* Should the application auto-discover the requested resource.
*/
Inherited from CodeIgniter\Modules\Modules
Defined in <ROOT>/system/Modules/Modules.php:45
/**
* Constructor
*
* @param App $config
* @param URI $uri
* @param string|null $body
* @param UserAgent $userAgent
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:150
⇄⧉public detectLocale($config) Handles setting up the locale, perhaps auto-detecting through
content negoti...
$value->detectLocale($config)
/**
* Handles setting up the locale, perhaps auto-detecting through
* content negotiation.
*
* @param App $config
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:180
⇄⧉public detectPath(string $protocol = ''): string Detects the relative path based on
the URIProtocol Config setting.
$value->detectPath(string $protocol = '')
/**
* Detects the relative path based on
* the URIProtocol Config setting.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:209
⇄⧉public negotiate(string $type, array $supported, bool $strictMatch = false): string Provides a convenient way to work with the Negotiate class
for content negot...
/**
* Provides a convenient way to work with the Negotiate class
* for content negotiation.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:322
⇄⧉public isCLI(): bool Determines if this request was made from the command line (CLI).
$value->isCLI()
/**
* Determines if this request was made from the command line (CLI).
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:348
⇄⧉public isAJAX(): bool Test to see if a request contains the HTTP_X_REQUESTED_WITH header.
$value->isAJAX()
/**
* Test to see if a request contains the HTTP_X_REQUESTED_WITH header.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:356
⇄⧉public isSecure(): bool Attempts to detect if the current connection is secure through
a few differe...
$value->isSecure()
/**
* Attempts to detect if the current connection is secure through
* a few different methods.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:365
⇄⧉public setPath(string $path, ?Config\App $config = null): $this Sets the relative path and updates the URI object.
Note: Since current_url()...
/**
* Sets the relative path and updates the URI object.
* Note: Since current_url() accesses the shared request
* instance, this can be used to change the "current URL"
* for testing.
*
* @param string $path URI path relative to SCRIPT_NAME
* @param App $config Optional alternate config to use
*
* @return $this
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:389
⇄⧉public getPath(): string Returns the path relative to SCRIPT_NAME,
running detection as necessary.
$value->getPath()
/**
* Returns the path relative to SCRIPT_NAME,
* running detection as necessary.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:427
⇄⧉public setLocale(string $locale): IncomingRequest Sets the locale string for this request.
$value->setLocale(string $locale)
/**
* Sets the locale string for this request.
*
* @return IncomingRequest
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:441
⇄⧉public getLocale(): string Gets the current locale, with a fallback to the default
locale if none is set.
$value->getLocale()
/**
* Gets the current locale, with a fallback to the default
* locale if none is set.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:459
⇄⧉public getDefaultLocale(): string Returns the default locale as set in Config\App.php
$value->getDefaultLocale()
/**
* Returns the default locale as set in Config\App.php
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:467
⇄⧉public getVar($index = null, $filter = null, $flags = null): mixed Fetch an item from JSON input stream with fallback to $_REQUEST object. This ...
/**
* Fetch an item from JSON input stream with fallback to $_REQUEST object. This is the simplest way
* to grab data from the request object and can be used in lieu of the
* other get* methods in most cases.
*
* @param array|string|null $index
* @param int|null $filter Filter constant
* @param mixed $flags
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:483
⇄⧉public getJSON(bool $assoc = false, int $depth = 512, int $options0): mixed A convenience method that grabs the raw input stream and decodes
the JSON in...
$value->getJSON(bool $assoc = false, int $depth = 512, int $options0)
/**
* A convenience method that grabs the raw input stream and decodes
* the JSON into an array.
*
* If $assoc == true, then all objects in the response will be converted
* to associative arrays.
*
* @param bool $assoc Whether to return objects as associative arrays
* @param int $depth How many levels deep to decode
* @param int $options Bitmask of options
*
* @see http://php.net/manual/en/function.json-decode.php
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:521
⇄⧉public getJsonVar(string $index, bool $assoc = false, ?int $filter = null, $flags = null): mixed Get a specific variable from a JSON input stream
/**
* Get a specific variable from a JSON input stream
*
* @param string $index The variable that you want which can use dot syntax for getting specific values.
* @param bool $assoc If true, return the result as an associative array.
* @param int|null $filter Filter Constant
* @param array|int|null $flags Option
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:536
⇄⧉public getRawInput(): mixed A convenience method that grabs the raw input stream(send method in PUT, PATC...
$value->getRawInput()
/**
* A convenience method that grabs the raw input stream(send method in PUT, PATCH, DELETE) and decodes
* the String into an array.
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:570
⇄⧉public getGet($index = null, $filter = null, $flags = null): mixed Fetch an item from GET data.
/**
* Fetch an item from GET data.
*
* @param array|string|null $index Index for item to fetch from $_GET.
* @param int|null $filter A filter name to apply.
* @param mixed|null $flags
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:586
⇄⧉public getPost($index = null, $filter = null, $flags = null): mixed Fetch an item from POST.
/**
* Fetch an item from POST.
*
* @param array|string|null $index Index for item to fetch from $_POST.
* @param int|null $filter A filter name to apply
* @param mixed $flags
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:600
⇄⧉public getPostGet($index = null, $filter = null, $flags = null): mixed Fetch an item from POST data with fallback to GET.
/**
* Fetch an item from POST data with fallback to GET.
*
* @param array|string|null $index Index for item to fetch from $_POST or $_GET
* @param int|null $filter A filter name to apply
* @param mixed $flags
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:614
⇄⧉public getGetPost($index = null, $filter = null, $flags = null): mixed Fetch an item from GET data with fallback to POST.
/**
* Fetch an item from GET data with fallback to POST.
*
* @param array|string|null $index Index for item to be fetched from $_GET or $_POST
* @param int|null $filter A filter name to apply
* @param mixed $flags
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:631
⇄⧉public getCookie($index = null, $filter = null, $flags = null): mixed Fetch an item from the COOKIE array.
/**
* Fetch an item from the COOKIE array.
*
* @param array|string|null $index Index for item to be fetched from $_COOKIE
* @param int|null $filter A filter name to be applied
* @param mixed $flags
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:648
⇄⧉public getUserAgent(): UserAgent Fetch the user agent string
$value->getUserAgent()
/**
* Fetch the user agent string
*
* @return UserAgent
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:658
⇄⧉public getOldInput(string $key): mixed Attempts to get old Input data that has been flashed to the session
with red...
$value->getOldInput(string $key)
/**
* Attempts to get old Input data that has been flashed to the session
* with redirect_with_input(). It first checks for the data in the old
* POST data, then the old GET data and finally check for dot arrays
*
* @return mixed
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:670
⇄⧉public getFiles(): array Returns an array of all files that have been uploaded with this
request. Eac...
$value->getFiles()
/**
* Returns an array of all files that have been uploaded with this
* request. Each file is represented by an UploadedFile instance.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:714
⇄⧉public getFileMultiple(string $fileID): array|null Verify if a file exist, by the name of the input field used to upload it, in ...
$value->getFileMultiple(string $fileID)
/**
* Verify if a file exist, by the name of the input field used to upload it, in the collection
* of uploaded files and if is have been uploaded with multiple option.
*
* @return array|null
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:729
⇄⧉public getFile(string $fileID): UploadedFile|null Retrieves a single file by the name of the input field used
to upload it.
$value->getFile(string $fileID)
/**
* Retrieves a single file by the name of the input field used
* to upload it.
*
* @return UploadedFile|null
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:744
⇄⧉public getIPAddress(): string Gets the user's IP address.
$value->getIPAddress()
/**
* Gets the user's IP address.
*
* @return string IP address
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/RequestTrait.php:48
⇄⧉public isValidIP(?string $ip = null, ?string $which = null): bool Validate an IP address
/**
* Validate an IP address
*
* @param string $ip IP Address
* @param string $which IP protocol: 'ipv4' or 'ipv6'
*
* @deprecated Use Validation instead
*
* @codeCoverageIgnore
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/Request.php:79
⇄⧉public getMethod(bool $upper = false): string Get the request method.
$value->getMethod(bool $upper = false)
/**
* Get the request method.
*
* @param bool $upper Whether to return in upper or lower case.
*
* @deprecated The $upper functionality will be removed and this will revert to its PSR-7 equivalent
*
* @codeCoverageIgnore
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/Request.php:93
⇄⧉public setMethod(string $method): Request Sets the request method. Used when spoofing the request.
$value->setMethod(string $method)
/**
* Sets the request method. Used when spoofing the request.
*
* @return Request
*
* @deprecated Use withMethod() instead for immutability
*
* @codeCoverageIgnore
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/Request.php:107
⇄⧉public withMethod($method): static Returns an instance with the specified method.
$value->withMethod($method)
/**
* Returns an instance with the specified method.
*
* @param string $method
*
* @return static
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/Request.php:121
⇄⧉public getUri(): URI Retrieves the URI instance.
$value->getUri()
/**
* Retrieves the URI instance.
*
* @return URI
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/Request.php:135
⇄⧉public getServer($index = null, $filter = null, $flags = null): mixed Fetch an item from the $_SERVER array.
/**
* Fetch an item from the $_SERVER array.
*
* @param array|string|null $index Index for item to be fetched from $_SERVER
* @param int|null $filter A filter name to be applied
* @param null $flags
*
* @return mixed
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/RequestTrait.php:167
⇄⧉public getEnv($index = null, $filter = null, $flags = null): mixed Fetch an item from the $_ENV array.
/**
* Fetch an item from the $_ENV array.
*
* @param null $index Index for item to be fetched from $_ENV
* @param null $filter A filter name to be applied
* @param null $flags
*
* @return mixed
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/RequestTrait.php:181
⇄⧉public setGlobal(string $method, $value): $this Allows manually setting the value of PHP global, like $_GET, $_POST, etc.
$value->setGlobal(string $method, $value)
/**
* Allows manually setting the value of PHP global, like $_GET, $_POST, etc.
*
* @param mixed $value
*
* @return $this
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/RequestTrait.php:193
⇄⧉public fetchGlobal(string $method, $index = null, ?int $filter = null, $flags = null): mixed Fetches one or more items from a global, like cookies, get, post, etc.
Can o...
/**
* Fetches one or more items from a global, like cookies, get, post, etc.
* Can optionally filter the input when you retrieve it by passing in
* a filter.
*
* If $type is an array, it must conform to the input allowed by the
* filter_input_array method.
*
* http://php.net/manual/en/filter.filters.sanitize.php
*
* @param string $method Input filter constant
* @param array|string|null $index
* @param int|null $filter Filter constant
* @param array|int|null $flags Options
*
* @return mixed
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/RequestTrait.php:217
⇄⧉public getBody(): mixed Returns the Message's body.
$value->getBody()
/**
* Returns the Message's body.
*
* @return mixed
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/Message.php:51
⇄⧉public setBody($data): self Sets the body of the current message.
$value->setBody($data)
/**
* Sets the body of the current message.
*
* @param mixed $data
*
* @return $this
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:52
⇄⧉public getHeaders(): array Returns an array containing all headers.
$value->getHeaders()
/**
* Returns an array containing all headers.
*
* @return array<string, Header> An array of the request headers
*
* @deprecated Use Message::headers() to make room for PSR-7
*
* @codeCoverageIgnore
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/Message.php:65
⇄⧉public appendBody($data): self Appends data to the body of the current message.
$value->appendBody($data)
/**
* Appends data to the body of the current message.
*
* @param mixed $data
*
* @return $this
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:66
⇄⧉public getHeader(string $name): array|Header|null Returns a single header object. If multiple headers with the same
name exist...
$value->getHeader(string $name)
/**
* Returns a single header object. If multiple headers with the same
* name exist, then will return an array of header objects.
*
* @return array|Header|null
*
* @deprecated Use Message::header() to make room for PSR-7
*
* @codeCoverageIgnore
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/Message.php:80
⇄⧉public populateHeaders(): void Populates the $headers array with any headers the getServer knows about.
$value->populateHeaders()
/**
* Populates the $headers array with any headers the getServer knows about.
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:80
⇄⧉public hasHeader(string $name): bool Determines whether a header exists.
$value->hasHeader(string $name)
/**
* Determines whether a header exists.
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/Message.php:88
⇄⧉public getHeaderLine(string $name): string Retrieves a comma-separated string of the values for a single header.
$value->getHeaderLine(string $name)
/**
* Retrieves a comma-separated string of the values for a single header.
*
* This method returns all of the header values of the given
* case-insensitive header name as a string concatenated together using
* a comma.
*
* NOTE: Not all header values may be appropriately represented using
* comma concatenation. For such headers, use getHeader() instead
* and supply your own delimiter when concatenating.
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/Message.php:106
⇄⧉public headers(): array Returns an array containing all Headers.
$value->headers()
/**
* Returns an array containing all Headers.
*
* @return array<string, Header> An array of the Header objects
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:107
⇄⧉public getProtocolVersion(): string Returns the HTTP Protocol Version.
$value->getProtocolVersion()
/**
* Returns the HTTP Protocol Version.
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/Message.php:120
⇄⧉public header($name): array|Header|null Returns a single Header object. If multiple headers with the same
name exist...
$value->header($name)
/**
* Returns a single Header object. If multiple headers with the same
* name exist, then will return an array of header objects.
*
* @param string $name
*
* @return array|Header|null
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:127
⇄⧉public setHeader(string $name, $value): self Sets a header and it's value.
$value->setHeader(string $name, $value)
/**
* Sets a header and it's value.
*
* @param array|string|null $value
*
* @return $this
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:141
⇄⧉public removeHeader(string $name): self Removes a header from the list of headers we track.
$value->removeHeader(string $name)
/**
* Removes a header from the list of headers we track.
*
* @return $this
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:166
⇄⧉public appendHeader(string $name, ?string $value): self Adds an additional header value to any headers that accept
multiple values (...
/**
* Adds an additional header value to any headers that accept
* multiple values (i.e. are an array or implement ArrayAccess)
*
* @return $this
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:180
⇄⧉public prependHeader(string $name, string $value): self Adds an additional header value to any headers that accept
multiple values (...
/**
* Adds an additional header value to any headers that accept
* multiple values (i.e. are an array or implement ArrayAccess)
*
* @return $this
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:197
⇄⧉public setProtocolVersion(string $version): self Sets the HTTP protocol version.
$value->setProtocolVersion(string $version)
/**
* Sets the HTTP protocol version.
*
* @throws HTTPException For invalid protocols
*
* @return $this
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:222
⧉protected detectURI(string $protocol, string $baseURL) Sets up our URI object based on the information we have. This is
either prov...
/**
* Sets up our URI object based on the information we have. This is
* either provided by the user in the baseURL Config setting, or
* determined from the environment as needed.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:196
⧉protected parseRequestURI(): string Will parse the REQUEST_URI and automatically detect the URI from it,
fixing ...
/**
* Will parse the REQUEST_URI and automatically detect the URI from it,
* fixing the query string if necessary.
*
* @return string The URI it found.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:239
/**
* Parse QUERY_STRING
*
* Will parse QUERY_STRING and automatically detect the URI from it.
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:294
⧉protected removeRelativeDirectory(string $uri): string Remove relative directory (../) and multi slashes (///)
/**
* Remove relative directory (../) and multi slashes (///)
*
* Do some final cleaning of the URI and return it, currently only used in static::_parse_request_uri()
*
* @deprecated Use URI::removeDotSegments() directly
*/
Defined in <ROOT>/system/HTTP/IncomingRequest.php:760
⧉protected populateGlobals(string $method) Saves a copy of the current state of one of several PHP globals
so we can re...
/**
* Saves a copy of the current state of one of several PHP globals
* so we can retrieve them later.
*/
Inherited from CodeIgniter\HTTP\Request
Defined in <ROOT>/system/HTTP/RequestTrait.php:305
⧉protected getHeaderName(string $name): string Takes a header name in any case, and returns the
normal-case version of the ...
/**
* Takes a header name in any case, and returns the
* normal-case version of the header.
*/
Inherited from CodeIgniter\HTTP\Message
Defined in <ROOT>/system/HTTP/MessageTrait.php:210
⇄⧉abstract => string (108) "ABSTRACT The deadline for completing the Aidspan Strategy Survey has been ex...
$value['abstract']
ABSTRACT
The deadline for completing the Aidspan Strategy Survey has been extended to 18 February 2018.
⇄⧉body => UTF-8 string (861) "Dear valued GFO reader, We want to thank everyone who has completed the <a h...
$value['body']
Dear valued GFO reader,
We want to thank everyone who has completed the <a href="https://www.surveymonkey.com/r/NPBBGYW">Aidspan Strategy Survey</a>. For those who have not had the opportunity, we encourage you to do so. The deadline has been extended to <strong>Sunday, 18 February</strong>. The survey should take about five minutes and the responses will remain anonymous and confidential.
It is important that we hear from you, the readers of Global Fund Observer, about how you think Aidspan is performing and which issues you would like to see Aidspan focus on (in GFO and elsewhere).
Your valuable responses and comments will help us develop our new strategy for the 2018–2022 period.
Click <a href="https://www.surveymonkey.com/r/NPBBGYW">here</a> to access the Aidspan Strategy Survey.
Thank you.
Ida Hakizinka
Executive Director
⇄⧉tittle => string (137) "Political instability, decreasing resources and a resurgent malaria epidemic...
$value[0]['tittle']
Political instability, decreasing resources and a resurgent malaria epidemic: A challenging environment for Global Fund grants in Burundi
⇄⧉abstract => UTF-8 string (380) "ABSTRACT Political instability and continuing economic problems have created...
$value[0]['abstract']
ABSTRACT
Political instability and continuing economic problems have created a complex environment for programming in Burundi. Malaria and TB/HIV grants recently approved by the Global Fund Board are facing numerous challenges. This article summarizes the comments of the Technical Review Panel and the Grant Approvals Committee when it reviewed Burundi’s funding requests.
⇄⧉body => UTF-8 string (14431) "A combination of recent political instability and continuing economic challe...
$value[0]['body']
A combination of recent political instability and continuing economic challenges have created a complex environment for programming in Burundi. It is one of the five poorest countries in the world and is heavily dependent on external aid to finance its health sector. An attempted coup in May 2015 caused a political crisis. The suspension of aid by major donors that followed the crisis resulted in an 87% decline in external resources, which, in turn, led to 54% decrease in the 2016 health budget. Fortunately, Burundi’s 2017 health budget envisions the restoration of donor support to a significant extent.
According to the Secretariat, limited fiscal space for domestic spending, high dependence on volatile donor financing, weaknesses in public finance management, inefficiencies in health spending, sub-optimal social health protection, lack of adequate infrastructure and human resources to meet urgent community health needs –– all of these factors constitute major constraints for the long-term sustainability of Global Fund–supported programs.
The Global Fund is operating in this challenging operating environment under the Additional Safeguard Policy (ASP). On 13 December, the Global Fund Board approved a malaria grant ($36.7 million) and a TB/HIV grant ($35.6 million) to Burundi. In this article, we report on the comments of the Technical Review Panel (TRP) and the Grant Approvals Committee (GAC) on the funding requests submitted by the Burundi country coordinating mechanism (CCM). We focus primarily on the malaria request.
<strong>MALARIA</strong>
The funding request proposed a program that included a mass long-lasting insecticidal net (LLIN) campaign in 2019; case management activities; integrated community case management (iCCM); the continued scale-up of intermittent preventive treatment during pregnancy; and the use of artesunate injectable to treat severe malaria.
Since November 2015, Burundi has suffered a malaria epidemic, with a doubling of the number of cases. The goal of the Burundi National Strategic Plan (NSP) 2013–2017 is to reduce malaria-related morbidity and mortality by 75%. The TRP said that the national program anticipated a 75% reduction in incidence from 2014 to 2017, but instead incidence doubled between 2014 and 2016. “Burundi must now must focus on reversing the increasing trend,” the TRP said.
When it reviewed Burundi’s request, the TRP said that the country was not on track to achieve the intended results and impact of its current grant. “There is a need for increased urgency and scale-up of interventions in the face of the current epidemic emergency. The program has not been acting with sufficient speed, partly due to complex political and financial issues and [a] delay in grant signing,” the TRP said.
The TRP observed that the last mass distribution of LLINs was in 2014. The funding request states that LLINs are being distributed every three years to vulnerable populations, including educational institutions, police and military camps, and refugee and internally displaced people (IDP) camps, the TRP noted. However, it said, due to a lack of information, it is unclear whether this is actually occurring. The TRP also observed that the funding request did not say anything about routine distribution of LLINs between mass distribution campaigns.
Nevertheless, the TRP said that the funding request was well-developed and was responsive to previous TRP inputs. “Burundi’s malaria strategy is appropriate but given the political unrest and current worsening of malaria epidemiology, the interventions need to be applied with increased speed and urgency.”
<strong>Strengths of the funding request</strong>
The TRP said that funding request was technically sound and strategically focused because it is based on the NSP. It said that the proposed interventions were “relevant and appropriate in the current situation.”
The TRP noted that an analysis of the barriers to access services for key affected populations has been conducted, resulting in the development of specific program approaches and their partial implementation. Given the context of current political unrest, there will need to be to continued efforts made to reach these populations, the TRP said.
<strong>Issues and concerns</strong>
The TRP raised three principle concerns:
<ul>
<li>the slow speed of scale-up activities;</li>
<li>insufficient attention being paid to vulnerable populations; and</li>
<li>a lack of understanding of the causes of the upsurge in the epidemic.</li>
</ul>
We examine each issue in turn.
<strong><em>Scale-up</em></strong>
The TRP said that the malaria program has been slow to implement previously funded interventions, despite steadily rising malaria incidence, a trend which, the TRP said, was apparent in 2014.
“There needs to be a more urgent, persistent and creative approach to roll out and scale up the funded activities,” the TRP said. “Treatment availability at all health facilities and enhanced distribution of preventive interventions are critical.” The TRP also said that rapid expansion of indoor residual spraying (IRS) and accelerated distribution channels for LLIN routine distribution should be implemented.
The TRP requested that, towards the end of the first year of grant implementation, the CCM conduct a mid-term program review in order to assess whether the epidemic was brought under control, and to plan for mitigation of similar situations in the future.
<em>Outcome</em>: During grant-making, the country team undertook to follow up with the National Malaria Program on the response plan to ensure that activities are implemented effectively and in a timely manner. According to grant documents, the country team is closely tracking activities and working with partners and the government to address bottlenecks limiting timely implementation –– and to track commodities to ensure that there are no stock outs.
<strong><em>Vulnerable populations</em></strong>
The TRP noted that the political unrest is resulting in a high number of refugees, internally displaced persons, and mobile and migrant populations, as well as defined worksite populations. However, it said, it is unclear from the funding request whether their needs are being met.
The TRP recommended that innovative approaches and strategies be devised to reach these populations, including mobile clinics and routine LLIN distribution strategies. The TRP recommended that technical partners engage with neighboring countries, especially Rwanda and Tanzania, which are adjacent to highest incidence districts, to discuss the current malaria situation in Burundi, since these countries are similarly affected by the current epidemiology prevailing in the region. The TRP also recommended that the Secretariat ensure that a contingency plan is in place to protect vulnerable populations should the planned epidemic response be delayed.
<em>Outcome:</em> The grant documents state that this issue was cleared during grant-making, but they don’t say how.
<strong><em>Causes of the upsurge in the epidemic </em></strong>
The TRP said that the factors that have led to the increase in malaria cases are unknown but could include insufficient application of prevention and control strategies; insecticide resistance; lack of access to treatment; ineffective treatment; vulnerability due to food insecurity; population movements; and environmental and climate considerations. The TRP said that the causes of the epidemic need to be investigated but added that this process should not delay a speedy response to the epidemic.
The TRP recommended that the CCM apply for a prioritized above-allocation request (PAAR) at the earliest opportunity (see below). It said that PAAR funds could be used for an enhanced and intensified epidemic response, and that some of the funds could be allocated for a post-epidemic situational analysis. The TRP recommended that a rigorous assessment be conducted during grant-making to understand the determinants of the epidemic.
<em>Outcome:</em> This issue was discussed at length during grant-making. The discussions concluded that the exact causes of the upsurge in malaria cases in Burundi are multiple and not all determined. With support from the World Health Organization (WHO), the potential contributing factors were identified. They included a lack of prevention measures (non-availability and low use of LLINs in households), and environmental factors, such as the extension of rice fields and climate change. A therapeutic efficacy study that started in September 2017 will provide additional information. In addition, a post-epidemic situational analysis will be conducted in 2018 with support from the WHO, which will collect additional data on the causes of the epidemic, evaluate the level of implementation of the response plan and make appropriate recommendations.
<strong>PAAR</strong>
The CCM has applied for a PAAR. The request included: (a) conducting IRS in priority districts; (b) using LLINs to fill gaps before the 2019 mass campaign; (c) strengthening the surveillance system through the establishment of a geographic information system coupled with the weekly monitoring of malaria cases; and (d) strengthening data analysis for rapid decision-making to respond to emergencies and to understand the causes underlying the unusual resurgence of malaria cases.
<strong>Other issues</strong>
The GAC also noted the potential gap for the LLINs to reach national coverage (approximately 466,000 nets out of 7.0 million, which represents 7% of the total mass campaign needs), as well as the 182,000 nets needed for special groups (e.g. boarding schools, hospitals, prisons). The Secretariat said that this gap in LLINs, which amounts to approximately $1.5 million, will be closely monitored and that efficiencies identified during grant implementation will be reinvested to cover the gaps.
The GAC highlighted the need for IRS in 11 eligible districts, including the four districts covered by Global Fund under the previous implementation period. The GAC said that it was concerned about potential gaps in funding for IRS from 2018 on, and it underlined the critical contribution that IRS can make towards bringing malaria below the epidemic threshold.
<strong>Co-financing</strong>
The government has provided a commitment of $16.8 million, enough to meet the co-financing requirements. However, the GAC noted, the economic, fiscal and political situations pose significant risks for the realization of the commitment.
<strong>IMPLEMENTATION ARRANGEMENTS</strong>
In its report, the GAC says that it endorses the change in implementation arrangements from using national principal recipients (PRs) to using the UNDP, “given major governance challenges in the past.” UNDP will manage both the TB/HIV and malaria grants. The proposal to change PRs appears to have come from the Secretariat rather than the CCM. Aidspan understands that the decision caused some distress among stakeholders in Burundi.
The GAC also said that the portfolio will be streamlined from five grants down to two, with the national programs acting as sub-recipients, while also providing effective mechanisms for civil society organizations to implement activities going forward.
Additionally, the new implementation structure will enable significant reductions in salary top-ups –– by 90% for the malaria program and 85% for TB/HIV program.
<strong>TB/HIV</strong>
The GAC noted the critical partnership support and collaboration with multilateral and bilateral partners and civil society in-country. The GAC further noted the need for continued engagement and technical assistance during grant implementation, notably in four key areas:
<ul>
<li>development of a national laboratory strategy, including for the implementation of viral load scale-up;</li>
<li>improved access to, and coverage of, virologic testing among infants born to HIV-positive mothers;</li>
<li>ensuring the quality of interventions for key populations, including linkages of prevention activities with HIV testing and treatment services; and</li>
<li>a comprehensive supply chain management plan for the country, including warehousing and distribution until the last mile.</li>
</ul>
Noting severe fiscal constraints, the GAC expressed concerns regarding the risk of antiretroviral (ARV) shortages, should the country shift to test-and-treat in all provinces and if government contributions for funding ARVs do not materialize. Implementation of test-and-treat in all provinces may potentially result in a funding gap for ARVs of approximatively $3.0 million. The GAC said that the HIV cohort audit, the results of which are expected by the end of 2017, will ascertain the number of people on ARVs and enable a more accurate determination of funding gaps.
The GAC said that the Secretariat and partners are engaging in strategic discussions with the government on concrete actions and steps to secure the government’s contribution to the procurement of ARVs from 2018 onwards. Additionally, the GAC noted that the CCM is planning to submit a PAAR outlining the ARV needs for inclusion of new patients, which could be funded should additional resources become available.
<strong>RSSH</strong>
The TRP noted “with appreciation” that investments in resilient sustainable systems for health (RSSH) are embedded in the three disease components, in a synergic and coherent manner.
The strategy includes investments in the following areas:
<ul>
<li>expansion of primary care services with community health workers and a referral system;</li>
<li>implementation of a defined minimum package of activities for health centers; and</li>
<li>roll out of district health information software from districts and hospitals to the community level.</li>
</ul>
The CCM allocated 10% of the overall budget to RSSH activities.
<table width="316">
<tbody>
<tr>
<td colspan="7" width="308">Do you have any reaction to this article (or any article in GFO)? To send a note to the editor, just click <a href="mailto:editorgfo@aidspan.org">here</a>. <strong>We value your feedback</strong>.</td>
</tr>
</tbody>
</table>
⇄⧉tittle => string (100) "Ukraine starts transition away from Global Fund support without a detailed t...
$value[1]['tittle']
Ukraine starts transition away from Global Fund support without a detailed transition plan, OIG says
⇄⧉abstract => UTF-8 string (597) "ABSTRACT In its audit of Global Fund grants to Ukraine, the Office of the In...
$value[1]['abstract']
ABSTRACT
In its audit of Global Fund grants to Ukraine, the Office of the Inspector General handed the country a mixed report card. It said that implementation arrangements, as well as procurement and supply chain management, were “partially effective,” the second highest ranking in the OIG’s rating scheme. However, it added, the effectiveness of program processes and controls needs significant improvement. The OIG also observed that Ukraine is scheduled to start transferring responsibility for key programs from NGOs to the government in the absence of a detailed transition plan.
⇄⧉body => UTF-8 string (26506) "Ukraine will start transferring responsibility for key programs from NGOs to...
$value[1]['body']
Ukraine will start transferring responsibility for key programs from NGOs to the government early in 2018 without having a detailed transition plan, the Office of the Inspector General (OIG) noted in a recent audit of Global Fund grants to the country. A <a href="https://www.theglobalfund.org/media/7122/oig_gf-oig-18-003_report_en.pdf?u=636524031150000000">report</a> on the audit was released on 24 January.
Ukraine is a lower-middle-income country. Although Ukraine does not appear on the Global Fund’s list of components projected to transition by 2025, the country’s funding request in 2017 included plans for the government to assume a greater share of the responsibility for providing services (see <a href="http://www.aidspan.org/gfo_article/ukraine%E2%80%99s-proposal-global-fund-reflects-country-transition">GFO article</a>).
On 1 December 2017, subsequent to the audit, the Board approved three TB/HIV grants for Ukraine from the country’s 2017–2019 allocation. In the new grant cycle, which starts in January 2018, Ukraine aims to gradually transition activities and procurements from the current NGO PRs to the Public Health Center (PHC) –– 20% in 2018, 50% in 2019 and 80% in 2020.
(For more on this issue, see the section on “Planning for transition” below.)
Representatives of civil society organizations and the PHC told Aidspan that they were generally satisfied with the contents of the audit report.
In this article, we provide a detailed summary of the audit findings and we report on the feedback we received. The article contains the following sections:
<a href="http://aidspan.org:8080/en/c/article/4504#OVER">Overview</a>
<a href="http://aidspan.org:8080/en/c/article/4504#ACH">Achievements and good practices</a>
<a href="http://aidspan.org:8080/en/c/article/4504#KEY">Key issues and risks</a>
<a href="http://aidspan.org:8080/en/c/article/4504#PLAN">Planning for transition</a>
<a href="http://aidspan.org:8080/en/c/article/4504#PREV">Previously identified issues</a>
<a href="http://aidspan.org:8080/en/c/article/4504#REACT">Reactions</a>
<strong>OVERVIEW</strong>
Overall, the audit gave Ukraine a mixed report card. The OIG said that implementation arrangements, as well as procurement and supply chain management, were “partially effective,” the second highest ranking in the OIG’s rating scheme. However, it said, the effectiveness of program processes and controls needs significant improvement.
The Global Fund has signed grants worth over $555.0 million and disbursed over $547.0 million to Ukraine since 2003. The OIG audited grants managed by three of Ukraine’s four PRs (see Table 1), excluding the grant managed by UNICEF, which mainly provides commodities and services to conflict areas in Eastern Ukraine. The audit covered the period from January 2015 to June 2017.
<strong>Table 1: Active Global Fund grants to Ukraine at the time of the audit ($ million)</strong>
<table>
<tbody>
<tr>
<td><strong>Principal recipient</strong></td>
<td><strong>Comp.</strong></td>
<td><strong>Grant name</strong></td>
<td><strong>Signed amount</strong></td>
</tr>
<tr>
<td>Alliance for Public Health</td>
<td>TB/HIV</td>
<td>UKR-C-AUA</td>
<td>66.3 m</td>
</tr>
<tr>
<td>All-Ukrainian Network of People Living with HIV</td>
<td>TB/HIV</td>
<td>UKR-C-AUN</td>
<td>63.3 m</td>
</tr>
<tr>
<td>Public Health Centre</td>
<td>TB/HIV</td>
<td>UKR-C-UCDC</td>
<td>3.4 m</td>
</tr>
<tr>
<td>UNICEF</td>
<td>HIV</td>
<td>UKR-H-UNICEF</td>
<td>8.0 m</td>
</tr>
<tr>
<td colspan="3"><strong>Total</strong></td>
<td><strong> 140.9 m</strong></td>
</tr>
</tbody>
</table>
Note: All grants had an end date of 31 December 2017 except for UKR-H-UNICEF which will end in June 2018. At the time of the audit, the 2018–2020 grants had not yet been approved.
Table 2 lists the three areas assessed in the audit, and the OIG’s ratings and summary comments for each area.
<strong>Table 2: Ukraine audit findings at-a-glance</strong>
<table>
<tbody>
<tr>
<td width="518"><strong>AREA 1:</strong> Adequacy of the implementation and funding arrangements in supporting the achievement of grant objectives and sustainability of programs</td>
<td width="179"><strong>Rating:</strong> Partially effective</td>
</tr>
<tr>
<td colspan="2"><strong>OIG comments:</strong> The government has committed to a 25% increase in its budget for HIV and TB in the next grant cycle. Implementation arrangements at sub-recipient level have been simplified but more administrative and efficiency improvements are needed. The new funding cycle accompanies the gradual transition of procurement, supply chain and other functions to PHC, enhancing long-term sustainability. However, although this transition starts in early 2018, the first steps to build capacity for the government procurement agency, and for finalizing future supply chain arrangements, have been initiated after the recent approval of the procurement mechanism reform.</td>
</tr>
<tr>
<td><strong>AREA 2</strong>: Effectiveness of the program processes and controls for delivering quality services to beneficiaries, including the availability of accurate and timely data to aid decision-making</td>
<td><strong>Rating:</strong> Needs significant improvement</td>
</tr>
<tr>
<td colspan="2"><strong>OIG comments:</strong> The combination of limited drug availability and an overloaded health workforce has hampered treatment for people diagnosed with HIV; these issues could be exacerbated when the government takes over a significant proportion of the Global Fund programs in 2018–2020. For HIV, in the sampled regions, a 25% variance was detected between the reported number of people on treatment and the number of patients in the adherence records. Discrepancies of 5%–15% were also identified between the TB reports, registers and patient cards. The two non-governmental PRs currently operate segregated patient data systems, with patients having two separate unified codes, although work is ongoing to harmonize the systems.</td>
</tr>
<tr>
<td><strong>AREA 3:</strong> Efficiency and effectiveness of procurement and supply chain processes and systems to ensure the timely availability of quality medicines, health and non-health products</td>
<td><strong>Rating:</strong> Partially effective.</td>
</tr>
<tr>
<td colspan="2"><strong>OIG comments:</strong> Antiretroviral (ARV) drugs costs have been significantly reduced through advocacy and negotiations, although some key drugs are still more expensive compared to the global average. Supply chain arrangements have included private sector warehousing arrangements at central level, avoiding any major supply disruptions. However, post-transition arrangements need to be finalized.</td>
</tr>
</tbody>
</table>
<em>The OIG has a four-tiered rating scheme, as follows: Effective; partially effective; needs significant improvement; ineffective</em>
<em>.</em>
<strong>ACHIEVEMENTS AND GOOD PRACTICES</strong>
The OIG identified the following achievements and good practices:
<strong>Treatments have produced good results. </strong>AIDS-related deaths were reduced from 14,000 in 2010 to 7,900 in 2015. In addition, 78% of people on ARV treatment had a suppressed viral load.
<strong>HIV programs have been scaled up. </strong>Ukraine adopted a test-and-treat approach as well as the UNAIDS 90-90-90 targets.
<strong>Major price reductions have been achieved.</strong> Concerted advocacy efforts by civil society organizations have led to price reductions for the majority of ARVs, largely aligning them with international generic reference prices.
<strong>The government has shown increased commitment. </strong>Despite conflicts in Eastern Ukraine and an economic recession since 2014, the government increased the HIV budget in 2017 for the procurement of medicines and other key interventions by 171%; and increased the TB budget by 133% (compared to 2016). The government also approved a four-year HIV strategy which featured a patient-oriented approach, including improved access to prevention programs for key populations.
<strong>KEY ISSUES AND RISKS</strong>
The audit report described several concerns, including the following:
<ul>
<li>there are challenges in achieving current HIV targets and the proposed scale-up;</li>
<li>improvements are needed in MDR-TB treatment and in coordination between the TB and HIV programs;</li>
<li>there are procurement inefficiencies and gaps in supply chain processes;</li>
<li>data quality challenges have affected decision-making; and</li>
<li>there is a need for effective planning of the transition in grant implementation arrangements.</li>
</ul>
Below, we summarize the audit findings related to each of these concerns.
<strong>HIV targets and scale-up</strong>
The number of people on HIV treatment has increased from 64,360 in 2015 to 82,860 in 2017. Ukraine plans to continue this acceleration: The goal is to reach 194,400 on treatment by 2020. However, the OIG said, this is happening against a backdrop of significant programmatic and financial bottlenecks. The problems are in two areas: detection and treatment.
The depreciation of the Ukraine currency, the hryvna, has resulted in foreign exchange savings of approximately $2.9 million in grant budgets over the period 2015–2017. The OIG stated that the Global Fund has not approved a request by Alliance Ukraine to use the savings to buy additional MDR-TB drugs. The OIG added that the Secretariat has not yet established a systematic process for evaluating potential reprogramming using foreign exchange savings, especially for life-saving treatment.
The OIG reported that Ukraine and the Secretariat were currently finalizing grant conditions and performance framework targets for the next grant cycle. The goal is to address the bottlenecks and progressively scale up the number of people on ART. A 2017–2021 national TB strategy is also being finalized, which will capture the actions needed to deliver improved results. Given these activities, the OIG said that no further agreed management actions are needed in this area.
<strong>MDR-TB treatment, TB-HIV coordination </strong>
The OIG said that the national TB program conducted the first country-wide survey from November 2013 to May 2014 to identify MDR-TB levels and risk factors. MDR-TB was detected in 24% of new patients and 58% of previously treated patients. This is higher than the international averages of 4% and 21%, respectively, for those groups.
The OIG identified three factors contributing to high disease burden and new infections:
<ul>
<li>cross infection among TB patients;</li>
<li>low MDR-TB treatment success; and</li>
<li>inadequate TB/HIV cooperation.</li>
</ul>
Given that these issues are being addressed, including through grant conditions and the performance framework for the 2018–2020 grant cycle, no further agreed management actions are needed in this area, the OIG stated.
<strong>Procurement and supply chain</strong>
Thanks to concerted efforts by civil society organizations, some pharmaceutical manufacturers have agreed to include Ukraine under voluntary licensing agreements, or to waive their patent rights in Ukraine, the OIG reported. This has resulted in a broader set of health products being available, as well as price reductions for the majority of ARVs –– including the main HIV regimen that covered 40% of Global Fund–supported patients as recently as 2017.
However, some key drugs remain more expensive than international generic reference prices. The OIG said this is because of Ukraine’s market size and purchasing power; inefficiencies in procurement practices; intellectual property rights; and trade issues. Despite some simplifications, the OIG stated, there are still multiple HIV treatment regimens procured using Global Fund grants, contributing to procurement and administrative inefficiencies. “Government procurement delays have resulted in consistent borrowing from the Global Fund drug stocks, with higher stock-out risks as Global Fund reduces drugs investments in the next grant cycle,” the OIG said. Gaps in coordination led to expiries and large quantities of MDR-TB drugs with a short shelf life, the OIG added.
<table width="645">
<tbody>
<tr>
<td colspan="2" width="635"><strong>The OIG provided</strong> an example of what happens when government bureaucracy is involved. The government has an annual budgeting and funds allocation process which is generally approved around the start of the year. Procurements cannot go through before the funds are made available. The procurement process then takes another 12–18 months before the drugs can be delivered. As a result, <strong>2016 procurements were only delivered in late 2017. </strong></td>
</tr>
</tbody>
</table>
The OIG observed that Ukraine is currently using a regimen consisting of lopinavir and ritonavir as a first-line medicine although this is not recommended by the World Health Organization (WHO). In addition, the OIG said, the regimen costs about 200% more than the WHO-recommended first-line treatment. In the current grants, this drug combination alone constitutes almost half of the $28 million budget for the procurement or ARVs. While government purchases of these second-line drugs used for first-line treatment decreased by 6% between 2015 and 2017, their procurement using Global Fund grants has increased by 34% during the same period, the OIG said.
Ukraine is in the process of creating a national procurement agency. A concept to reform the procurement of health products has recently been approved by Parliament, the OIG said. “This should help develop a capacity-building plan for a national procurement agency and finalize future supply chain arrangements. Both are needed by mid-2018 as part of the envisaged transition to PHC under the next grant cycle.”
Currently, centrally procured health products transit through a central warehouse before being distributed in full to the regions. The audit found that the capacity and conditions of the central warehouse do not meet international standards. Therefore, health products procured with grant funds are managed through private warehouses. The OIG reported that the PHC has concerns about continuing this arrangement with private sector partners after the transition, due in part to regulatory requirements. The gradual transition of procurement to the PHC will start in 2019. “In the absence of a plan to evaluate the actual capabilities of government warehouses and to address the potential gaps, the transition from private sector arrangements to public facilities may introduce significant risks to the delivery of grant services,” the OIG stated.
<table>
<tbody>
<tr>
<td colspan="7" width="684"><strong>Agreed management action</strong>
The Secretariat will:
<ul>
<li>ensure that the drugs procured with Global Fund grants are only WHO-recommended regimens;</li>
<li>establish an optimization plan to increase treatment impact;</li>
<li>establish an effective procurement coordination mechanism between government and donors to avoid any future overstock or stock-outs; and</li>
<li>discuss and agree with the PHC the supply chain arrangements for grants in the next grant cycle, including plans for any capacity building initiatives needed for national supply chain arrangements.</li>
</ul>
<em>Due date: 31 July 2018</em></td>
</tr>
</tbody>
</table>
<strong>Data quality</strong>
The audit found that there were challenges with data quality that were affecting decision-making. Specifically:
<ul>
<li>there is no reliable mechanism to confirm the number of people on ARVs;</li>
<li>there are discrepancies in data among the reports submitted at the national level, the TB registers and the patient cards at facilities; and</li>
<li>the two main PRs operate segregated patient recording and reporting systems with different registration codes.</li>
</ul>
<table width="659">
<tbody>
<tr>
<td colspan="7" width="933"><strong>Agreed management action</strong>
The Secretariat will ensure that costed M&E plans for TB and HIV are developed, and that they include plans for:
<ul>
<li>strengthening the reporting systems covering but not limited to the harmonization of patients’ identification codes;</li>
<li>strengthening the monitoring and supervision systems for TB and HIV programs; and</li>
<li>performing evaluations and surveys.</li>
</ul>
<em>Due date: 30 September 2018</em></td>
</tr>
</tbody>
</table>
<strong>PLANNING FOR TRANSITION</strong>
As mentioned above, Ukraine plans to gradually transition activities and procurements from the current NGO PRs to the PHC. The size of the PHC grant went from $3.3 million in 2015–2017 to $44.3 million in 2018–2020. The PHC will assume major new responsibilities, taking over key program activities such as prevention, outreach and procurement. These changes will require a detailed analysis of the PHC’s new roles and responsibilities, the OIG said.
In the absence of a detailed transition plan, the OIG said, capacity-building gaps may affect the ability of the PHC to successfully take on its new responsibilities. The OIG said that the plan will need to take into account the impact of transition on access to services for key populations as well as the range of services that will be provided.
The OIG said that during interviews with representatives from key populations, including PWID, female sex workers and MSM, they expressed concerns about the possible adverse impact on access to services when the prevention activities move to PHC. These concerns arise from multiple factors including the fact that these populations are criminalized in Ukraine. The OIG said that there are reservations about the government’s commitment and in-depth understanding of these interventions as well as a risk that efficiency considerations will take precedence over the delivery of comprehensive programs. The OIG cited as an example the fact that after the Ministry of Health took over the methadone program, a psychological support component was considered unnecessary and was removed.
The 2018–2020 grants reduce the number of sub-recipients (SRs) from 225 to 108. However, the OIG noted, there has been no detailed review to map the technical capacity and regional presence of the SRs that will remain.
The audit identified challenges with respect to the management of SRs. For example:
<ul>
<li>there have been instances where SRs have been appointed without an open tender;</li>
<li>many SRs have very high management costs;</li>
<li>there have been instances of duplication of services among SRs; and</li>
<li>there have been instances of nepotism in SR staffing.</li>
</ul>
In addition, the OIG noted several instances of expenses with insufficient or no supporting documents. These instances have been referred to the OIG’s Investigations Unit for further review.
The OIG said that Ukraine’s transition plan should address the impact of transition on SR management.
<table width="659">
<tbody>
<tr>
<td colspan="7" width="933"><strong>Agreed management action</strong>
The Secretariat will ensure that:
<ul>
<li>a detailed action plan to transition from donor funding to government funding with the rate of 20%–50%–80% is developed, which includes measures to ensure satisfactory quality and access of services by key affected population after transition; and</li>
<li>the ongoing sub-recipient selection process systematically considers administrative costs, geographical locations and control gaps in the existing cycle, to explore further implementation improvements and efficiencies.</li>
</ul>
<em>Due date: 30 September 2018</em></td>
</tr>
</tbody>
</table>
<strong>PREVIOUSLY IDENTIFIED ISSUES</strong>
The OIG previously audited grants to Ukraine in November 2010 and released the <a href="https://www.theglobalfund.org/media/2691/oig_gfoig10016auditukraine_report_en.pdf?u=636488964600000000">report</a> in August 2012 (see <a href="http://www.aidspan.org/gfo_article/oig-releases-report-audit-global-fund-grants-ukraine">GFO article</a>). The OIG said that the risks identified in the earlier audit have been “materially mitigated.”
<strong>REACTIONS</strong>
Aidspan contacted several community representatives and staff of the PHC. All those who responded said that they were generally pleased with the content of the audit report and with the audit processes.
Anton Basenko, Country Focal Point for the international advocacy project PITCH, and a member of the Communities Delegation to the Board of the Global Fund, said: “The report reflects the concerns that we raised. We feel that we had meaningful involvement in the process. It helped that the community representatives had CCM member status by the time the audit was conducted.” Basenko also represents PWID on the CCM.
Nataliya Nizova, ex-Director General of the Public Health Center (PHC) said that during the audit, “the PHC had full opportunity to cover and comprehensively discuss the most important, including difficult, aspects related to the implementation of grants in Ukraine.”
Andrey Klepikov, Head of the Alliance for Public Health, said: “As one of the PRs, the Alliance was naturally very involved in the audit. We also participated in the de-briefings with the CCM and the other PRs. The OIG has a clearly defined and openly accessible <a href="https://www.theglobalfund.org/media/3034/oig_stakeholder-engagement-audit_model_en.pdf">stakeholder engagement model</a>, so we knew in advance at what stage and how we should be involved.”
One respondent –– Olena Kucheruk, Public Health Program Initiative Manager for the International Renaissance Foundation –– told Aidspan that she would have liked to have seen more in the audit report on the health care reforms that are underway in the Ukraine. “The transition to a new health care system may continue in ways that are not always predictable. This creates uncertainty which, in turn, may affect the continuity of services,” she said.
“Another risk is that the PHC needs to develop networks in the regions,” Kucheruk said. “After operating with Global Fund budgets for the next three years, the PHC will need to develop state level budgets after 2020. This process is just beginning and remains not well coordinated. There is a need to develop a clear vision at strategy at the national level, with clear understanding of how local PHCs should look like, how they should be subordinated, and how they will operate to ensure continuity of services.”
Finally, Kucheruk said, she would have welcomed more discussion in the audit report on key population involvement and participation. “There are concerns about whether all key populations were engaged in the response to the epidemics, about the legitimacy of some of the representatives of these populations and about communication within those communities.”
<strong>Transition</strong>
One of the agreed management actions in the audit report concerned the preparation of a detailed transition plan. Aidspan asked the representatives to comment on issues related to transition.
“We have to make sure that the commitment to develop a transition plan is more than just a statement of intent. It has to be translated into action,” Basenko said. Regarding the 20%–50%–80% targets, Basenko said that they were somewhat arbitrary, especially the first target (20% by January 2018). “It was based on what was happening in two regions of Ukraine (out of 25),” Basenko said, “but these regions really only represented 5% of the total.”
Basenko also said that in order for the transition to happen, Ukraine needs to develop a new national HIV program. “But there is not enough time to do this properly,” he said, “and the development of regional strategies is not far enough advanced.”
Nizova told Aidspan that when she was Head of the PHC (her contract expired in September 2017), she supervised the involvement of the center’s specialists in the preparation of a transition strategy and an action plan for implementation, which was reflected in Ukraine’s funding request to the Global Fund. “The main concern, in my opinion, is the slow progress of reforms in the public sector, primarily in the area of procurement and finance.”
Klepikov said that a TB/HIV sustainability strategy was approved by the Cabinet of Ministers. “Now, the key next steps are to make sure that the two new national programs on TB and HIV will be approved by the Parliament and properly funded.”
Klepikov noted that the transition is already underway. He said that the Alliance is currently transitioning an opioid substitution therapy (OST) program with over 10,000 patients to the government, and that the transfer is going well. As of beginning of January 2018, about 10% of the OST patients already started to receive methadone procured by the Ministry of Health, he said. “We expect that transitioning the OST program will be completed in mid-2018.”
Klepikov said that work on the detailed transition plan must start right away. “And, of course, it is not about developing a nice paper. It will require approval of some new working mechanisms –– for example, for NGOs to access domestic funding –– as well as the government’s decision on an increase in funding, and on funding new activities, such as prevention among PWID, MSM and sex workers.”
<strong>Final word</strong>
“The audit shows that there has been good progress in fighting the epidemics in Ukraine,” Klepikov told Aidspan. “Following the previous OIG audit done in 2010, Ukraine received 76 recommendations. This latest audit produced only three recommendations.”
<table width="317">
<tbody>
<tr>
<td colspan="7">Do you have any reaction to this article (or any article in GFO)? To send a note to the editor, just click <a href="mailto:editorgfo@aidspan.org">here</a>. <strong>We value your feedback</strong>.</td>
</tr>
</tbody>
</table>
⇄⧉tags => string (272) "Sub Issue, OIG, Transition, Men who have sex with men, Key populations, Offi...
$value[1]['tags']
Sub Issue, OIG, Transition, Men who have sex with men, Key populations, Office of the Inspector General, people who inject drugs, Ukraine, MDR-TB, MSM, PWID, Sex workers, supply chain, Case detection, program management, ARVs, Antiretriviral, procurements, sustainanbility
⇄⧉tittle => string (96) "The Global Fund's TRP praises India for ambitious plan to fast track the end...
$value[2]['tittle']
The Global Fund's TRP praises India for ambitious plan to fast track the end of the HIV epidemic
⇄⧉abstract => UTF-8 string (447) "ABSTRACT The Technical Review Panel found a lot to like when it reviewed Ind...
$value[2]['abstract']
ABSTRACT
The Technical Review Panel found a lot to like when it reviewed India’s HIV funding request in 2017. The TRP particularly cited the country’s ambitious plan to fast track the end of the HIV epidemic. At the same time, however, the TRP expressed several concerns, including the absence of human rights– and gender-responsive programming. Five HIV grants to India were among the grants recently approved by the Global Fund Board.
⇄⧉body => UTF-8 string (12047) "When it reviewed India’s HIV funding request in 2017, the Technical Review P...
$value[2]['body']
When it reviewed India’s HIV funding request in 2017, the Technical Review Panel (TRP) commended the Government of India for its ambitious plan to fast track the end of the HIV epidemic. At the same time, however, the TRP raised concerns about what it viewed as the request’s failure to include a focus on human rights and gender.
This article provides a summary of the comments from the TRP and the Grant Approvals Committee (GAC) on the funding request. See <a href="http://www.aidspan.org/gfo_article/strong-role-private-sector-global-funds-tb-grants-india">separate article</a> in this issue on the approval of India’s TB and TB/HIV grants. In addition, we plan to publish in the near future an article on the sustainability of India’s Global Fund grant portfolio.
Five HIV grants to India were recently approved by the Board.
The funding request was of the “tailored –– national strategic plan” variety. (The existing HIV grants are part of a national strategy–based pilot.)
In 2015, according to India’s National Strategic Plan (NSP), HIV prevalence in the adult population was 0.26%; there were about 86,000 new HIV infections (including 10,400 among children); and there were an estimated 2.1 million people living with HIV (PLHIV). India has a concentrated HIV epidemic, with the national HIV prevalence being the highest among people who inject drugs (PWID) (9.9%), followed by men who have sex with men (MSM) (4.3%) and female sex workers (2.2%). Data for transgender persons was not yet available.
Overall, the TRP said that the national HIV strategy on which the funding request was based was “robust and ambitious.” The request included a comprehensive situational analysis with the most recent available data, which the TRP said clearly described the challenges and gaps for HIV programming in India. The TRP said that India’s ambitious plan to fast track the end of the HIV epidemic included the following objectives:
<ul>
<li>reducing new infections by 80%;</li>
<li>linking 95% of estimated PLHIV to services;</li>
<li>initiating treatment for 95% of PLHIV, and retaining them on treatment;</li>
<li>eliminating mother-to-child transmission of HIV and syphilis; and</li>
<li>eliminating HIV-related discrimination.</li>
</ul>
In its review of the funding request, the TRP highlighted the approvals of the Transgender Bill, the HIV and AIDS Prevention and Control Act, and revisions to the Narcotic Drugs and Psychotropic Substance Act. This is important for HIV programming, the TRP said, because it creates an enabling policy and regulatory environment for service delivery to transgender, PWID and other key populations living with HIV.
The total value of the HIV grants approved for India was $155.1 million. The HIV program will be implemented by the same four principal recipients (PRs) that are managing the current HIV grants –– the National AIDS Control Organization (NACO), Plan International (India Chapter), Solidarity and Action Against the HIV infection in India, and the India HIV/AIDS Alliance –– plus a new PR, the Christian Medical Association of India.
(Technically, the PR for the NACO grant is the Department of Economic Affairs in the Ministry of Finance. But the <em>de facto</em> PR is NACO.)
All five grants proposed a start date of 1 January 2018 and an end date of 31 March 2020. Adding an “extra” three months to the grants (39 vs. 36 months) will allow India to align its grant implementation periods to the country’s fiscal cycle.
India submitted a prioritized above-allocation request (PAAR) of $96.8 million, of which $85.7 million was deemed “quality demand” by the TRP. During grant-making, $13.4 million in efficiencies was identified, all of which was used to fund interventions in the PAAR. Interventions totaling $72.3 million were added to the Unfunded Quality Demand (UQD) Register.
The TRP removed two activities from the within-allocation portion of the funding request. The TRP said that funding for 90 District AIDS Prevention and Control Units was inconsistent with India’s goal to move towards sustainability. And it said that a proposed continuum-of-care demonstration project constituted poor value for money in that it would make a limited contribution to better understanding and responding to the HIV epidemic in India. To replace these activities in the within-allocation request, the TRP recommended that the following interventions be moved from the PAAR:
<ul>
<li>key population–specific care and support interventions;</li>
<li>development of a procurement strategy; and</li>
<li>differentiated HIV testing services.</li>
</ul>
<strong>Strengths of the funding request</strong>
The TRP welcomed India’s ambition to transition from Global Fund support to fully finance its national HIV response with domestic resources by 2024. In addition, the TRP said that the HIV funding request made good use of India’s Integrated Biological and Behavioral Survey (IBBS) on HIV prevalence for female sex workers, MSM and PWID to inform the geographical prioritization of interventions targeting these key populations.
The funding request clearly described the challenges and bottlenecks in the treatment cascade, the TRP said, which India will address using (a) complementary HIV testing approaches, such as community-based testing for key populations and the expansion of HIV self-testing; and (b) different HIV care models, such as multi-month drug dispensing, comprehensive care units and community-led drug distribution.
India’s funding request included plans to integrate data systems and move to an electronic reporting system. Better data will mean that planning and monitoring is based on evidence rather than estimates, the TRP said.
The TRP commended India for its plans to integrate HIV testing and treatment services into the general health system by 2024, which will result in a more efficient use of resources such as healthcare workers, infrastructure, and supply-chain and information systems.
<strong>Issues and concerns</strong>
The TRP raised several issues, some of which were addressed during grant making, while others will be addressed during grant implementation. Some of these issues are described below:
<strong>Human rights– and gender-responsive programming</strong>: As mentioned above, the TRP expressed concern that the funding request was weak in integrating human rights– and gender-related issues into its HIV program interventions. The barriers to accessing HIV services due to punitive laws and sociocultural issues in India were not well described. Furthermore, the TRP said, gender issues with respect to women and girls were not mentioned at all in the funding request, which the TRP found surprising because women and girls in India face even greater issues (compared to boys and men) related to consent and agency, and –– if they test HIV positive –– stigma, discrimination, violence and exclusion. The lack of focused gender- and human rights–related interventions could impede access to, and uptake of, services for these populations, said the TRP.
The issue was cleared by the TRP during grant-making after NACO provided a brief document describing how it will include human rights and gender at all stages of HIV program planning and implementation. However, the TRP requested that NACO submit further information to the Secretariat by June 2018, including a matrix which lists the key intervention areas under the program and specifies for each of them what measures will be taken to ensure that they are gender-responsive and rights-based. The TRP said that the matrix should include specific actions that NACO will take to ensure that the scaling-up of community-based HIV testing adequately considers gender and human rights issues.
<strong>Capacity to outsource key enabling systems for the HIV response: </strong>The TRP noted that a social contracting process for health management information systems (HMIS) in the previous HIV grant could not be completed by NACO. In the funding request, the CCM proposed having NACO outsource key enabling systems for data management, procurement and supply chain management, as well as capacity development for healthcare workers and communities. However, the TRP said, the application didn’t include a description of authorization processes, timelines, contract management or quality assurance. The TRP strongly recommended that NACO develop an organizational plan with timelines for outsourcing these key enabling systems, including alternative approaches to manage contracting delays as they can undermine the HIV program. The issue was reported to have been fully addressed during grant making; however, how it was resolved was not explained in the grant documents.
<strong>Rapid increase in treatment enrolment</strong>: India recently announced its National Test and Treat Policy, which allows PLHIV to receive treatment regardless of CD4 cell count. Of the estimated 2.1 million PLHIV in India, approximately 72% know their HIV status. Treatment enrolment stands at 1.1 million, which leaves about 462,000 people living with HIV who know their status but are not yet enrolled on treatment. The TRP said that the funding request did not include a plan to reach PLHIV who have been initiated on treatment but have defaulted; nor does it include activities targeting people who have tested HIV-positive but are not yet on treatment. The TRP requested that by 30 June 2018, NACO provide an implementation plan for treatment initiation and improved retention on treatment. It said that the implementation plan should include (a) methods to reach PLHIV who are not yet on treatment; (b) a detailed description of the approaches to increase treatment retention; and (c) details on the scaling-up of the adherence initiatives currently being implemented by the India HIV/AIDS Alliance.
<strong>Viral suppression and viral loads.</strong> The TRP raised a concern that the funding request did not include a strategy for the rapid scale-up of viral load testing, or an indication of how many people on treatment receive regular viral load tests. The CCM reported that, currently, about 10,000 viral load tests are conducted each year. The target set by the CCM in the funding request for the end of the next implementation period is to conduct 2.3 million viral load tests. The TRP was concerned that this number is not feasible. It requested that a viral load testing plan be developed within the first six months of grant implementation and that it include sections on (a) demand creation; (b) prioritized geographic locations for roll-out; (c) standard operating procedures; (d) materials that will be required; (e) reporting; and (f) sustainability.
<strong>HIV co-financing </strong>
In order for India to meet its co-financing requirements for the 2018–2020 implementation period of its HIV grants, the government needs to invest $31.0 million more than the $282.0 million it committed in 2015–2017. The government has gone well beyond that, committing to invest $1.33 billion in HIV programming during 2018–2020 (see the table for details).
<strong>Table: Domestic resources for the national HIV program 2018–2020</strong>
<table width="478">
<tbody>
<tr>
<td width="241"><strong>Program area</strong></td>
<td width="187"><strong>Investment ($ million)</strong></td>
</tr>
<tr>
<td>Treatment, care and support</td>
<td>457.0 m</td>
</tr>
<tr>
<td>Targeted key population interventions</td>
<td>302.0 m</td>
</tr>
<tr>
<td>HIV testing and PMTCT</td>
<td>223.0 m</td>
</tr>
<tr>
<td>Blood safety</td>
<td>116.0 m</td>
</tr>
<tr>
<td>STI management</td>
<td>20.0 m</td>
</tr>
<tr>
<td>RSSH and program management</td>
<td>210.0 m</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>1,328.0 m</strong></td>
</tr>
</tbody>
</table>
⇄tittle => string (66) "Strong role for private sector in Global Fund's TB grants to India"
$value[3]['tittle']
⇄⧉abstract => UTF-8 string (386) "ABSTRACT India, the second most populated country in the world, and soon to ...
$value[3]['abstract']
ABSTRACT
India, the second most populated country in the world, and soon to become the largest, contributes 27% of the world’s TB burden. It plans to end TB by 2025. This article summarizes the comments from the Technical Review Panel and the Grants Approvals Committee on India’s TB funding request. In January, the Board approved four TB grants and one TB/HIV grant to India.
⇄⧉body => UTF-8 string (10429) "Among the grants approved by the Board recently were four TB grants and one ...
$value[3]['body']
Among the grants approved by the Board recently were four TB grants and one TB/HIV grant to India. In this article, we report on the comments from the Technical Review Panel (TRP) and the Grants Approvals Committee (GAC) on the funding request from which these grants emanated.
See <a href="http://www.aidspan.org/gfo_article/global-funds-trp-praises-india-ambitious-plan-fast-track-end-hiv-epidemic">separate article</a> in this issue on the approval of India’s HIV grants. In addition, we plan to publish in the near future an article on the sustainability of India’s Global Fund grant portfolio.
The TRP commended India for its strategically focused and technically sound funding request. It said that the request addressed the priority areas identified in India’s National Strategic Plan (NSP) for TB, which was developed through a consultative in-country process and includes the ambitious goal to end TB in India by 2025.
India is the second most populated country in the world with a population of 1.32 billion. It is projected to be the world’s most populous country by 2022. TB remains a major public health issue in India, with an estimated 2.8 million new TB cases and 130,000 new multi-drug resistant TB (MDR-TB) and MDR/RR-TB cases in 2015. MDR/RR-TB includes patients with MDR-TB as well as patients who have TB resistant to rifampicin. The estimated mortality in 2016 due to TB in India was 423,000. India contributes 27% of the world’s TB burden.
India’s TB funding request contained a strong focus on interventions that promote meaningful engagement and collaboration with the private sector, the TRP said. The interventions included TB diagnosis; case notification and treatment; scaling up laboratory services; improving active case finding among key affected populations; and expanding MDR-TB management and treatment outcomes. According to the funding request, the private sector for TB is “massive, heterogeneous and growing,” and accounts for roughly 80% of the first contact between patients and healthcare providers. It is estimated that more than half of the TB cases are diagnosed and treated in the private sector in India.
The Board approved $283.8 million for India’s TB and TB/HIV grants (see Table 1 for details).
<strong>Table 1: Approved TB and TB/HIV grants to India ($US million)</strong>
<table width="675">
<tbody>
<tr>
<td width="94"><strong>Comp.</strong></td>
<td width="120"><strong>Grant name</strong></td>
<td width="316"><strong>Principal recipient</strong></td>
<td width="135"><strong>Total program budget</strong></td>
</tr>
<tr>
<td>TB</td>
<td>IND-T-CTD</td>
<td>Central TB Division, Ministry of Health</td>
<td>201.3 m</td>
</tr>
<tr>
<td>TB</td>
<td>IND-T-IUATLD</td>
<td>International Union Against TB and Lung Disease</td>
<td>15.5 m</td>
</tr>
<tr>
<td>TB</td>
<td>IND-T-CHRI</td>
<td>Centre for Health Research and Innovation</td>
<td>15.6 m</td>
</tr>
<tr>
<td>TB</td>
<td>IND-T-FIND</td>
<td>Foundation for Innovative New Diagnostics India</td>
<td>33.1 m</td>
</tr>
<tr>
<td>TB/HIV</td>
<td>IND-T-WJCF</td>
<td>William J. Clinton Foundation</td>
<td>18.2 m</td>
</tr>
<tr>
<td colspan="3"><strong>Total</strong></td>
<td><strong>283.8 m</strong></td>
</tr>
</tbody>
</table>
All five grants proposed a start date of 1 January 2018 and an end date of 31 March 2020. Adding an “extra” three months to the grants (39 vs. 36 months) will allow India to align its grant implementation periods to the country’s fiscal cycle.
India submitted a prioritized above allocation request (PAAR) of $180.5 million, all of which was deemed to be quality demand by the TRP, including a $40.0 million loan buy-down to the World Bank (more on this below). During grant-making, the GAC found efficiencies worth $42.4 million, which were invested in two PAAR interventions. In the end, interventions valued at $141.5 million were added to the Unfunded Quality Demand (UQD) Register.
<strong>Strengths of the funding request</strong>
The TRP said that India’s funding request addressed some of the challenges experienced during the previous Global Fund TB and TB/HIV grants to India, such as inadequate oversight of principal recipients (PRs) and sub-recipients, a lack of streamlined financial reporting, and weaknesses of supply chain management.
The TRP praised India for its cognizance of the different levels of vulnerability within TB-affected populations, which the TRP said is reflected in the program design and prioritization of interventions, including active case finding activities to reach these populations.
Finally, the TRP commended India for its increase in domestic resources for TB-related activities and its ability to describe how these domestic resources will complement the activities in the proposed 2018–2020 implementation period of the grants.
<strong>Issues and concerns</strong>
The TRP raised several issues when it reviewed India’s TB funding request. Some were addressed during grant making, while others will be taken up during grant implementation. Some of these issues are described below.
<strong>Human rights and gender barriers.</strong> In its funding request, the country coordinating mechanism (CCM) highlighted that gender, social and cultural barriers hinder access to services by TB patients. However, the TRP said, the request did not include interventions to address these barriers. The CCM responded that the government has developed a Patient Charter that outlines the rights and responsibilities of people with TB. The Charter is a tool to empower TB patients and their families to make the relationship with health care providers mutually beneficial, the CCM said. In addition, special sensitization sessions will be conducted to brief patients about their rights. To address social and cultural barriers to accessing TB services, the CCM said, the program plans to conduct active case finding in high-risk and vulnerable populations, which include migrants, slum dwellers and tribal populations.
<strong>Sustainability of technical assistance and use of consultants. </strong>A concern raised by the TRP was that the funding request did not include a plan to integrate into the work of the national program the technical assistance which India has been receiving through a network of technical assistance consultants funded by the Global Fund. The assistance received to date includes planning, monitoring and implementation management. The GAC said that funding from external donors to cover the costs of these consultants is not sustainable and recommended that these costs be covered fully by the government by the end of this grant period. The CCM agreed to gradually reduce the number of technical consultants over the next three years.
<strong>Program management costs. </strong>The TRP considered the staff costs under the program management module to be very high, which, it noted, has implications regarding long-term sustainability. The TRP recommended that the CCM and the Global Fund Secretariat carefully review grant management costs for each PR to avoid duplication and disproportionate amounts. The grant documents don’t say precisely how this issue was resolved, except that the GAC expressed satisfaction with the detailed budget reviews and said that the program management costs are now optimized.
<strong>Patient support to improve TB outcomes</strong>. The TRP noted that initiatives relating to support for MDR-TB patients were mainly included in the PAAR. It said that results from a few pilot projects in India provided enough evidence to demonstrate the effectiveness of patient support in ensuring treatment adherence. The TRP recommended that this intervention be moved from the PAAR to the within-allocation budget. Changes made to the within-allocation budget during grant-making as a result of efficiencies and other decisions resulted in 40% of the costs of the patient support initiatives being covered. Additional funding could come from savings realized during grant-making.
<strong>Loan buy-down to the World Bank</strong>
As mentioned above, the PAAR included a request for $40.0 million to be provided as a buy-down for a large World Bank loan as part of a blended finance project (see <a href="http://www.aidspan.org/gfo_article/blended-finance-fresh-breath-innovation-global-fund">GFO article</a> for a description of blended finance). The plan is to use the loan financing to cover funding gaps for priority activities related to the missing one million TB cases; patient support incentives; and diagnostics and treatment for drug-resistant TB (DR-TB) cases. The CCM believes this investment will yield a 60% reduction in the annual number of missing TB cases by the end of 2020, and at least a 60% improvement in treatment outcomes among DR-TB patients. The TRP considered this request to be quality demand because it leverages substantial financial resources for TB programming in India. Following discussions with the Global Fund’s Audit and Finance Committee, the GAC agreed to register the loan buy-down as a high-priority need on the UQD Register.
<strong>Co-financing</strong>
In order for India to meet its co-financing requirements for its TB grant for the 2018–2020 implementation period, the government needs to invest $55.9 million more than the $149.0 million it committed in 2015–2017. The government said it will invest $740.0 million in the Revised National Tuberculosis Control Program. See Table 2 for a list of the program areas covered by this investment.
<strong>Table 2: Breakdown of the Government of India’s investment
in TB control ($ million)</strong>
<table width="500">
<tbody>
<tr>
<td width="268"><strong>Item</strong></td>
<td width="95"><strong>Amount </strong></td>
</tr>
<tr>
<td>TB drugs</td>
<td>310.0 m</td>
</tr>
<tr>
<td>Diagnostics</td>
<td>156.0 m</td>
</tr>
<tr>
<td>Human resources</td>
<td>146.0 m</td>
</tr>
<tr>
<td>Patient support</td>
<td>44.0 m</td>
</tr>
<tr>
<td>Pooled Procurement Mechanism (PPM)</td>
<td>31.0 m</td>
</tr>
<tr>
<td>Supervision and monitoring</td>
<td>36.0 m</td>
</tr>
<tr>
<td>Program management</td>
<td>17.0 m</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>740.0 m</strong></td>
</tr>
</tbody>
</table>
⇄⧉tittle => string (89) "Challenges remain in the "inherent structure and paradigm" of the Global Fun...
$value[4]['tittle']
Challenges remain in the "inherent structure and paradigm" of the Global Fund, study says
⇄⧉abstract => UTF-8 string (491) "ABSTRACT A study just published in the journal Globalization and Health says...
$value[4]['abstract']
ABSTRACT
A study just published in the journal Globalization and Health says that despite the reforms associated with the new funding model, challenges remain in the “inherent structure and paradigm” of the Global Fund. The lack of country offices has many negative downstream effects, the researchers said, including having to rely on in-country partners, and ineffective coordination of in-country activities. Most of the interviews conducted for the study were done in late 2013.
⇄⧉body => UTF-8 string (8736) "Despite the reforms that are associated with the new funding model (NFM), ch...
$value[4]['body']
Despite the reforms that are associated with the new funding model (NFM), challenges remain “in the inherent structure and paradigm of the Global Fund.” The lack of country offices has many negative downstream effects, including having to rely on in-country partners, and ineffective coordination of in-country activities.
These are some of the main conclusions of a study conducted by a team of researchers, led by Ashley Warren, from the Swiss Tropical and Public Health Institute and other institutions in Switzerland and <a href="https://globalizationandhealth.biomedcentral.com/articles/10.1186/s12992-017-0308-7">published</a> in the journal <em>Globalization and Health</em> in December 2017.
The objective of the research was to understand how the Global Fund was experienced by key stakeholders in Maputo, Mozambique; and how recent reforms were experienced by stakeholders in Mozambique as well as by Global Fund stakeholders in Geneva, Switzerland. The data was collected as part of a larger study on the influence of emerging donors in health development.
Thirty-eight interviews –– all but one done face-to-face –– were conducted with persons based in Maputo and Geneva. The Maputo respondents included local fund agents, country coordinating mechanisms, principal recipients (PRs) and sub-recipients. The Geneva respondents included staff of the Secretariat and members of the Board. Multilateral and bilateral partners, some based in Maputo and some based in Geneva, also participated.
<strong><em>Editor’s note: </em></strong><em>In interpreting the results of the study, there is a serious limitation: Even though the study results were only recently published, most of the interviews were conducted over four years ago, in late 2013 (five Geneva interviews were conducted in mid-2015). Nevertheless, we feel that the study raises some interesting issues.</em>
<strong>Country teams</strong>
The study found that because of weak managerial and absorptive capacity in Mozambique, more oversight is required than is afforded by country team visits. Respondents said that country teams were over-worked and, therefore, sometimes unsuccessful as the channel for communication; that too much depends on one individual, the fund portfolio manager (FPM); and that the country teams are out of touch with the realities on the ground.
<table width="265">
<tbody>
<tr>
<td colspan="7" width="257"><strong>“</strong>The Global Fund does not put things on their website to communicate widely with stakeholders, including at the country level. They rely on fund portfolio managers and people on the country team.”
–– Civil society respondent</td>
</tr>
</tbody>
</table>
One in-country respondent said that “the availability of expertise within the team is country-dependent. … Personnel are over-worked and over-extended and, as a result, it is not uncommon for them to take extended leave. This has caused detrimental gaps in communication.”
Although most respondents said that increased country visits under the NFM were a good thing, one Secretariat staffer took a contrarian view: “Countries also complain that country teams come too often. There is not enough time to make progress between visits, they are constantly working for the next visit, and this increases the time stress.”
<strong>In-country coordination</strong>
The study found that although decision-makers in Geneva recognize in-country coordination as vital to successful implementation, and other actors in-country would welcome Global Fund engagement, to date there are no institutional requirements for formalized coordination. At the time of the interviews, the researchers said, the Fund had no consistent representation in any in-country coordination groups despite a focus on performance-based financing (PBF).
Mozambique has a Health Partners Group that meets monthly and brings together all health sector supporters, including representatives of civil society. In addition, the researchers said, many coordinating bodies have been created as a result of the country’s absorption challenges. These include the G19, a group of bilateral donors who provide sector-wide support and coordinate among themselves, the National AIDS Council, and NAIMA+, a network of NGOs working on HIV and health.
“However, as there is no country presence, the Global Fund itself doesn’t participate in coordination bodies,” the researchers said. “Engagement with the Health Partners Group would greatly enhance the Global Fund’s understanding of country-level activities as this coordination body is a clearing house of what each partner is doing.”
<strong>Partnerships</strong>
In-country partners provide much needed support for Global Fund recipients, the researchers said, “but roles, responsibilities, and accountability must be clearly defined for a successful long-term partnership.”
One Secretariat staffer put it this way: “The big problem has been basically from the creation of the Fund that technical partners are very important; they are the ones who are present on the ground … And many of the countries depend on the technical assistance and the guidance from these technical partners. … It works already quite well in some countries and less well in others. And the challenge is to get more consistent … quality of technical assistance….”
The researchers stated that the degree of external support required for the Global Fund’s success has raised a debate on accountability. “To whom are the providers of TA … accountable?” they asked. One Board member said that “the most difficult part of the Global Fund model is the partnership model. [The Fund] depends on the support of partners and yet it doesn’t have any say over the partners. … I think we need to figure out what that relationship should be.”
<strong>Performance-based financing</strong>
Respondents in both Mozambique and Switzerland voiced concerns about the combination of (a) weak country presence, oversight and guidance on the part of the Global Fund Secretariat; and (b) stringent and cumbersome requirements for monitoring and evaluation (M&E) linked to PBF. The researchers said that the principles of PBF are better understood in Geneva than in Maputo where they appear to be overshadowed by the administrative burden placed on PRs. “Until countries take full ownership of this process and are empowered by the intended purpose of performance-based financing,” the researchers said, “PBF will likely continue to be perceived as an administrative burden and identified as a siloed donor demand.”
<strong>Ability to reform</strong>
Multiple respondents referred to the Global Fund’s ability to reform as one of the defining characteristics of the organization. “[The] Global Fund has proved in 10 years to have the ability to renew itself,” said one respondent from a multilateral organization.
“Overall, the Global Fund is learning from its mistakes,” said a Board member. “[It] completed its reformation in one year. It is a ‘learning organization’; it is navigating through a field of opposing forces and is highly committed to its mission.”
Although many of the reforms have not yet addressed concerns about the Global Fund’s overall model, the researchers said, respondents seemed to be looking beyond this initial transformation. They clarified that although their comments were critical of the Global Fund, they admire the Fund’s work.
<strong><em>Aidspan Comment:</em></strong>
<em>Not having a country presence has obvious drawbacks, as the researchers indicated. What the researchers did not mention in their article is that there would be serious costs associated with having a country presence. </em>
<em>When asked to comment on a draft of this article, Seth Faison, Director of Communications, pointed out that, from its founding, the Global Fund has avoided country presence for two overarching reasons: First, the Fund believed in the principle of country ownership where local experts are the ones who can best lead implementation work. Second, the Fund believed that limiting all staff to one office in Geneva would maximize the amount of funding available for grants and would minimize operating expenses. </em>
<em>“If the Global Fund established an in-country presence in countries with significant grants,” Faison said, “it would likely require increasing operating expenses by a significant margin. How much exactly would obviously depend on how much country presence. But allowing some country presence would likely lead to requests for more.”</em>
⇄⧉tittle => string (103) "Global Fund grant will expand HIV prevention, care and treatment services fo...
$value[5]['tittle']
Global Fund grant will expand HIV prevention, care and treatment services for key populations in Guyana
⇄⧉abstract => UTF-8 string (383) "ABSTRACT When it reviewed Guyana’s HIV program continuation funding request,...
$value[5]['abstract']
ABSTRACT
When it reviewed Guyana’s HIV program continuation funding request, the Technical Review Panel said that the request built on lessons learned from Guyana’s most recent programming for key populations. Issues raised by the panel were either fully or at least partially addressed during grant-making. The Global Fund Board recently approved funding for the HIV grant.
⇄⧉body => UTF-8 string (11405) "Among the batch of grants recently approved by the Board was an HIV grant to...
$value[5]['body']
Among the batch of grants recently approved by the Board was an HIV grant to Guyana. The proposed timeframe for the grant was 1 January 2018 to 31 December 2020. The principal recipient (PR) is the Ministry of Health, which also managed Guyana’s previous HIV grant.
In 2017, Guyana submitted a program continuation request for its HIV component. Program continuation requests are meant to simplify the funding request process for well-performing grants that have been recently reviewed by the Technical Review Panel (TRP) and do not require significant programmatic overhaul.
The epidemiological context and geographic focus of interventions remain the same when compared to the previous request. The country continues to experience a mixed epidemic that disproportionately affects key and vulnerable populations –– men who have sex with men (MSM), female sex workers, transgender people, miners and loggers. The strategic focus was on increasing impact by implementing mixed strategies to intensify the linkages to treatment and instituting a “treat all” policy.
According to the TRP, the proposed program built upon the successes and lessons learned from Guyana’s most recent programming for key populations, and aligned with the mid-term evaluation and revision of the National Strategic Plan (NSP) (HIVISION 2020); 2020 HIV cascade projections; the Center for Disease Control’s (CDC’s) Allocative Efficiency and Program Effectiveness Study; and a 2016–2017 comprehensive reprogramming request to ensure alignment with Guyana’s goal of eliminating AIDS and its negative social and economic impacts on the population.
The amount approved for the grant was $4,539,985, which is slightly lower than the program split amount. The difference will be reallocated to the TB component. There was no prioritized above allocation request (PAAR). The table below provides an overview of the country’s funding landscape for HIV for the 2018–2020 period.
<div align="center">
<p align="center"><strong>Table: Overview of Guyana’s funding landscape in 2018–2020 ($ million)</strong></p>
<table border="1" width="604" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td colspan="4" valign="top">
<div><strong>Component: HIV</strong></div></td>
</tr>
<tr>
<td valign="top" width="230">
<div>
<div align="right"><strong>Estimated funding need for program:</strong></div>
</div></td>
<td valign="top" width="87">
<div class="rteright">21 m *</div></td>
<td valign="top" width="100">
<div>
<p align="center"><strong>As % of
funding need</strong></p>
</div></td>
<td valign="top" width="177">
<div>
<div align="center"><strong>Change vs. previous period</strong></div>
</div></td>
</tr>
<tr>
<td valign="top">
<div align="left">Total domestic resources</div></td>
<td valign="top">
<div align="center">6.9 m **</div></td>
<td valign="top">
<div align="center">33%</div></td>
<td valign="top">
<div align="center">Increase</div></td>
</tr>
<tr>
<td valign="top">
<div align="left">Total external resources (non-GF)</div></td>
<td valign="top">
<div align="center">7.2 m</div></td>
<td valign="top">
<div align="center">34%</div></td>
<td valign="top">
<div align="center">Increase</div></td>
</tr>
<tr>
<td valign="top">
<div align="left">Total Global Fund resources</div></td>
<td valign="top">
<div align="center">4.5 m</div></td>
<td valign="top">
<div align="center">22%</div></td>
<td valign="top">
<div align="center">Slight Increase</div></td>
</tr>
<tr>
<td valign="top">
<div align="left">Total resources available</div></td>
<td valign="top">
<div align="center">18.6 m</div></td>
<td valign="top">
<div align="center">88%</div></td>
<td valign="top">
<div align="center">Increase</div></td>
</tr>
<tr>
<td valign="top">
<div>
<div align="left">Unmet need gap</div>
</div></td>
<td valign="top">
<div align="center">2.4 m</div></td>
<td valign="top">
<div align="center">12%</div></td>
<td valign="top">
<div align="center">Decrease</div></td>
</tr>
</tbody>
</table>
</div>
Notes:
<p class="style1">*The new NSP is currently being costed and there is a sustainability committee that is looking into defining the areas that will be covered by domestic funding.</p>
<span class="style1">** Data in the funding landscape table may be modified in the coming months to ensure consistency across years and in data reported by the Ministry of Finance and the Ministry of Health to the Global Fund.</span>
<strong>Notable strengths</strong>
The TRP considered the request to be technically sound and appropriate. It is aligned with the NSP and the 90-90-90 targets, the TRP said, and aims to implement the “treat all” approach and follow the World Health Organization (WHO) guidelines. The TRP found the program to be clear and well targeted, and deemed that it adequately addressed concerns raised by the TRP regarding the 2014–2016 grant.
The request takes into account the need to improve linkage to care for new persons newly diagnosed, antiretroviral therapy (ART) coverage, and retention of people living with HIV, the TRP observed. The request also notes the need to improve the supervision and program quality assessment of prevention strategies for key populations, and the proportion of miners and loggers tested for HIV. Finally, the TRP said, the funding request highlights the HIV program’s significant successes to date, such as increasing the proportion of pregnant women living with HIV receiving ART from 79% to 100%; ensuring that that all people diagnosed with HIV are screened for TB; and ensuring that 86% of co-infected TB/HIV patients receive ART during TB treatment.
In addition, the program continuation request outlined several key human rights and legal challenges that decrease equal access to health services for key populations; and suggested that the recommendations of a recent National Dialogue on HIV and the law will serve as strategic guidelines to develop the activities required to address those challenges.
<strong>Weaknesses, gaps and action steps</strong>
The TRP identified four issues pertaining to the funding request. The issues were discussed by the Secretariat and the PR during grant-making. Two were cleared and the remaining two were partially addressed. Below we summarize each issue as well as the outcome.
<strong>Not enough focus on transgender people.</strong> While transgender people have the highest HIV prevalence rate among identified key populations (8.4%), they were not addressed as a distinct population (rather, they were included with MSM).
<em>Outcome:</em> The issue was cleared by the TRP. The MOH submitted a revised strategy that contained new activities specifically for transgender people, including gathering baseline data for evidence-based decision-making and increasing the coverage area. This change resulted in increased targets in the performance framework and created a need to revise the budget to align with the additional interventions.
<strong>Weaknesses in procurement and supply chain management. </strong>There were weaknesses in the procurement and supply chain management systems that resulted in delays in the delivery of program commodities.
<em>Outcome:</em> The issue was partially addressed. The Grant Approvals Committee (GAC) said that the MOH understands the systemic supply issues and is currently creating a procurement master plan to address key issues in the system. The GAC added that there was a proposal to include a condition precedent in the grant confirmation form requiring that stock levels and consumption data be reviewed before procurement orders are made.
<strong>Lack of sustainability planning</strong>. Although Guyana has seen a 33% increase in domestic investment for HIV over the last period, it will soon face a substantial reduction in the availability of external funds to support the HIV response. The TRP said that Guyana needed to have a comprehensive discussion of sustainability issues.
<em>Outcome:</em> This issue is partially addressed by the launch of a committee tasked with drafting Guyana’s sustainability strategy by June 2018.
<strong>Treatment target plans not ambitious enough. </strong>The TRP highlighted that treatment scale-up targets are very low. It said that Guyana must intensify approaches to prevention in key populations –– especially MSM, transgender people and sex workers, all of whom are disproportionately affected by the HIV epidemic. Otherwise, the TRP said, the cost-effectiveness and impact of the program may be compromised.
<em>Outcome:</em> The issue was cleared during grant-making. The treatment targets were reviewed and more ambitious targets were submitted.
<strong>Sustainability</strong>
In the opinion of the TRP, Guyana has demonstrated a commitment to its HIV response by progressively increasing its investments in operating costs, human resources and medicines in order to maintain or scale up programming. This increase in domestic spending is intended to offset funding reductions from PEPFAR and the Global Fund, which the TRP said were in the order of 30% and 50% respectively.
As mentioned above, Guyana has launched a sustainability committee, comprised of government representatives from the MOH and the Ministry of Finance, civil society and other partners, to spearhead the discussion on sustainability and transition and deliver a sustainability and transition plan. The committee is supported by a consultant from Health Financing and Governance (HFG) Project, a USAID initiative. Guyana has also implemented a feasibility study on social contracting and will be conducting a transition readiness assessment this year.
<strong>Reactions from civil society</strong>
The TRP determined that the development of the program continuation request had been inclusive and had consolidated input from key population representatives. This sentiment was echoed by Devanand Milton, a transgender representative who is vice-chair of the CCM. She said that key populations and civil society were fully engaged in the process.
“Civil society organizations were given a small pot of money ($2,000 each) to conduct consultation sessions with their constituencies and report feedback to the CCM on challenges and recommendations,” Milton said. “I was invited by the National AIDS Program secretariat manager to submit recommendations that the transgender constituency be included in the proposal.”
However, Joel Simpson, managing director of Society Against Sexual Orientation Discrimination (SASOD) was critical of the funding request.
“It’s great that Guyana received more money from the Global Fund to fund the HIV response,” Simpson said, “but if the same ways of working persist, the Global Fund will continue to fail at reducing the HIV burden among key populations. Global Fund processes are caught up in government bureaucracies that are generally unresponsive to the human rights and health needs of key populations.”
Simpson added: “Civil society, much less key populations, do not play any meaningful role in decision-making processes. The country coordinating mechanism is dominated by the government with the support of the international agencies. The politics is beyond most of us in civil society.”
⇄tittle => string (74) "The Global Fund's strategic initiatives focus on deliverables and outcomes"
$value[6]['tittle']
⇄⧉abstract => UTF-8 string (318) "ABSTRACT All but one of the Global Fund’s 14 strategic initiatives are now i...
$value[6]['abstract']
ABSTRACT
All but one of the Global Fund’s 14 strategic initiatives are now in the implementation phase. The Secretariat says that each initiative has a “sharp focus” on deliverables and outcomes. The strategic initiatives, which have a budget of $194 million, are part of the Fund’s catalytic investments.
⇄⧉body => UTF-8 string (7781) "In operationalizing its strategic initiatives, the Secretariat has ensured t...
$value[6]['body']
In operationalizing its strategic initiatives, the Secretariat has ensured that each initiative has a “sharp focus” on deliverables and outcomes, with strong accountability for delivery, a spokesperson for the Secretariat says.
“In all Strategic Initiatives, release of the funds is contingent on the implementing entities fulfilling deliverables that are objectively verifiable and are on the critical path for delivery on the outcomes,” Peter Hansen, Head of the Technical Advice and Partnerships Unit, told Aidspan.
The strategic initiatives are one of three streams of funding in the $800 million catalytic investments pool. Strategic investments have a budget of $194 million. The other two streams –– multi-country approaches and matching funds –– have budgets of $250 million and $356 million, respectively. (The breakdown of the $800 million has changed a few times since the catalytic investments were first announced.)
There are 14 separate strategic initiatives (see the table for details).
<strong>Table: List of Global Fund’s strategic initiatives</strong>
<table width="700">
<tbody>
<tr>
<td width="611"><strong>Name and Objective</strong></td>
<td width="92"><strong>Total budget
($ million)</strong></td>
<td width="87"><strong>Approved
by GAC
($ million)</strong></td>
</tr>
<tr>
<td><strong>TB: Finding Missing TB Cases</strong>
Address specific barriers to finding missing tuberculosis cases; develop innovative approaches to accelerate case finding; scale up tools and approaches</td>
<td>10</td>
<td>10</td>
</tr>
<tr>
<td><strong>MALARIA 1: Malaria Elimination</strong>
Accelerate efforts in 21 countries to achieve the Global Technical Strategy for Malaria to eliminate malaria in at least 35 countries by 2030</td>
<td>7</td>
<td>7</td>
</tr>
<tr>
<td><strong>MALARIA 2: Catalyzing Market Entry of New LLINs</strong>
Introduce new technologies in Africa to counter the threat of insecticide resistance (in conjunction with $33 million matching funds for catalyzing market entry of new LLINs)</td>
<td>2</td>
<td>1</td>
</tr>
<tr>
<td><strong>MALARIA 3: Piloting Introduction of RTS S,S Malaria Vaccine</strong>
Contribute to the development of an updated WHO policy recommendation on the use of the RTS,S/AS01 malaria vaccine in young children in sub-Saharan Africa</td>
<td>15</td>
<td>15</td>
</tr>
<tr>
<td><strong>RSSH 1: Community, Rights and Gender</strong>
Build upon progress made in strengthening engagement of civil society and communities most affected by the three diseases in Global Fund processes</td>
<td>15</td>
<td>15</td>
</tr>
<tr>
<td><strong>RSSH 2: Sustainability, Transition and Efficiency</strong>
Accelerate the implementation of Global Fund’s Sustainability, Transition and Co-Financing Policy</td>
<td>15</td>
<td>15</td>
</tr>
<tr>
<td><strong>RSSH 3: Technical Support, South to South, Peer Review and Learning</strong>
Support health systems and effective HIV, TB and malaria programming</td>
<td>14</td>
<td>14</td>
</tr>
<tr>
<td><strong>RSSH 4: Data Systems, Generation and Use</strong>
Strengthen health information systems and surveillance; enable country systems to collect, report on and use data; support program impact and thematic evaluations and epidemiological reviews</td>
<td>20</td>
<td>20</td>
</tr>
<tr>
<td><strong>PSM 1: Diagnosis and Planning</strong>
Strengthen countries’ diagnosis and planning; support countries to use methodologies and tools to assess procurement and SC systems; support countries in data analysis and systems planning</td>
<td>20</td>
<td>20</td>
</tr>
<tr>
<td><strong>PSM 2: Innovation Challenge Fund</strong>
Support research, development and testing of SC system models; support development of new tools and guidance for evaluating SC systems; promote adoption of modern SC technologies</td>
<td>10</td>
<td>0</td>
</tr>
<tr>
<td><strong>PSM 3: Developing local resources</strong>
Support capacity building in countries for development and implementation of national guidance and best practices PSM; support inter-country collaboration and sharing</td>
<td>12</td>
<td>12</td>
</tr>
<tr>
<td><strong>PSM 4: Pre-Qualification of Medicines and <em>In Vitro</em> Diagnostics</strong>
Ensure products international quality, safety and performance standards</td>
<td>12</td>
<td>2</td>
</tr>
<tr>
<td><strong>TERG: Prospective Country Evaluations</strong>
Document the results of Global Fund-funded programs and share lessons learned</td>
<td>22</td>
<td>22</td>
</tr>
<tr>
<td><strong>Emergency Fund</strong>
Support the provision and continuity of essential prevention and treatment services for HIV, TB and malaria during emergency situations that cannot be funded simply through the reprogramming of existing grants</td>
<td>20</td>
<td>N/A</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>194</strong></td>
<td><strong>153</strong></td>
</tr>
</tbody>
</table>
Of the total budget of $194 million, initiatives totaling $153 million have been approved by the Grant Approvals Committee (GAC) and are in the implementation phase. One initiative –– the <strong>Innovation Challenge Fund</strong> –– is still under development. The $20 million Emergency Fund does not require GAC approval; these funds go through the Executive Grant Management Committee and are administered by the Grant Management Division.
Of the $194 million total, just under $50 million is being administered by the World Health Organization (WHO) through a Cooperative and Financial Agreement, which was <a href="https://www.theglobalfund.org/en/news/2017-12-01-who-and-global-fund-sign-cooperation-agreements/">announced</a> by the Global Fund. When it approved the funding for strategic initiatives, the Board mandated that for three of the initiatives –– <strong>Finding Missing TB Cases</strong>, <strong>Piloting Introduction of RTS S,S Malaria Vaccine</strong>, and <strong>Pre-Qualification of Medicines and <em>In Vitro</em> Diagnostics</strong> –– the funding be given to the WHO. The Secretariat has asked the WHO to also provide technical support for the <strong>Malaria Elimination</strong> strategic initiative as well as parts of three RSSH strategic initiatives.
The Global Fund has signed agreements with the WHO, Stop TB and Roll Back Malaria. In the case of two strategic initiatives –– <strong>Malaria Elimination</strong> and <strong>Finding Missing TB Cases</strong> –– the agreements link financing directly to measurable improvements in health outcomes at country level. For <strong>Malaria Elimination</strong>, the WHO will receive the funding in full only if the countries identified as priority achieve measurable milestones on the path to eliminating malaria, based on reductions in the number of malaria cases. For <strong>Finding Missing TB Cases</strong>, the WHO and Stop TB will receive the funding in full only if an additional 1.5 million missing TB cases are found in the 13 countries that are part of the initiative (Bangladesh, DRC, India, Indonesia, Kenya, Mozambique, Myanmar, Nigeria, Pakistan, Philippines, South Africa, Tanzania and Ukraine).
The first progress updates from the technical partners are expected at the end of this month.
<em>Aidspan has reported separately on the Community, Rights and Gender Strategic Initiative </em><a href="http://www.aidspan.org/gfo_article/steady-progress-human-rights-and-gender-activities-global-fund%E2%80%99s-strategy-there-have"><em>here</em></a><em> and </em><a href="http://www.aidspan.org/gfo_article/six-regional-platforms-communication-and-coordination-begin-work-part-global-fund%E2%80%99s-crg"><em>here</em></a><em>.</em>
⇄tittle => string (61) "New partnerships involving the Global Fund announced at Davos"
$value[7]['tittle']
⇄⧉abstract => string (525) "ABSTRACT The annual meeting of the World Economic Forum in Davos, Switzerlan...
$value[7]['abstract']
ABSTRACT
The annual meeting of the World Economic Forum in Davos, Switzerland was the occasion for the announcement of several partnerships involving the Global Fund. The announcements included the launch of the HER (HIV Epidemic Response) initiative; a partnership between (RED) and Africans for Africa; and partnerships between the Global Fund and three global private companies. The partnership with one of these companies provoked a reaction from organizations concerned with the effects of alcohol on public health.
⇄⧉body => UTF-8 string (15168) "The annual meeting of the World Economic Forum, held on 23–26 January 2018 i...
$value[7]['body']
The annual meeting of the World Economic Forum, held on 23–26 January 2018 in Davos, Switzerland, was the occasion for announcements of several new partnerships involving the Global Fund.
The announcements included the launch of the HER initiative; a partnership between (RED) and A4A; and partnerships between the Global Fund and three global private companies. The partnership with one of these companies provoked a reaction from organizations concerned with the effects of alcohol on public health (see below).
<strong>The HER initiative</strong>
The Global Fund and several partners launched a new initiative to build private sector support for programs that address HIV in 13 African countries where adolescent girls and young women (AGYW) face disproportionate risk.
Nearly 7,000 young women and girls are infected with HIV every week, many of them in East and Southern Africa. The 15–24-year-old population of Africa has doubled since 1990. In the hardest-hit countries, girls account for more than 80% of all new HIV infections among adolescents.
According to a <a href="https://www.theglobalfund.org/en/news/2018-01-24-global-fund-and-partners-launch-her/">news release</a> from the Global Fund, incoming Executive Director Peter Sands announced the HER – HIV Epidemic Response – initiative at the Global Goals Gathering, which was part of the World Economic Forum.
<table border="0" cellspacing="1" cellpadding="0" align="left">
<tbody>
<tr>
<td><a href="http://aidspan.org/sites/default/files/HER.png" target="_blank" rel="noopener"><img src="http://aidspan.org/sites/default/files/HER.png" alt="" width="188" height="194" /></a></td>
<td class="rtecenter" width="20"></td>
</tr>
</tbody>
</table>
“We have made incredible gains against AIDS over the past generation,” Sands said. “But we see a serious threat to that progress if we do not directly address the challenges faced by adolescent girls and young women.”
Sands announced partner commitments from The Coca-Cola Company, Standard Bank, Unilever and ViiV Healthcare, as well as (RED)®, which will expand its operations in Africa. (For more on the partnerships with (RED) and Unilever, see below.)
According to the news release, the HER initiative provides a platform for partners to contribute in a variety of ways, including the following:
<ul>
<li>financial resources to accelerate the most impactful HIV prevention programs;</li>
<li>in-kind expertise to support countries to pilot new approaches and implement innovative programs tailored to meet the needs of AGYW;</li>
<li>support for HER Voice, a fund which helps ensure young women’s and girls’ voices are heard at key decision-making forums (see <a href="http://www.aidspan.org/gfo_article/new-fund-be-launched-support-meaningful-engagement-adolescent-girls-and-young-women">GFO article</a>); and</li>
<li>awareness raising with employees and customers.</li>
</ul>
<div></div>
The Global Fund’s <a href="https://www.theglobalfund.org/en/her/">website</a> says that the HER initiative has set a target to reduce the number of new HIV infections among AGYW by 58% over the next five years in the 13 countries covered by the initiative. The countries are: Botswana, Cameroon, Lesotho, Kenya, Malawi, Mozambique, Namibia, Swaziland, South Africa, Tanzania, Uganda, Zimbabwe and Zambia.
The initiative was inspired by the U.S. President’s Emergency Plan for AIDS Relief (PEPFAR) and the DREAMS Partnership, “which has led to greater global recognition of the scope of the challenge of reaching adolescent girls and young women to reduce their risk for HIV,” the website states.
Over the next five years, the Global Fund is planning to raise additional resources to expand HIV prevention programs for AGYW. The HER Initiative aims to support the kinds of programs that can create lasting change for AGYW –– programs such as the following:
<ul>
<li>comprehensive, adolescent-friendly programs that provide sexuality education, condoms and pre-exposure prophylaxis and HIV testing – all free from stigma and discrimination;</li>
<li>life skills, financial literacy and “know your rights” education which can empower girls and young women to be advocates for their own health and well-being; and</li>
<li>cash incentives, peer networks, mentors and other social protection programs –– including prevention of gender-based violence –– to support girls as they complete their education.</li>
</ul>
<div></div>
+++++++++++++++
<strong>Partnership between (RED) and A4A</strong>
<table border="0" cellspacing="1" cellpadding="0" align="right">
<tbody>
<tr>
<td class="rtecenter"></td>
<td><a href="http://aidspan.org/sites/default/files/REDA4A.png" target="_blank" rel="noopener"><img src="http://aidspan.org/sites/default/files/REDA4A.png" alt="" width="137" height="137" /></a></td>
</tr>
</tbody>
</table>
(RED)® –– also known as (PRODUCT) RED –– announced a new operational partnership with Africans for Africa (A4A) to bring a number of new Africa-based companies into the fight against AIDS. The partnership will focus on engaging companies to generate money to fight HIV through the Global Fund.
The announcement was made at the World Economic Forum by Deb Dugan, CEO of RED. Dugan said that (RED)’s expansion in Africa will be supported by its existing partners, The Coca-Cola Company and SAP.
A (RED) <a href="https://www.prnewswire.com/news-releases/red-expands-its-innovative-business-model-to-accelerate-the-fight-to-end-aids-in-africa-300587737.html">news release</a> quotes Dugan as saying, “It’s been 12 years since (RED) was first announced here in Davos. With over $500 million contributed to the Global Fund and more than 110 million people impacted, (RED) is now embarking on its next major chapter –– using the power and ingenuity of African companies, organizations and consumers to help end AIDS.”
Peter Sands said, “There is no more important time [than] now to engage the African economy in helping to end this epidemic for good. We’re so grateful to (RED) for continuously pushing in new directions, underscoring our public-private partnership to save millions of lives.”
<table border="0" cellspacing="1" cellpadding="0" align="left">
<tbody>
<tr>
<td><a href="http://aidspan.org/sites/default/files/AFA.png" target="_blank" rel="noopener"><img src="http://aidspan.org/sites/default/files/AFA.png" alt="" width="150" height="92" /></a></td>
<td class="rtecenter"></td>
</tr>
</tbody>
</table>
<a href="http://africans4africa.com/home.php">Africans for Africa</a> is an African-driven social investment fund designed to generate investments that will accelerate the pace of sustainable development. Julie Essiam, A4A’s Founding Partner, said: “We’re very excited about our new partnership with (RED). It’s exactly the kind of smart, entrepreneurial model that suits African innovation. It is now more urgent than ever for us to use the power of the private sector to help us finish the AIDS fight on the continent, and around the world.”
++++++++++++++
<strong>Partnerships with three global private companies</strong>
Partnerships between the Global Fund and three of the world’s leading private companies in their fields –– Lombard Odier, HEINEKEN and Unilever –– were announced in Davos. Details were provided by Christoph Benn, the Global Fund’s Director of External Relations, in a “Voices” <a href="https://www.theglobalfund.org/en/blog/2018-01-26-from-davos-the-power-of-public-private-partnerships/">posting</a> on the Fund’s website –– and by the companies themselves in news releases posted on their websites.
<table border="0" cellspacing="1" cellpadding="0" align="right">
<tbody>
<tr>
<td class="rtecenter"></td>
<td><a href="http://aidspan.org/sites/default/files/Lombard.png" target="_blank" rel="noopener"><img src="http://aidspan.org/sites/default/files/Lombard.png" alt="" width="191" height="89" /></a></td>
</tr>
</tbody>
</table>
Lombard Odier, a private banking and asset management company that originated in Switzerland, and the Global Fund announced a strategic partnership to create ways to help the private sector contribute to the work of the Fund, while addressing investors’ need to meet their financial goals. Among other things, the partnership will examine structures that allow investors to share a proportion of the gains they receive from putting their capital to work. Patrick Odier, Senior Managing Partner of the Lombard Odier Group <a href="https://www.lombardodier.com/contents/corporate-news/media-releases/2018/january/lombard-odier-and-the-global-fun.html">said,</a> “Investors no longer need to choose between doing well and doing good. It is becoming easier to meet both goals at the same time.”
<table border="0" cellspacing="1" cellpadding="0" align="left">
<tbody>
<tr>
<td><a href="http://aidspan.org/sites/default/files/Heineken.png" target="_blank" rel="noopener"><img src="http://aidspan.org/sites/default/files/Heineken.png" alt="" width="195" height="78" /></a></td>
<td class="rtecenter"></td>
</tr>
</tbody>
</table>
The Global Fund and HEINEKEN, a global brewing company, entered into a partnership to fight infectious diseases in Africa. Benn said that HEINEKEN will lend its expertise in logistics and communications to support the Fund to better reach specific demographic groups that are most at risk of the three diseases. For example, HEINEKEN will pair supply chain experts with logistics planners at the Global Fund to share expertise in demand-forecasting and quality control during shipment. And locally, in countries in Africa, HEINEKEN will support efforts to improve the effectiveness of last-mile distribution, focusing on ensuring the right goods can reach health care facilities and patients in remote areas. This is already taking place in the Democratic Republic of Congo, South Africa and Nigeria, Benn said. HEINEKIN’s announcement can be found <a href="http://www.theheinekencompany.com/media/media-releases/press-releases/2018/01/2164014">here</a>.
<table border="0" cellspacing="1" cellpadding="0" align="right">
<tbody>
<tr>
<td class="rtecenter"></td>
<td><a href="http://aidspan.org/sites/default/files/Unilever.png" target="_blank" rel="noopener"><img src="http://aidspan.org/sites/default/files/Unilever.png" alt="" width="173" height="132" /></a></td>
</tr>
</tbody>
</table>
Unilever, a multinational manufacturer of food products and other consumer goods, headquartered in London and Rotterdam, will work with the Global Fund to improve health program effectiveness, reduce infections and save lives fighting HIV and malaria in certain countries in Africa (e.g. South Africa and Nigeria) and Asia (e.g. India and Bangladesh). Benn said that the partnership will support work in the following areas: HIV prevention programs that focus on adolescent girls and young women; water, sanitation and hygiene programs in malaria case management, particularly for children under five; supply chain-strengthening initiatives to build in-country capacity and more effective distribution networks; and designing more patient-centric programs. Unilever and the Global Fund have agreed to invest $5 million each to support these activities over the next three years. Unilever’s announcement can be found <a href="https://www.unilever.com/news/news-and-features/Feature-article/2018/five-big-announcements-we-made-at-davos-this-week.html">here</a>.
“Private companies have a broad range of expertise and capabilities that can increase the public-sector response to disease control, from data management and supply chain logistics to awareness campaigns to the deployment of innovative technology and financial services,” Benn said. “Public-private partnership has always been part of the Global Fund’s DNA. Experience tells us that our best work is done when corporations collaborate with governments, international organizations, donors and non-profits to expand the reach and impact of programs.”
<strong>Reaction to the partnership with HEINEKEN</strong>
According to an <a href="https://www.reuters.com/article/us-health-globalfund-heineken/health-campaigners-decry-global-hiv-funds-deal-with-heineken-idUSKBN1FL5ZW">article</a> by the news agency <em>Reuters</em>, the announcement of the partnership with HEINEKEN sparked a reaction from three organizations concerned with the effects of alcohol on public health –– IOGT International, the Global Alcohol Policy Alliance and the NCD Alliance.
In a letter to incoming Executive Director Peter Sands, Interim Executive Director Marijke Wijnroks, and Board Chair Aida Kurtovic, the three organizations said that they are “deeply concerned about this partnership and its implications for global health.” The organizations referred to “the dangers inherent in partnerships with the producers and marketers of hazardous products such as alcohol.” They cited alcohol as “a major risk factor for both TB and HIV/AIDS.”
The three organizations said that “partnerships with the alcohol industry are laden with inherent conflicts of interest. Transnational corporations producing and aggressively marketing alcohol rely on the harmful use of alcohol for their sales and profits.”
Seth Faison, the Global Fund’s Director of Communications, provided Aidspan with the following response to the open letter:
“The Global Fund’s partnership model embraces forward-thinking and innovative approaches, necessary to achieve ambitious goals of ending epidemics. Private sector engagement and expertise is part of the solution. Ending epidemics requires overcoming the “last mile” challenges that can prevent life-saving health products from getting to remote clinics. A new partnership between Heineken and the Global Fund enables Heineken’s supply chain experts to provide expertise to Global Fund logistics planners on how to improve the supply chain. In mid-2017, the Global Fund’s senior management reviewed the risks and benefits of the Heineken partnership before approving it. The Global Fund is aware of concerns about the role of alcohol in public health, and concluded that Heineken’s positive track record on AIDS, and on responsible consumption, supports partnership work on supply chain.”
<a class="style2" href="http://iogt.org/">IOGT International</a><em> is an organization that promotes a lifestyle free of alcohol and other drugs. The </em><a class="style2" href="http://globalgapa.org/">Global Alcohol Policy Alliance</a><em> is a network of non-governmental organizations and people working in public health agencies who share information on alcohol issues and advocate evidence-based alcohol policies “free from commercial interests.” The </em><a class="style2" href="https://ncdalliance.org/">NCD Alliance</a><em> is a global network of 2,000 civil society organizations dedicated to the prevention and control of non-communicable diseases.</em>
⇄⧉tags => string (155) "Sub Issue, Partnership, AGYW, HER initiative, HER voice, (RED), HEINKEN, Uni...
$value[7]['tags']
Sub Issue, Partnership, AGYW, HER initiative, HER voice, (RED), HEINKEN, Uniliver, Lombard Odier, Adoloscent girls and young women, African for Africa, A4A