Esempio n. 1
0
 public function test_break_type()
 {
     $this->setExpectedException("Exception", "Locomotive type ID cannot be empty");
     $LocoClass = new LocoClass();
     $LocoClass->name = "Test class";
     $LocoClass->introduced = "2015";
     $LocoClass->manufacturer_id = 1;
     $LocoClass->wheel_arrangement_id = 1;
     $LocoClass->commit();
 }
Esempio n. 2
0
 /**
  * Create loco class URLs
  * @since Version 3.10.0
  * @param \Railpage\Locos\LocoClass $locoClass
  * @return \Railpage\Url
  */
 public static function buildUrls(LocoClass $locoClass)
 {
     $url = new Url($locoClass->makeClassURL($locoClass->slug));
     $url->photos = sprintf("/photos/search?class_id=%d", $locoClass->id);
     $url->view = $url->url;
     $url->edit = sprintf("%s?mode=class.edit&id=%d", $locoClass->Module->url, $locoClass->id);
     $url->addLoco = sprintf("%s?mode=loco.edit&class_id=%d", $locoClass->Module->url, $locoClass->id);
     $url->sightings = sprintf("%s/sightings", $url->url);
     $url->bulkadd = sprintf("%s?mode=loco.bulkadd&class_id=%d", $locoClass->Module->url, $locoClass->id);
     $url->bulkedit = sprintf("%s?mode=class.bulkedit&id=%d", $locoClass->Module->url, $locoClass->id);
     $url->bulkedit_operators = sprintf("%s?mode=class.bulkedit.operators&id=%d", $locoClass->Module->url, $locoClass->id);
     $url->bulkedit_buildersnumbers = sprintf("%s?mode=class.bulkedit.buildersnumbers&id=%d", $locoClass->Module->url, $locoClass->id);
     $url->bulkedit_status = sprintf("%s?mode=class.bulkedit.status&id=%d", $locoClass->Module->url, $locoClass->id);
     $url->bulkedit_gauge = sprintf("%s?mode=class.bulkedit.gauge&id=%d", $locoClass->Module->url, $locoClass->id);
     return $url;
 }
Esempio n. 3
0
 /**
  * Get a random class
  * @since Version 3.8.7
  * @return \Railpage\Locos\LocoClass;
  */
 public function getRandomClass()
 {
     $query = "SELECT `id`, `desc`, flickr_image_id FROM loco_class WHERE `desc` != '' AND flickr_image_id > 0";
     $ids = array();
     foreach ($this->db->fetchAll($query) as $row) {
         if (strlen(trim($row['desc'])) > 5 && $row['flickr_image_id'] > 0) {
             $ids[] = $row['id'];
         }
     }
     shuffle($ids);
     foreach ($ids as $id) {
         $LocoClass = new LocoClass($id);
         if (!empty($LocoClass->desc) && $LocoClass->getCoverImage()) {
             return $LocoClass;
         }
     }
 }
Esempio n. 4
0
 /**
  * Get locomotive classes built by this manufacturer
  * @return array
  */
 public function getClasses()
 {
     $query = "SELECT id, name, loco_type_id, introduced AS year_introduced, manufacturer_id, wheel_arrangement_id FROM loco_class WHERE manufacturer_id = ? OR id IN (SELECT class_id FROM loco_unit WHERE manufacturer_id = ?) GROUP BY id ORDER BY name";
     $return = array();
     foreach ($this->db->fetchAll($query, array($this->id, $this->id)) as $row) {
         $LocoClass = new LocoClass($row['id']);
         $return[] = $LocoClass->getArray();
     }
     return $return;
 }
Esempio n. 5
0
 /**
  * Get previous locomotive
  * @since Version 3.8.7
  * @return \Railpage\Locos\Locomotive
  */
 public function previous()
 {
     $members = $this->Class->members();
     // Get the next loco in this class
     if ($members['stat'] == "ok") {
         $break = false;
         $members['locos'] = array_reverse($members['locos']);
         foreach ($members['locos'] as $row) {
             if ($break == true) {
                 return new Locomotive($row['loco_id']);
             }
             if ($row['loco_id'] == $this->id) {
                 $break = true;
             }
         }
     }
 }
Esempio n. 6
0
 /**
  * Get locomotive data as an associative array
  * @since Version 3.9
  * @return array
  */
 public function getArray()
 {
     return array("id" => $this->id, "number" => $this->number, "name" => $this->name, "gauge" => $this->gauge, "status" => array("id" => $this->status_id, "text" => strval(new Status($this->status_id))), "manufacturer" => array("id" => $this->manufacturer_id, "text" => $this->manufacturer), "class" => $this->Class->getArray(), "url" => $this->url->getURLs());
 }
Esempio n. 7
0
 /**
  * Get locomotive classes by this type
  * @return array
  */
 public function getClasses()
 {
     $query = "SELECT id FROM loco_class WHERE loco_type_id = ? ORDER BY name";
     $return = array();
     foreach ($this->db->fetchAll($query, $this->id) as $row) {
         $LocoClass = new LocoClass($row['id']);
         $return[] = $LocoClass->getArray();
     }
     return $return;
 }
Esempio n. 8
0
 /**
  * Find Railpage objects (loco, class, livery) in this image
  * @since Version 3.8.7
  * @param string $namespace
  */
 public function findObjects($namespace = NULL)
 {
     if (is_null($namespace)) {
         throw new Exception("Parameter 1 (namespace) cannot be empty");
     }
     /**
      * Start the debug timer
      */
     if (RP_DEBUG) {
         global $site_debug;
         $debug_timer_start = microtime(true);
     }
     switch ($namespace) {
         case "railpage.locos.loco":
             if (isset($this->meta['tags'])) {
                 foreach ($this->meta['tags'] as $tag) {
                     if (preg_match("@railpage:class=([0-9]+)@", $tag, $matches)) {
                         $LocoClass = new LocoClass($matches[1]);
                     }
                 }
                 foreach ($this->meta['tags'] as $tag) {
                     if (isset($LocoClass) && $LocoClass instanceof LocoClass && preg_match("@railpage:loco=([a-zA-Z0-9]+)@", $tag, $matches)) {
                         $Loco = new Locomotive(false, $LocoClass->id, $matches[1]);
                         if (filter_var($Loco->id, FILTER_VALIDATE_INT)) {
                             $this->addLink($Loco->namespace, $Loco->id);
                         }
                     }
                 }
                 foreach ($this->db->fetchAll("SELECT id AS class_id, flickr_tag AS class_tag FROM loco_class") as $row) {
                     foreach ($this->meta['tags'] as $tag) {
                         if (stristr($tag, $row['class_tag']) && strlen(str_replace($row['class_tag'] . "-", "", $tag) > 0)) {
                             $loco_num = str_replace($row['class_tag'] . "-", "", $tag);
                             $Loco = new Locomotive(false, $row['class_id'], $loco_num);
                             if (filter_var($Loco->id, FILTER_VALIDATE_INT)) {
                                 $this->addLink($Loco->namespace, $Loco->id);
                                 if (!$Loco->hasCoverImage()) {
                                     $Loco->setCoverImage($this);
                                 }
                                 if (!$Loco->Class->hasCoverImage()) {
                                     $Loco->Class->setCoverImage($this);
                                 }
                             }
                         }
                     }
                 }
             }
             break;
         case "railpage.locos.class":
             if (isset($this->meta['tags'])) {
                 foreach ($this->db->fetchAll("SELECT id AS class_id, flickr_tag AS class_tag FROM loco_class") as $row) {
                     foreach ($this->meta['tags'] as $tag) {
                         if ($tag == $row['class_tag']) {
                             $LocoClass = new LocoClass($row['class_id']);
                             if (filter_var($LocoClass->id, FILTER_VALIDATE_INT)) {
                                 $this->addLink($LocoClass->namespace, $LocoClass->id);
                             }
                         }
                     }
                 }
                 foreach ($this->meta['tags'] as $tag) {
                     if (preg_match("@railpage:class=([0-9]+)@", $tag, $matches)) {
                         $LocoClass = new LocoClass($matches[1]);
                         if (filter_var($LocoClass->id, FILTER_VALIDATE_INT)) {
                             $this->addLink($LocoClass->namespace, $LocoClass->id);
                             if (!$LocoClass->hasCoverImage()) {
                                 $LocoClass->setCoverImage($this);
                             }
                         }
                     }
                 }
             }
             break;
         case "railpage.locos.liveries.livery":
             if (isset($this->meta['tags'])) {
                 foreach ($this->meta['tags'] as $tag) {
                     if (preg_match("@railpage:livery=([0-9]+)@", $tag, $matches)) {
                         $Livery = new Livery($matches[1]);
                         if (filter_var($Livery->id, FILTER_VALIDATE_INT)) {
                             $this->addLink($Livery->namespace, $Livery->id);
                         }
                     }
                 }
             }
             break;
     }
     /**
      * End the debug timer
      */
     if (RP_DEBUG) {
         $site_debug[] = __CLASS__ . "::" . __FUNCTION__ . "() : completed lookup of " . $namespace . " in for image id " . $this->id . " in " . round(microtime(true) - $debug_timer_start, 5) . "s";
     }
     return $this;
 }
Esempio n. 9
0
 /**
  * Find data for managers to fix
  * @since Version 3.2
  * @version 3.5
  * @param string $search_type
  * @param string $args
  * @return array
  */
 public function find($search_type = false, $args = false)
 {
     if (!$search_type) {
         throw new Exception("Cannot find data - no search type given");
         return false;
     }
     /**
      * Find loco classes without a cover photo
      */
     if ($search_type == LOCOS_FIND_CLASS_NOPHOTO || $search_type == self::FIND_CLASS_NOPHOTO) {
         $return = array();
         $classes = $this->listClasses();
         foreach ($classes['class'] as $row) {
             $LocoClass = new LocoClass($row['class_id']);
             if (!$LocoClass->hasCoverImage()) {
                 $return[$LocoClass->id] = array("id" => $LocoClass->id, "name" => $LocoClass->name, "flickr_tag" => $LocoClass->flickr_tag, "url" => $LocoClass->url->getURLs());
             }
         }
         return $return;
         /*
         
         // Find classes without a photo
         
         $query = "SELECT id, name, flickr_tag FROM loco_class WHERE flickr_image_id = '' ORDER BY name ASC";
         
         if ($this->db instanceof \sql_db) {
         	if ($rs = $this->db->query($query)) {
         		$return = array(); 
         		
         		while ($row = $rs->fetch_assoc()) {
         			$return[$row['id']] = $row;
         		}
         		
         		return $return;
         	} else {
         		throw new Exception($this->db->error."\n".$query);
         		return false;
         	}
         } else {
         	$return = array(); 
         	
         	foreach ($this->db->fetchAll($query) as $row) {
         		$return[$row['id']] = $row;
         	}
         	
         	return $return;
         }
         */
     }
     /**
      * Find locomotives without a cover photo
      */
     if ($search_type == LOCOS_FIND_LOCO_NOPHOTO || $search_type == self::FIND_LOCO_NOPHOTO) {
         // Locos without a photo
         $query = "SELECT l.loco_id, l.loco_num, l.loco_status_id, s.name AS loco_status, c.id AS class_id, c.name AS class_name \r\n\t\t\t\t\t\t\tFROM loco_unit AS l\r\n\t\t\t\t\t\t\tLEFT JOIN loco_class AS c ON l.class_id = c.id\r\n\t\t\t\t\t\t\tLEFT JOIN loco_status AS s ON s.id = l.loco_status_id\r\n\t\t\t\t\t\t\tWHERE l.photo_id = 0\r\n\t\t\t\t\t\t\tORDER BY c.name, l.loco_num";
         if ($this->db instanceof \sql_db) {
             if ($rs = $this->db->query($query)) {
                 $return = array();
                 while ($row = $rs->fetch_assoc()) {
                     $return[$row['loco_id']] = $row;
                 }
                 return $return;
             } else {
                 throw new Exception($this->db->error . "\n" . $query);
                 return false;
             }
         } else {
             $return = array();
             foreach ($this->db->fetchAll($query) as $row) {
                 $return[$row['loco_id']] = $row;
             }
             return $return;
         }
     }
     /**
      * Find locomotives from a comma-separated list of numbers
      */
     if ($search_type == LOCOS_FIND_FROM_NUMBERS && $args) {
         // Find locomotives from a comma-separated list of numbers
         $numbers = explode(",", $args);
         foreach ($numbers as $id => $num) {
             $numbers[$id] = trim($num);
         }
         $query = "SELECT l.loco_id, l.loco_num, l.loco_status_id, s.name AS loco_status, l.loco_gauge_id, CONCAT(g.gauge_name, ' (', g.gauge_metric, ')') AS loco_gauge, c.loco_type_id, t.title AS loco_type, c.id AS class_id, c.name AS class_name \r\n\t\t\t\t\t\t\tFROM loco_unit AS l\r\n\t\t\t\t\t\t\tLEFT JOIN loco_class AS c ON l.class_id = c.id\r\n\t\t\t\t\t\t\tLEFT JOIN loco_status AS s ON s.id = l.loco_status_id\r\n\t\t\t\t\t\t\tLEFT JOIN loco_gauge AS g ON g.gauge_id = l.loco_gauge_id\r\n\t\t\t\t\t\t\tLEFT JOIN loco_type AS t ON c.loco_type_id = t.id\r\n\t\t\t\t\t\t\tWHERE l.loco_num IN ('" . implode("','", $numbers) . "')\r\n\t\t\t\t\t\t\tORDER BY l.loco_num, c.name";
         $return = array();
         foreach ($this->db->fetchAll($query) as $row) {
             $return[$row['loco_id']] = $row;
         }
         return $return;
     }
 }
Esempio n. 10
0
 /**
  * @depends testAddManufacturer
  * @depends testAddWheelArrangement
  * @depends testAddType
  */
 public function testAddLocoClass($manufacturer_id, $wheel_arrangement_id, $type_id)
 {
     $Class = new LocoClass();
     $Class->name = self::CLASS_NAME;
     $Class->desc = self::CLASS_DESC;
     $Class->introduced = self::CLASS_INTRODUCED;
     $Class->flickr_tag = self::CLASS_FLICKR_TAG;
     $Class->axle_load = self::CLASS_AXLE_LOAD;
     $Class->weight = self::CLASS_WEIGHT;
     $Class->length = self::CLASS_LENGTH;
     $Class->tractive_effort = self::CLASS_TRACTIVE_EFFORT;
     $Class->model = self::CLASS_MODEL;
     $Manufacturer = new Manufacturer($manufacturer_id);
     $WheelArrangement = new WheelArrangement($wheel_arrangement_id);
     $Type = new Type($type_id);
     $Class->setManufacturer($Manufacturer)->setWheelArrangement($WheelArrangement)->setType($Type)->commit();
     $this->assertEquals($Manufacturer->id, $Class->getManufacturer()->id);
     $this->assertFalse(!filter_var($Class->id, FILTER_VALIDATE_INT));
     return $Class->id;
 }