Archive for July, 2013

Hack WordPress Version Number

Recently when developing a plugin that examines available updates for WordPress, I needed to test situations where the WordPress Core is out of date.

Rather than going and installing an old version of WordPress, its much easier to simply modify the internal version number to an older version.

Head over to wp-includes/version.php and modify the $wp_version variable.

, , ,

No Comments

End a Request with a Zend Framework 2 Controller Plugin

By default, Zend Framework 2 (ZF2) controller plugins cannot force the request to end. Typically, the controller action calls plugin methods and then does what it wishes with the returned value. However, there are some circumstances (such as user authentication), where you may want to end the request if certain conditions are met in the controller plugin.

For example:
Say you want to return the currently authenticated user using a controller plugin, and if there is no authenticated user, return a 401 status code. When your controller calls the plugin, you would have to check the return value every time and have boilerplate code to set the status code in the response and return the response from your controller action.

There is a better way:
Instead of having to check in your controller, wouldn’t it be better if you could just have the Plugin do the work: set the status code and return the response to the client?

This class makes that possible. By emitting MvcEvent:EVENT_FINISH, it triggers the listeners to send the response to the client. By immediately exiting the application and ending the request, we ensure that MvcEvent:EVENT_FINISH is emitted only once.

/**
 * Plugins interiting from this superclass will be able to terminate the request by calling sendResponse()
 *
 * Class RequestTerminationPlugin
 * @package Application\Controller\Plugin
 */
abstract class SendResponsePlugin extends AbstractPlugin
{
 
    /**
     * @var MvcEvent
     */
    private $event;
 
 
    /**
     * Sends the response and terminates.
     * @param ResponseInterface $response
     */
    protected function sendResponse(ResponseInterface $response)
    {
        $e = $this->getEvent();
        $e->setResponse($response);
 
        $e->getApplication()->getEventManager()->trigger(MvcEvent::EVENT_FINISH, $e);
        exit();
    }
 
 
    /**
     * Get the event
     *
     * @return MvcEvent
     * @throws DomainException if unable to find event
     */
    protected function getEvent()
    {
        if ($this->event) {
            return $this->event;
        }
 
        $controller = $this->getController();
        if (!$controller instanceof InjectApplicationEventInterface) {
            throw new DomainException(get_class($this) . ' requires a controller that implements InjectApplicationEventInterface');
        }
 
        $event = $controller->getEvent();
        if (!$event instanceof MvcEvent) {
            $params = $event->getParams();
            $event  = new MvcEvent();
            $event->setParams($params);
        }
        $this->event = $event;
 
        return $this->event;
    }
 
}

, , , ,

No Comments

GitLab 5+ on Ubuntu 12.04 LTS

GitLab is a neat GitHub clone that can be installed on your own servers. I wanted to setup mine running in a virtualized Ubuntu 12.04LTS environment.

These instructions are for Ubuntu 12.04.2 AMD64 and GitLab 5-3-stable

Basic Instructions are here:
https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md

Deviations from Official Instructions

Ruby

Rather than downloading and compiling ruby 1.9.3, I installed it from the repo:

sudo apt-get install ruby1.9.3

However, I still installed the Bundler Gem.

MySQL

I went with MySQL over PostgreSQL simply because it integrates into my existing tools better.

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

I use MySQL Workbench to configure my server instances. Command line instructions can be found in the GitLab Docs.

Notice in the “Install Gems” step, you have to use the First option for MySQL:

sudo -u git -H bundle install --deployment --without development test postgres

, , , , ,

No Comments