• This error was stopping the wp site from loading on the hosting server.

    Would you be able to help spotting the syntax error? Many thanks!

    <?php

    $themecolors = array(
    ‘bg’ => ‘000000’,
    ‘text’ => ‘bfbfbf’,
    ‘link’ => ‘ffffff’,
    ‘border’ => ‘000000’
    );

    // this varies but the single page content width seems to be 607px max
    $content_width = 600;

    class Hemingway
    {

    var $raw_blocks;
    var $available_blocks;
    var $style;
    var $version;

    function add_available_block($block_name, $block_ref)
    {

    $blocks = $this->available_blocks;

    if (!$blocks[$block_ref]){
    $blocks[$block_ref] = $block_name;
    update_option(‘hem_available_blocks’, $blocks);
    wp_cache_flush();
    }

    }

    function get_available_blocks()
    // This function returns an array of available blocks
    // in the format of $arr[block_ref] = block_name
    {
    $this->available_blocks = get_option(‘hem_available_blocks’);
    return $this->available_blocks;
    }

    function get_block_contents($block_place)
    // Returns an array of block_refs in specififed block
    {
    if (!$this->raw_blocks){
    $this->raw_blocks = get_option(‘hem_blocks’);
    }
    return $this->raw_blocks[$block_place];
    }

    function add_block_to_place($block_place, $block_ref)
    {
    $block_contents = $this->get_block_contents($block_place);
    if (in_array($block_ref, $block_contents))
    return true;

    $block_contents[] = $block_ref;
    $this->raw_blocks[$block_place] = $block_contents;
    update_option(‘hem_blocks’, $this->raw_blocks);
    wp_cache_flush(); // I was having caching issues
    return true;
    }

    function remove_block_in_place($block_place, $block_ref)
    {
    $block_contents = $this->get_block_contents($block_place);
    if (!in_array($block_ref, $block_contents))
    return true;
    $key = array_search($block_ref, $block_contents);
    unset($block_contents[$key]);
    $this->raw_blocks[$block_place] = $block_contents;
    update_option(‘hem_blocks’, $this->raw_blocks);
    wp_cache_flush(); // I was having caching issues
    return true;
    }

    // Templating functions

    function get_block_output($block_place)
    {
    $blocks = $this->get_block_contents($block_place);
    foreach($blocks as $key => $block ){
    include (TEMPLATEPATH . ‘/blocks/’ . $block . ‘.php’);
    }
    }

    function get_style(){
    $this->style = get_option(‘hem_style’);
    }
    }

    $hemingway = new Hemingway();
    $hemingway->get_available_blocks();
    $hemingway->get_style();

    $hemingway->version = “0.13”;
    // Options

    $default_blocks = Array(
    ‘recent_entries’ => ‘Recent Entries’,
    ‘about_page’ => ‘About Page’,
    ‘category_listing’ => ‘Category Listing’,
    ‘blogroll’ => ‘Blogroll’,
    ‘pages’ => ‘Pages’,
    ‘monthly_archives’ => ‘Monthly Archives’
    );

    $default_block_locations = Array(
    ‘block_1’ => Array(‘about_page’),
    ‘block_2’ => Array(‘recent_entries’),
    ‘block_3’ => Array(‘category_listing’),
    ‘block_4’ => Array(),
    ‘block_5’ => Array(),
    ‘block_6’ => Array()
    );

    if (!get_option(‘hem_version’) || get_option(‘hem_version’) < $hemingway->version){
    // Hemingway isn’t installed, so we’ll need to add options
    if (!get_option(‘hem_version’) )
    add_option(‘hem_version’, $hemingway->version, ‘Hemingway Version installed’);
    else
    update_option(‘hem_version’, $hemingway->version);

    if (!get_option(‘hem_available_blocks’) )
    add_option(‘hem_available_blocks’, $default_blocks, ‘A list of available blocks for Hemingway’);

    if (!get_option(‘hem_blocks’) )
    add_option(‘hem_blocks’, $default_block_locations, ‘An array of blocks and their contents’);

    if (!get_option(‘hem_style’) )
    add_option(‘hem_style’, ”, ‘Location of custom style sheet’);
    }
    // Ajax Stuff

    if ($_GET[‘hem_action’] == ‘add_block’){

    $block_ref = $_GET[‘block_ref’];
    $block_place = $_GET[‘block_place’];

    $block_name = $hemingway->available_blocks[$block_ref];

    $hemingway->add_block_to_place($block_place, $block_ref);

    ob_end_clean(); // Kill preceding output
    $output = ‘

      ‘;
      foreach($hemingway->get_block_contents($block_place) as $key => $block_ref){
      $block_name = $hemingway->available_blocks[$block_ref];
      $output .= ‘

    • ‘ . $block_name . ‘ (remove)
    • ‘;
      }
      $output .= ‘

    ‘;
    echo $output;
    exit(); // Kill any more output
    }

    if ($_GET[‘hem_action’] == ‘remove_block’){

    $block_ref = $_GET[‘block_ref’];
    $block_place = $_GET[‘block_place’];

    $hemingway->remove_block_in_place($block_place, $block_ref);

    ob_end_clean(); // Kill preceding output
    $output = ‘

      ‘;
      foreach($hemingway->get_block_contents($block_place) as $key => $block_ref){
      $block_name = $hemingway->available_blocks[$block_ref];
      $output .= ‘

    • ‘ . $block_name . ‘ (remove)
    • ‘;
      }
      $output .= ‘

    ‘;
    echo $output;
    exit(); // Kill any more output
    }

    if ($_POST[‘custom_styles’]){
    update_option(‘hem_style’, $_POST[‘custom_styles’]);
    wp_cache_flush();
    $message = ‘Styles updated!’;
    }

    if ($_POST[‘block_ref’]){
    $hemingway->add_available_block($_POST[‘display_name’], $_POST[‘block_ref’]);
    $hemingway->get_available_blocks();
    $message = ‘Block added!’;
    }

    // Stuff

    add_action (‘admin_menu’, ‘hemingway_menu’);

    $hem_loc = ‘../themes/’ . basename(dirname($file));

    function hemingway_scripts() {
    $dir = get_bloginfo(‘template_directory’);
    wp_enqueue_script(‘prototype’);
    wp_enqueue_script(‘dragdrop’, $dir . ‘/admin/js/dragdrop.js’, false, 1);
    wp_enqueue_script(‘effects’, $dir . ‘/admin/js/effects.js’, false, 1);
    }

    function hemingway_menu() {
    $page = add_submenu_page(‘themes.php’, ‘Opzioni’, ‘Opzioni’, 5, $hem_loc . ‘functions.php’, ‘menu’);
    add_action(‘load-‘ . $page, ‘hemingway_scripts’);
    }

    function menu() {
    global $hem_loc, $hemingway, $message;
    ?>
    <!–
    Okay, so I don’t honestly know how legit this is, but I want a more intuitive interface
    so I’m going to import scriptaculous. There’s a good chance this is going to mess stuff up
    for some people ??
    –>
    <script type=”text/javascript”>
    function remove_block(block_place, block_ref){
    url = ‘themes.php?page=functions.php&hem_action=remove_block&block_place=’ + block_place + ‘&block_ref=’ + block_ref;
    new Ajax.Updater(block_place, url,
    {
    evalScripts:true, asynchronous:true
    }
    )
    }
    </script>
    <style>
    .block{
    width:200px;
    height:200px;
    border:1px solid #CCC;
    float:left;
    margin:20px 1em 20px 0;
    padding:10px;
    display:inline;
    }
    .block ul{
    padding:0;
    margin:0;
    }
    .block ul li{
    margin:0 0 5px 0;
    list-style-type:none;
    }
    .block-active{
    border:1px solid #333;
    background:#F2F8FF;
    }

    #addables li{
    list-style-type:none;
    margin:1em 1em 1em 0;
    background:#EAEAEA;
    border:1px solid #DDD;
    padding:3px;
    width:215px;
    float:left;
    cursor:move;
    }
    ul#addables{
    margin:0;
    padding:0;
    width:720px;
    position:relative;
    }
    </style>

    <? if($message) : ?>
    <div id=”message” class=”updated fade”><p><?=$message?></p></div>
    <? endif; ?>

    <div class=”wrap” style=”position:relative;”>
    <h2><?php _e(‘Hemingway Options’); ?></h2>

    <h3>Color Options</h3>
    <p>Choose a primary color for your site:</p>
    <form name=”dofollow” action=”” method=”post”>
    <input type=”hidden” name=”page_options” value=”‘dofollow_timeout'” />

    <p><label><input name=”custom_styles” type=”radio” value=”none” <?php if ($hemingway->style == ‘none’) echo ‘checked=”checked”‘; ?> />
    Black</label></p>
    <p><label><input name=”custom_styles” type=”radio” value=”white.css” <?php if ($hemingway->style == ‘white.css’) echo ‘checked=”checked”‘; ?> /> White</label></p>

    <input type=”submit” value=”Update Color »” />
    </form>

    <h3>Hemingway’s Bottombar™</h3>
    <p>Drag and drop the different blocks into their place below. After you drag the block to the area, it will update with the new contents automatically.</p>

    <ul id=”addables”>
    <? foreach($hemingway->available_blocks as $ref => $name) : ?>
    <li id=”<?= $ref ?>” class=”blocks”><?= $name ?>
    <script type=”text/javascript”>new Draggable(‘<?= $ref ?>’, {revert:true})</script>
    <? endforeach; ?>

    <div class=”clear”></div>

    <div class=”block” id=”block_1″>

      <?
      foreach($hemingway->get_block_contents(‘block_1’) as $key => $block_ref) :
      $block_name = $hemingway->available_blocks[$block_ref];
      ?>

    • <?= $block_name ?> (‘);”>remove)
    • <? endforeach; ?>

    </div>
    <script type=”text/javascript”>
    Droppables.add(
    ‘block_1’, {
    accept:’blocks’,
    onDrop:function(element){
    new Ajax.Updater(‘block_1’, ‘themes.php?page=functions.php&hem_action=add_block&block_place=block_1&block_ref=’ + element.id,
    {
    evalScripts:true, asynchronous:true
    }
    )
    },
    hoverclass:’block-active’
    }
    )
    </script>

    <div class=”block” id=”block_2″>

      <?
      foreach($hemingway->get_block_contents(‘block_2’) as $key => $block_ref) :
      $block_name = $hemingway->available_blocks[$block_ref];
      ?>

    • <?= $block_name ?> (‘);”>remove)
    • <? endforeach; ?>

    </div>
    <script type=”text/javascript”>
    Droppables.add(
    ‘block_2’, {
    accept:’blocks’,
    onDrop:function(element){
    new Ajax.Updater(‘block_2’, ‘themes.php?page=functions.php&hem_action=add_block&block_place=block_2&block_ref=’ + element.id,
    {
    evalScripts:true, asynchronous:true
    }
    )
    },
    hoverclass:’block-active’
    }
    )
    </script>

    <div class=”block” id=”block_3″>

      <?
      foreach($hemingway->get_block_contents(‘block_3’) as $key => $block_ref) :
      $block_name = $hemingway->available_blocks[$block_ref];
      ?>

    • <?= $block_name ?> (‘);”>remove)
    • <? endforeach; ?>

    </div>
    <script type=”text/javascript”>
    Droppables.add(
    ‘block_3’, {
    accept:’blocks’,
    onDrop:function(element){
    new Ajax.Updater(‘block_3’, ‘themes.php?page=functions.php&hem_action=add_block&block_place=block_3&block_ref=’ + element.id,
    {
    evalScripts:true, asynchronous:true
    }
    )
    },
    hoverclass:’block-active’
    }
    )
    </script>

    <!– Maybe later…

    <div class=”clear”></div>

    <div class=”block” id=”block_4″>
    Block 4

      <?
      foreach($hemingway->get_block_contents(‘block_4’) as $key => $block_ref) :
      $block_name = $hemingway->available_blocks[$block_ref];
      ?>

    • <?= $block_name ?> (‘);”>remove)
    • <? endforeach; ?>

    </div>
    <script type=”text/javascript”>
    Droppables.add(
    ‘block_4’, {
    accept:’blocks’,
    onDrop:function(element){
    new Ajax.Updater(‘block_4’, ‘themes.php?page=functions.php&hem_action=add_block&block_place=block_4&block_ref=’ + element.id,
    {
    evalScripts:true, asynchronous:true
    }
    )
    },
    hoverclass:’block-active’
    }
    )
    </script>

    <div class=”block” id=”block_5″>
    Block 5

      <?
      foreach($hemingway->get_block_contents(‘block_5’) as $key => $block_ref) :
      $block_name = $hemingway->available_blocks[$block_ref];
      ?>

    • <?= $block_name ?> (‘);”>remove)
    • <? endforeach; ?>

    </div>
    <script type=”text/javascript”>
    Droppables.add(
    ‘block_5’, {
    accept:’blocks’,
    onDrop:function(element){
    new Ajax.Updater(‘block_5’, ‘themes.php?page=functions.php&hem_action=add_block&block_place=block_5&block_ref=’ + element.id,
    {
    evalScripts:true, asynchronous:true
    }
    )
    },
    hoverclass:’block-active’
    }
    )
    </script>

    <div class=”block” id=”block_6″>
    Block 6

      <?
      foreach($hemingway->get_block_contents(‘block_6’) as $key => $block_ref) :
      $block_name = $hemingway->available_blocks[$block_ref];
      ?>

    • <?= $block_name ?> (‘);”>remove)
    • <? endforeach; ?>

    </div>
    <script type=”text/javascript”>
    Droppables.add(
    ‘block_6’, {
    accept:’blocks’,
    onDrop:function(element){
    new Ajax.Updater(‘block_6’, ‘themes.php?page=functions.php&hem_action=add_block&block_place=block_6&block_ref=’ + element.id,
    {
    evalScripts:true, asynchronous:true
    }
    )
    },
    hoverclass:’block-active’
    }
    )
    </script>
    –>

    <div class=”clear”></div>

    <?php
    $blocks_dir = @ dir(ABSPATH . ‘/wp-content/themes/’ . get_template() . ‘/blocks’);

    if ($blocks_dir) {
    while(($file = $blocks_dir->read()) !== false) {
    if (!preg_match(‘|^\.+$|’, $file) && preg_match(‘|\.php$|’, $file))
    $blocks_files[] = $file;
    }
    }
    if ($blocks_dir || $blocks_files) {
    foreach($blocks_files as $blocks_file) {
    $block_ref = preg_replace(‘/\.php/’, ”, $blocks_file);
    if (!array_key_exists($block_ref, $hemingway->available_blocks)){
    ?>
    <h3>You have uninstalled blocks!</h3>
    <p>Give the block <?=$block_ref ?> a display name (such as “About Page”)</p>
    <form action=”” name=”dofollow” method=”post”>
    <input type=”hidden” name=”block_ref” value=”<?=$block_ref?>” />
    <?=$block_ref ?> : <input type=”text” name=”display_name” />
    <input type=”submit” value=”Save” />
    </form>
    <?
    }
    }
    }
    ?>

    </div>

    <?php
    }

Viewing 2 replies - 1 through 2 (of 2 total)
  • That is 1 seriously messy bit of code.

    You should really choose a standard and stick to it. EG.

    if () { do_stuff(); }

    or

    if (): do_stuff(); endif;

    You have about 3 different ways of doing an if statement all in the same file without reason.
    I’ll check out the code and tidy it all up. Expect a post back later this eve (GMT)

    Thread Starter pier-acuti

    (@pier-acuti)

    Many thanks tex0gen!

    I have inherited this site by others, and a novice on php. I agree that this is very messed up to read…
    I have tried tidying up as you suggested, but still no success…

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘"syntax error, unexpected end of file on line 498" in functions.php’ is closed to new replies.