Changeset 5183 for extensions/AMetaData/amd_root.class.inc.php
- Timestamp:
- Mar 18, 2010, 11:47:11 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/AMetaData/amd_root.class.inc.php
r5088 r5183 30 30 { 31 31 protected $css; //the css object 32 33 function AMD_root($prefixeTable, $filelocation) 32 protected $jpegMD; 33 34 public function __construct($prefixeTable, $filelocation) 34 35 { 35 36 $this->plugin_name="AMetaData"; … … 41 42 42 43 $this->css = new css(dirname($this->filelocation).'/'.$this->plugin_name_files.".css"); 43 } 44 $this->jpegMD=new JpegMetaData(); 45 } 46 47 public function __destruct() 48 { 49 unset($this->jpegMD); 50 unset($this->css); 51 //parent::__destruct(); 52 } 53 44 54 45 55 /* --------------------------------------------------------------------------- … … 56 66 'amd_GetListTags_ExcludeUnusedTag' => "y", 57 67 'amd_GetListTags_SelectedTagOnly' => "n", 58 'amd_GetListImages_OrderType' => "value" 68 'amd_GetListImages_OrderType' => "value", 69 'amd_FillDataBaseContinuously' => "y", 70 'amd_AllPicturesAreAnalyzed' => "n", 59 71 ); 60 72 } … … 63 75 { 64 76 parent::load_config(); 65 if(!$this->css->css_file_exists())66 {67 $this->css->make_CSS($this->generate_CSS());68 }69 77 } 70 78 … … 72 80 { 73 81 parent::init_events(); 74 } 75 76 /* 77 * generate the css code 78 */ 79 function generate_CSS() 80 { 81 $text = " 82 .formtable, .formtable P { text-align:left; display:block; } 83 .formtable tr { vertical-align:top; } 84 .littlefont { font-size:90%; } 85 .littlefont td { padding:1px; } 86 table.littlefont th { padding:3px; text-align:left;} 87 table.littlefont td { padding:1px 3px; } 88 #iprogressbar_contener { border:1px solid #606060; margin:0px; padding:0px; display:block; height:20px; } 89 #iprogressbar_bg { background:#606060; display:block; z-index:100; position:relative; height:20px; } 90 #iprogressbar_fg { color:#FF3363; width:100%; text-align:center; display: block; z-index:200; position:relative; top:-18px; } 91 #iHeaderListTags { width:100%; border:1px solid; border-collapse: collapse; margin-top:3px; } 92 #iListTags { width:100%; border:1px solid; height:280px; border-top:0px; overflow:auto;} 93 #iListImages { width:100%; border-bottom:1px solid; overflow:auto;} 94 #iListTagsNb, #iListImagesNb { width:99%; text-align:right; margin-bottom:8px; padding:2px; font-size:80%; } 95 #iListTags table, #iListImages table, table.listTags { width:100%; text-align:left; border-collapse: collapse; } 96 #iListTags table tr:hover { cursor:pointer; background:#303030; } 97 #iListImages table tr:hover, table.listTags tr:hover { background:#303030; cursor:default; } 98 #iHeaderListImages { width:100%; border-bottom:1px solid; } 99 .warning { color:#dd0000; border:1px solid #dd0000; margin-bottom:8px; margin-top:8px; padding:8px; } 100 .warning p { margin-top:0.5em; margin-bottom:0em; } 101 .warning ul { margin-top:0em; margin-bottom:0.5em; } 102 .pctBar { height:6px; background:#FF7700; } 103 li.groupItems { border:1px solid #666666; margin-bottom:5px; padding:0 5px; width:90%; cursor:move; padding:4px; } 104 div.addGroup { padding-left:40px; text-align:left; } 105 #iGroups { list-style: none; } 106 .ui-dialog { background: #222222; border:2px solid #FF3363; } 107 .ui-dialog-buttonpane { padding:4px; } 108 .ui-dialog-buttonpane button { margin-right:8px; } 109 .ui-dialog-titlebar { background:#111111; font-weight:bold; } 110 .ui-dialog-title-dialog { text-align: left; } 111 .ui-dialog-titlebar-close { float: right; } 112 .ui-dialog-content { overflow:auto; } 113 .ui-dialog-container { } 114 .ui-dialog-titlebar-close { display:none; } 115 .tagListOrder { list-style: none; padding:0px; margin-right:8px; margin-left:35px; } 116 .tagListOrder li { border:none; background:#333333; padding:1px; margin-bottom:2px; width:100%; } 117 .groupTags { padding-top:8px; } 118 .editGroupListButton { margin-left:8px; position:absolute; z-index:1000; } 119 table.tagListOrderItem { width:100%; border-collapse:collapse; } 120 .dialogForm { text-align:left; margin:8px; } 121 #ianalyzestatus { background: #333333; margin:8px; padding:8px; } 122 #ianalyzestatus ul { margin:0px; padding:0 0 0 20px; } 123 #iamd_nb_item_per_request_display { display:inline-block; width:70px; } 124 #iamd_nb_item_per_request_slider { display:inline-block; width:350px; } 125 #iDialogProgress { margin:16px 8px 8px; } 126 "; 127 128 return($text); 129 } 82 83 84 if(!isset($_REQUEST['ajaxfct']) and 85 $this->my_config['amd_FillDataBaseContinuously']=='y' and 86 $this->my_config['amd_AllPicturesAreAnalyzed']=='n') 87 { 88 /* do analyze for a random picture only if : 89 * - config is set to fill database continuously 90 * - we are not in an ajax call 91 */ 92 add_event_handler('init', array(&$this, 'doRandomAnalyze')); 93 } 94 } 95 96 97 /** 98 * returns the number of pictures analyzed 99 * 100 * @return Integer 101 */ 102 protected function getNumOfPictures() 103 { 104 $numOfPictures=0; 105 $sql="SELECT COUNT(imageId) FROM ".$this->tables['images']." 106 WHERE analyzed='y';"; 107 $result=pwg_query($sql); 108 if($result) 109 { 110 while($row=mysql_fetch_row($result)) 111 { 112 $numOfPictures=$row[0]; 113 } 114 } 115 return($numOfPictures); 116 } 117 118 119 /** 120 * this function randomly choose a picture in the list of pictures not 121 * analyzed, and analyze it 122 * 123 */ 124 public function doRandomAnalyze() 125 { 126 $sql="SELECT tai.imageId, ti.path FROM ".$this->tables['images']." tai 127 LEFT JOIN ".IMAGES_TABLE." ti ON tai.imageId = ti.id 128 WHERE tai.analyzed = 'n' 129 ORDER BY RAND() LIMIT 1;"; 130 $result=pwg_query($sql); 131 if($result) 132 { 133 // $path = path of piwigo's on the server filesystem 134 $path=dirname(dirname(dirname(__FILE__))); 135 136 while($row=mysql_fetch_assoc($result)) 137 { 138 $this->analyzeImageFile($path."/".$row['path'], $row['imageId']); 139 } 140 141 $this->makeStatsConsolidation(); 142 } 143 } 144 145 146 /** 147 * this function analyze tags from a picture, and insert the result into the 148 * database 149 * 150 * NOTE : only implemented tags are analyzed and stored 151 * 152 * @param String $fileName : filename of picture to analyze 153 * @param Integer $imageId : id of image in piwigo's database 154 * @param Boolean $loaded : default = false 155 * WARNING 156 * if $loaded is set to TRUE, the function assume 157 * that the metadata have been alreay loaded 158 * do not use the TRUE value if you are not sure 159 * of the consequences 160 */ 161 protected function analyzeImageFile($fileName, $imageId, $loaded=false) 162 { 163 /* 164 * the JpegMetaData object is instancied in the constructor 165 */ 166 if(!$loaded) 167 { 168 $this->jpegMD->load( 169 $fileName, 170 Array( 171 'filter' => JpegMetaData::TAGFILTER_IMPLEMENTED, 172 'optimizeIptcDateTime' => true, 173 'exif' => true, 174 'iptc' => true, 175 'xmp' => true 176 ) 177 ); 178 } 179 180 $sqlInsert=""; 181 $massInsert=array(); 182 $nbTags=0; 183 foreach($this->jpegMD->getTags() as $key => $val) 184 { 185 $value=$val->getLabel(); 186 187 if($val->isTranslatable()) 188 $translatable="y"; 189 else 190 $translatable="n"; 191 192 if($value instanceof DateTime) 193 { 194 $value=$value->format("Y-m-d H:i:s"); 195 } 196 elseif(is_array($value)) 197 { 198 /* 199 * array values are stored in a serialized string 200 */ 201 $value=serialize($value); 202 } 203 204 $sql="SELECT numId FROM ".$this->tables['used_tags']." WHERE tagId = '$key'"; 205 206 $result=pwg_query($sql); 207 if($result) 208 { 209 $numId=-1; 210 while($row=mysql_fetch_assoc($result)) 211 { 212 $numId=$row['numId']; 213 } 214 215 if($numId>0) 216 { 217 $nbTags++; 218 if($sqlInsert!="") $sqlInsert.=", "; 219 $sqlInsert.="($imageId, '$numId', '".addslashes($value)."')"; 220 $massInsert[]="('$imageId', '$numId', '".addslashes($value)."') "; 221 } 222 } 223 } 224 225 if(count($massInsert)>0) 226 { 227 $sql="REPLACE INTO ".$this->tables['images_tags']." (imageId, numId, value) VALUES ".implode(", ", $massInsert).";"; 228 pwg_query($sql); 229 } 230 //mass_inserts($this->tables['images_tags'], array('imageId', 'numId', 'value'), $massInsert); 231 232 $sql="UPDATE ".$this->tables['images']." 233 SET analyzed = 'y', nbTags=".$nbTags." 234 WHERE imageId=$imageId;"; 235 pwg_query($sql); 236 237 238 return("$imageId=$nbTags;"); 239 } 240 241 242 /** 243 * do some consolidations on database to optimize other requests 244 * 245 */ 246 protected function makeStatsConsolidation() 247 { 248 $sql="UPDATE ".$this->tables['used_tags']." ut, 249 (SELECT COUNT(imageId) AS nb, numId 250 FROM ".$this->tables['images_tags']." 251 GROUP BY numId) nb 252 SET ut.numOfImg = nb.nb 253 WHERE ut.numId = nb.numId;"; 254 pwg_query($sql); 255 256 257 $sql="SELECT COUNT(imageId) AS nb 258 FROM ".$this->tables['images']." 259 WHERE analyzed = 'n';"; 260 $result=pwg_query($sql); 261 if($result) 262 { 263 while($row=mysql_fetch_assoc($result)) 264 { 265 $this->my_config['amd_AllPicturesAreAnalyzed']=($row['nb']==0)?'y':'n'; 266 } 267 268 } 269 $this->save_config(); 270 } 271 130 272 131 273 } // amd_root class
Note: See TracChangeset
for help on using the changeset viewer.