Skip to:
Content
Pages
Categories
Search
Top
Bottom

Google Books API Function triggers unwanted topic submission

  • Avatar of Jerry
    Jerry
    Participant

    @jerrysc

    If this challenge I am having is beyond the scope of help in the bbpress forums, then I understand. The below code is a function that allows the user to submit a search request for a book title via the google books api. When the user clicks “search”, the function works great and returns results in a Jquery window. The problem I am having; it triggers a submit of the bbpress topic, and I get the errors “cannot submit a topic with the subject line blank.”

    If there is a simple fix I am not seeing, can someone please help me?

    function book_search_google () {    
      //set API version for Google Book Search API
      $v = isset($_POST['v']) ? $_POST['v'] : '1';
      //set user API key for Google Book Search API
      $key = isset($_POST['key']) ? $_POST['key'] : 'key goes here';
      //set user IP for Google Book Search API
      //$ip = isset($_POST['ip']) ? $_POST['ip'] : $_SERVER['REMOTE_ADDR'];
      //set default value for query to Google Book Search API 0307387941
      $query = isset($_POST['q']) ? $_POST['q'] : '0307387941';
      //set default value for search type to Google Book Search API
      $type = isset($_POST['type']) ? $_POST['type'] : 'all';
      //check and assign page of search results - are we on the first page?
      $start = isset($_POST['start']) ? $_POST['start'] : 1;
      //set default value for number of results
      $limit = isset($_POST['limit']) ? $_POST['limit'] : '10';
    
      switch ($type) {
    
        case 'all':
          $params = 'q='.urlencode($query).'&startIndex='.$start.'&maxResults='.$limit;
        break;
    
        case 'isbn':
                $params = 'q=isbn:'.urlencode($query).'';
        break;
    
        case 'lccn':
                $params ='q=lccn:'.urlencode($query).'';
        break;
    
        case 'oclc':
                $params = 'q=oclc:'.urlencode($query).'';
        break;
    
        default:
          echo '<p>You must specify a search type such as "all" or "book". Check the url to make sure "type=" has a value.</p>';
          exit;
          }
      //set URL for the Google Book Search API
      $url = 'https://www.googleapis.com/books/v'.$v.'/volumes?key='.$key.'&'.$params.''; 
    
      if(isset($_POST['q'])):
    
      //build request and send to Google Ajax Search API
      $request = file_get_contents($url);
      //decode json object(s) out of response from Google Ajax Search API
      $data = json_decode($request,true);
      $totalItems = $data['totalItems']; 
    
     pagination  mainHeading
        if ($totalItems > 0) {
      ?>
    
          <!doctype html>
          <html lang="en">
          <head>
          <meta charset="utf-8">
          <title>jQuery UI Dialog - Default functionality</title>
          <link rel="stylesheet" href="//whosgotbooks.com/jquery/jquery-ui-1.10.4.custom.css">
          <script src="//whosgotbooks.com/jquery/jquery-1.10.2.js"></script>
          <script src="//whosgotbooks.com/jquery/jquery-ui-1.10.4.custom.js"></script>
          </head>
          <body>
          <div id="dialog" title="Google Books Search Results" style="display:none;">
          <script>
          $(function() {
          $( "#dialog" ).dialog({
            height: 550, width: 450});
            $( "#returnvalues" ).click(function(){
            $( "#dialog" ).dialog( "close" ); 
            });
            });
          </script>     
                <strong><p style="font-size: 16px; text-align: center";>Top 10 Results for &quot;<?php echo @$_POST['q']; ?>&quot;</p></strong> 
            <strong><p style="font-size: 14px; text-align: center";>choose a book to select as your topic</p></strong>&nbsp;
            <table style="width:400px">
            <col width="325">
            <col width="75">
                <?php foreach ($data['items'] as $item) { ?>    
                      <tr>
                <td>
                           <strong><u><div style="font-size: 14px";><?php printf($item['volumeInfo']['title'])?></u></div></strong>
                             <strong>Author: </strong><?php printf( $item['volumeInfo']['authors'][0]); ?><br />
                             <strong>Published: </strong><?php printf( $item['volumeInfo']['publishedDate']); ?><br />                       
                   <strong>Page(s): </strong><?php printf( $item['volumeInfo']['pageCount']); ?><br />
                             <strong>Publisher: </strong><?php printf( $item['volumeInfo']['publisher']); ?><br />
                             <strong>Category: </strong><?php printf( strtolower($item['volumeInfo']['printType']).', '.strtolower($item['volumeInfo']['categories'][0])); ?>&nbsp;&nbsp;
                   <strong>ISBN: </strong><?php printf( $item['volumeInfo']['industryIdentifiers'][0]['identifier']); ?></td>
                <td><p><input type="submit" name="submit" value="Select" id="returnvalues"/></p>
                    <img src="<?php printf( rawurldecode($item['volumeInfo']['imageLinks']['smallThumbnail'])); ?>" />
                        </td>
                <tr><td style="width:420px"><p><strong>Description: </strong><?php printf( $item['volumeInfo']['description']); ?><br /></p></td>
                </tr>
                </tr>
    
                <?php } }
                else {
                    ?>
                       <p><strong>Sorry, there were no results</strong></p>
                    <?php  } 
                /* for testing purposes show actual request to API - REMOVE when finished
                $apiRequest = $url;
                echo '<p>API request: '.$apiRequest.'</p>'; */ ?>
            </table>
          </div>
          </body>
          </html>
    
              <?php
              else: //show form and allow the user to check for Google Book search results
              ?>
    
          <p><form id="searchForm" name="searchForm" method="post"> 
            <fieldset id="searchBox">
                <label>Search for a Book:</label>
                <input class="text" id="q" name="q" type="text" value="Powered by Google" onfocus="this.value=''; this.onfocus=null;" />
                <select id="type" name="type" size="1">
                    <option selected value="all">Book Title</option>
                    <option value="isbn">Books by ISBN</option>
                    <option value="lccn">Books by LCCN #</option>
                    <option value="oclc">Books by OCLC #</option>                
                </select>
                <input class="submit" id="submit" name="submit" type="submit" value="Search"  />
            </fieldset>
          </form></p>
          <?php
          //end submit isset if statement on line 73
          endif;
          }
Viewing 2 replies - 1 through 2 (of 2 total)
  • Avatar of John James Jacoby
    John James Jacoby
    Keymaster

    @johnjamesjacoby

    That error isn’t anywhere in bbPress; bbPress’s is:

    ERROR: Your topic needs a title.”

    It happens from inside the bbp_new_topic_handler() function, which bails early if the $_POST action is not bbp-new-topic which makes it pretty unlikely you’re seeing a bbPress error under normal circumstances.

    Is it possible some other plugin is causing this?

    Avatar of Jerry
    Jerry
    Participant

    @jerrysc

    My apologies for not being accurate; you are correct, it is the exact error you mention: “ERROR: Your topic needs a title.”

    I could be wrong, but I believe it is my function that is causing this to happen. Not being very good at php, my thought is that the submit input for my google book search function is triggering a new topic submission somehow.

    I am calling the google book search function within form-topic.php (book_search_google ()). You are correct when you mention a plugin might be creating this. My google book search function is indeed a plugin I created.

    Perhaps I need an “if” statement in form_topic.php, something that tells bbp_new_topic to wait for book_search_google to return a result? Can you point me in the right direction on how to write such an “if” statement?

    Thanks,
    Jerry

Viewing 2 replies - 1 through 2 (of 2 total)

You must be logged in to reply to this topic.