O Phabricator é um aplicativo PHP incrivelmente bem codificado, mas falta um pouco na parte da documentação. Mas, novamente, que projeto de código aberto não é assim? Nos últimos meses, tenho integrado lentamente o Phabricator, uma nova ferramenta de revisão, ao Bugzilla, uma ferramenta muito mais antiga. Na etapa mais recente, precisei adicionar um campo personalizado (DifferentialCommitMessageCustomField class extension) às revisões:



ID do bug do Phabricator


Criando o DifferentialCommitMessageCustomField foi bastante simples, mas, devido à estrutura do DifferentialRevision e de outras classes do Phabricator, recuperar o valor do campo não é tão fácil quanto se espera. Depois de tentar vários métodos e vasculhar o código-fonte da cadeia de classes, foi Aviv Eyal quem forneceu uma função utilitária interessante para recuperar dados de campo personalizados para um determinado tipo de objeto do Phabricator:



function get_custom_field_value($object, $key_field) {
  $field = PhabricatorCustomField::getObjectField(
    $object,
    PhabricatorCustomField::ROLE_DEFAULT,
    $key_field
  );

  id(new PhabricatorCustomFieldStorageQuery())
  ->addField($field)
  ->execute();

  $value = $field->getValueForStorage();

  return $value;
}


No meu caso, o $object era um DifferentialRevision e o $key_field é differential:bugzilla-bug-id, definido em meu DifferentialCommitMessageCustomField . Se o senhor estiver adicionando um CustomField de qualquer tipo a qualquer aplicativo Phabrication, o senhor pode usar esse mesmo método.


Quando há falta de documentação e níveis de herança com uma dúzia de níveis de profundidade, é ótimo que os membros da comunidade possam ajudar uns aos outros – isso diz muito sobre o projeto.

  • 5 APIs HTML5 que o senhor não sabia que existiam

    Quando se diz ou se lê “HTML5”, é de se esperar que dançarinas exóticas e unicórnios entrem na sala ao som de “I’m Sexy and I Know It”. Mas o senhor pode nos culpar? Assistimos à estagnação das APIs fundamentais por tanto tempo que um recurso básico…

  • Crie classes com espaço de nome com o MooTools

    O MooTools sempre foi um pouco criticado por não usar e padronizar inerentemente classes JavaScript baseadas em namespaced, como faz o Dojo Toolkit. Muitos desenvolvedores criam suas classes como globais, o que geralmente é mal visto. Na maioria das vezes, não concordo com essa posição, mas cada um tem a sua. De qualquer forma…

  • Marca d'água no topo usando o MooTools

    Sempre que tiver uma página longa de conteúdo, geralmente o usuário deseja adicionar um link de âncora “top” na parte inferior da página para que o usuário não precise rolar a página para chegar ao topo. O único problema com esse método é que…

  • Use gráficos personalizados de imagens ausentes usando MooTools

    A falta de imagens em seu site pode fazer com que você ou sua empresa pareçam completamente amadores. Infelizmente, às vezes uma imagem é excluída ou corrompida sem o seu conhecimento. O senhor concorda comigo que o ícone “x vermelho” padrão do IE parece horrível, então por que não usar&#13 seu próprio gráfico de imagem ausente?