<?php
/**
 * Copyright (c) 2018 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Christopher Guindon (Eclipse Foundation) - Initial implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */

// Moving this file to eclipse.org-common.
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/ads/promotions.class.php");

/**
 * @deprecated
 * @return unknown
 */
function allPromos() {
  return Promotions::getPromos();
}

/**
 * @deprecated
 * @return unknown
 */
function chooseRandomPromo($adNo = NULL, $frontPage = NULL) {
  return Promotions::output();
}

/**
 * @deprecated
 * @return unknown
 */
function chooseDownloadAd($adNo = NULL) {
  return Promotions::output();
}