aboutsummaryrefslogtreecommitdiff
path: root/actions/delete.php
blob: 1a518af9e979b3c5032ff5317525eebd240feecc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php

	/**
	 * Tidypics Delete Action for Images and Albums
	 * 
	 */

	// must be logged in
	gatekeeper();

	$forward_url = 'pg/photos/world'; // by default forward to world photos

	$guid = (int) get_input('guid');

	$entity = get_entity($guid);
	if (!$entity) { // unable to get Elgg entity
		register_error(elgg_echo("file:deletefailed"));
		forward($forward_url);
	}
	
	if (!$entity->canEdit()) { // user doesn't have permissions
		register_error(elgg_echo("file:deletefailed"));
		forward($forward_url);
	}

	$subtype = $entity->getSubtype();
	$container = get_entity($entity->container_guid);
	
	if ($subtype != 'image' && $subtype != 'album') { // how did we even get here?
		register_error(elgg_echo("file:deletefailed"));
		forward($forward_url);
	}

	$owner_guid = 0; // group or user
	if ($subtype == 'image') { //deleting an image
		$album = get_entity($entity->container_guid);
		$owner_guid = $album->container_guid;
		$forward_url = $container->getURL(); //forward back to album after deleting pictures
		$images = array($entity);
		// plugins can register to be told when a Tidypics image has been deleted
		trigger_elgg_event('delete', 'tp_image', $entity);
	} else { //deleting an album
		$owner_guid = $entity->container_guid;
		$forward_url = 'pg/photos/owned/' . $container->username;
		//get all the images from this album as long as less than 999 images
		$images = get_entities("object", "image", $guid, '', 999); 
		// plugins can register to be told when a Tidypics album has been deleted
		trigger_elgg_event('delete', 'tp_album', $entity);
	}

	// make sure we decrease the repo size for the size quota
	$image_repo_size_md = get_metadata_byname($owner_guid, "image_repo_size");
	$image_repo_size = (int)$image_repo_size_md->value;

	//loop through all images and delete them
	foreach($images as $im) {
		$thumbnail = $im->thumbnail;
		$smallthumb = $im->smallthumb;
		$largethumb = $im->largethumb;

		if ($thumbnail) { //delete standard thumbnail image
			$delfile = new ElggFile();
			$delfile->owner_guid = $im->getOwner();
			$delfile->setFilename($thumbnail);
			$delfile->delete();
		}
		if ($smallthumb) { //delete small thumbnail image
			$delfile = new ElggFile();
			$delfile->owner_guid = $im->getOwner();
			$delfile->setFilename($smallthumb);
			$delfile->delete();
		}
		if ($largethumb) { //delete large thumbnail image
			$delfile = new ElggFile();
			$delfile->owner_guid = $im->getOwner();
			$delfile->setFilename($largethumb);
			$delfile->delete();
		}
		if ($im) { //delete actual image file
			$delfile = new ElggFile($im->getGUID());
			$delfile->owner_guid = $im->getOwner();
			//$delfile->setFilename($im->originalfilename);
			$image_repo_size -= $delfile->size();
			
			if (!$delfile->delete()) {
				if ($subtype=='image') register_error(elgg_echo("file:deletefailed")); //unable to delete object
			} else {
				if ($subtype=='image') system_message(elgg_echo("file:deleted")); //successfully deleted object
			}
		} //end delete actual image file
	} //end looping through each image to delete it
	
	//now that all images have been deleted, delete the album
	if ($subtype == 'album') {
		//delete the album's directory manually; first create a temp file to get the directory path
		$tmpfile = new ElggFile();
		$tmpfile->setFilename('image/' . $guid . '/._tmp_del_tidypics_album_');
		$tmpfile->subtype = 'image';
		$tmpfile->container_guid = $guid;
		$tmpfile->open("write");
		$tmpfile->write('');
		$tmpfile->close();
		$tmpfile->save();
		$albumdir = eregi_replace('/._tmp_del_tidypics_album_', '', $tmpfile->getFilenameOnFilestore());
		$tmpfile->delete();
		if (is_dir($albumdir))
			rmdir($albumdir);
		
		//delete object from database
		if (!$entity->delete()) {
			register_error(elgg_echo("file:deletefailed")); //unable to delete object
		} else {
			system_message(elgg_echo("file:deleted")); //successfully deleted object
		}
	} //end of delete album

	create_metadata($owner_guid, "image_repo_size", $image_repo_size, 'integer', $owner_guid);

	forward($forward_url);

?>