<tr id="<%= format %>-campaign-image">
  <th scope="row" class="row-header">
    <%= format.capitalize %> image
    <div class="normal"><%= size %></div>
  </th>
  <td>
    <% if @edition.send("#{format}_image") %>
      <% if @edition.send("#{format}_image").state == "unscanned" %>
        <p class="alert alert-info"><%= @edition.send("#{format}_image").name %> is being scanned for viruses</p>
      <% else %>
        <p>
          <%= link_to @edition.send("#{format}_image").file_url do %>
            <%= image_tag @edition.send("#{format}_image").file_url, :height => "200px" %>
          <% end %>
        </p>
      <% end %>
      <p><%= label_tag do %>Remove image? <%= check_box_tag "edition[remove_#{format}_image]", "1", false, disabled: @resource.locked_for_edits?, class: 'js-no-ajax' %><% end %></p>
    <% end %>
    <%= f.input "#{format}_image".to_sym, :as => :file, :label => "Upload image:", input_html: { disabled: @resource.locked_for_edits? } %>
  </td>
</tr>

<tr id="<%= format %>-campaign-image">
  <th scope="row" class="row-header">
    <%= format.capitalize %> image
    <div class="normal"><%= size %></div>
  </th>
  <td>
    <% if @edition.send("#{format}_image") %>
      <% if @edition.send("#{format}_image")["state"] == "unscanned" %>
        <p class="alert alert-info"><%= @edition.send("#{format}_image")["name"] %> is being scanned for viruses</p>
      <% else %>
        <p>
          <%= link_to @edition.send("#{format}_image")["file_url"] do %>
            <%= image_tag @edition.send("#{format}_image")["file_url"], :height => "200px" %>
          <% end %>
        </p>
      <% end %>
      <p><%= label_tag do %>Remove image? <%= check_box_tag "edition[remove_#{format}_image]", "1", false, disabled: @resource.locked_for_edits?, class: 'js-no-ajax' %><% end %></p>
    <% end %>
    <%= f.input "#{format}_image".to_sym, :as => :file, :label => "Upload image:", input_html: { disabled: @resource.locked_for_edits? } %>
  </td>
</tr>

Fix image upload view to handle GDS API Adapters response
Fix image upload view to handle GDS API Adapters response

GDS API Adapters returns a hash response, however the image upload view accessed this as if it were an OpenStruct, and so editing campaigns would break. This fixes the view.
Trello: https://trello.com/c/dhivh7TF/593-fix-campaigns-in-publisher
