Index: drupal.fndb.inc =================================================================== RCS file: /cvs/drupal/contributions/modules/imagenotes/drupal.fndb.inc,v retrieving revision 1.1 diff -u -r1.1 drupal.fndb.inc --- drupal.fndb.inc 10 Nov 2006 19:18:32 -0000 1.1 +++ drupal.fndb.inc 4 Jun 2008 07:53:00 -0000 @@ -20,19 +20,57 @@ function saveNewAnnotation($fn_image, $fn_annotation) { global $user; - $result = db_query("INSERT INTO {imagenotes} (nid, uid, annotation_id, title, content, xml) VALUES (%d, %d, '%s', '%s', '%s', '%s')", - $fn_image->param['nid'], $user->uid, $fn_annotation->param['id'], $fn_annotation->param['title'], $fn_annotation->param['content'], $fn_annotation->param['src_xml']); + + $width = $fn_image->param['source_x']; + $height = $fn_image->param['source_y']; + + //watchdog('debug', print_r($fn_image,1)); + //watchdog('debug', print_r($fn_annotation,1)); + //return; + + //$file = str_replace($fn_annotation->param['annotationID'] .'@', '', $fn_annotation->param['id']); + //$info = image_get_info(file_directory_path() . '/images/' . $file); + + //watchdog('debug', print_r( $fn_annotation->param['content'],1)); + //return; + + + + $result = db_query("INSERT INTO {imagenotes} (nid, uid, annotation_id, title, content, xml, width, height) VALUES (%d, %d, '%s', '%s', '%s', '%s', %d, %d)", + $fn_image->param['nid'], $user->uid, $fn_annotation->param['id'], $fn_annotation->param['title'], htmlspecialchars($fn_annotation->param['content']), $fn_annotation->param['src_xml'], $width, $height); return true; } function updateExistingAnnotationByID($fn_image, $fn_annotation) { - $result = db_query("UPDATE {imagenotes} SET title='%s', content='%s', xml='%s' WHERE annotation_id='%s'", - $fn_annotation->param['title'], $fn_annotation->param['content'], $fn_annotation->param['src_xml'], $fn_annotation->param['id']); - return true; + + $width = $fn_image->param['source_x']; + $height = $fn_image->param['source_y']; + + $entry = $fn_annotation->param['src_xml']; + + preg_match("#(.*)#Umsi", $entry, $data); + $title = $data[1]; + preg_match("#(.*)#Umsi", $entry, $data); + $content = $data[1]; + $id = $fn_annotation->param['id']; + /* $id = $temp = explode('/', $fn_annotation->param['id']); + $id = array_pop($temp); */ + //watchdog('debug', print_r($id,1)); + $nid = db_result(db_query("SELECT nid FROM {imagenotes} WHERE annotation_id='%s'", $id)); + $node = node_load(array('nid' => $nid)); + $node->changed = time(); + node_save($node); + + $result = db_query("UPDATE {imagenotes} SET title='%s', content='%s', xml='%s', width=%d, height=%d WHERE annotation_id='%s'", + $title, htmlspecialchars($content), $entry, $width, $height, $id); + return true; } function deleteAnnotationByID($fn_image, $fn_annotation) { - $result = db_query("DELETE FROM {imagenotes} WHERE annotation_id = '%s'", $fn_annotation->param['id']); + $id = $fn_annotation->param['id']; + /* $temp = explode('/', $fn_annotation->param['id']); + $id = array_pop($temp); */ + $result = db_query("DELETE FROM {imagenotes} WHERE annotation_id = '%s'", $id); return true; } } @@ -54,25 +92,26 @@ } function getAnnotations(&$fn_image) { - global $DHTML_MAXWIDTH, $DHTML_MAXHEIGHT; + //global $DHTML_MAXWIDTH, $DHTML_MAXHEIGHT; - $node = node_load($fn_image->param['nid']); - $this->image = file_create_path($node->images['preview']); + //$node = node_load($fn_image->param['nid']); + //$this->image = file_create_path($node->images['preview']); - $size = getimagesize($this->image); - displayDebugParam($size, 4); - $ratioWidth = $DHTML_MAXWIDTH / $size[0]; - $ratioHeight = $DHTML_MAXHEIGHT / $size[1]; - - if($ratioHeight>$ratioWidth){$ratio=$ratioWidth;}else{$ratio=$ratioHeight;} - if($ratio>1){$ratio=1;} - - $fn_image->setFnImageParam('scalefactor', $ratio); + //$fn_image->setFnImageParam('scalefactor', $ratio); - $annoatations = array(); + $annotations = array(); $xml = ''; $result = db_query("SELECT * FROM {imagenotes} WHERE nid=%d", arg(1)); while ($row = db_fetch_object($result)) { + + $ratioWidth = arg(2) / $row->width; + $ratioHeight = arg(3) / $row->height; + + if($ratioHeight>$ratioWidth){$ratio=$ratioWidth;}else{$ratio=$ratioHeight;} + //if($ratio>1){$ratio=1;} + + //watchdog('debug', $row->width . ' / ' . $info['width']); + $entry = $row->xml; preg_match("#(.*)#Umsi", $entry, $coordstring); $coords = explode(",", $coordstring[1]); @@ -80,7 +119,7 @@ $annotation['upperlefty'], $annotation['lowerrightx'], $annotation['lowerrighty']) = $coords; - $annotation['width'] = ($coords[2] - $coords[0])*$ratio; + $annotation['width'] = ($coords[2] - $coords[0])*$ratio; $annotation['height'] = ($coords[3] - $coords[1])*$ratio; $annotation['upperlefty'] *= $ratio; @@ -91,7 +130,7 @@ preg_match("#(.*)#Umsi", $entry, $title); $annotation['title'] = $title[1]; preg_match("#(.*)#Umsi", $entry, $content); - $annotation['content'] = $content[1]; + $annotation['content'] = htmlspecialchars($content[1]); preg_match("#(.*)#Umsi", $entry, $author); $annotation['author'] = $author[1]; preg_match("#(.*)#Umsi", $entry, $created); @@ -103,10 +142,12 @@ preg_match("#(.*)#Umsi", $entry, $id); //$annotation['id'] = basename($id[1]); Do not get basename, use full url $annotation['id'] = $id[1]; + preg_match("#(.*)#Umsi", $entry, $userid); $annotation['userid'] = $userid[1]; $annotations[] = $annotation; } + return $annotations; } Index: imagenotes.install =================================================================== RCS file: /cvs/drupal/contributions/modules/imagenotes/imagenotes.install,v retrieving revision 1.1 diff -u -r1.1 imagenotes.install --- imagenotes.install 10 Nov 2006 19:18:32 -0000 1.1 +++ imagenotes.install 9 Jun 2008 19:54:05 -0000 @@ -8,13 +8,51 @@ switch ($GLOBALS['db_type']) { case 'mysql': case 'mysqli': - db_query("CREATE TABLE IF NOT EXISTS {imagenotes} ( - nid INTEGER UNSIGNED NOT NULL, - uid INTEGER UNSIGNED NOT NULL, - annotation_id VARCHAR(255), - title VARCHAR(255), - content TEXT, - xml TEXT - ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); + + db_query("CREATE TABLE {imagenotes} ( + `nid` int(10) unsigned NOT NULL, + `uid` int(10) unsigned NOT NULL, + `annotation_id` varchar(255) NOT NULL default '', + `title` varchar(255) default NULL, + `content` text, + `xml` text, + `width` smallint(5) unsigned NOT NULL default '0', + `height` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`annotation_id`), + KEY `nid` (`nid`) + )"); + + db_query("CREATE TABLE {imagenotes_perm} ( + `nid` int(10) unsigned NOT NULL, + `perm` int(10) unsigned NOT NULL, + PRIMARY KEY (`nid`) + )"); + $type = 'image'; + $sql = "SELECT nid FROM {node} WHERE type = '%s'"; + $result = db_query($sql,$type); + while($row = db_fetch_object($result)){ + db_query("INSERT INTO {imagenotes_perm} SET nid = %d, perm = %d",$row->nid,1); + } + } +} +function imagenotes_uninstall() { + db_query('DROP TABLE {imagenotes}'); + db_query('DROP TABLE {imagenotes_perm}'); +} +function imagenotes_update_1() { +if (!db_table_exists('imagenotes_perm')) { + db_query("CREATE TABLE {imagenotes_perm} ( + `nid` int(10) unsigned NOT NULL, + `perm` int(10) unsigned NOT NULL, + PRIMARY KEY (`nid`) + )"); +} + db_query("TRUNCATE TABLE {imagenotes_perm}"); + $sql = "SELECT nid FROM `node` WHERE `type` = 'image'"; + $result = db_query($sql); + while($row = db_fetch_object($result)){ + db_query("INSERT INTO {imagenotes_perm} SET nid = %d, perm = %d",$row->nid,1); + } +return array(); } \ No newline at end of file Index: imagenotes.module =================================================================== RCS file: /cvs/drupal/contributions/modules/imagenotes/imagenotes.module,v retrieving revision 1.2 diff -u -r1.2 imagenotes.module --- imagenotes.module 10 Nov 2006 19:18:32 -0000 1.2 +++ imagenotes.module 9 Jun 2008 13:58:18 -0000 @@ -1,18 +1,7 @@ type == 'image' && $page) { - drupal_add_js(drupal_get_path('module', 'imagenotes') . '/fnclient/fnclientlib/js/fnclient.js'); - drupal_set_html_head(theme('stylesheet_import', base_path() . drupal_get_path('module', 'imagenotes') .'/fnclient/fnclientlib/styles/fnclient.css')); - $js.= '\n"; - drupal_set_html_head($js); - } + + switch ($op) + { case 'load': + if($node->type == 'image'){ + $sql = "select perm from {imagenotes_perm} where nid = ".$node->nid; + $result = db_query($sql); + $perm = db_fetch_object($result); + $node->perm = $perm->perm; + } + break; + case 'insert': + case 'update': + $sql = "delete from {imagenotes_perm} where nid = ".$node->nid; + db_query($sql); + $sql = "INSERT INTO {imagenotes_perm} ( `nid` , `perm` ) VALUES ( '".$node->nid."', '".$node->noteable."')"; + db_query($sql); + break; + + + case 'update index': + + $result = db_query("SELECT title, content FROM {imagenotes} WHERE nid=%d", $node->nid); + while ($db = db_fetch_object($result)) + { + $text .= $db->title . ' ' . $db->content . ' '; + } + + return $text; + + case 'view': + if($node->type == 'image'){ + $sql = "select perm from {imagenotes_perm} where nid = ".$node->nid; + $result = db_query($sql); + $perm = db_fetch_object($result); + $node->perm = $perm->perm; + } + + if ($node->type == 'image' && $page ) { + drupal_add_css(drupal_get_path('module', 'imagenotes') . '/fnclient/fnclientlib/styles/fnclient.css'); + drupal_add_js(drupal_get_path('module', 'imagenotes') . '/fnclient/fnclientlib/js/fnclient.js'); + + + $size = $_GET['size']; + if (!$size) + { + $size = IMAGE_PREVIEW; + } + + $info = image_get_info($node->images[$size]); + + $js .= "\n"; + + drupal_set_html_head($js, 'inline'); + } + + break; + } + } -function imagenotes_callback($nid) { + +function imagenotes_callback($nid,$source_x,$source_y) { global $user, $PERMISSIONS, $FNSAVESTRATEGY, $FNRETRIEVESTRATEGY, $FNANNOTATIONFEEDSAVESTRATEGY, $FN_FEED_PATH, $DHTML_MAXWIDTH, $DHTML_MAXHEIGHT, $FN_FEED_PATH; $path = drupal_get_path('module', 'imagenotes') . '/fnclient/'; - $PERMISSIONS = array('ADD' => 'allow', - 'MODIFY' => 'allow', - 'DELETE' => 'allow'); - $PERMISSIONS = array('ADD' => 'deny', + + $PERMISSIONS = array('ADD' => 'deny', 'MODIFY' => 'deny', 'DELETE' => 'deny'); - $dir = file_create_path('imagenotes'); file_check_directory($dir, FILE_CREATE_DIRECTORY); $FN_FEED_PATH = $dir .'/'; - $DHTML_MAXWIDTH = 675; - $DHTML_MAXHEIGHT = 675; + $DHTML_MAXWIDTH = 675; + $DHTML_MAXHEIGHT = 675; $FNSAVESTRATEGY["FNSaveDatabaseRows"] = true; $FNSAVESTRATEGY["FNSaveDatabaseXMLBlock"] = false; @@ -85,7 +145,7 @@ break; case "GET": foreach ($_GET as $key => $value) { - echo "\nkey: $key"; + //echo "\nkey: $key"; $fni->setFnImageParam($key, urldecode($value)); } break; @@ -98,24 +158,57 @@ // Set the nid as a param $fni->setFnImageParam('nid', $nid); + $fni->setFnImageParam('source_x', $source_x); + $fni->setFnImageParam('source_y', $source_y); + // CLEANUP incoming XML from client, if exists + if ($fni->fnImageParamExists("xml")) { + + + $fni->param["xml"] = preg_replace("#<\?xml.*>#Umsi", "", $fni->param["xml"]); $fni->param["xml"] = preg_replace("##Umsi", "", $fni->param["xml"]); $fni->param["xml"] = preg_replace("##Umsi", "", $fni->param["xml"]); - $fni->param["xml"] = stripslashes($fni->param["xml"]); - + //$fni->param["xml"] = stripslashes($fni->param["xml"]); $fni->param["xml"] = preg_replace("#.*#Umsi", "".$user->uid."", $fni->param["xml"]); $fni->param["xml"] = preg_replace("#.*#Umsi", "".$user->name."", $fni->param["xml"]); + $ab = explode('content',$fni->param["xml"]); + $ab = html_entity_decode($ab[1]); + $fni->param["xml"] = preg_replace("#.*#Umsi", " ", $fni->param["xml"]); + //$fni->param["xml"] = preg_replace("#.*#Umsi", "testing again ", $fni->param["xml"]); + //watchdog('debug', print_r($fni,1)); } - + // DO the requested action if ($fni->fnImageParamExists("action")) { - if ($fni->param['action'] == 'display' || user_access('create imagenotes')) { + + $node = node_load(array('nid' => $nid)); + + if ( $fni->param['action'] == 'display' || user_access('administer imagenotes') || ($user->uid == $node->uid && user_access('create imagenotes')) || (user_access('create others imagenotes') && $user->uid != $node->uid && $node->perm ) ) { $fni->doFnAction(); } else { die('success=denied'); } } -} \ No newline at end of file + +} +function imagenotes_form_alter($form_id, &$form) { +if(is_numeric(arg(1)) && arg(2) == 'edit'){ +$sql = "select perm from {imagenotes_perm} where nid = ".arg(1); + $result = db_query($sql); + $perm = db_fetch_object($result); + $def = $perm->perm; +} + +if ($form_id == 'image_node_form'){ + $form['noteable'] = array( + '#title' => t('Can other users annotate this image? Check for yes. Uncheck for no.'), + '#type' => 'checkbox', + '#options' => array('0' => 'no' ,'1' => 'yes'), + '#default_value' => $def?$def:1, + + ); +} +}